目录
强化学习基本
概率论知识回顾
随机变量 :一个变量,其值取决于随机事件的结果。大写字母X代表随机变量。小写字母x表示一个观测值
概率密度函数(PDF) :意味着随机变量在某个确定的取值点附近取值的可能性。对于连续分布,随机变量的概率密度函数积分等于1,如果是离散分布,随机变量的离散概率值求和等于1。
期望 :对于连续分布与离散分布的变量,其期望表达式分别为:
随机抽样 :在python中,可以通过numpy库中的函数实现快速抽样:
from numpy.random import choice
samples = choice(['R','G','B'],size = 100,p = [0.2,0.5,0.3])
print(samples)
专用术语
- 状态(State) 和 动作(action)
- 策略函数π(Policy) 与 奖励(Reward):
- 状态转移(State transition):
old state -- action --> new state
,状态转移可以是随机的,随机性来自于环境(environment) - Agent与环境:
- Return(U) & Reward(R):return是未来回报的加和
- 理解价值函数(Value Functions):
- 动作价值函数:对于策略π,动作价值函数评估了当agent处在状态s时,去执行动作a的优劣
- 状态价值函数(State - value Function):对于给定的策略π,状态价值函数可以评估当前的状态是不是好的,而如果将状态s视为随机变量,对状态价值函数求期望,便可以评估策略函数π的优劣性(π越好则状态价值函数的期望值越高)
价值学习Deep Q-Network(DQN)
如何理解最优价值函数?
Q*函数可以预见,当智能体处于状态s时,执行动作a是否是利于最终取胜的
DQN方法就是一种近似求解Q函数的方法,使用神经网络Q(s,a;w)去近似Q(s,a)
使用DQN来play game
TD算法(Temporal Difference Learning)
算法流程(举例):
- 如果使用函数模型Q(w)来评估执行一个动作所需要的时间
- 在动作执行前首先做出预测
q = Q(w)
- 命令Agent实际地完成这一动作,得到一次真实的时间
y
- 并由此得到误差 L=0.5×(q-y)2
- 进一步,误差L对w求偏导,并使用梯度下降算法迭代w值。α为学习率:
但是其实也可以不必要求Agent执行完整个动作,在动作的执行中,Agent以及走过的路程可以认为是真实的时间,可以对这一信息加以利用
将TD算法应用于DQN
前文的“动作执行”情景下,从时间角度来看:
而在DRQ中,也有类似的关系式形式:
类似的,对于折扣回报:
可以得到,Ut = Rt + r*Ut+1,而又因为Q() = E[U()],因此根据这一式子可以得到:
价值学习的目标就是学得一个函数来近似Q*
策略学习
策略函数 π(a|s;θ) 表征在状态s时执行动作a的概率,对于状态信息较为复杂的场景,我们无法直接得到所有状态概率的具体值,往往采用近似的方式趋近一个策略函数。下图是采用神经网络的结构:
Softmax函数可以保证输出的结果为整数且加和为1
关系整合与回顾:
- Ut的随机性来自于之后的所有状态以及动作
- Qπ(st,at)函数则将状态与动作的随机性全部通过期望的方式积分处理掉了,但Qπ的取值依赖于策略函数π
- 状态价值函数将动作完全依照策略函数来选取,进一步拿掉了动作的随机性
梯度上升算法(Policy gradient ascent)
根据前文的思想,将状态价值函数中加入神经网络参数θ,使得V()函数变为与s和θ相关的函数:
那么后续地,对状态价值函数关于s求期望,就可以得到仅与θ有关的函数:
进而可以通过梯度上升算法得到使J函数最大的θ值:
策略梯度(Policy Gradient)
针对有限的离散动作集,可以将求期望转化为累加求和。根据求导与累加的可交换性,可将梯度求解公式变形如下:
如果假设Qπ与θ无关,则可以将Qπ从偏导式中移出,也即:
进一步利用链式求导法则:
即:
至此可以汇总得到策略梯度的两种表达形式:
计算梯度
对于离散情况:
如果动作空间是连续的,那么可以利用Form1,通过枚举的方式计算出所有的梯度求和:
对于连续的动作集:
如A=[0,1],则使用Form2形式求梯度,常规来讲需要使用定积分求解,但是π函数是一个非常复杂的神经网络函数,无法通过积分求解。只能通过蒙特卡洛近似 来求解:
- 根据策略函数随机在动作集中取一动作结果
- 计算显然此时g函数是梯度的无偏估计
- 最终就可以以g()函数来近似作为状态价值函数的梯度值(蒙特卡洛近似)