文章目录
TDMPC总结
1.model-based & model-free方法
1.1 本质区别
Model-based和model-free的本质区别是agent是否利用环境模型(或称为环境的动力学模型),例如状态转移函数 P P P和奖励函数 R R R。
在通常情况下,agent并不知道环境的奖励函数 R R R 和状态转移函数 p ( s ′ ∣ s , a ) p(s'|s,a) p(s′∣s,a),所以需要通过和环境交互,不断试错(Trials and Errors),观察环境相关信息并利用反馈的奖励信号来不断学习。这个不断学习的过程既对model-based的方法适用,也对model-free的方法适用。
如果agent尝试通过在环境中不断执行动作获取样本 ( s , a , s ′ , r ) (s,a,s',r) (s,a,s′,r)来构建对 R R R和 P P P的估计, 则 p ( s ′ ∣ s , a ) p(s'|s,a) p(s′∣s,a)和 r r r可以通过监督学习进行拟合。习得奖励函数 R R R和状态转移函数 P P P之后,所有的环境元素 S , A , P , R , γ S,A,P,R,\gamma S,A,P,R,γ都已知,则用价值迭代或者策略迭代等规划(planning)方法可以直接用来求解问题。这个方式即称为model-based的方法。
Model-free则不尝试对环境建模,而是直接寻找最优策略。例如Q-learning和policy gradient算法都不关注环境模型,而是直接搜索能最大化奖励的策略。
总结,model-based就是先对环境建模,再计算策略;model-free是直接学习策略。
1.2 优缺点
优点 | 缺点 | |
---|---|---|
Model-based | a.通过环境模型可以预测未来的状态和奖励,从而帮助agent进行更好的规划。b.数据利用率高。 | a.学习得到的模型往往是不准确的,训练agent时引入了估计误差,基于带误差模型的策略的评估和提升往往会造成策略在真实环境中失效。b.存在或构建模型的假设过强。现实问题中环境的动力学模型可能很复杂,甚至无法显示地表示出来,导致模型通过无法获取。 |
Model-free | 基于实际环境的trial-and-error效果好。因为model-free不关心环境模型,无须学习环境模型,也就不存在环境拟合不准确的问题,只学习跟奖励有关的信息,相对更易于实现和训练。 | 需要大量数据,而且在真实环境中进行探索的代价是极高的,如巨大的时间消耗,不可逆的设备损耗和安全风险. |
2.on-policy & off-policy
2.1 定义
更新价值所使用的方法是沿着既定的策略(on-policy)抑或是新策略(off-policy)。
这两种算法的区别主要是网络更新参数时,数据是否由要更新的网络得到的。这里的数据是指(state, action, reawrd)构成的一组训练数据。
像我们之前解决TAP用的actor-critic算法,它生成训练数据的网络和要更新参数的网络都是同一个,所以是一种on-policy算法。
off-policy算法一般会使用两个相同结构的网络,我们称为策略网络A和目标网络B,策略网络A负责与环境交互生成很多组训练数据,算法用这些数据去更新网络B。
每经过几轮训练,算法再把网络B的参数复制给网络A,这类算法中的策略网络的参数比目标网络的参数更新得慢。用策略网络A的数据更新网络B的操作大概如下:
比如网络A接收输入,得到action的概率分布p_a,从中取了一个action执行,得到一组数据。写成 A(input) = p_a -> action_a
之后网络B也输入一样的数据,有 B(input) = p_b,然后算法将网络A采样的action作为网络B在p_b采样的结果,也就是 B(input) = p_b => action_a,算法根据这组数据去计算梯度更新网络B的参数。
2.2 优缺点
优点 | 缺点 | |
---|---|---|
on-policy | 简单。因为直接利用数据就可以优化其策略,所以找到局部最优策略的速度快。 | 样本利用率低。因为每次更新都要重新采样,而且不一定能找到全局最优策略 |
off-policy | 数据利用性好且能找到全局最优解。它确保了数据的全面性(自行产生或者外来数据均可),所有行为都能覆盖。 | 收敛慢。数据来源多样,所以方差更大,收敛性变差。 |
3.本文Temporal Difference learning for Model Predictive Control
3.1 重点要解决什么问题
Model-based RL虽然比model-free的采样效率高,但是规划 long horizon时需要的时间花销很大,并且很难获取一个准确的环境模型,论文就是想通过结合model-free 和model-based RL的优势解决以上问题,具体而言,算法用model-based RL学习用于局部轨迹优化的模型,用model-free RL学习预测长期回报(用于全局优化)的价值函数。
3.2 算法原理
3.2.1 预备知识:Model Predictive Control(MPC)
在强化学习的MPC中,MPC优化的是t~H步的及时奖励R,是一种短视的算法。
具体而言,为了使问题易于处理,MPC在有限时间t~H步内通过高斯分布采样每一步动作,得到相应奖励,并在t处执行采样的第一个动作
a
t
a_t
at,从而得到每一步t的轨迹最优化问题的局部解,公式如下。
在作者的MPC的pipeline中,通过输入t时刻的观察
s
t
s_t
st,经过编码器
h
θ
h_θ
hθ输出t时刻的潜向量
z
t
z_t
zt,将
z
t
z_t
zt和从正态分布采样的
a
t
a_t
at输入给环境模型
d
θ
d_θ
dθ,输出下一时刻的潜向量
z
t
+
1
z_{t+1}
zt+1,并得到相应的奖励
r
^
t
\hat{r}_{t}
r^t,接着又从高斯分布中采样下一个时刻的动作
a
t
+
1
a_{t+1}
at+1,接下来的流程如下图所示,直到预测到H时刻的潜向量时结束。
现在算法如何进行优化奖励的?算法通过优化高斯分布的参数(均值和方差),动作从优化后的高斯分布中采样,进而优化奖励。
等迭代结束,即优化完高斯分布后,agent执行t时刻的动作
a
t
a_t
at,也就是MPC采样的第一个动作。
高斯分布均值和方差计算公式如下。
Γ i ⋆ \Gamma_{i}^{\star} Γi⋆是指top-k轨迹对应的奖励,也就是不好的轨迹不参与优化高斯分布的参数。
小结:MPC能在t到H时刻找到局部最优解(可对应于人的关节运动参数)。但因为MPC需要通过环境模型 d θ d_θ dθ才能输出下一时刻的潜向量,所以MPC是一种model-based的方法。环境模型 d θ d_θ dθ会存在一定的误差,而MPC需要递归地预测t到H时刻的潜向量,所以误差会累计。
3.2.2 TD-learning for MPC
上节讲到MPC能找到局部最优解,而且有累计误差。TD-learning就是能帮助MPC解决这两个问题。
具体而言,TD-learing通过学习一个状态-动作价值函数帮助MPC找到全局最优解(可对应于人跑的方向);因为TD-learning是model-free方法,所以它只学习跟奖励有关的信息,从而减少了MPC学习模型时的误差。
TD-learning用学习后的状态-动作价值函数
Q
θ
(
s
,
a
)
Q_{\theta}(\mathbf{s}, \mathbf{a})
Qθ(s,a)去估计能够获得最大回报的最优状态动作价值函数
Q
∗
(
s
,
a
)
Q^{*}(\mathbf{s}, \mathbf{a})
Q∗(s,a),公式如下,
Q
θ
(
s
,
a
)
≈
Q
∗
(
s
,
a
)
=
max
a
E
[
R
(
s
,
a
)
+
γ
Q
∗
(
s
′
,
a
′
)
]
∀
s
∈
S
Q_{\theta}(\mathbf{s}, \mathbf{a}) \approx Q^{*}(\mathbf{s}, \mathbf{a})=\max _{\mathbf{a}} \mathbb{E}[\mathcal{R}(\mathbf{s}, \mathbf{a})+ \left.\gamma Q^{*}\left(\mathbf{s}^{\prime}, \mathbf{a}^{\prime}\right)\right] \forall \mathbf{s} \in \mathcal{S}
Qθ(s,a)≈Q∗(s,a)=amaxE[R(s,a)+γQ∗(s′,a′)]∀s∈S
那如何学习这个状态-动作价值函数
Q
θ
(
s
,
a
)
Q_{\theta}(\mathbf{s}, \mathbf{a})
Qθ(s,a)?
作者直接把这个状态-动作价值函数
Q
θ
(
s
,
a
)
Q_{\theta}(\mathbf{s}, \mathbf{a})
Qθ(s,a)加到MPC预测的一条轨迹所获得的回报中,公式如下,
标红的 Value 是状态-动作价值函数
Q
θ
(
s
,
a
)
Q_{\theta}(\mathbf{s}, \mathbf{a})
Qθ(s,a)所获得的回报,标红的 Rewards 是MPC规划一条轨迹所获得的奖励。也就是在MPC得到的rewards基础上加上
Q
θ
(
s
,
a
)
Q_{\theta}(\mathbf{s}, \mathbf{a})
Qθ(s,a)所获得的价值。
用伪代码表示如下。
左边是普通MPC的伪代码,右边是TDMPC的伪代码。TDMPC比MPC多了第四步和第九步,重点是第九步:回报会加上状态动作价值项。多的第四步只是训练模型的一个trick,只是用于引导算法进行轨迹优化。
小结:通过TD-learning在回报中加入value项,TDMPC模型能够得到全局最优解。通过获得的回报更新高斯分布的参数,TDMPC输出的动作能够满足任务需求。
3.2.3 训练模型
当前的小节都是假设已知环境模型
d
θ
d_θ
dθ,奖励函数
R
θ
R_θ
Rθ,编码器
h
θ
h_θ
hθ,价值函数
Q
θ
Q_θ
Qθ的参数
θ
θ
θ,那如何训练用网络更新这些参数
θ
θ
θ呢?
从伪代码可以看出,训练分为两大步,第一大步(第2-6句伪代码)生成训练数据,第二大步(第7-19句)通过目标函数更新迭代网络参数。
第一大步,对于从0到T的step,通过高斯分布采样动作
a
t
a_t
at,与现在的状态
s
t
s_t
st进行交互,得到相应的奖励
r
t
r_t
rt和下一时刻的状态
s
t
+
1
s_{t+1}
st+1,将这个四元组
(
s
t
,
a
t
,
r
t
,
s
t
+
1
)
(s_t,a_t,r_t,s_{t+1})
(st,at,rt,st+1)作为一组数据存储在buffer中(可看为ground-truth数据)。
第二大步,在每次迭代中,从buffer中采样H组数据,将数据中
i
i
i时刻的状态
s
i
s_i
si编码成潜向量,在从t~t+H步中,从数据中取相应时刻的
a
i
a_i
ai,通过奖励函数
R
θ
R_θ
Rθ得到奖励
r
^
i
\hat{r}_{i}
r^i,通过价值函数
Q
θ
Q_θ
Qθ得到价值
q
^
i
\hat{q}_{i}
q^i,通过环境模型
d
θ
d_θ
dθ得到下一时刻的潜向量
z
i
+
1
{z}_{i+1}
zi+1,然后用buffer的ground-truth数据更新网络参数
θ
θ
θ。
目标函数和损失函数公式如下。
各部分作用:公式8是用来预测奖励,即获得局部最优解。公式9是用来获取价值函数,从而得到全局最优解,公式9来源于TD算法更新网络参数的公式,但
Q
θ
−
Q_{\theta^{-}}
Qθ−的参数由
(
z
i
+
1
,
a
i
+
1
)
(z_{i+1},a_{i+1})
(zi+1,ai+1)变成
(
Z
i
+
1
,
π
θ
(
Z
i
+
1
)
)
\left(\mathbf{Z}_{i+1}, \pi_{\theta}\left(\mathbf{Z}_{i+1}\right)\right)
(Zi+1,πθ(Zi+1)),因为直接使用规划(planning)的
a
t
a_{t}
at进行计算非常昂贵,所以改用策略网络进行预测更新公式9的动作。公式10是用来保证预测下一时刻潜向量的准确性,从而保证
R
θ
R_θ
Rθ预测奖励和
Q
θ
Q_θ
Qθ预测价值的准确性,做法是输入真实的下一刻状态
s
t
+
1
s_{t+1}
st+1给目标网络
h
θ
−
h_{\theta^{-}}
hθ−,输出的潜向量作为真实值,环境模型
d
θ
d_θ
dθ预测下一时刻的潜向量作为预测值,更新网络参数
θ
θ
θ和
θ
−
\theta^{-}
θ−。
注:单纯的TD算法更新网络的公式如下,
θ
k
+
1
←
arg
min
θ
E
(
s
,
a
,
s
′
)
∼
B
∥
Q
θ
(
s
,
a
)
−
y
(
s
)
∥
2
2
\theta^{k+1} \leftarrow \arg \min _{\theta} \mathbb{E}_{\left(\mathbf{s}, \mathbf{a}, \mathbf{s}^{\prime}\right) \sim \mathcal{B}}\left\|Q_{\theta}(\mathbf{s}, \mathbf{a})-y(\mathbf{s})\right\|_{2}^{2}
θk+1←argminθE(s,a,s′)∼B∥Qθ(s,a)−y(s)∥22,其中
y
(
s
)
=
R
(
s
,
a
)
+
γ
max
a
′
Q
θ
−
(
s
′
,
a
′
)
y(\mathbf{s})=\mathcal{R}(\mathbf{s}, \mathbf{a})+\gamma \max _{\mathbf{a}^{\prime}} Q_{\theta^{-}}\left(\mathbf{s}^{\prime}, \mathbf{a}^{\prime}\right)
y(s)=R(s,a)+γmaxa′Qθ−(s′,a′)
3.3 实验结果
TDMPC,SAC,MPC:sim在6种任务中的回报,可以看出TDMPC比其他两种方法的回报要高得多。
SAC是model-free方法,MPC:sim是只有ground-truth的局部解,而没有学价值函数的方法。
在让狗跑起来的任务中,虽然TDMPC跑起来的动作好像很不自然,但相对于SAC完全跑不起来,TDMPC起码知道跑的方向和动作。
3.4 总结
Model Predictive Control(MPC)能够通过规划获得局部最优解,TD-learning能够帮助MPC学习价值函数获得全局最优解并减少学习模型过程中的误差。