当前位置: 首页 > article >正文

【深度之眼cs231n第七期】笔记(三十一)

目录

  • 强化学习
    • 什么是强化学习?
    • 马尔可夫决策过程(MDP)
    • Q-learning
    • 策略梯度
    • SOTA深度强化学习

还剩一点小尾巴,还是把它写完吧。(距离我写下前面那行字又过了好几个月了【咸鱼本鱼】)(汗颜,好久之前写了一半就忘了,后面的就直接看图吧)

cs231n的强化学习公式较多,我是看了李宏毅的强化学习才理解的。

强化学习

什么是强化学习?

总览:强化学习里有三个重要的概念:环境agent奖励

它们的关系如下:

  • 环境给予agent一个状态St;
  • 在该状态下,agent采取行动At;
  • 对于行动At,环境给出的奖励是Rt;
  • 并且环境给予agent下一状态St+1,循环往复。

强化学习的目标是:学习如何行动能使奖励达到最大,我们能控制的只有行动,奖励和状态都是环境给予的。
在这里插入图片描述
举个具体的例子:
Atari游戏的状态是当前游戏界面;
agent可采取的行动有:上、下、左、右;
奖励:采取一步行动后,获得或减少的分数;
目标:以最高分完成游戏。
在这里插入图片描述

马尔可夫决策过程(MDP)

上面都是用文字描述的,现在用数学语言来描述一下强化学习S。

事实上,一个马尔可夫决策过程就是强化学习问题的数学表达。马尔可夫决策过程满足马尔可夫性。
马尔可夫性:当前状态完全刻画了世界状态,也就是说,下一状态完全依赖于当前状态。

马尔可夫决策过程由一组对象定义(S,A,R,P,γ)

  • S是所有可能状态的集合
  • A是所有可能行动的集合
  • R是奖励的概率分布,由(状态,行动)给定
  • P是跳到下一状态的概率,由(当前状态,行动)给定
  • γ是奖励的衰退因子

在这里插入图片描述
用马尔可夫决策过程来描述强化学习:

  • 在t=0时刻,环境采样初始状态S0
  • 从t=0到学习结束:
    • agent选择行动At
    • 环境依概率给出奖励Rt(概率由R(.|St,At)决定)
    • 环境依概率给出下一状态St+1(概率由P(.|St,At)决定)
    • agent接收奖励Rt和状态St+1

我们所采取的行动组合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(Si+1,Ai+1)-QL(Si,Ai)尽可能地接近Ri就可以了,这不就是一个简单的回归模型吗?

在训练好QL后,由于行动是有限的,所以可通过下面的方式找到π*:

  1. 在Si的状态下,使用遍历(行动是离散的)或梯度上升(行动是连续的)得到Ai,使得QL(S0,Ai)最大
  2. 环境根据Si和Ai给出Si+1
  3. 重复1、2步直到结束
  4. π*=A0A1A2……

在这里插入图片描述
上面提到的QL网络还有三个问题:

  1. QL的训练方式是使QL(Si+1,Ai+1)-QL(Si,Ai)尽量接近Ri,每次更新时QL(Si,Ai)和QL(Si+1,Ai+1)的值会同时改变,造成训练的不稳定。
    所以在实际训练中会有两个神经网络,QL和QLtarget,QLtarget-QL尽量接近Ri
    每次反向传播时只更新QL,在经过N次迭代后再把QL的参数赋值给QLtarget
    在这里插入图片描述
  2. 由于QL网络的训练方式是:与环境互动一次,更新QL,根据更新后的QL获得下一行动a,使用a和环境互动……
    下一个行动a与当前行动高度相关,这会导致训练效果不好,就像进入一家新餐厅时,随机点了一道菜,味道还可以,从此以后就再也不尝试其他菜了。
    解决办法是:准备一个缓冲区,每次互动后把数据存入缓冲区,再从缓冲区随机选取数据进行训练
    这种办法还有一个好处,可以多次使用训练数据。一般来说,在强化学习中,与环境互动才是最费时间的。
    在这里插入图片描述
  3. 对于一个复杂的问题,比如让机器人抓住某个物体,Q函数很难通过随机尝试学到一个具体的行动来解决这个问题。那么可不可以换一个方向,不需要机器人学习具体的行动,而是学习一个“握住”的策略?
    在这里插入图片描述

策略梯度

策略梯度网络PG的输入是状态s,输出是下一步采用某个行动的概率p(a|s)(而上面的QL网络的输出是采用某个动作后的E(奖励之和))。

在网络PG固定的情况下,可得到多个策略πθ每个策略有一定的概率
在这里插入图片描述
也可以计算出πθ奖励之和
在这里插入图片描述
如果穷举所有的行为轨迹πθ,那么可以计算出E(奖励之和),记为J(θ)
在这里插入图片描述
J(θ)是由θ决定的,而且我们的目标是最大化J(θ),那么可以考虑对参数θ进行梯度上升(目标函数是J(θ))
在这里插入图片描述
课程里用了好几页PPT和大段大段的公式来讨论J(θ)能不能求导,要怎么进行梯度上升,由于我这里直接把函数看做神经网络GP了,就不展示相应的细节了(神经网络当然可以求导,进行梯度上升也很容易,神经网络牛逼!而且删掉公式之后,脉络越发清晰起来了。)

下面是一些训练技巧:

  1. 增加baseline
    如果奖励永远都是正的,那么任何行动都会导致J(θ)增加,从而增加该行动的概率。
    而所有概率之和为1,其他行动只是不幸没有被采样到就得降低概率,这是不符合要求的。
    所以希望奖励有正有负,这可以通过减去一个baseline来达成,历史奖励平均值是一个常用的baseline。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

SOTA深度强化学习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
cs231n系列终于写完了,其实后面还有两课,一课是讲硬件加速和模型轻量化,另一课是讲“为什么稍微改变一张熊猫的照片就可以让计算机把它认为是长臂猿(人眼看不出任何差别)”,但对这两个方面不是很熟悉(轻量化还好,后一课真的一知半解的),就不乱写了。

不写的最主要的原因其实是:我进了GAN的深渊……


http://www.kler.cn/a/520215.html

相关文章:

  • HTML-新浪新闻-实现标题-样式1
  • Java 实现Excel转HTML、或HTML转Excel
  • 【2024年华为OD机试】 (A卷,100分)- 整理扑克牌(JavaScriptJava PythonC/C++)
  • Django 日志配置实战指南
  • (2)STM32 USB设备开发-USB虚拟串口
  • 华为数据之道-读书笔记
  • 初学stm32 --- FreeRTOS移植
  • vue3中src的目录分析
  • Dev-C++分辨率低-解决办法
  • 2024年AI发展的感知回顾
  • STM32 ADC
  • 基于OSAL的嵌入式裸机事件驱动框架——整体架构调度机制
  • Python NumPy(2):NumPy 数组属性、创建数据
  • JWT实现单点登录
  • Sklearn 中的逻辑回归
  • 基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API
  • vim如何设置自动缩进
  • RISC-V读书笔记3
  • Cursor 帮你写一个小程序
  • 关于安卓greendao打包时报错问题修复
  • 开放自己本机的mysql允许别人连接
  • coffee销售数据集分析:基于时间趋势分析的实操练习
  • 第04章 11 VTK中,Filter的多输入输出的示例说明
  • vue3 获取百度天气
  • Day32:字符串的复制
  • x5music3.0 admin_index.php 后台权限绕过漏洞复现(附脚本)