强化学习简略教程——15分钟从入门到迷瞪

————整理自Hands On Machine Learning with Sklearn and Tensorflow,第16章。

1.强化学习的历史

1950年左右强化学习就出现了,但却很少被人们关注。直到除了2016年3月alphaGo战胜围棋冠军李世石,alphaGo的创造者,英国的一个创业公司DeepMind在2014年被谷歌用5亿美元收购。

2.强化学习的概念

强化学习是学习这样一个软件系统:agent通过在environment中观察和采取action,因此它获得了reward。agent试图在environment中通过尝试和从错误中学习来最大化它的reward。agent决定action的算法称作policy。

例子1:行走机器人
agent:机器人控制系统;
enviroment: 真实世界;
action:控制马达的动作前进、停止、后退、向左或者向右行驶;
rewards:到达指定目的地是正向reward,走错方向或者摔倒就或者负向的reward。

例子2:吃豆人游戏
agent:游戏控制软件;
environment:游戏的环境、设置、场景等;
action:上下左右运动、静止等;
reward:游戏进行的时间长度、游戏得分等。

3.例子1——CartPole——Policy Gradient算法

强化学习简略教程——15分钟从入门到迷瞪
CartPole说明:

agent:车子移动方向的控制算法;
environment:场景;
abservation:4个——速度,位置、角度、角速度;
action:两种,向左加速or向右加速。
reward:每进行一个action之后,如果杆子不倒(游戏没结束)获得1个reward。

当杆子倾斜角度大于一定数值之后、或者车子离开远点一定距离后(走出屏幕),游戏结束。游戏的目标(算法的目标)是让杆子尽可能地不倒。

3.1 Simple Policy——硬编码

一个很直观的算法就是:当杆子向左倾斜时候,车子速度向左;当杆子向右倾斜时,车子速度向右。

3.2 Neural Network Policies——Policy Gradients

神经网络的输入:四个观测数据;
神经网络的输出:向左或向右的概率。
强化学习简略教程——15分钟从入门到迷瞪

3.2.1 行动效果的滞后性——credit assignment problem

就像我们日常生活中,干一件事带来的后果可能不一定马上体现出来,强化学习中也是如此。
考虑action效果的滞后性,计算每一个action的实际reward;例如三个连续的动作的reward分别是[10,0,-50],discouting rate γ=0.8,那么三个动作折算之后的reward是
[-22,-40,50]。
      reward[i]=reward[i]+γ×reward[i+1]+γ^2×reward[i+2]+…+
以上述例子说明,
      -22=10+0.8×0+0.8×0.8×(-50)
      -40=0+0.8*(-50)
      -50=-50

3.2.2 Policy Gradient算法步骤

(一)模型训练
(1)用上述神经网络进行10次实验(一次实验是指小车从开始运动到游戏结束),保存每次实验中每个动作的reward和对应的神经网络的gradient(此过程中不更新神经网络的参数,也就是不应用梯度);
(2)计算10波实验的梯度的加权平均(每次实验中的每个动作的reward和它相应的梯度gradient,计算reward×gradient的平均值),作为综合梯度;
(3)对神经网络应用综合梯度,更新网络权重;
(4)进行一定次数的更新之后,停止,保存模型。
(二)模型应用
对训练好的神经网络输入小车的observation(4个数),模型输出向左或者向右的概率。

4.例子2——吃豆人——DQN算法

4.1 概念解释

Q-Value:这是Markov Decision Process的一个概念,一个state有多个action可选,每个(state,action)与一个Q-Value值对应,在某个state选择action时候,贪婪策略是选择Q-Value最大的那一个。

Q-Learning:不断改进(state,action)对应的Q-Value值,使得决策更准确的学习方法。

DQN:Deep Q-Network,用深度神经网络进行Q-Learning的方法。

4.2 例子说明

强化学习简略教程——15分钟从入门到迷瞪observation:(210, 160, 3)的图片;
action:9个方向(四面八方八个方向+静止)

算法中用到了两个DQN:onlineDQN和targetDQN,它们结构相同,如下所示。网络的输入是图片,输出是9个数值,理解为9个action的q_value值。

强化学习简略教程——15分钟从入门到迷瞪

4.3 DQN算法步骤

(一)模型训练

Step 1:把图片输入onlineDQN,得到9个action的Q-Value(训练初期,action是随机的,后期选取最大的Q-value,用一个变参数epsilon控制);(没有更新模型参数)

Step 2:onlineDQN根据Step1中的action继续游戏,获得新的state(图片)。把这些计算结果以5维数组存储起来(称作“记忆”),“记忆”数组包括(state, action, reward, next_state, 1.0 – done)。(至此没有更新神经网络参数)

经过一定次数的初始训练(积累了一定量的“记忆”数据),需要训练模型的时候执行以下步骤:
Step3 :从记忆中选取一组“记忆”数据,将这组数据中的next_state喂给tragetDQN,输出下次的action的Q-Value,根据下述公式计算(更新)y(s,a)。把这组“记忆”数据的state当做X,更新后的y(s,a)当做y,训练神经网络。(target DQN的用处只有在下述公式中计算Q用到了)
强化学习简略教程——15分钟从入门到迷瞪Step4: 每隔一定的步数,把onlineDQP的参数复制给targetOnline。定期保存模型。

(二)应用模型:
用onlineDQN对给定的图片(state),进行计算,输出不同action的Q-Value值,选取最大的Q-Value对应的action。

5.工程实现

5.1 为什么需要一个软件?

(1)实际问题可能成本很高;比如机器人。
(2)实际问题可能难以并行化,比如同时训练1000个机器人;
(3)现实世界中可能训练时间很长,不能加速。

5.2 可用软件包

python强化学习包 OpenAI(OpenAI是有Elon Musk部分支持创建的非营利性人工智能公司)制作的gym,google制作的Dopamine(据说吊打OpenAi)等。

从上述的简要教程中可以看到其实模拟这个游戏或者系统本身的软件包设计本身也是极其重要的,可以想象如果没有软件包返回不同acition的reward,也是很难进行策略学习的。