从头开始做一个机器手臂4 加入强化学习算法
学习资料:
在上节中, 我们的环境已经基本建设完成了, 现在我们需要的就是一个强化学习的学习方法. 学习方法有很多, 而且也分很多类型. 我们需要按照自己环境的要求挑选适合于这个环境的学习方法.
选择RL方法 ¶
在我的 强化学习教程系列 中, 就囊括了非常多的强化学习方法. 而且我制作的 这个动画视频 也举例让大家对各种强化学习方法有了一些了解. 其中列举了当前比较流行的算法.
一般, 给你一个环境, 你最先要考虑到的问题是, 这个环境当中的机器人, 他的动作是连续(continuous)的还是离散(discrete)的? 因为这算是一个重大区别. 不是每种强化学习方法都能同时处理连续和离散动作的. 一般我们的选择方法可以是:
- 连续动作 (动作是一个连续值, 比如旋转角度)
 - 离散动作 (动作是一个离散值, 比如向前,向后走)
 
很多时候不限于上面的那些方法, 只不过是上面的那些方法都能在我的教程当中找到. 为了满足这个机械手臂的要求, 我选择了连续动作的 DDPG 来作为这次的 RL 算法.
保存提取网络 ¶
这里不会细说 DDPG 的算法, 因为在我这个动画教程 和这个python教程中已经详细阐述了一遍. 如果不关心 DDPG 的朋友们, 其实你最需要了解的就是这个网络是做连续动作的预测就行. 搭建的全部代码在这里. 如果用 tensorboard 显示整个 DDPG 的计算流程图, 就是下面那样.
搭建这个图纸不会细说, 想要细说的是保存网络和提取网络的两个功能. 因为这两个功能在我的强化学习教程系列中是没有提到的. 已经有很多朋友在那个教程下面留言说不知道怎么保存提取. 首先我们使用的是 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.
看得出它已经不是在乱玩了, 但是还是有一些问题, 比如接触到蓝点就回合结束, 很多时候机器手臂都只是将手甩上去就结束了. 我们更希望是它能停在那个蓝色区域上一会再结束. 所以我总结了一下现在所面临的问题.
- 甩手结束
 - 不太收敛
 
你看, 我们只有将这个学习过程可视化了, 才能便于我们发现潜在的问题, 这从侧面说明了做一个可视化的环境多重要. 发现问题这个过程肯定也是你在做强化学习项目会遇到的. 所以我们下一节内容将会看我如何解决这些问题.
实战:从头开始搭建训练机器人手臂
  
  分享到:
  
  
      
  
  
  
      
  
	
	
		
	
	
	
		
	
  
  如果你觉得这篇文章或视频对你的学习很有帮助, 请你也分享它, 让它能再次帮助到更多的需要学习的人.
  莫烦没有正式的经济来源, 如果你也想支持 莫烦Python 并看到更好的教学内容, 赞助他一点点, 作为鼓励他继续开源的动力.