1. 强化学习情景
强化学习的情景如下图所示
有一个 agent ,他在一个 environment 中,观察到一个值 Observation 执行一个 action ,这个 action 改变了环境的值,agent 得到一个对应的奖励。
以围棋为例,如下图所示
他观察目前的棋盘,落一个子,然后棋盘的环境发生了改变,如果最后赢了这盘棋就会得到奖励1,如果输了就会得到奖励-1。但是有一比较明显的问题是,在下棋的过程中是没有办法判断出谁输谁赢的,所以中间的奖励都是0,这样也就说明奖励这件事情是比较稀疏的。
2. 将强化学习与有监督学习相对比
将强化学习与有监督学习相对比,区别如下图所示
有监督学习仿佛是在跟着一个老师进行学习,看到什么样的棋盘决定下一个子要落在什么样的位置;而强化学习是随便下,经过若干步之后,最终达到胜利,是通过下棋的经验进行学习。因为没有办法让人和机器对弈那么多局,所以常常使用两个 agent 自己与自己对弈的方法进行训练。所以在这里常常是使用有监督学习和强化学习相结合的方法,首先用有监督学习训练出模型,再让两个模型对质。
3. 强化学习的应用
3.1 使用强化学习的方法搭建聊天机器人
具体的方法是让两个聊天机器人自主聊天,然后人通过规则来判断两个机器人之间的聊天是否够好,如果够好就给予奖励,如果不够好就给予负的奖励,如下图所示
3.2 交互式检索(Interactive retrieval)
交互式检索的过程如下图所示
3.3 其他的应用
开直升机,驾驶,节电,产生文本等。
4. 强化学习玩游戏
强化学习玩的游戏是“太空入侵者”(Space invader),游戏的规则如下图所示
其中左上角是所得到的分数,也就是在强化学习中的奖励(Reward);其中黄色的部分是要杀掉的外星人,下面的类似于火焰的东西是屏障,最下面的是 agent ,它可以向左移动或者向右移动,也可以选择开枪(fire)。
强化学习的奖励如下图所示
我们可以看到在上图中,左右移动的过程中是没有奖励产生的,只有在开火打死外星人的时候才会有奖励产生。
下面是一个训练过程,称之为“episode”(片段,集)。
他在经过一系列的动作之后,最终终止了游戏,而强化学习的目的就是通过学习希望在每一次的学习过程中得到累计奖励最大。
4.1 实现的困难之处
困难之处主要出现在两点,回报延迟和探索。
回报延迟主要体现在两点上,首先在这个游戏中仅仅可以通过开火可以得到回报,但是实际上移动到相对应的位置对于得到回报同样是很重要的。其次,有的时候并不是得到回报就是好的,有的时候将自己的某一路堵死反而可以获得更大的胜利。
探索是指除了目前可以做的,还可以做什么要进行进一步的探索,比如说不击杀小怪而击杀母怪可以获得更高的回报。
4.2 强化学习方法介绍
在本节中使用的强化学习的方法如下图所示
在这里是两种方法的结合,一种方法是 Policy-based(基于策略的),另一种方法是 Value-based(基于值的)。其中 Policy-based 主要用于学习得到一个动作,而 Value-based 主要是用于学习以判断规则来判断现在学习的好不好。而接下来介绍的A3C方法就是将这两个部分相结合的方法,目前这种方法可以获得最好的效果。
然而在 Alpha Go 中除了有使用上面说的两种方法外,还是用了基于模型的方法(model-based),这种方法就是里面的蒙特卡洛方法,这种方法主要是用于接下来会发生什么样的情况,但是这种方法在棋类游戏中是比较有用的,但是我们的这种电子游戏中的效果不是那么好,也很少有人使用这种方法,因为棋类游戏不同,它里面不是有穷种可能,而是无穷种可能。
4.3 基于策略的方法
基于策略的方法可以分为这三个部分
其中的第一个部分是我们需要得到的函数,具体来讲是产生动作的函数,在这里我们是用NN来产生一个动作
NN的输入是一个向量或者说矩阵,在这里是游戏中的图像,NN 的输出是采取着三种动作的概率。可以使用直接取其中概率值最大的动作的方法,但是一种更好的方法是按概率选取动作,这样可以避免每一次取出的动作都是相同的。那么为什么要使用 NN 来产生动作,而不是使用查表的方法产生动作呢?原因在于在测试的过程中,即使给定一张在训练过程中从来都没有见过的图像,通过 NN 仍然可以得到一个输出,但是查表的方法就不可以。
基于策略的方法的第二个部分如下图所示
在第二步我们需要评价函数的好坏,对于 NN 来说,如下图所示
我们通过网络得到一个输出,之后与我们标签相对比,计算损失函数,使损失函数最小。具体的过程如下图所示
在给定参数的时候执行的一系列动作记作 πθ(s) π θ ( s ) 是在参数为 θ θ 的网络下产生动作 s ,而 R¯θ R ¯ θ 是评价函数有多好的指标。我们所采取的一系列动作如上,在状态 s1 s 1 ,采取动作 a1 a 1 ,得到回报 r1 r 1 ,达到状态 s2 s 2 。我们这一系列的动作得到的回报加在一起获得总的回报,但是我们不能直接采用这个回报最为评价函数的指标,因为打游戏是一个随机的过程,即使在每一次遇到相同的关卡或者画面,所采取的动作也是不同的,所以这个时候就要计算若干次回报的平均值。
理论上我们需要计算如下的公式
但是 τ τ 的可能有很多种,我们没有办法像公式中那样对于所有的 τ τ 进行求和,只能通过取样计算再求均值的方法进行代替。
基于策略的方法的第三个部分如下图所示
在这一部分,我们需要找到一组参数使得所得到的回报最大,其中回报 R¯θ R ¯ θ 的计算公式如上,这个时候假设 θ θ 中的参数网络的 权重和偏置值,在这里我们采用题都上升的方法,而不是使用梯度下降的方法。
求取梯度的方法如下图所示
由于在表达式中关于梯度的量只存在与 P 中,所以只需要对这项进行求导,之后将等式配凑程如图所示的形式,这个主要是希望得到
P(τ|θ)
P
(
τ
|
θ
)
,而后面那项分式可以化简为 log 的形式,并将关于
τ
τ
的求和转变为关于 n 的求和。现在考虑其中关于概率的对数求导数的那一项,如下图所示
我们将其中的
P(τ|θ)
P
(
τ
|
θ
)
这一项展开,按照强化学习执行的顺序展开成如上所示的形式,并用连乘的方式表示出来,可以看到其中黄色的部分是与动作无关的项,只有红色线部分是与动作相关的项,所以只需要对红色部分进行求导即可。如下图所示
所以计算梯度的公式如下图所示
这个过程实际上也是很值觉得,如果在某一轮中执行某一个操作,并且整体的回报是正的,那么这个时候就增加这个参数,如果是负的就减小这个参数。在这里我们使用的是某一次强化学习的过程中获得的总回报,并不是执行某一个动作之后的立即回报,因为如果是立即回报的话,模型就只会 fire 而不会做其它动作了。
其中在求取梯度的过程中又除以了一遍概率,这一点也是十分重要的,如下图所示
因为从公式中可以看出,对于梯度的增加还是减少,一方面看的是回报的值大不大,另一方面是出现的次数多不多,除以概率之后可以将概率归一化,找到那些虽然出现的次数比较少,但是回报更高的方法。
还有另外一个需要考虑的是,在整个学习的过程中只有正的回报,而没有负的回报,这一点对于模型会有影响吗?在理想的情况不会有影响,如下图所示
我们对于较大的回报 a 会有较大的梯度值,虽然 b 的梯度本来很大,但是由于梯度比较小,使得经过学习之后他的概率反而降低了。但是在实际中就会出现问题,因为在实际问题中,他不是通过穷举所有可能得到的,而是通过抽样的方法得到的,这样如果没有被抽到的话,那么经过更新之后,他的概率就会变小了,这样明显是不合理的。所以我们在表达式中减去一个常数 b ,来避免这一问题的产生。
5. 课程总体回顾
在本门课程中,所讲的所有内容如下
6. 致谢
虽与李宏毅老师素未谋面,但是经过本门课程,本人对于机器学习的理解得到了较大提高,万分感谢。