【王树森】深度强化学习(DRL)_哔哩哔哩_bilibili
1.1基本概念
大写字母表示变量,小写字母表示观测值
数学概念
概率密度函数PDF
概率密度函数性质——概率的积分或求和为1
期望Expectation p为概率密度函数 f为取值
随机抽样 Random Sampling
强化学习中的随机性
动作随机性:给出当前的state ,policy随机抽样得到action。
状态转移的随机性 :给出当前的state和action 环境根据状态转移函数(根据当前的s 和a 得到一个状态转移的概率,随机抽样决定下一个state。)
专业术语
状态state
智能体agent
ploicy Π: 观测到当前状态,做出决策,让agent做什么动作。其实是一个概率密度函数,根据当前的状态,会有一个包含各个动作的概率密度函数,分为确定性策略和随机性策略。下图为随机性策略,包含不同的动作,最后通过随机抽样选择一个执行的动作。
奖励Reward
状态专转移 state transition 会有一个状态转移函数,环境根据这个函数做出改变,具有随机性
轨迹trajectory
交互过程
奖励Rewards
回报Return:包含未来的所有奖励。通常采用discounted return折扣回报 设置一个折扣率调整未来的奖励重要性。
奖励Ri依赖Si和Ai,故Ut也跟未来的状态以及动作有关。回报Return的随机性来源就是未来所有的动作和状态
动作价值函数Action-Value Function Q(s,a)
由于Ut是随机变量,其依赖未来的state和reward 所以当前时刻不知道当前的Ut
故引出Q 对未来的A和S求期望 ,把所有未来随机性平均掉。用于评估当前的状态下动作的好坏。
QΠ只跟当前的st和at有关,未来的都被积分掉了。也跟当前的policyΠ有关,积分过程中会用到policyΠ,不同的Π得到的Q也不同。
最优动作价值函数:Optimal action-value Function 去掉QΠ中的Π 求最大的Qmax
状态价值函数:Stat-value Function 对A求期望,消除动作变量,只和状态有关。下图为离散和连续的期望过程
跟Π和State有关,给当前的状态打分
两种方法控制agent选择动作
根据Π选取动作
根据最优动作价值函数选择分数最高的动作
强化学习最终就是学到一个Π或Q⭐
1.2价值学习
用一个神经网络近似Q⭐。用TD算法更新网络参数
DQN
把Q⭐当作一个先知,他会告诉你每个动作的平均回报,选择执行分数最高的动作
用神经网络DQN Q(s,a,w)近似Q⭐(s,a)
Q(s,a,w) 输入当前状态s,输出所有动作打分, w是神经网络参数,优化该参数使其打分更准
执行过程 主要用到Q选动作,状态转移函数选下一个状态
Temporal Difference Learning (TD)
通过TD算法训练DQN,让他打分更准确
例1起点到终点 完整运行一次。更新一次w (蒙特卡洛)
目标最小化损失函数L
损失函数L为什么这么写:
误差越大惩罚越强,平滑梯度平方是二次凸函数:误差小时梯度平缓、微调权重;误差大时梯度放大,快速修正严重偏差;全程连续可导,适合梯度下降。
求导化简,消除系数 2(加 1/2 的目的)损失求导:如果不加1/2,导数会多出系数 2,训练时多一层常数计算,加1/2直接简化梯度表达式,代码更简洁。
梯度是损失函数 L 在当前参数点的上升最快方向:
- 梯度指向:往这个方向改 w,误差 L 会变大
- 梯度反方向:往这个方向改w,误差 L 会变小
- 故用梯度下降更新参数w,a为学习率
例2起点开始,没有走到终点,只走了一小段到DC停止。如何用这段来更新参数w (TD算法)
TD 算法 即使不跑完全程也能更新参数,让预测更准
到了DC再预测剩余路程的时间为600 ,加上起点到DC的实际时间300 用900来更新参数
可以推出原来起点到DC的预测时间为400 得到TD errorTD算法的目标就是让TD error接近0
TD learning + DQN
在DQN更新中也要用类似的路程公式 如下图
公式推导:
训练过程:目标让Loss变小
Summary
TD算法更新DQN过程
1.3策略学习
用Policy神经网络Π( a | s ; θ )近似Π(s,a)。用策略梯度更新参数θ
Policy Function Π(a|s)
Policy Network Π( a | s ; θ )
输出的所有动作的概率求和必须为1 , 必须包含所有动作
状态价值函数的近似
Policy Gradient 策略梯度
策略学习的思想:V(s; θ)可以评价状态和策略网络的好坏。学习θ让J(θ)变大 用policy gradient ascent 用梯度上升来更新θ
策略梯度计算 假设QΠ不依赖θ 但是实际Π还是和θ有关,只是简化推导
从紫色字推导
离散情况:对函数的期望=对概率X函数的求和
最后得到策略梯度的两种形式 两种等价
策略梯度的计算
离散动作
连续动作
蒙特卡洛近似:g(a顶,θ) 是策略梯度的无偏估计,故用它来近似策略梯度
- 高斯分布 = 动作的概率规则(从这里抽动作);
- 蒙特卡洛 = 利用抽取到的样本去估算梯度期望的数学方法。
Summary
但是3中QΠ不知道
有两种方法来近似QΠ
Reinforce用观测到的ut来近似QΠ 需要完成一局游戏拿到所有奖励才能更新参数
最基础的蒙特卡洛策略梯度算法:
- 逐步蒙特卡洛采样 每一步从策略分布抽动作,算出对数梯度并缓存,目的是近似梯度期望;单步仅存数据,无更新操作。
- 蒙特卡洛回报Ut需要完整一局所有奖励折现求和,只有轨迹终止后才能算出;REINFORCE 只用它作为Qt计算梯度g,这是该算法独有的特点。
- 整体流程串联 边走边采样存梯度 → 对局结束算出全部Ut → 梯度 ×Ut得到g → 统一梯度上升更新策略网络。
神经网络来近似QΠ 即 A C 方法 具体内容见 1.4一步一更新
1.4Actor-Critic Method
基本概念
训练
训练步骤
Value network q (TD)
TD
policy network Π(policy gradient)
更新流程
Summary
如果使用baseline 就不用qt了
1.5AIphaGo
2.1蒙特卡洛
计算Π
、蒙特卡洛近似求积分也是重要的应用
蒙特卡洛近似期望
根据概率分布抽样,不再是随机抽样,高斯分布这些都有现成的抽样函数
2.2随机排列
均匀随机排列
任何一个元素出现在n个位置上的概率都是1/n
另一种定义:任何一个位置上出现n个元素中的一个的概率都是1/n
Fisher-Yates Shuffle
Original Version
目标对元素均匀随机排列--如扑克牌
随机数生成器:在指定区间内,每个数值被抽取到的概率完全相等
- 准备原始数组(所有牌)+ 全新空数组两块存储空间;
- 均匀随机生成器,在「剩余未抽牌索引区间」均等抽一个下标 j;
- 取出下标j对应的牌,放入空数组尾部;
- 原始数组删掉这张牌,后面所有元素整体前移填补空位;
- 循环直到原始数组清空,新数组就是随机洗牌结果。
缺点
- 时间复杂度 \(O(n^2)\),很慢每次删除元素都要把后面全部数据向前平移;平均每次移动 \(n/2\) 个元素,总操作平方级增长,牌越多越卡。
- 必须额外开一块新内存空间复杂度 \(O(n)\),需要两倍存储存放原始 + 结果数组,内存开销大。
Modern Version
这个是倒序,抽到的放到最后一个位置
- 设数组长度为 n,循环变量 i 从最后一位下标 (n-1)倒着走到 1;
- 用均匀随机生成器,在区间 [0,i]生成随机下标 j(只在还没固定的元素里抽);
- 交换数组
arr[i]和arr[j]; - i 减 1,此时下标 i 及之后的元素已经完成洗牌,不再变动。
时间复杂度低,不需要额外内存
用处
均匀随机生成器是 RL 所有随机采样的底层工具;Fisher-Yates 原地洗牌主要用于经验回放池、离线数据集、多轨迹样本打乱,消除时序样本相关性,稳定网络训练。
3.1Sarsa算法(TDlearning-1)
Saras 是一种TD算法,可以用来学习动作价值函数QΠ
做蒙特卡洛近似
TDlearning的目标
Sarsa 查表方法
- Q 表存储所有离散 (s,a) 价值,仅小规模离散场景可用;
- 表格初始化全部置 0;
- 每走一步交互,即时更新对应 (s,a) 格子;
- 后续任意步骤查表,均使用此前所有步骤更新完成后的表格值。
通过查表取出来 QΠ(st,at)也能查出来
Sarsa:神经网络版本
不用 Q 表,用神经网络 (q(s,a;w)拟合动作价值 Q(s,a));输入状态、动作,输出单一路 Q 估值。
第一章就用的这种方法
单步 SARSA:1 个五元组((st,at,rt,s{t+1},a{t+1) 即可完成一次网络更新
Summary
3.2Q-learning算法(TD learning-2)
Q-learning是TD算法,用来学习最优动作价值函数Q⭐
Sarsa VS Q-Learning
TD Target的计算
对期望做蒙特卡洛近似,得到TD Target.通过一次环境交互完成蒙特卡洛单点采样,取出分布内一组观测样本rt st+1 然后代入公式替代期望
Q-Learning表格
找到对应的行,找到最大值,然后计算
仅更新当前交互的一组\(st,at)对应的表格格子:Q(st,at). Q(St+1,a)只用来辅助计算,不执行
Q-Learning神经网络--DQN
训练DQN最常用的算法就是Q-Learning
被更新的对象:整套网络所有权重参数w
Summary
3.3Multi-Step TD Target(TDlearning-3)
如上图,两种TDTarget 只包含一个rt.
这种叫one step TDTarget如下图
下一次用rt+1来更新
其实可以用多个r来计算TD Target如下图
多步TD Target数学推导:
由Ut可以推出TD Target 的公式
一步VS多步
4.1经验回访(价值学习高级技巧-1)
回顾TD算法
用完之后,这个四元组就会丢掉
经验回放概念
传统的,会造成经验浪费
之前按顺序使用四元组transition,前后相关性太强,不利与训练.如果能把序列打散,消除相关性,会更好训练DQN
经验回放
设置了一个Repaly Buffer
TD with Experience Replay
从经验池里随机抽一个四元组,用来计算TDTarget,来训练网络:rt就是回放池里存好的历史旧值,如此类推。
优点:
打破序列的相关性
能够重复利用过去的经验
实验中可能抽取多个四元组,算出多个梯度,用平均梯度更新网络
优先经验回放Prioritized Experience Replay
用非均匀抽样代替均匀抽样
Buffer有许多transitions ,但是重要性却不一样
可以用TD error的绝对值判断重要性,越大,越重要,应该给更高的优先级
有两种不同的抽样方法
调整学习率,抵消不同抽样概率造成的偏差
如果一条transition有较大的抽样概率,那么设置他的学习率较低
是一个超参数,需要自己调参,初始调低,慢慢变成1
为了做优先经验回放,对每一条的transition 标记TDerrot
还没有用过的,给最高优先,使用后更新,就有了新的权重
Summary
4.2高估问题、Target Network、Double DQN(价值学习高级技巧-2)
高估的产生
自举,在RL中,用一个估算去更新同类的估算
yt里有DQN的估计值,然后用包含yt的公式更新DQN---这就是自举
问题会产生高估
会有累计高估,如果当前的DQN已经高估,用这个去更新会更加高估,会高估下一状态真实最优价值
最大化高估的数学解释
DQN中
另一个原因自举
为什么会高估--会产生一个正反馈,一旦出现高估,就会原来越高估
高估的害处
均匀的高估不会影响最优动作价值函数选择最优动作,但是不均匀的高估会影响DQN的准确性
解决办法-Target Network
在一定程度上避免自举
Target Network的参数需要隔一段时间更新一次
比较两种方法,原始的和Target Network 计算TD Target 时候不同.但是无法消除,依赖DQN参数无法独立DQN,以及最大化操作也不可避免
解决办法-Double DQN
原始DQN-严重高估
Target Network--高估还是挺严重
Double DQN--三种最好的,但是高估仍然存在 可以缓解最大化造成的高估
Summary
4.3Dueling Network(价值学习高级技巧-3)
讲述在DQN上的使用
Advantage Function优势函数
将V⭐作为Baseline A⭐表示动作a的相对于Baseline的优势
定理一直接给出
最后一项很重要
Dueling Network
这节课的内容如下:
用神经网络近似
Dueling Network 和DQN的输入输出完全一样