地表最强-强化学习笔记
视频学习:
莫凡视频教程
李宏毅2018强化学习视频教程
马尔科夫决策过程
https://github.com/wangshusen/DeepLearning
Multi-Agent Reinforcement Learning: A Selective Overview of Theories and Algorithms
An Introduction to Deep Reinforcement Learning
术语
注:所有小写字母表示已观测到的值,大写字母表示未观测到的(随机变量)
-
state
当前的场景、状态 -
action
动作 -
agent
做动作的主体、可翻译成智能体 -
policy
状态s下,各种动作的概率密度函数
-
reward
奖励 和有关 -
状态转移
state i
→state i+1
通常是随机的
条件概率密度函数
强化学习的随机性来源主要有两个
- action是随机的
- 状态转移(新状态)是随机的
强化学习状态轨迹:
-
Return
回报,未来的累计奖励
-
Discounted Return
折扣回报,是折扣率
显然在给定的下依赖于 -
Action-Value Function
动作价值函数
含义:如果用policy函数,在
s_t
状态下做动作的好坏,是否明智求期望就是对求积分
最优动作价值函数
含义:在s_t
状态下做动作好不好,就像一个先知,能告诉你每个action的平均回报
-
State-Value Function
状态价值函数
对A求积分,含义:当前局势好不好
强化学习的目标是学习 或者
强化学习的几种思路
-
Value-based learning
用神经网络(DQN)近似,参数学习利用了temporal different (TD)
算法 -
Policy-based learning
用神经网络(DQN)近似,参数学习利用了policy gradient
梯度上升 -
Actor-critic method
以上两种的结合
Value-based learning
如果我们知道,就能当前最好的action
本质:用神经网络近似
神经网络的输入是s
,输出是很多数值,表示对所有可能动作的打分,根据观测到的奖励来更新参数
- TD算法
如何训练DQN?实际场景中,完成任务需要很多步的action,如果全部action都结束了,再来更新模型,效果一定很差,那么如何走一步更新一下呢?
TD target
: 实际已经得到的奖励和模型预测未来的奖励之和。
越接近结束,TD target
越准
用TD target(y)
和全部都是模型预测的奖励Q(w)
计算loss
其中被称为TD Error
,换个角度,去掉相同的部分,其实就是实际奖励和预测奖励的误差。
最后用梯度下降更新模型参数,不需要打完游戏再来更新参数。
时刻未来奖励总和的期望约等于时刻的奖励加上时刻未来奖励总和的期望
Policy-based learning
本质:用神经网络近似策略函数
状态价值函数
给定状态,策略网络越好,的值越大
目标函数越大越好,利用policy gradient ascent
更新参数
Policy Gradient Ascent
观测到状态s,计算策略梯度,更新模型参数
-
如何求策略梯度?
-
整个算法过程:
Actor-Critic Methods
Actor
是策略网络,可以看成是运动员。用神经网络近似策略函数
Critic
是价值网络,可以看成裁判员,给运动员打分。用神经网络近似价值函数
价值网络
训练过程
-
观测当前状态
-
根据策略网络得到当前action
-
实施,然后观察 和
-
用TD算法更新价值网络参数
-
用策略梯度更新策略网络参数
总结:
AlphaGo
主要设计思路
棋谱大小19x19
,一共361个点,所以action
的数量一共是361个。可以用19x19x2
的矩阵代表黑白棋子的状态state
策略网络
状态矩阵:1表示有棋子,0表示没有,黑白棋子分别记录最近8个状态,所以一共是16,还有一个表示当前是黑棋下还是白棋下(全0或者全1) 策略网络- 训练三步走
- Behavior cloning 通过对人类棋谱有监督的学习(16w局)是一个分类任务,初步学习策略网络 (这一步可有可无)
- 网络只会对见过的state表现比较好,所以想要战胜它,只需要做一些出乎寻常的操作就行了
-
强化学习进一步学习这个网络,自我博弈(利用策略梯度)
- 一个模型参数需要更新的策略网络作为player,上一个策略网络作为opponent
- 进行一局比赛得到
- 奖励 , 赢了全为1,否则全为-1
- 计算策略梯度
- 更新策略网络
-
利用策略网络训练一个价值网络
- 用神经网络 近似
两个网络共享卷积层 - 进行一场比赛
- 奖励 , 赢了全为1,否则全为-1
- 计算Loss:
- 更新模型参数
- 用神经网络 近似
- 执行的时候用的是
Monto Carlo Tree Search (MCTS)
,利用策略网络和价值网络指导搜索(人类高手在下棋的时候会往前看好几步)- 搜索的主要思想
- 根据策略网络,在分数高的
action
中随机选择一个 - 自我博弈,根据胜负和价值函数给该动作打分
- 选择打分最高的那个
action
- 根据策略网络,在分数高的
- 搜索的主要思想
1.Selection | 2.Expansion | 3.Evaluation | 4.Backup |
---|---|---|---|
其中是动作价值,初始值都为0,N(a)表示动作已经被选择的次数 |
是根据策略函数随机采样模拟动作之后的状态 后面就是自我博弈,根据最终的胜负计算奖励 |
综合考虑奖励和价值函数,对状态 打分Record,分数越高胜算越大 | 计算动作的Q值,循环很多次之后选择被选中次数最多的动作 |
蒙特卡洛
一种数值算法,靠随机样本对目标做近似
待补充
TD Learning 之 Sarsa算法
- 用来学习动作价值函数
- TD target:
- Sarsa方法来更新价值网络(critic)
TD Leaning 之 Q-Learning
- 用来学习
- TD target:
Multi-Step TD Target
多个action之后再更新参数,相当于有累计多次奖励
m-step TD target for Sarsa
Experience Replay
经验回放
定义:
-
A transition
: -
Experience
: 所有的transition
之前训练方式的缺点:
- 每个只是用了一次,相当于对经验的浪费
- 和 之间的相关性太强,理论上打乱顺序更好
replay buffer
: 最近n个transition
,训练的时候每个batch从replay buffer
中随机选k个transition
做随机梯度下降
一种对经验回放的改进Prioritized Experience Replay
:用非均匀抽样代替均匀抽样
- 用TD error 判断
transition
的重要性 - 用不同的学习率 抵消不同样本抽样频率的不用,其中是抽样概率,,实战中先比较小,然后慢慢变大。
Target Network 和 Double DQN
TD target
:
TD error
:
SGD
:
我们发现在t时刻更新参数的时候,计算梯度的时候用到了,而又包含了对t+1时刻的预测,就出现了bootstapping的问题,自己把自己举起来了
DQN的高估问题
- 原因一:计算TD target的时候会最大化价值函数
- 原因二:上面提到的bootstrapping
结论:DQN对价值的高估是非均匀的,非常有害
解决方案:
- 用
target network
来计算TD targets
DQN
:,用来控制agent
target network
: 用来计算TD targets
结构一样,参数不一样 - 用
double DQN
缓解高估的问题
- selection:
- evaluation:
compute TD target | selection | evaluation |
---|---|---|
naive | DQN | DQN |
using target network | Target Network | Target Network |
Double DQN | DQN | Target Network |
Dueling Network
Optimal advantage function
以最优状态函数为基准,最优动作价值函数的优势
Dueling Network
实际实验中发现把max换成mean效果更好
数学原理待补充
Multi-Agent 强化学习
四种设定
-
合作关系
共同的目标,奖励一致,如多个工业机器人协同装配汽车 -
竞争关系
一方的收益是另外一方的损失,如零和博弈,拳击比赛 -
合作竞争混合
足球比赛,星际争霸 -
利己主义
股票自动交易系统,无人车
假设有n个agent,是状态
, 第i个agent的动作
,
那么状态转移方程
为(条件概率密度函数):
假设表示第i个agent的奖励
(Reward),那么
合作关系
竞争关系
假设表示第i个agent在t时刻的奖励(reward)
那么回报
(return)
折扣回报
每个agent有自己的策略网络 ,不同agent的参数可以相同(比如自动驾驶)也可以不相同(比如机器人足球队)
状态价值函数
,依赖于所有策略网络
部分可观测
multi-agent通常假设agent只能看到状态的一部分 ,
纳什均衡 Nash Equilibrium
纳什均衡用来判断多个agent的策略网络收敛的标准。
当其他所有agent的策略保持不变,单独优化某一个agent的策略不会得到更好的回报
Multi-Agent 学习的难点
如果直接把single-agent学习的方法直接用到multi-agent上的话,收敛会很困难
原因是一个agent的策略更新会导致其他所有agent策略网络的目标函数发生变化
所以在训练一个agent策略网络的时候最好能拿到其他agent的信息 (通信)
中心化centralized
与去中心化decentralized
通信方式
-
Fully decentralized
agent之间完全没用通信,其实就是上文说的
每个agent都是一个actor-critic,一个策略网络和一个价值网络
-
Fully centralized
所有agent把所有信息(observation, actions, rewards)发送给中央控制器central controller
,由中央控制器来决定每个agent的action
agent没有策略网络和价值网络,中央控制器学习n个策略网络、n个价值网络
主要的问题是执行速度慢,不能实时做决策
- Centralized training and decentralized execution
- 中央控制器帮助训练策略网络,运行的时候直接由agent决定action
- 每个agent有自己的策略网络(actor) ,中央控制器有n个价值网络(critic)
Policy Gradient with Baseline (Reinforce)
在策略梯度中加入baseline
,降低方差,使得收敛更快。baseline
可以是任何东西,且与无关
如果b选的比较好,和很近似,那么会减小方差,实际计算中会用蒙特卡洛对期望求近似
- 用当做b
细节待补充
A2C
Advantage Actor-Critic
本质上就是在actor-critic
的基础上加上了baseline
A2C的训练过程
数学推导待补充
A2C vs. Reinforce连续控制
Deterministic policy gradient (DPG)
确定策略梯度