如何建设cf提卡网站,常州建网站需要多少钱,网站有订单了有声音提醒怎么做,0基础学做网站教程目录 强化学习什么是强化学习#xff1f;马尔可夫决策过程#xff08;MDP#xff09;Q-learning策略梯度SOTA深度强化学习 还剩一点小尾巴#xff0c;还是把它写完吧。#xff08;距离我写下前面那行字又过了好几个月了【咸鱼本鱼】#xff09;#xff08;汗颜#xff… 目录 强化学习什么是强化学习马尔可夫决策过程MDPQ-learning策略梯度SOTA深度强化学习 还剩一点小尾巴还是把它写完吧。距离我写下前面那行字又过了好几个月了【咸鱼本鱼】汗颜好久之前写了一半就忘了后面的就直接看图吧
cs231n的强化学习公式较多我是看了李宏毅的强化学习才理解的。
强化学习
什么是强化学习
总览强化学习里有三个重要的概念环境、agent和奖励。
它们的关系如下
环境给予agent一个状态St在该状态下agent采取行动At对于行动At环境给出的奖励是Rt并且环境给予agent下一状态St1循环往复。
强化学习的目标是学习如何行动能使奖励达到最大我们能控制的只有行动奖励和状态都是环境给予的。 举个具体的例子 Atari游戏的状态是当前游戏界面 agent可采取的行动有上、下、左、右 奖励采取一步行动后获得或减少的分数 目标以最高分完成游戏。
马尔可夫决策过程MDP
上面都是用文字描述的现在用数学语言来描述一下强化学习S。
事实上一个马尔可夫决策过程就是强化学习问题的数学表达。马尔可夫决策过程满足马尔可夫性。 马尔可夫性当前状态完全刻画了世界状态也就是说下一状态完全依赖于当前状态。
马尔可夫决策过程由一组对象定义S,A,R,P,γ
S是所有可能状态的集合A是所有可能行动的集合R是奖励的概率分布由状态行动给定P是跳到下一状态的概率由当前状态行动给定γ是奖励的衰退因子 用马尔可夫决策过程来描述强化学习
在t0时刻环境采样初始状态S0从t0到学习结束 agent选择行动At环境依概率给出奖励Rt概率由R(.|St,At)决定环境依概率给出下一状态St1概率由P(.|St,At)决定agent接收奖励Rt和状态St1
我们所采取的行动组合a0,a1,a2……称为策略π 而强化学习的目标是找到一个策略π*使得奖励之和最大。 最直接的解决办法是穷举所有的行动组合计算每个组合的奖励把奖励最大的选出来。但这其实有个问题每次行动后奖励和下一状态都是环境给予的有一定的随机性。
也就是说即使每次执行的都是同一个行动组合π最后的结果也可能相差很大所以首先要解决奖励之和的随机性这样我们才能比较哪个组合更好。而解决随机性最常用的方法是求期望。
所以现在问题变成了找到一个π*使得E(奖励之和)最大。
Q-learning
在解决如何找到最优策略π*之前为了方便后面描述算法先定义两个有用的函数
值函数:在状态为s的情况下遵从策略π后得到的E(奖励之和) 假设初始状态有3种S0、S1和S2那么策略π的E(奖励之和)Vπ(S0)Vπ(S1)Vπ(S2)
Q值函数:在状态为s、行动为a的情况下遵从策略π后得到的E(奖励之和) 假设状态为s时可采取的行动有3种A0、A1和A2那么Vπ(S0)Qπ(S0,A0)Qπ(S0,A1)Qπ(S0,A2)
给定S0和A0的情况下最优的策略π*能使Q值函数达到最大记为Q*
而Q*满足bellman等式这个等式想表达的东西很简单就是当前最优的Q*当前奖励r下一状态下最优的Q*。 乍一看这个式子没有任何用既然我不知道现在的Q*当然也不会知道下一状态的Q*了。除非一直迭代到最后一个状态但是前面提到了奖励和下一状态都是随机的所以直接迭代会非常复杂这条路行不通。
现在的问题是Q*太复杂了没办法直接表达那能拿什么东西来替代吗 这就轮到神经网络出场了神经网络专门解决表达式过于复杂的问题。
假设使用神经网络QL来表示函数Q*Q*有两个参数——状态s和行动a那么QL也会有两个输入——s和a如果行动是离散的QL也可以设计为输入s输出n个标量每个标量代表某一个行动下的E(奖励之和)。 QL会输出一个标量代表当前状态s和行动a的E(奖励之和)不同的输入会得到不同的E(奖励之和)
那么只要训练神经网络QL使得QL(Si1,Ai1)-QL(Si,Ai)尽可能地接近Ri就可以了这不就是一个简单的回归模型吗
在训练好QL后由于行动是有限的所以可通过下面的方式找到π*:
在Si的状态下使用遍历行动是离散的或梯度上升行动是连续的得到Ai使得QL(S0,Ai)最大环境根据Si和Ai给出Si1重复1、2步直到结束π*A0A1A2…… 上面提到的QL网络还有三个问题
QL的训练方式是使QL(Si1,Ai1)-QL(Si,Ai)尽量接近Ri每次更新时QL(Si,Ai)和QL(Si1,Ai1)的值会同时改变造成训练的不稳定。 所以在实际训练中会有两个神经网络QL和QLtargetQLtarget-QL尽量接近Ri。 每次反向传播时只更新QL在经过N次迭代后再把QL的参数赋值给QLtarget 由于QL网络的训练方式是与环境互动一次更新QL根据更新后的QL获得下一行动a使用a和环境互动…… 下一个行动a与当前行动高度相关这会导致训练效果不好就像进入一家新餐厅时随机点了一道菜味道还可以从此以后就再也不尝试其他菜了。 解决办法是准备一个缓冲区每次互动后把数据存入缓冲区再从缓冲区随机选取数据进行训练。 这种办法还有一个好处可以多次使用训练数据。一般来说在强化学习中与环境互动才是最费时间的。 对于一个复杂的问题比如让机器人抓住某个物体Q函数很难通过随机尝试学到一个具体的行动来解决这个问题。那么可不可以换一个方向不需要机器人学习具体的行动而是学习一个“握住”的策略
策略梯度
策略梯度网络PG的输入是状态s输出是下一步采用某个行动的概率p(a|s)而上面的QL网络的输出是采用某个动作后的E(奖励之和)。
在网络PG固定的情况下可得到多个策略πθ每个策略有一定的概率 也可以计算出πθ的奖励之和 如果穷举所有的行为轨迹πθ那么可以计算出E(奖励之和)记为J(θ) J(θ)是由θ决定的而且我们的目标是最大化J(θ)那么可以考虑对参数θ进行梯度上升目标函数是J(θ) 课程里用了好几页PPT和大段大段的公式来讨论J(θ)能不能求导要怎么进行梯度上升由于我这里直接把函数看做神经网络GP了就不展示相应的细节了神经网络当然可以求导进行梯度上升也很容易神经网络牛逼而且删掉公式之后脉络越发清晰起来了。
下面是一些训练技巧
增加baseline 如果奖励永远都是正的那么任何行动都会导致J(θ)增加从而增加该行动的概率。 而所有概率之和为1其他行动只是不幸没有被采样到就得降低概率这是不符合要求的。 所以希望奖励有正有负这可以通过减去一个baseline来达成历史奖励平均值是一个常用的baseline。
SOTA深度强化学习 cs231n系列终于写完了其实后面还有两课一课是讲硬件加速和模型轻量化另一课是讲“为什么稍微改变一张熊猫的照片就可以让计算机把它认为是长臂猿人眼看不出任何差别”但对这两个方面不是很熟悉轻量化还好后一课真的一知半解的就不乱写了。
不写的最主要的原因其实是我进了GAN的深渊……