切换视频源:

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

作者: 莫烦 编辑: 莫烦 2017-11-22

学习资料:

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

选择RL方法

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

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

arm4-1.png

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

保存提取网络

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

6-2-2.png

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

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

  • 甩手结束
  • 不太收敛

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

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

降低知识传递的门槛

莫烦的对教育的态度是: 降低知识传递的门槛,不希望给"学习"设置金钱障碍。 这是我花大量业余时间贡献 免费 AI分享的原因。 通过 【赞助】 能及时让我看到你对 【莫烦态度】 的认同,我也更有理由坚持下去。

如果你当前目标是找工作或者转行AI,想接受更加丰富的教学资源、培训辅导体验,我想推荐我的朋友 七月在线 给你, 通过这个 【莫烦Python为你提供的注册链接】, 你将可以获得莫烦专门为你协商的课程优惠券。祝你找/换工作顺利~