本文是李宏毅机器学习的笔记,这是第十三节,介绍了强化学习。
文章目录
1. What is RL?
在一些场景中,可能标签数量会很多,所以在没有明确的标签的情况下,机器应该知道自己结果的好坏。
强化学习的流程如下所示:输入一个函数,通过现有的环境,然后Actor采取一个Action,然后环境给予Actor一个Reward,告诉他结果的好坏,然后Actor再根据当前的环境采取下一步动作。
下图就是一个相关的例子。
流程如下:首先第一步还是定义一个具有未知参数的函数,然后可以当作一个分类器,输出每个action的分数,通过这些分数采取下一步的Action。
第二部,定义Loss,对于这里来说就是最大化每一步得到的reward之和。
第三步,就是进行优化操作,有一些挑战在优化这个过程里,就是,每次采取的行动是随机的,每次得到的奖励也具有随机性,并且每次的奖励和环境像黑盒子一样,是不明确的。所以说RL是一个随机性非常大的问题,同样一个network,每次训可能结果都不一样。
2. Policy Gradient
该如何控制actor呢,定义一个采取的确定行为的标签,然后,计算loss,可以通过正负号实现采取或者不采取该项行为。
是否采取该行为,定义损失函数,最小化损失函数。
还可以加上一个奖励分数,来实现,哪种行为更加强烈
下面是version0, 这个版本只会最大化当前的利益,不会考虑长远的利益。
version1都每一步的奖励做了一些改进,它会根据以后的action来定义reward。所以会有一定的全局性。
version1会把后面的每个action看的同样重要,所以我们定义了一个变量,使得越往后的action影响越小。
version3 进行了标准化,使得奖励有正有负。
Policy Gradient的流程如下,注意:收集资料是在循环里面的。
每笔资料只能更新一次参数。
同一笔资料对于不同时刻的模型产生的效果是不一样的。因为不同时刻的模型对于相同的数据产生的行为可能是不一样的,may not be good for
θ
i
\theta^i
θi。也可以理解为不同时刻的模型的能力也不一样。
所以说,收集资料的actor和更新的actor最好是同一个,当更新了actor之后,就要用新的actor再重新收集资料。
Off-policy可以使用之前的资料,训练其它时刻的actor,这样就可以不用多次收集资料。
Off-policy的一个例子如下,它需要知道每笔资料采取的行为对于不同时刻的模型来说是不一样的。
采取action是具有随机性的,也正因为随机性,才能train起来。Exploration就是让actor尽可能尝试不同的action,使得模型好训练一些。例如加大输出的熵,加一些噪声。使得action进可能随机。
3. Actor-Critic
Critic的工作就是评价一个actor的好坏,定义一个value function,代表actor
θ
\theta
θ看见s,得到的discounted cumlated reward。
如何计算
V
θ
(
s
)
V^{\theta}(s)
Vθ(s),一种做法就是MC,这种做法通过玩完正常游戏,然后得到
G
a
′
G_a^{'}
Ga′,然后计算value function。
还有一种叫做TD的做法,这种做法只需要当前的环境,行为,奖励和下一步的环境,就可以计算出两个value function之间的关系,然后利用这个关系进行计算,计算方式如下所示
利用MC和TD两种方式计算出的value function的值是不一样的。
标准化的一个合理做法就是减去value function
看到一个
s
t
s_t
st之后采取的多种行为的reward平均当作
V
θ
(
s
t
)
V^{\theta}(s_t)
Vθ(st)。当
A
t
A_t
At大于0时表示这个行为,大于平均reward,行为好。小于0时表示小于平均reward,行为不好。
但是一个随机的值减平均来判断是不合理的,更好的一种做法是平均减掉平均。这也就是Advantage Actor-Critic
Actor和Critic可以共用参数,例如绿色部分。
Sample的结果是对模型很重要的,它代表机器能否学到一个行为是否在另一行为的后面。
value function代表了一个期望值,他代表了每一个observation看到一个画面之后,得到的cumulative reward的平均值,它的期望值,
actor是从一个distribution中sample出来的。actor把每个动作的概率算出来,然后根据这个概率sample。
4. Reward Shaping
如果在最后才能计算分数,那就可以看成一个Sparse Reward的问题,也就是reward非常稀疏,例如让机器拧螺丝,可以用reward shaping解决。也就是利用额外的reward,在每个过程人为设定reward,辅助机器学习。
下面是认为设定的一些reward
看到一些有意义的新的东西就会得到reward
5. No Reward: Learning from Demonstration
如果没有reward,我们该怎么做呢
如果自己设定reward,那如果设定的reward有逻辑问题,就可能出现问题。
通过人类expert的示范,来进行学习。
光是让它跟人类学习是不可以的,因为机器看不到失败的状况,例如撞车,当撞车时,机器就会不知所措,所以不可以当作Supervised Learning,不可以让机器完全复制人类。这样也会限制机器的能力。
Inverse Reinforcement Learning可以解决这样的问题,利用专家行为来学出reward function
下面是Inverse Reinforcement Learning的流程
定义Reward Function,它给老师一个高度分数,给actor一个低的分数,然后更新actor,actor尽量让分数变高,reward function尽量不让分数变高,类似于强化学习
未来可以用人类示范的方法,来教机器做事情
通过图片画面的目标,机器自己设定reward,自己学习