当前位置:   article > 正文

终生联邦强化学习:云机器人导航系统的学习架构_基于联邦学习的云机器人终身学习系统中关键技术的研究

基于联邦学习的云机器人终身学习系统中关键技术的研究

概要

如何让机器人迁移学习,用到前人的知识以此快速适应新环境的问题呢?我们提出了LFRL-Lifelong Federated Reinforcement Learning,这一个云机器人导航系统的学习框架。我们提出了知识融合算法来训练云端共享模型,提出高效的迁移学习方法使得Agent快速适应环境。
LFRL与人类认知学的观点一致,并且在云机器人系统中表现良好。
实验证明,LFRL大大提高了机器人导航中强化学习的效率。

介绍

RL在自主机器人导航任务中广泛应用,但还存在应用上需要改进的地方:减少训练次数,长期存储数据,计算分离,快速适应新环境等。
这篇文章解决了机器人在新环境中快速学习的问题,并且拓展了机器人的经验让他们能够高效的使用之前的知识。并且我们专注于云计算以及云机器人技术,通过 “ 轨迹、控制策略、机器人的群体的输出” 的共享,提出这套机器人导航系统。

方法论

在不减少导航精度的情况下减少了训练时间:
LFRL包含了一个云服务器、许多不同的环境、一个到多个的机器人。将机器人本地模型上传到云端共享模型,以此优化模型。LFRL相比起A3C或者UNREAL算法这些在同一时间更新策略网络参数的算法,可以异步更新,并且对环境没有要求,可以不同。云端生成的网络和动态权重的标签结果可以实现记忆集成,而A3C和UNREAL方法仅仅生成了决策模型,却没有记忆。LFRL中,不仅不同agent的策略网络模型的中间层可以不一样。

过程举例:
四个机器人、三个不同的环境、云服务器。
第一个机器人的私有策略模型Q1在环境1 E1中训练后,上传云端1G;之后机器人2和机器人3想要学习导航的时候下载1G当作初始actor模型,初始化Q网络后机器人便有到达终点并且避开某些障碍物的能力,然后在环境中训练,得到他们的私有策略模型Q2Q3,将其上传网络,云端收到Q2Q3之后融合到共享网络1G之中,生成2G网络。

所以LFRL的算法如下:

随机权重 θ \theta θ初始化动作值Q网络
输入:共享模型参数 θ a \theta_a θa,私有网络的个数m
输出:更新的共享网络 θ a \theta_a θa
while 服务器运行:
  if Agent 有需要传输模型:
    将原始共享模型参数 θ a \theta_a θa迁移到策略 π \pi π
    for i in range(m):#对于每一个的Agent
      通过初始化的 π \pi π进行强化学习得到最后的策略网络参数 θ i \theta_i θi
      将网络参数 θ i \theta_i θi上传云端
  if evolve time=True:#开始更新共享网络(不是每一次上传都更新、隔一段一段时间)
     θ a + 1 \theta_{a+1} θa+1 = fuse( θ 1 \theta_1 θ1, θ 2 \theta_2 θ2, θ 3 \theta_3 θ3,…, θ m \theta_m θm, θ a \theta_a θa)

此处原文是
在这里插入图片描述

在这里插入图片描述
其中这一段不知道啥意思,就按照自己的理解写通过初始化的 π \pi π进行强化学习得到最后的策略网络参数 θ i \theta_i θi

云端的知识融合算法

知识融合,也就是上面提到的 θ a + 1 = f u s e ( θ 1 , θ 2 , θ 3 , . . . , θ m , θ a ) \theta_{a+1} = fuse(\theta_1,\theta_2,\theta_3,...,\theta_m,\theta_a) θa+1=fuse(θ1,θ2,θ3,...,θm,θa) θ a \theta_a θa是云端共享网络之前的参数
下图解释了策略网络的生成,这些策略网络有相同的输入输出纬度,输出纬度对应动作空间大小,输入纬度对应传感器和人工特征的纬度,#每一个Agent的训练数据都产生于特定的分布(并非iid 独立同分布)#,每一条数据都根据数据的“置信值”动态赋权了。这个置信值是Agent执行动作的确定性,比如如果某个私有决策网络对所有动作的评估是(85,85,84,83,86),但是k-G网络的评估是(20,20,100,10,10),我们对k-G网络的置信度更大,因为其评估的区别很大。这里我们使用与信息熵相关的量来确定这次评估的权重——置信度。
产生标签结果的时候,算法首先产生对动作的评估,然后这个评估被“置信度”加权。最终按照这种方式得到所有的训练数据。
我们假设有n个Agent,那么有n个私有决策网络,并且网络的输出都是m个,动作空间的大小是m,那么对于机器人j
其机器人j输出动作概率分布的交叉熵公式:
c j = − 1 l n m ∑ i = 1 m ( s c o r e i j ∑ i = 1 m s c o r e i j ⋅ l n ( s c o r e i j ∑ i = 1 m s c o r e i j ) ) c _ j = - \frac 1 {ln m } \sum ^ m _ {i=1} (\frac {score_{i j }} { \sum ^ m _ {i = 1} score _{i j }}·ln( \frac{score_{ij}}{\sum^m_{i=1}score_{ij}} )) cj=lnm1i=1m(i=1mscoreijscoreijln(i=1mscoreijscoreij))
交叉熵代表不确定度, 1 − c j 1-c_j 1cj则代表置信度
则机器人j的记忆权重为:
w j = ( 1 − c j ) ∑ j = 1 n ( 1 − c j ) w_{j}=\frac {(1-c_j)}{\sum^n _{j=1}(1-c_j)} wj=j=1n(1cj)(1cj)

知识融合函数:
l a b e l j = s c o r e × ( w 1 w 2 , . . . , w n ) T label_j = score \times (w_1w_2,...,w_n)^T labelj=score×(w1w2,...,wn)T
(注意,下图只展示了一个一次采样生成一个标签结果,实际上,我们需要生成许多的标签结果,对每一个数据样本,置信度是不同的,如果我们产生50000个样本,那么就有50000个不同的置信度,这些变化的权重可以并入数据表前,并且使得生成的网络动态的调整不同传感器的权重。)
(图的最左边应该是get human-made features from sensor data,模型的输入是Generate large amount of sample data得到大量的采样数据,这里拿一次采样数据为例,得到raw data经过网络之后会对每一个action给出一个打分,所有网络对每一个action打分形成的矩阵就是Score Matrix(Knowledge storage),这是一个M*(N+1)的矩阵,对每一列(某个策略网络给出的动作评价分布)进行归一化之后,进行基于置信度((N+1)*1的列向量)的Knowledge Fusion,所以这里融合的并不是网络参数,而是动作评价矩阵。

云端知识融合算法可以这样被定义:
将机器人将置信的占比当作权重,将输入进行加权求和(此处的 c j c_j cj代表的是上面的Score Matrix的第j列)
w j ′ = ( 1 − c j ) ∑ j = 1 n ( 1 − c j ) w_{j'}=\frac {(1-c_j)}{\sum^n _{j=1}(1-c_j)} wj=j=1n(1cj)(1cj)
y i = ∑ j ′ = 1 n c j ⋅ w j ′ y_i = \sum ^n _{j'=1}c_j\cdot w_{j'} yi=j=1ncjwj
定义训练生成网络的误差(每一次观测(输入) x i x_i xi和知识融合结果的差方和)
L ( y , h θ ( x i ) ) = 1 N ∑ i = 1 N ( y i − h θ ( x i ) ) 2 L(y,h_\theta(x_i))=\frac 1 N \sum^N_{i=1}(y_i-h_\theta(x_i))^2 L(y,hθ(xi))=N1i=1N(yihθ(xi))2
训练过程的目标
θ ∗ = a r g   m i n θ 1 N ∑ i = 1 N L ( y i , h θ ( x i ) ) \theta ^ * = arg \ min_\theta \frac 1 N \sum ^N _{i=1} L(y_i,h_\theta(x_i)) θ=arg minθN1i=1NL(yi,hθ(xi))

融合算法流程如下:

输入: x ~ i \tilde x_i x~i 输入数据(未提取人工特征);K是输入数据数; f n f_n fn是第n个策略网络;N是网络数;M:agent的动作空间大小
输出: θ \theta θ 云端共享网络参数
l a b e l = [ ] label=[] label=[]
f o r   i = 1 , i < = K , i + + d o for\ i=1,i<=K,i++ do for i=1,i<=K,i++do
   x ^ i \hat x_i x^i=从 x ~ i \tilde x_i x~i得到的人工特征
   x i = [ x ^ i , x ~ i ] x_i=[\hat x_i,\tilde x_i] xi=[x^i,x~i]#得到了网络的输入
   s c o r e i = [ ] score_{i}=[] scorei=[]#知识矩阵
   c i = [ ] c_{i}=[] ci=[]#置信度向量
   f o r   n = 1 , n < = N , n + + d o for\ n=1,n<=N,n++ do for n=1,n<=N,n++do
     s c o r e i , n = f n ( x i ) score_{i,n}=f_n(x_i) scorei,n=fn(xi)#得到每一个网络的输出(应该是一个m1的列向量)
     c i , n = 交 叉 熵 ( s c o r e i , n ) c_{i,n} = 交叉熵(score_{i,n}) ci,n=(scorei,n)#计算置信度
     s c o r e i = [ s c o r e i   s c o r e i , n ] score_{i}=[score_{i}\ score_{i,n}] scorei=[scorei scorei,n]#不断并上,最后知识矩阵的纬度是M
(N+1)
     c i = [ c i c i , n ] c_{i}=

[cici,n]
ci=[cici,n]不断并上,最后置信度向量的纬度是(N+1)*1
  end
   l a b e l j = s c o r e × ( w 1 , w 2 , . . . , w n ) T label_j = score \times (w_1,w_2,...,w_n)^T labelj=score×(w1,w2,...,wn)T
   l a b e l = [ l a b e l l a b e l i ] label=
[labellabeli]
label=[labellabeli]

θ \theta θ = 从数据集(x,label)中学习到的参数 θ \theta θ

共享模型的迁移

两种方法

  1. 将共享模型当作初始决策模型
  2. 将共享模型当作特征提取器
    使用第一种方法,我们会和云端模型有相同的躲避障碍物和到达终点的能力,但是这种方法训练时长一定程度取决于参数的调整,比如我们需要加快更新速度,加大惩戒项,减少随机动作的概率等。

特作提取器的方法增加了内在特征的纬度,这里将云端得到的模型下载后,将其输出直接在本地模型的全连接层加上去,以此增加特征的表达能力,并且这使得云端的模型和本地的模型中间结构可以不同。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/381203
推荐阅读
相关标签
  

闽ICP备14008679号