A simple note on the RL used in single-agent and multi-agent.
序列决策
- 建模序列决策下的智能体,而不仅仅是单一回合或者一次性决策问题
- 讨论一个
- 完全可观测的随机环境
- 具有马尔科夫转移模型
- 加性奖励
的序列决策问题,通常包含状态集合、动作集合、转移模型、奖励函数。问题的解即策略。
- 假如序列没有时间限制,最优策略只与状态有关,与时间无关,则称最优策略是平稳的。
bellman方程,U和Q函数
- 价值函数(价值函数),代表某一状态/行为序列的奖励综合,U(s0,a0,s1,a0….),从当前状态和动作s0,a0开始
用加性折扣定义价值,未来的奖励乘gamma递减:
- 因为看重近期奖励
- 如果奖励可以投资,则越早的奖励价值越大
- 等价于每次转移有$1-\gamma$的意外终止
- 满足平稳性,t+1的最佳选择未来也是t的最佳选择未来
- 避免无穷的序列转移
基于价值函数,可以选出当前最佳动作,即在当前状态下,使得当前价值最大的动作(转移的即时奖励+后续的期望折扣价值)
- 这里存在一个期望,因为每个动作都可能到每个状态(概率),因此一个动作的价值是在所有可能的未来状态下累加。
价值函数只是状态的函数,已经对所有动作累加求期望
同理,价值函数只是状态的函数,已经对所有动作累加求期望,其实就是上式,只不过不是argmax选动作,而是max,这里的解释是:假设agent选择了最佳动作,状态价值是下一次转移的期望奖励加上下一个状态的折扣价值
- 注意两个式子本质是一样的,都是挑动作,都是在所有可能的状态下累加,但这是基于对未来期望的估计,实际执行就是选择一个动作,转移到一个状态。
- 该式即bellman方程
引入Q函数,Q是动作和状态的函数,U仅仅是状态的函数,两者的转换关系如下
同理也可以写成bellman方程的形式
- 注意以上讨论的都是最优价值函数和最优q函数,都是取max,即计算最优策略下的return,区别于on-policy价值函数和q函数,计算的是期望
reward shaping
- 可以通过修改奖励函数R(而不改变最优策略)来使强化学习过程更加稳定
- 约束:避免一些agent套路reward的情况
- 探索:鼓励explore
- 加速:改善奖励稀疏的情况,将任务分解成更小的子任务,从而使得智能体更容易学习
- 一种常见的修改方式是引入势函数
- 势函数是一个仅与状态相关的函数$\Phi(s)$(不同于价值函数,与动作状态序列无关,不是消掉动作得到的)
- 势函数编码了环境本身客观存在的因素,影响了奖励
可以证明,势函数可以为状态s的任意函数,且加入及时奖励时,bellman方程得到的最优策略不变,即当奖励函数改成
时,最优策略不变,$Q(s,a)=Q^{‘}(s,a)$
求解MDP
价值迭代
- n个状态,bellman方程就有n个方程n个未知数,非线性方程的解析解很难得到,可以通过迭代的方法,随机初始值,再根据邻居的价值更新每个状态的价值,重复直至平衡
引入迭代的timestep i,bellman更新(Bellman Update)如下
- 可以证明:无限次迭代可以保证达到平衡,得到最优策略(前提是即时奖励是正确的)。
策略迭代
- 有些时候我们并不需要得到精确的价值函数,只要知道哪个动作带来的价值最大即可,这就引出了直接对策略进行迭代优化的思想
. - 从某个初始策略开始,交替进行以下两个步骤
- 策略评估:给定策略,计算执行策略后某一时间步每个状态的价值
- 策略改进:基于所有状态价值的一步前瞻(即价值函数bellman方程)来计算新的策略
- 直到策略改进不对价值产生(足够大)改变
- 策略评估也是基于bellman方程,只不过不用遍历动作,因为动作已经由策略决定,然后固定当前时间步i策略$\pi_i$,我们可以得到n个方程,求解即可
- 在状态空间比较大的时候,精确求解比较困难,这时候可以使用修正策略迭代来进行策略评估,即下一时间步的价值函数直接由当前策略计算出,然后反复迭代
- 以上都是同步的形式,即每次迭代更新所有状态。事实上可以只更新部分状态,即异步策略迭代
- 好处是可以只专注为某些有效的状态更新策略,有些状态可能无论什么动作都达不到最优解
线性规划
- TBD
在线算法
- 价值迭代和策略迭代都是离线的:给定了所有条件/奖励,先生成最优解,然后agent执行
- 在线算法:agent不是拿到离线解之后再执行,而是在每个决策点即时计算决策。
老虎机问题
- TBD
POMDP
- 部分可观测环境的马尔科夫决策过程
- 因为agent对自己所处的状态不确定(这是部分可观测的定义),所以需要引入一个信念状态,然后agent的决策周期增加了一个环节
- 根据信念状态,执行动作
- 观测感知(证据)
- 基于感知、动作、之前的信念状态,通过某种更新机制得到新的信念
- 在物理空间状态上求解POMDP可以简化为在信念状态空间上求解MDP
- POMDP的价值迭代
Single Agent RL
- Agent处在MDP当中,不知道转移模型和奖励函数,需要通过采取行动了解更多信息
- 上文的序列决策是在已知环境下,如何得到一个最优策略,其实不需要agent的互动。一般而言的强化学习是指环境未知,需要agent在与环境的交互中来得到数据,从而确定最优策略。
- 基于模型的方法
- 环境提供了转移模型,或者一开始未知环境模型,但是需要去学习
- 通常会学习一个价值函数,定义为状态s之后的奖励总和
- 上文的序列决策都是在基于模型的前提下阐述的
- 无模型的方法
- 不知道环境的转移模型,而且也不会学习它
- agent直接学习策略,一般通过两种方式来在无模型的前提下学习策略
- 学习Q函数,即学习处于状态s下采取动作a得到的奖励
- 直接学习策略$\pi$,即学习状态到动作的映射
被动强化学习
- 策略固定,学习价值函数
- 策略固定,比如说贪心的取价值最大的动作,这时候只需要将Q函数学好,策略固定的情况下具体的最优动作也就出来了。
- 类似于策略评估(给定策略,计算执行策略后某一时间步每个状态的价值),但agent不知道采取动作后到各个状态的转移概率,也不知道即时奖励
直接价值估计
- 一个状态的价值定义为从该状态出发的期望总奖励(reward-to-go)
- 每次trial都会在其经过的状态上留下一个价值的数值样本(多次经过一个状态就提供多个样本)
- 这样就收集了样本,可以使用监督学习学到状态到价值的映射
- 但是该方法忽略了一个重要约束:状态价值应满足固定策略的bellman方程,即状态的价值和后继状态的奖励和期望价值相关,而不是只取决于自己
- 这种忽略将导致搜索空间变大,收敛缓慢
自适应动态规划(ADP)
- agent学习状态之间转移模型,并用dp解决MDP
- 在环境确定/可观测的情况下,不断的trial,得到数据,训练一个监督模型,输入当前状态和动作,输出后续状态概率,即转移模型
- 得到转移模型后,之后按照序列决策的方法,通过修正策略迭代求解MDP
- 可以看到ADP是需要agent先不断的trial,在环境中得到一系列包含奖励信号的历史数据,然后用这些数据学习到环境的转移模型,将其转化为环境已知的序列决策问题。
- 自适应动态规划可以看成是策略迭代在被动强化学习设置下的扩展
时序差分学习
在被动强化学习的setting下,即给定策略$\pi$,假如在状态s下采取动作$\pi(s)$转移到了状态$s^{‘}$,则通过时序差分方程更新价值函数:
其中$\alpha$是学习率。对比bellman,时序差分是在观测到在状态s下采取动作a到达了状态s’,就根据这个相继状态之间价值的差分更新价值:
- 差分项是关于误差的信息,更新是为了减少这个误差
公式变化后可以看出来是当前价值和奖励+未来折扣价值之间做插值:
- 与自适应动态规划的联系与区别:
- 都是根据未来调整当前价值,自适应的未来是在所有可能后继状态上加权求和,而时间差分的未来是观测到的后继
- 自适应尽可能进行多的调整,以保证价值估计和转移模型的一致性;差分对观测到的转移只做单次调整
- TD可以看成一种近似ADP
- 可以用转移模型生成多个pseudo experience,而不是仅仅只看真实发生的一次转移,这样TD的价值估计会接近ADP
- prioritized sweeping,对哪些高概率 后继状态刚刚经过大调整的状态进行更新
- TD作为近似ADP的一个优点是,训练刚开始时,转移模型往往学不正确,因此像ADP一样学习一个精确的价值函数来匹配这个转移模型意义不大。
主动强化学习
- 需要学习策略
- 需要学习一个完整的转移模型,需要考虑所有的动作,因为策略不固定(未知)
- 需要考虑,得到最优策略后,简单的执行这个策略就是正确的吗?
引入explore
- 自适应动态规划是greedy的,需要引入exploration
- 一个宏观的设计,是引入探索函数f(u,n),选择价值u较高的即贪心,选择尝试次数n少的即探索
TD Q-learning
- 一种主动强化学习下的时序差分方法
- 无需一个学习转移概率的模型,无模型的方法
通过学习动作-价值函数来避免对转移模型本身的需求
- 不需要转移模型P(s’|s,a)
- 注意因为没有给定策略,这里需要对所有可能动作取max
- 奖励稀疏时难以学习
Sarsa
即state,action,reward,state,action,sarsa的缩写代表了更新的五元组
相比TD Q-learning,不是对所有可能动作取max,而是先执行动作,再根据这个动作更新
如果agent是贪心的,总是执行q-value最大的动作,则sarse和q-learning等价;如果不是贪心,sarsa会惩罚探索时遇到的负面奖励动作
on/off policy
- sarsa是on-policy:“假设我坚持我自己的策略,那么这个动作在该状态下的价值是多少?”
- q-learning是off-policy:“假设我停止使用我正在使用的任何策略,并依据估计选择最佳动作的策略开始行动,那么这个动作在改状态下的价值是多少?”
强化学习中的泛化
- 价值函数和Q函数都用表格的形式记录,状态空间巨大
- 要是能参数化,需要学习的参数值可以减少很多
- 对于被动强化学习,需要根据trials使用监督学习价值函数,这里可以用函数或者NN来参数化。
- 对于时序差分学习,可以将差分项参数化,通过梯度下降学习
- 参数化来近似学习价值或者q函数存在几个问题
- 难以收敛
- 灾难性遗忘:可以通过experience replay,保存轨迹进行回放,确保agent不再访问的那部分状态空间上的价值函数仍然准确
- 奖励函数设计,如何解决稀疏奖励?
- 问题:credit assignment,最后的正面或者负面奖励应该归因到哪次动作上
- 可以通过修改奖励函数(reward shaping)来提供一些中间奖励,势函数就是一个例子,势反映了我们所希望的部分状态(某个子目标的实现、离最终希望的终止状态的某种可度量的距离)
- 另一种方案是分层强化学习,TBD
策略搜索
- 只要策略的表现有所改进,就继续调整策略
- 策略是一个状态到动作的映射函数
- 将策略参数化表达,尽管可以通过优化q函数得到,但并不一定得到最优的q函数或者价值估计,因为策略搜索只在乎策略是否最优
- 直接学习Q值,然后argmax Q值得到策略会存在离散不可导问题,这时将Q值作为logits,用softmax表示动作概率,用类似gumbel-softmax使得策略连续可导
- 假如执行策略所得到的期望奖励可以写成关于参数的表达式,则可以使用策略梯度直接优化;否则可以通过执行策略观测累计的奖励来计算表达式,通过经验梯度优化
考虑最简单的只有一次动作的情况,策略梯度可以写成下式,即对各个动作的奖励按其策略概率加权求和,并对策略参数求导。
将这个求和用策略所定义的概率分布生成的样本来近似,并且扩展到时序状态,就得到了REINFORCE算法,这里用N次trial近似策略概率加权求和,并且将单步奖励扩展到价值函数,状态也扩展到整个环境的状态集合:
MARL (Multi-Agent Rl)
- 先挖坑