栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

MountainCar的关键——抵抗梯度消失

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MountainCar的关键——抵抗梯度消失

完整代码链接
写了个Q学习小车上山 感觉不行。把Q表画出来 找找原因。

 ...
 # q learning update
 # 其中q是q表 o是离散化的观察 400-900个值 a是三个动作 r是奖励 d是done
 # 1-d的意思是 如果done了 就不用后来的q表更新上一步q值
 q[o][a] q[o][a] alpha*(r (1-d)*gamma*max(q[o1])-q[o][a])
 # 可视化q表的代码
 def plot_q(self):
 q np.array(self.q);s self.steps
 fig,(a1,a2,a3) plt.subplots(1,3,figsize (15,5))
 c1 a1.pcolormesh(q[:,0].reshape(s,s));fig.colorbar(c1,ax a1)
 c2 a2.pcolormesh(q[:,1].reshape(s,s));fig.colorbar(c2,ax a2)
 c3 a3.pcolormesh(q[:,2].reshape(s,s));fig.colorbar(c3,ax a3)
 plt.show()

如果gamma TD折扣 衰减为95% 一开始q表用上述代码打出来是这样的

而gamma为1 不衰减 的时候 q表是这样 注意右侧色标尺度是从0到负50 比上面大了很多

后期经验表明 gamma 1时可以产生部分解。记得解决这个问题是连续100次的平均值在-110左右 这里100次的滑动平均到了-140左右

而gamma 0.95时是这样的

可以说是一蹶不振。究其原因 还是梯度消失。先看gamma为95%的时候 训练晚期的q表

再看gamma 1的时候晚期q表

后者明显有一种从中心朝外螺旋的感觉 很符合小车来回驾驶 积累动量的过程

而且 gamma 1的q表右侧色标比gamma 0.95的色标范围宽了5倍多。
也就是说 gamma 0.95的时候 训练两万次 基本上没能推出梯度来。
小车上山这个任务的难点在于 奖励只有一步 而且达成奖励的道路是比较曲折的。这时候梯度消失就非常可怕了。这已经是为什么gamma 0.95的时候训练无效。

顺带说一句 将成功前一步的q强行设置成0也可以解决mountaincar问题。 代码中的fix_done

gamma设置为1也让人想起残差层中 上层和经过残差层的权重占比必须是1:1。

TODO
1、on-policy 即变成SARSA。也是助力推进梯度的。
2、另外一种方式是资格迹 eligibility trace 也就是SARSA-lambda。
砖瓦编码太复杂了 而且对于DRL没啥用 就没搞。
3、用OOP的那些东西改下接口 使DRL的模块很容易插进来 像stable-baselines那种吧 。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267120.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号