part 1 基于表格型方法求解RL
首先要知道马尔可夫决策过程四元组
简单的来说就是在不同的状态s下选择不同的动作a会得到不同的奖励r。
状态转移概率解释起来就是在
情况下选择
动作转移到
状态,并获得
奖励的概率。
都是不是所有的时候,环境我们都是已知的,这时候就需要一步步的去探索。
:表示状态动作值
:表示状态的好坏
由状态值和动作值和Q值就可以组成Q表格
Q表格:指导每一个step的动作选择。 目标导向:未来的总收益G
但是考虑未来的收益之和明显不合理,所以需要引入衰减因子。
所以需要设置成一个合适的值。
接下来就引入强化概念。
有一个网址可以让大家直观感受一下下一步对上一步的影响,状态价值迭代
:就是上面提到的衰减因子
:软更新,每次更新一点点
需要五个值如下,所以起名sarsa。
sarsa伪代码
q-learning和sarsa伪代码差不多。
代码详情,请看.本次笔记所有代码
part 2 基于神经网络方法求解RL
如果状态无限,如果还有要q表格方法,那q表格也是无限,q表格方法通常只使用在状态可数的情况。
为了解决状态不可数情况,需要用到值函数近似来代替q表格的作用,值函数近似在q值里加了一个参数w,用值函数来代替q表格解决了去表格的两个缺点。
接下来简单介绍一下神经网络。
只要给足够多的数据,神经网络可以帮你拟合任意连续函数。
简单例子。
DQN:使用神经网络求解RL问题的经典算法
像人类一样看到图像再去输出动作,DQN输入的是像素级别的图像,但是DQN的本质还是q-learning。
回顾一下q-learning
DQN的改进就是使用神经网络来拟合Q表格。
然后来看看DQN神经网络怎么学习和训练。
监督学习就是得到我们的预测值与真实值作比较,得到均方差送进优化函数,就可以对网络进行更新优化。
DQN的训练过程也非常类似,输入是一批状态s,输出是对应的q值(其实是个向量),需要让我们的输出值去逼近目标值,targetQ的计算就用q-learning的更新公式,得到目标值和输出值的均方差,再放入优化函数进行优化。
DQN的两大创新点
DQN流程图
part3 基于策略梯度求解RL
agent有两种方案,基于价值value-based和基于策略policy-based。
value-based通过优化q网络得到最优的q值来选择动作,但是优化到最优之后参数就固定下来了,当输入一样的状态的时候就会输出一样的action,这种策略我们就叫确定性策略。
policy-based不用那么麻烦,直接神经网络拟合一下policy一步到位。
policy-based输出的是动作的概率,是一种随机的策略。
为了输出概率,一般会在神经网络最后加一个softmax的激活函数。
随机策略举例
在像乒乓球的这类游戏当中,agent和环境的交互是分幕式的,Episode的中文翻译就是幕,有一点点像是演员表演完一场表演,或者是说玩完一场游戏就是一个Episode,在每一个Epaisode里面agent不断根据当前输入的图像去输入动作,直到最后看看谁先拿到胜利的条件,一个Episode就结束了,就可以开始另一个Episode,优化目的结束让每一个Episode的总reward尽可能的大。
训练我们要先考虑所有的情况,就从初始的状态出发,我们有不同的概率去选择不同的动作,用来表示动作选择的概率,选择不同的动作之后根据环境的随机性会有不同的概率进入不同的状态,称为状态转移概率用
表示。
我们只能去优化,状态转移概率
是我们不能去控制的。
当从初始状态开始到与环境交互结束,我们把s,a,s,a这样串起来的,就叫一个episode的轨迹trajectory,该episode发生的概率就是将所有的概率连乘起来,这条轨迹的总的回报就是将每一个step的reward加起来,实际上与环境交互的轨迹肯定不止这一条,我们可以把所有轨迹发生的概率乘对应的总回报累加起来就是所有episode的期望回报,这个期望回报在一定程度上就可以来评价我们的策略好还是不好,但是正常的计算过程中我们不可能去穷举所有的轨迹,在model-free情况下也计算不出来转移概率,因为环境未知,所有我们可以直接去与环境交互N个episode拿到回报求平均,当N足够大的时候就可以近似拟合我们的期望回报,这个过程我们就称之为采样。
策略函数是我们的优化目标,对比一下DQN是怎么优化q网络的,DQN是使用Q预测与Qtarget的平方差来作为优化函数,policy网络使用与环境交互N个episode拿到回报求平均的值来作为目标来优化网络。
神经网络参数的更新是需要根据梯度来确定我们更新的方向,我们就需要求解优化目标对
的一个梯度
来去更新policy网络。
根据梯度我们就可以反推原函数来作为我们的loss函数。
part4 连续动作空间上求解RL
连续动作vs离散动作
一个是可数的,一个是不可数的
要输出每一个action的值在 [-1,1]之间在神经网络后面加一个tanh函数,然后再根据实际情况进行缩放。
在连续控制领域比较经典的算法就是ddpg了,ddpg是每一个step都会更新一次,是一个单步更新的policy网络。
当初ddpg设计的想法是将dqn控扩展到连续空间之中ddpg直接在dqn的基础是加了一个策略网络,称之为actor-critic结构。
actor-critic结构通俗的解释如下图。