目录
version 4:Advantage Actor-Critic
搜集资料的技巧:Exploration--增加Actor的随机性
RIG(Reinforcement Learning with Imagined Goals)
应用场景
- 当我们给机器一个输入的时候,我们不知道最佳的输出应该是什么;
- 收集有标注的资料很困难的时候
叫机器学习下围棋,最好的下一步可能人类根本就不知道。我们不知道正确答案是什么的情况下,往往就是 RL 可以派上用场的时候,
RL 在学习的时候,虽然不知道正确的答案是什么,但是机器会知道什么是好,什么是不好,机器会跟环境去做互动,得到Reward
强化学习的本质
强化学习的过程和机器学习是一样的,都是寻找函数。不过在强化学习中寻找的函数叫做actor,actor 跟Environment会进行互动,actor能够接受环境给予的observation(观察),做出action去影响 Environment,然后Environment会给这个 Actor 一些 reward(奖励),这个reward说明action是好是坏。我们的目的就是寻找一个用 Observation 当作Input,输出 Action,能将Reward总和最大化的actor。
以电脑游戏为例
游戏界面就是observation,人即决策者就是actor,向左向右跟开火就是action,游戏机就是Environment,得到的游戏分数就是reward。游戏的画面变的时候就代表了有了新的 Observation 进来,有了新的 Observation 进来,你的 Actor 就会决定採取新的 Action。我们想要 Learn 出一个 Actor,使用它在这个游戏裡面的时候,可以让我们得到的 Reward 的总和会是最大的
强化学习三个步骤
定义有未知参数的函数;根据训练资料定义loss;找出能够使loss最小化的函数(优化)
第一步:有未知参数的函数
将机器的观察用向量或矩阵来表示,作为actor的输入;actor输出的每个action对应输出层的每个神经元,每个action会有一个分数。这样看和分类任务是一个东西,不同的点是:强化学习将这些分数作为几率,按照这个几率随机产生输出,也就是sample(采样),而不是将分数最高的那个作为输出。
採取 Sample 有一个好处是说,就算是看到同样的游戏画面,机器每一次採取的行为也会略有不
同,在很多的游戏裡面这种随机性也许是重要的,比如说你在做剪刀石头布的时候如果总是会出石头,就很容易被打爆,如果有一些随机性就比较不容易被打爆。
第二步:定义Loss
这里定义loss也就是定义分数的获得机制,但是我们最后想要最大化的是整局的全部分数之和,而不是局部某一次的分数。负的 Total Reward当做 Loss
补充:一局游戏就是一个episode;reward是某一个行为能立即得到的奖励,return是所有分数相加(total reward)。
第三步:Optimization
环境产生的Observation s1 进入actor,actor通过采样输出一个a1,a1再进入环境产生s2,如此往复循环,直到满足游戏中止的条件。s 跟 a 所形成的这个 Sequence又叫做 Trajectory,用 𝜏 来表示。
需要注意的是reward不是只看action,还需要看 Observation,所以 Reward 是一个 Function。
优化目标:找到 Actor 的一组参数,让R(𝜏)的值越大越好。
RL的难点
强化学习最主要的难点就是如何做optimizaton:
- action是通过采样产生的,具有很大的随机性,给相同的s,产生的a可能是不一样的。
- 一般的Network在不同的random seed设定下的随机性,是"Training"中的随机性,比如初始化参数随机;但是在Testing中,同样的输入会获得同样的输出。 RL的随机性是在测试时,固定模型参数,同样的输入observation,会有不同的输出action。
- 只有actor是网络,Environment 和 Reward,根本就不是 Network ,只是一个黑盒子而已;Environment与Reward都有随机性。
- 环境是黑箱,採取一个行为环境会有对应的回应,但是不知道到底是怎麽产生这个回应,给定同样的行为,它可能每次的回应也都是不一样,具有随机性。
- Reward就是一个奖励的规则,也不是 Network。
类比GAN
相同点:将actor看成是generator,将环境和reward看成是discriminator,训练出的generator能够使discriminator的corss entropy越大。
不同点:GAN的discriminator是network,而RL的discriminator不是network,无法用梯度下降等方法来调整参数来得到最好的结果。
Policy Gradient(策略梯度)
怎么学出actor中的参数
如果希望Actor在看到某个s时采取某一种行为,只需要把actor输出想成一个分类的问题,为每个Observation设定一个a ̂ (即Ground Truth或label)。针对某一个Observation,a ̂ 是向左移动,如果希望actor采取该行为,则计算Actor跟 Ground Truth 之间的 Cross-entropy,学习让Cross-entropy最小的 θ,就可以让这个 Actor的输出跟Ground Truth 越接近越好;