我是靠谱客的博主 着急早晨,最近开发中收集的这篇文章主要介绍【RL从入门到放弃】【二十一常见模型分析】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在RL里面重要且比较容易被忽视的一环是ENv,为什么重要,因为env是对实际情况的理解,尤其是输入特征和reward的定义直接影响最终的结果。而网上的很多关于RL的知识点,都主要在涉及agent上,所以对这个基础的东西是忽略掉了的。

迷宫游戏

游戏规则:探索者从红色的初始位置以最少的step到达天堂

 

Env提供的数据

Initial:在红色位置为初始化位置

States: 当前位置【observation可以看成是state的函数】

Obrvations:[x, y]  x,y属于[0~1],例如[0.25, 0.25]代表第一个红色的方格位置

Actions:[left, up, down, right],

Done: 到达黄色或者黑色位置表示结束

Reward:到达黄色位置表示天堂,到达黑色位置表示地狱。

state是最原始的环境内部的表示,observation则是state的函数。好比我们所看见的东西并不一定就是它们在世界中的真实状态,而是经过我们的大脑加工过的信息

判断游戏是否达到比较好的效果:

  1. loss值

关于这点,网上找到的说法如下:

 

“可以看出曲线并不是平滑下降的, 这是因为 DQN 中的 input 数据是一步步改变的, 而且会根据学习情况, 获取到不同的数据. 所以这并不像一般的监督学习, DQN cost 曲线就有所不同了”

  1. 根据规则来定义

 

显然下面这个更加能够判定我们最终基本上找到了次优解,这里如果最后掉进了地狱,我就认为走的step为负数。

我们再来看看动作的价值:

逐渐升高,也就是说每个action的价值在逐步的提升。

迷宫游戏和棋盘游戏差不多,仿真环境都很好搭建,规则奖励等也很好定义。忽然觉得deep mind选择棋类游戏来证明机器人的智能真的好明智。

倒立摆

规则:钟摆以随机位置开始,向上摆动使其直立。

Initial:初始化随意位置

States:角度和角速度

Observation:

Actions:电机的力矩

介于电机最大和最小力矩之间的数据,一般会归一化处理为【-2, 2】

Done:normal状态下,直立起来我们视为finish,但如果我们设计不好,一直立不起来,岂不是要等到地老天荒。所以一般在达到一定的step_counts时就结束[30000]。

Reward :

Reward = -costs

angle_normalize(th)**2:与目标角度差的惩罚项

.1*thdot**2:角速度的惩罚项

.001*(u**2):输入力矩的惩罚

这里有一个有趣的现象是给出了在choose_actions时候的q值

" Natural DQN 学得差不多后, 在立起来时, 大部分时间都是 估计的 Q值 要大于0, 这时就出现了 overestimate, 而 Double DQN 的 Q值 就消除了一些 overestimate, 将估计值保持在 0 左右."

在一个episode里面可以看到loss值下降是很明显的。

从reward的角度来看:

这次我们看看累积奖励 reward, 杆子立起来的时候奖励 = 0, 其他时候都是负值, 所以当累积奖励没有在降低时, 说明杆子已经被成功立了很久了.

不用看累积的奖励,直接看即时reaward不就可以了吗!但这个我试过去看他的即时reaward很不好看

所以后面可以借鉴一下他的累积奖励的方式。

然后是AC和RNN实现的查看的正则化之后的reward的值

或者这样:

连续动作的小车上山

规则:小车由中间开始位置开始,跑上右边的山顶旗子标志的位置

Initial:位于-0.6-0.4之间,无速度

State&observation:这里二者是一致的

Action:

我看的传统的V0的模型,里面action的值是0,1,2。不知道哪个是往左边走,哪个是往右边走。

if done: reward = 10,在结束的时候给了一个10的reward

Done:目标位于汽车右侧的山顶上。 如果汽车到达或超出,则剧集终止

Reward:

奖励为到达右侧山丘目标的100,减去从开始到目标的动作平方总和。这个奖励函数提出了一个探索挑战,因为如果代理人没有尽快到达目标,它将会发现最好不要移动,并且不再找到目标。
请注意,对于大多数已发表的作品而言,这种奖励是不寻常的,其目标是尽可能快地达到目标,因此有利于爆炸战略

我看的传统的V0的模型,里面reward一直是-1

下面是用  MountainCar-v0 模型得到的结果,可以看到后面步数是逐渐减少的。

从累积的效果上来看,单看每一个episode效果还是不好。

再看看他的loss值的曲线,但是为什么最后会有一个突起呢?

 

DQN修改reward的值之后的实验结果如下:

 

 

在策略梯度里面的另一种角度如下:

这张图在说: “请重视我这回合最后的一系列动作, 因为这一系列动作让我爬上了山. 而且请惩罚我开始的一系列动作, 因为这些动作没能让我爬上山”.

也是通过这些 vt 来诱导梯度下降的方向.

策略梯度里面的loss值的变化情况:

车摆游戏

规则:游戏里面有一个小车,上有竖着一根杆子。小车需要左右移动来保持杆子竖直。如果杆子倾斜的角度大于15°,那么游戏结束。小车也不能移动出一个范围(中间到两边各2.4个单位长度)

Initial:所有的观测值都被指定为±0.05之间的随机值

Observation:位置、小车的速度、角度、角度变化率

Action:

Done: 到达200个reward之后,游戏也会结束;角度超过15度;超出移动范围则结束

Reward: 左移或者右移小车的action之后,env都会返回一个+1的reward

x, x_dot, theta, theta_dot = observation_

r1 = (env.x_threshold - abs(x))/env.x_threshold - 0.8

r2 = (env.theta_threshold_radians - abs(theta))/env.theta_threshold_radians - 0.5

reward = r1 + r2

下面是DQN的学习结果

在策略梯度算法中我们看到了一个新的角度,就是正则化的累积回报,此时不对reaward进行处理

可以看出, 左边一段的 vt 有较高的值, 右边较低, 这就是 vt 在说:

“请重视我这回合开始时的一系列动作, 因为前面一段时间杆子还没有掉下来. 而且请惩罚我之后的一系列动作, 因为后面的动作让杆子掉下来了” 或者是

“我每次都想让这个动作在下一次增加被做的可能性 (grad(log(Policy))), 但是增加可能性的这种做法是好还是坏呢? 这就要由 vt 告诉我了, 所以后段时间的 增加可能性 做法并没有被提倡, 而前段时间的 增加可能性 做法是被提倡的.”

这样 vt 就能在这里 loss = tf.reduce_mean(log_prob * self.tf_vt) 诱导 gradient descent 朝着正确的方向发展了.

 

 

最后

以上就是着急早晨为你收集整理的【RL从入门到放弃】【二十一常见模型分析】的全部内容,希望文章能够帮你解决【RL从入门到放弃】【二十一常见模型分析】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部