本内容主要参照了李宏毅老师的机器学习课程
我们知道 机器学习分为监督学习和非监督学习
监督学习是人为给训练集进行分类,每个训练集有标签进行训练
非监督学习则是无标签训练,但是人们仍然知道分类的正确答案
强化学习(reinforcement learning)则是一种人类也不知道正确的答案是什么的一种(比如下围棋,你也不知道下在哪里最后会赢,强化学习解决的就是这类问题)
强化学习的基本组成有obseration(input)->actor=f(observation)->action->environment->reward

observation:即输入,对于棋盘游戏则是棋盘当下界面
actor:即我们需要训练的actor(强化学习的训练对象)
action:actor在看到observation后决定采取的动作
reward:采取动作后的得分情况,由于动作往往和当下所处的状态环境有关,故需要和environment互动

actor之后会对每个可选择的动作进行打分,但是不是采取分数越高就取哪个的策略,选用的是Sample方法(随即方法),即action本身具有随机性
对于一个可以实时反映分数的游戏,如星际争霸,可以不断地通过actor的输入observation和输出action进行游戏(即机器替代人玩游戏)

这样把每次action后的reward加起来,就得到了一个total reward,我们的目的就变成了使total reward最大化
那么actor是怎么得到的呢?
actor也是通过数据训练得到的


而这种数据的来源必须是经过一个episode获得的,由于数据量的问题,往往是多个episode
(这里也就回答了为什么用sample,因为sample以保证数据的多样和丰富性,有时我们甚至会给参数加上一些噪声,以生成不同种类的action
那么对于action的选择有多个版本
Version0:如果采取一个action的reward>0,则采取该action(short-sighted Version)
Version1:为了避免短视效应,我们将采取这个action之后所有的reward加起来代表其reward,
这里我们需要引入一个概念:cumulated reward

version1的cumulated reward则是所有的action reward之和
但是Version1存在一个逻辑问题,就是距离越远的action影响越小(比如打游戏,第一步和第二步可能关系很大,但是第一步和第99步你还能说二者之间影响关系大吗?)
Version2:所以我们引入变量 discount factor来解决这个问题

Version3:考虑到高分低分都是相对的,比如一个班平均分100,那你考90分就不算高;一个班平均分10分,那你考60分你就有可能是班级第一,version3就是在这种思想的基础之上进行改进。

我们的目的是训练actor,具体训练步骤如下图,即采用梯度下降算法来选取actor的参数

但是需要注意的是,对于一个参数,跑完游戏生成一组数据进行训练;如果更换参数,那么需要重新生成数据进行训练
这种就是我们所说的on-policy,那么这样就很费时间,我们当然想一个数据集可以用于多次训练,基于此思想,我们就引入了off-policy(:seita用seita i-1的数据集进行训练

而在一系列off-policy方法中,最常见的就是Proximal Policy Optimization(PPO),具体PPO内容目前还没看
Value function
对于cumulated reward计算方法有两种
1.Monte-Carlo(MC)算法
即需获得observation下采取action1后得到的reward,但是这种不好的是就是耗时(因为需要采取相应的action,并得到reward)

2.Temporal-difference(TD)算法
即根据St、at、rt、St+1预测

Version3.5:
b如何选取?
可以直接赋值我们的value function

总的来说,IRL雨点类似GAN,
输入一个参数的actor 输出reward,根据reward对actor参数进行修正,直至生成一个满意的reward

网友评论