强化学习七日心得
参加了飞桨深度学习学院的”强化学习7日打卡营-世界冠军带你从零实践“课程,接触到了强化学习这个领域。过程中,科科老师带我们学习了强化学习的思想,并使用PARL框架做了若干实践。今天简单的总(结)结(课)一(任)下(务)。
课程整体框架
课程由浅入深,循序渐进。
1.强化学习(RL)初印象
2.基于表格型方法求解RL
3基于神经网络方法求解RL
4.基于策略梯度求解RL
5.连续动作空间上求解RL。
从逻辑上,递进地讲述了针对四个强化学习问题的解决:离散状态空间、连续状态空间、随机性策略、连续动作空间。
课程大概内容
强化学习初印象
一些概念、PARL和GYM两个库的安装。
基于表格型方法求解RL
MDP四元组
Q表格,每行为状态在不同动作下的价值,每列为同一动作在不同状态下的价值。
SARSA:(St, At, Rt+1, St+1, At+1)
是一种on-policy的策略,下面的流程图已经非常直观。
Q-learning
一种Off-policy,与SARSA的区别是不需要与环境交互来获取并选择最大的Q值,即不在乎greed算法带来的风险,直接取状态下Q表格最大值。风险大但一般更快。
基于神经网络方法求解RL
DQN,用神经网络拟合函数替代了Q表格,可以输入状态,输出不同动作对应Q值,能够解决连续状态空间的问题。但一旦网络确定下来,每次同一状态的输入一定会带来相同的输出,即同一状态下总是选择同一策略。
基于策略梯度求解RL
PolicyGradient,可以输入状态,输出动作,即不需要根据最大的Q值来选择动作。并且可以通过采样随机执行动作,解决了随机性策略的问题。
连续动作空间上求解RL
DDPG,核心是两个神经网络:Actor和Critic。
Actor输入状态S,输出动作Action,最优化目标是Critic给出的分数Q。
而Critic最初也不知道Q应该是多少,但它输入状态S和Actor给的Action,根据观众的反馈reward来调整输出Q,使得Q与未来的长远收益接近。
最终使得Actor给出的动作能够获得更好的反馈。
课程实践
事实上,全程的实践都是在玩游戏,或者说教机器玩游戏。
1.搭建GYM环境+PARL环境,把QuickStart 跑起来;
2.使用Q-learning和Sarsa解决16宫格迷宫问题;
3.使用DQN解决 MountianCar问题;
4.使用Policy Gradient解决Atari的Pong问题;
5.大作业:四轴飞行器悬浮,使用DDPG。
简单说来,用PARL来做强化学习就非常简单,算法代码都准备好了,几乎只要调参就行了。但同时,也给改动算法增加了一些难度。在查看文档的情况下,我仍然不知道如何在cost中去给出一个简单的常数向量,这是我在解决大作业时遇到的问题。
大作业很难,科科老师给出的提示是让四个螺旋桨电压保持一致可以比较快得到一个好的结果。我作为一个接触深度学习不多的初学者,一个自然的想法是对LOSS做调整,在原LOSS的基础上,要使输出的四个电压值方差最小。
所以我相关部分代码改成:
from parl.algorithms import DDPG # 也可以直接从parl库中快速引入DDPG算法,无需自己重新写算法
class ddPG(DDPG):#继承DDPG,只改写_actor_learn()
def _actor_learn(self, obs):
action = self.model.policy(obs)
#作为悬停任务,飞机稳定时,电压不能方差太大,不利于保持稳定状态。
Q = self.model.value(obs, action)
costS = fluid.layers.mean(layers.square_error_cost(action, layers.reduce_mean(action)))
cost = layers.reduce_mean(-1.0 * Q )+ costS/layers.reduce_mean(fluid.layers.exp(Q/2000+10))
optimizer = fluid.optimizer.AdamOptimizer(self.actor_lr)
optimizer.minimize(cost, parameter_list=self.model.get_actor_params())
return cost
不过勇敢的尝试也许会给自己带来麻烦,这里的权重怎么调也是问题,还有因为对框架的函数不了解引发的许多问题。最终我跑出了7000多的分数,但很可惜,放到评估函数中,第一次跑了6000,后面越跑越低。最后作业拿了保底80分。
大作业也让我学到了许多大佬的tricks,比如每次取最高分模型不断跑刷分的,有将输出电压值变为一个基础值加四个补偿值乘以缩放因子的。这条道路上还有许多我要学的。
总结暂时就到这里啦,还是玩的很开心的课程。
感谢飞桨深度学习学院,感谢科科老师,感谢班班。希望也有机会成为真正的大牛。