视频源:

从头开始做一个机器手臂4 加入强化学习算法

作者: UnityTutorial 编辑: UnityTutorial 2017-11-22

学习资料:

上节中, 我们的环境已经基本建设完成了, 现在我们需要的就是一个强化学习的学习方法. 学习方法有很多, 而且也分很多类型. 我们需要按照自己环境的要求挑选适合于这个环境的学习方法.

选择RL方法

在我的 强化学习教程系列 中, 就囊括了非常多的强化学习方法. 而且我制作的 这个动画视频 也举例让大家对各种强化学习方法有了一些了解. 其中列举了当前比较流行的算法.

一般, 给你一个环境, 你最先要考虑到的问题是, 这个环境当中的机器人, 他的动作是连续(continuous)的还是离散(discrete)的? 因为这算是一个重大区别. 不是每种强化学习方法都能同时处理连续和离散动作的. 一般我们的选择方法可以是:

从头开始做一个机器手臂4 加入强化学习算法

很多时候不限于上面的那些方法, 只不过是上面的那些方法都能在我的教程当中找到. 为了满足这个机械手臂的要求, 我选择了连续动作的 DDPG 来作为这次的 RL 算法.

保存提取网络

这里不会细说 DDPG 的算法, 因为在我这个动画教程这个python教程中已经详细阐述了一遍. 如果不关心 DDPG 的朋友们, 其实你最需要了解的就是这个网络是做连续动作的预测就行. 搭建的全部代码在这里. 如果用 tensorboard 显示整个 DDPG 的计算流程图, 就是下面那样.

从头开始做一个机器手臂4 加入强化学习算法

搭建这个图纸不会细说, 想要细说的是保存网络和提取网络的两个功能. 因为这两个功能在我的强化学习教程系列中是没有提到的. 已经有很多朋友在那个教程下面留言说不知道怎么保存提取. 首先我们使用的是 tensorflow. 他的保存提取方式还是很简单的.

# rl.py

class DDPG(object):
    def save(self):     # 保存功能
        saver = tf.train.Saver()
        saver.save(self.sess, './params', write_meta_graph=False)

    def restore(self):  # 提取功能
        saver = tf.train.Saver()
        saver.restore(self.sess, './params')

使用的时候我们可以对应上在 main.py 中的 training 和 test 时段分别进行. 比如 training 完了我们保存网络, 开始 test 的时候提取保存过的网络. 下面的过程有点省略, 具体的代码请查看这里.

# main.py

ON_TRAIN = True     # 是否在 training
rl = DDPG(a_dim, s_dim, a_bound)

def train():
    ...
    # train 完了以后
    rl.save()

def eval():
    rl.restore()    # 提取网络

    # 开始测试循环
    ...

if ON_TRAIN:
    train()
else:
    eval()

训练

设置好了这些以后, 就是真正的 training 了. 在 main.py 中将 ON_TRAIN = True.

看得出它已经不是在乱玩了, 但是还是有一些问题, 比如接触到蓝点就回合结束, 很多时候机器手臂都只是将手甩上去就结束了. 我们更希望是它能停在那个蓝色区域上一会再结束. 所以我总结了一下现在所面临的问题.

  • 甩手结束
  • 不太收敛

你看, 我们只有将这个学习过程可视化了, 才能便于我们发现潜在的问题, 这从侧面说明了做一个可视化的环境多重要. 发现问题这个过程肯定也是你在做强化学习项目会遇到的. 所以我们下一节内容将会看我如何解决这些问题.

实战:从头开始搭建训练机器人手臂

分享到: Facebook 微博 微信 Twitter
如果你觉得这篇文章或视频对你的学习很有帮助, 请你也分享它, 让它能再次帮助到更多的需要学习的人. UnityTutorial没有正式的经济来源, 如果你也想支持 UnityTutorial 并看到更好的教学内容, 赞助他一点点, 作为鼓励他继续开源的动力.

支持 让教学变得更优秀