机器学习(李宏毅)——RL(强化学习)

一、前言

本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!!

二、大纲

  1. What is RL?
  2. Three steps in ML
  3. Policy Gradient
  4. Actor-Critic
  5. Reward Shaping

三、What is RL?

引例
RL(Reinforcement Learning),也就是强化学习或者称为增强式学习,学习之前先看一个例子:
在这里插入图片描述
说明上图例子:
5. supervised learning
我们都知道supervised learning(监督学习)就是输入的数据有与之对应的标签,举例而言在图像分类领域,输入一张猫咪图片,人类会有对应label是cat,然后收集一堆这样的数据,train下去就结束了。
6. reinforcement learning
那如果把环境互动这件事情纳入进来,例如是下围棋,你下一步棋子,轮到对方怎么下这就很难讲了。
有人说,那穷举呗,这就更恐怖了,围棋棋盘是19x19的,总共有361个交叉点。每个点可以有黑子、白子或者空着。所以,如果只考虑每个点的状态,可能的局面总数应该是3的361次方。不过,这个数字超级大,远远超过已知宇宙中的原子数了。
那能不能让机器看过很多的围棋高手对决的棋盘,用supervised learning的方式train下去呢?可以这么做,遇到普通对手也许能赢(比较常规吗),但可能是赢不过高手的,因为棋盘布局变化可以很大呀,要是监督学习没看过的棋盘风格,可能就傻眼了进行不下去了。
于是,就有了reinforcement learning(强化学习)的提出。

reinforcement learning(强化学习)?
那啥是reinforcement learning(强化学习),三个关键点:

  1. 环境互动。环境存在变化,机器与环境互动。
  2. 不定性。解释为人类无法计算正确答案或是无标准答案或者答案过去发散。
  3. 奖励机制。

一言以蔽之:强化学习是一种通过环境互动在不确定环境中基于奖励机制学习最优策略的机器学习方法。
在这里插入图片描述
说明:

  • step1:两个主体,Actor和Environment(机器和环境)
  • step2:Actor看到外界Environment的变化做出动作Action
  • step3:做出Action后,会收到来自外界Environment的Reward
  • step4:Actor做出动作也会改变环境,回到step2进行循环往复下去,直到满足结束条件。

历史发展

  • 2013: Deep Q-Network (DQN) 由 DeepMind 提出,结合深度学习(Deep Learning)和 Q-learning,在 Atari 游戏上实现突破。
  • 2016: AlphaGo 击败围棋世界冠军,采用 蒙特卡洛树搜索(MCTS)+ 深度强化学习,标志性突破。
  • 2017: A3C(Asynchronous Advantage Actor-Critic) 提出,提高训练效率。
  • 2018: AlphaZero 和 OpenAI Five 进一步推动强化学习在围棋、Dota2 等复杂环境中的应用。

实际例子

  1. 太空侵入者(space invader)
    在这里插入图片描述

【游戏说明】
依照上图自底向上介绍:
1、绿色的是太空船(操作是开火、左移、右移);
2、shield是防护罩,作用是防护太空船,但是被外星人击中会损坏一点儿;
3、黄色中间部分是外星人,会随机发射子弹;
4、顶部是得分score(reward)。
链接:https://freeinvaders.org/#google_vignette

【流程演示】
在这里插入图片描述
说明:第一次往右移动,没有得分。第二次开火得到5分。

2 阿法狗围棋(经典)
同样是观察对手棋盘的变化,但是reward不是实时的,而是等到对局结束之后才有,后续会补充Sparse Reward(稀疏奖励)。

【流程演示】
在这里插入图片描述

四、Three steps in ML

那怎么来做RL呢?
和机器学习一样,三步走策略:
在这里插入图片描述

  • Step1:function with unknown(找一个函数方法)
  • Step2:define loss from training data(定义损失函数)
  • Step3:optimization(最佳化)

具体细说:

Step1:function with unknown(找一个函数方法)
在这里插入图片描述
这个模型的定义可以是CNN或者是其他的神经网络,输入是环境信息,输出是动作(在这个游戏中就是left、right、fire)。

Step2:define loss from training data(定义损失函数)
对于该游戏而言,就是要当游戏结束时候得到的分数最高,而这个最终得分是由每次的动作共同决定的。

假设每次的执行动作的得分是reward(记为r),时间记为t,那最终的得分就应该是 R = ∑ t = 1 T r t R = \sum_{t=1}^T r_t R=t=1Trt
我们期望R越大越好,其实也就是 -R越小越好。

注:一局游戏称为一个episode,一局游戏里面的最后分数称为return。

Step3:optimization(最佳化)
损失函数有了,那不就是Gradient decent下去求不就好了?
非也非也,为啥呢?
让我们来看看输入是什么,是环境(Environment)和做出的动作(Action)呀,这两玩意儿可不是神经网络,就像黑盒子一样,里面有随机性,是不能直接用梯度下降算法的,这也是RL的难点所在。

所以这里有种叫做Policy Gradient的方法出现了!

五、Policy Gradient

5.1 概念

那何为Policy Gradient?
答:policy的字面意思就是策略,Policy Gradient翻译过来就是梯度策略,原来就是要找一个策略来训练RL中的Actor。

啥策略呢?
答:引导策略,也是一种奖惩机制。

形象例子(chatgpt给出来的):
可以用下面这个具体的例子来说明 Policy Gradient 在屌丝追求女生中的应用:

假设屌丝小明有三种搭讪策略(即行动选择):

1、赞美——直接夸女生漂亮。
2、讲笑话——尝试用幽默打破僵局。
3、请喝咖啡——邀请女生共度轻松时光。

初始状态:

  • 小明一开始没有特别偏好,每种方法的选择概率都是相等的(比如各 33%)。

每次尝试(Episode):

1、小明在某个场合遇到了女生,他随机选择了一种方法。
2、根据女生的反应,他会得到一个“奖励”:

  • 如果女生反应热烈(比如露出笑容、愿意多聊),奖励为 +1。
  • 如果女生反应平淡,奖励为 0。
  • 如果女生反应冷淡或不悦,奖励为 -1。

实际情况:

  • 第一次尝试:
    小明选择了赞美。
    女生听了之后觉得有点受宠若惊,给了他 +1 奖励。

  • 第二次尝试:
    小明又遇到不同的女生,这次选择了讲笑话。
    女生觉得笑话有点冷场,结果奖励为 -1。

  • 第三次尝试:
    小明选择了请喝咖啡。
    女生觉得这个提议不错,奖励为 +1。

策略梯度更新:
根据这几次尝试,小明会用 Policy Gradient 算法调整自己的“搭讪策略”参数:

  • 对于得到正奖励的行为(赞美、请喝咖啡),他会增加它们在未来被选择的概率。
  • 对于得到负奖励的行为(讲笑话),他会减少选择的概率。

经过不断试错和调整后,小明的策略会逐渐偏向于那些能带来正面反馈的方法,从而整体提高他追求女生的成功率。

这就是policy gradient的精髓了。

5.2 原理

回归到space invader游戏中,设环境变量为s,模型执行的动作为a,â为训练数据的真值,倾向程度为A(正数表示奖励,负数表示惩罚)。
在这里插入图片描述
这里还是用Cross-entropy(交叉熵)来衡量模型输出的action和训练数据实际执行行动的â概率分布接近情况,不想做的行动action给个负号(也就是惩罚),求和起来进行Loss,可进行gradient decent求解。
在这里插入图片描述
那训练数据哪里来呢?
就是直接玩很多局的游戏,把每局游戏的各个动作、环境、得分记录下来。

但是有以下疑问:
1、比如向左、向右这种动作,reward是零,但是就一定是不重要的吗?
2、比较早的动作和比较晚的动作对游戏终局的影响是不一样的吧?
3、每次动作得分reward的好坏是相对的吧,标准是人定的才对吧?

回答:是的,有些动作reward是零但并不代表其不重要,另外比较早的动作往往是比比较晚的动作来得重要(和人生一样,等到要结束人生时才想起要好好学习李宏毅老师的课那也没啥意义了)。每次动作得分reward的好坏确实是相对,标准可以自定义。下图直观回答了以上3个问题:
在这里插入图片描述
用伪代码表示如下:
在这里插入图片描述
重要点
有个很重要的点,就是一局游戏的训练数据只能用来更新一次模型参数,这样也是合理的,因为这些训练数据的产生是通过机器与环境交互的,机器的参数都变了,上一世代机器产生的数据当然就不适用了呢。
在这里插入图片描述
On-policy v.s. Off-policy

  • On-policy:在线策略就是上述很慢的那种,一批数据更新一次参数,更新完的模型再收集一次数据,再更新一下。用两个字来形容就是等待,通俗解释就是行为和学习过程是一体的。
  • Off-policy:离线策略就比较快,形象地说就是懂得从别人的经验中找差距,通过回顾历史数据或者从其他策略学习,能利用更多样本,适合需要更高效率或者快速学习的任务。

六、Actor-Critic

Critic 翻译为裁判之意,Actor-Critic也就是模型裁判

那什么是Actor-Critic呢?
通俗来讲就是在玩游戏过程中,执行某个action之前,对游戏终局得分的预判。精髓就是“未卜先知”,当然我们游戏玩完之后,discounted cumulated reward肯定就知道了,所以这里就是预判的模型。

方法
设评估方法为 Vθ(s),其中输入s为当前环境观察,θ则是当前Actor的参数,然后模型V要给出预判的得分,而我们期望与最后的discounted cumulated reward越接近越好。
在这里插入图片描述

那怎么训练出Actor-Critic呢?
有两种方法:

  • Monte-Carlo (MC) based approach
  • Temporal-difference (TD) approach

1、Monte-Carlo (MC) based approach
基本思想:先拿需要评估的actor和环境互动很多轮,我们就有了看到环境s获得的discounted cumulated reward。再训练Vθ(s)使用其输出和discounted cumulated reward越接近越好。
缺点:得玩完整场游戏才有训练资料,万一游戏时间很长,那就比较耗费时间。于是有了Temporal-difference (TD) approach。
在这里插入图片描述

2、Temporal-difference (TD) approach
万一游戏很长,相当耗费时间,还得玩完了才有训练资料,那能不能看局部就行呢?
TD的基本思想就是只看相邻的情况。

假设时间 t 时刻,观察为 s t s_t st,采取的行动为 a t a_t at,得分为 r t r_t rt,γ是衰减系数,写成Vθ( s t s_t st)如下:

Vθ( s t s_t st) = r t r_t rt + γ r t + 1 r_{t+1} rt+1 + + γ² r t + 2 r_{t+2} rt+2 + …

那么时间 t+1 时刻,观察为 s t + 1 s_{t+1} st+1,采取的行动为 a t + 1 a_{t+1} at+1,累计的得分为 r t + 1 r_{t+1} rt+1,γ是衰减系数,写成Vθ( s t + 1 s_{t+1} st+1)如下:

Vθ( s t + 1 s_{t+1} st+1) = r t + 1 r_{t+1} rt+1 + γ r t + 2 r_{t+2} rt+2 + + γ² r t + 3 r_{t+3} rt+3 + …

联立起来发现两者之间的关系:
在这里插入图片描述
那critic怎么用在训练actor上面呢?
使用Advantage Actor-Critic:
在这里插入图片描述

七、Reward Shaping

如果多数的reward都是零的时候怎么办呢?就比如下围棋。
应该要想办法提供额外的reward以供机器学习,并且加上好奇心也是有用的,这就是reward shaping。
像绝地求生、王者荣耀的游戏NPC会用得到。
有用到再深入研究吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23118.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Go】Go wire 依赖注入

1. wire 简介 wire 是一个 Golang 的依赖注入框架(类比 Spring 框架提供的依赖注入功能) ⭐ 官方文档:https://github.com/google/wire 这里关乎到编程世界当中一条好用的设计原则:A用到了B,那么B一定是通过依赖注入的…

《动手学机器人学》笔记

目录 0.介绍1.概述|空间位置、姿态的描述(33)|《动手学机器人学》2.(2)-Robotics Toolbox①(V10.4)3.齐次坐标与变换矩阵4.一般形式的旋转变换矩阵5.(轴角法)…

【蓝桥杯单片机】第十三届省赛第二场

一、真题 二、模块构建 1.编写初始化函数(init.c) void Cls_Peripheral(void); 关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器 2.编写LED函数(led.c) void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器 关闭锁存…

大语言模型基础

简介 AI大模型是“人工智能预训练大模型”的简称,包含了“预训练”和“大模型”两层含义,二者结合产生了一种新的人工智能模式,即模型在大规模数据集上完成了预训练后无需微调,或仅需要少量数据的微调,就能直接支撑各…

java Web

1.JavaWeb开发 前面的学习javase开发,而javaweb开发需要服务器和网页。 具备: java mysql jdbc htmlcssjs。 web服务器: tomcat服务器. 部署项目。 https://tomcat.apache.org/download-80.cgi 解压软件压缩包即可 不要放在中文目录和特殊符号的目录下 启动tomcat服…

SOME/IP--协议英文原文讲解12(完结)

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.3 Compa…

光明谷推出AT指令版本的蓝牙音箱SOC 开启便捷智能音频开发新体验

前言 在蓝牙音箱市场竞争日益激烈的当下,开发一款性能卓越且易于上手的蓝牙音箱,成为众多厂商追求的目标。而光明谷科技有限公司推出的 AT 指令版本的蓝牙音箱 SOC,无疑为行业带来了全新的解决方案,以其诸多独特卖点,迅…

STM32——HAL库开发笔记22(定时器3—呼吸灯实验)(参考来源:b站铁头山羊)

本文利用前几节所学知识来实现一个呼吸灯实验:两颗led灯交替呼吸。 一、STM32CubeMX配置 step1:配置调试接口 step2:配置定时器 定时器1位于APB2总线上,如上图所示。 step3:配置时基单元 按照下图配置 时钟来源配置…

医疗AI领域中GPU集群训练的关键技术与实践经验探究(下)

五、医疗 AI 中 GPU 集群架构设计 5.1 混合架构设计 5.1.1 参数服务器与 AllReduce 融合 在医疗 AI 的 GPU 集群训练中,混合架构设计将参数服务器(Parameter Server)与 AllReduce 相结合,能够充分发挥两者的优势,提升训练效率和模型性能。这种融合架构的设计核心在于根…

修改Ubuntu系统用户密码(root密码)的方法

本文介绍在Linux系统的Ubuntu电脑中,修改账户用户密码(同时也修改了root用户密码)的方法。 首先,如果此时处于登录页面(也就是意识到自己忘记密码的那个页面),就先点击右上角的关闭按钮&#xf…

【清华大学】DeepSeek从入门到精通系列教程 第五版:DeepSeek与AI幻觉 pdf文档下载

【清华大学】DeepSeek使用教程系列之DeepSeek与AI幻觉 pdf文件完整版下载 https://pan.baidu.com/s/17evZMjiGNR0hun2jVdAkbg?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/160d03fa907f DeepSeek与AI幻觉内容摘要 一、‌定义与类型‌ AI幻觉指模型生成与事实不符…

记录此刻:历时两月,初步实现基于FPGA的NVMe SSD固态硬盘存储控制器设计!

背景 为满足实验室横向项目需求,在2024年12月中下旬导师提出基于FPGA的NVMe SSD控制器研发项目。项目核心目标为:通过PCIe 3.0 x4接口实现单盘3000MB/s的持续读取速率。 实现过程 调研 花了半个月的时间查阅了一些使用FPGA实现NVME SSD控制器的论文、…

【Linux】进程

1. 多任务(并发) 让系统具备同时处理多个任务的能力。 2. 如何实现多任务 1)进程 2)线程 3. 进程 正在执行的程序,需要消耗内存和cpu, 一个动态执行的过程。 进程生存周期: …

3D模型在线转换工具:轻松实现3DM转OBJ

3D模型在线转换是一款功能强大的在线工具,支持多种3D模型格式的在线预览和互转。无论是工业设计、建筑设计,还是数字艺术领域,这款工具都能满足您的需求。 3DM与OBJ格式简介 3DM格式:3DM是一种广泛应用于三维建模的文件格式&…

Docker安装Open WebUI教程

Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台,旨在完全离线运行。它支持各种LLM运行器,如 Ollama 和 OpenAI 兼容的 API,并内置了 RAG 推理引擎,使其成为强大的 AI 部署解决方案。 官网文档地址:https://docs.openwebui.com/ 一、拉取镜像 下载的镜像包比…

VSCode集成deepseek使用介绍(Visual Studio Code)

VSCode集成deepseek使用介绍(Visual Studio Code) 1. 简介 随着AI辅助编程工具的快速发展,VSCode作为一款轻量级、高度可扩展的代码编辑器,已成为开发者首选的工具之一。DeepSeek作为AI模型,结合Roo Code插件&#x…

京东广告基于 Apache Doris 的冷热数据分层实践

一、背景介绍 京东广告围绕Apache Doris建设广告数据存储服务,为广告主提供实时广告效果报表和多维数据分析服务。历经多年发展,积累了海量的广告数据,目前系统总数据容量接近1PB,数据行数达到18万亿行,日查询请求量8…

五、Three.js顶点UV坐标、纹理贴图

一部分来自1. 创建纹理贴图 | Three.js中文网 ,一部分是自己的总结。 一、创建纹理贴图 注意:把一张图片贴在模型上就是纹理贴图 1、纹理加载器TextureLoader 注意:将图片加载到加载器中 通过纹理贴图加载器TextureLoader的load()方法加…

学术论文项目网站搭建教程【Github】

本教程使用的是linux系统,ubuntu20.04版本进行学术项目网站搭建 一:创建github的个人组织 我个人习惯使用自己的github组织【Your organizations】来进行学术项目网站的创建: New一个organization,点击Free中的Create a free o…

第4章 信息系统架构(三)

4.3 应用架构 应用架构的主要内容是规划出目标应用分层分域架构,根据业务架构规划目标应用域、应用组和目标应用组件,形成目标应用架构逻辑视图和系统视图。从功能视角出发,阐述应用组件各自及应用架构整体上,如何实现组织的高阶…