赞
踩
如何让机器人迁移学习,用到前人的知识以此快速适应新环境的问题呢?我们提出了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=1∑m(∑i=1mscoreijscoreij⋅ln(∑i=1mscoreijscoreij))
交叉熵代表不确定度,
1
−
c
j
1-c_j
1−cj则代表置信度
则机器人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(1−cj)(1−cj)
知识融合函数:
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(1−cj)(1−cj)
y
i
=
∑
j
′
=
1
n
c
j
⋅
w
j
′
y_i = \sum ^n _{j'=1}c_j\cdot w_{j'}
yi=j′=1∑ncj⋅wj′
定义训练生成网络的误差(每一次观测(输入)
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=1∑N(yi−hθ(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=1∑NL(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}=
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=
θ
\theta
θ = 从数据集(x,label)中学习到的参数
θ
\theta
θ
两种方法
特作提取器的方法增加了内在特征的纬度,这里将云端得到的模型下载后,将其输出直接在本地模型的全连接层加上去,以此增加特征的表达能力,并且这使得云端的模型和本地的模型中间结构可以不同。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。