蘑菇书(EasyRL)学习笔记(1)

1、强化学习概述       

        强化学习(reinforcement learning,RL讨论的问题是智能体(agent)怎么在复杂、不确定的环 境(environment)里面去最大化它能获得的奖励。如下图所示,强化学习由两部分组成:智能体和环境

        智能体在每个状态中选择一个动作,环境根据这个动作给出下一个状态和相应的奖励。智能体的目标是学习一个策略,这个策略能够指导它在不同状态下选择动作,以获得尽可能多的奖励。

        下面,我将举一个很简单的例子,加深大家对强化学习概念的理解:训练一个小狗学会坐下。

  1. 环境:小狗所处的环境就是训练场所,可能是家里的客厅或者后院。

  2. 智能体:在这个例子中,智能体就是小狗。

  3. 状态:小狗的状态可以是“站立”或“坐下”。

  4. 动作:智能体(小狗)可以执行的动作是“坐下”或“不坐下”。

  5. 奖励:当小狗坐下时,主人会给予奖励,比如拍拍它、给它零食或者口头表扬。

  6. 目标:智能体(小狗)的目标是学会在听到“坐下”命令时执行“坐下”动作,以获得奖励。

        在这个过程中,小狗通过不断尝试和错误来学习。每当它在听到命令后坐下,就会得到奖励,这强化了它的学习过程。如果它站立不动,就没有奖励,它就会慢慢学会在听到命令时坐下以获得奖励。这就是一个简单的强化学习的例子。

1.1、强化学习与监督学习

        如下图,在图片分类的监督学习中,首先有两个假设:一是输入数据独立同分布,数据之间没有关联;二是正确标签已知,模型可以根据标签进行修正。训练过程中,模型根据输入数据和标签调整预测,当预测错误时,通过损失函数和反向传播进行优化。

通常假设样本空间中全体样本服从一个未知分布,每个样本都是独立地从这个分布上采样获得的, 即独立同分布(independent and identically distributed,i.i.d.)当我们抛一枚公平的硬币多次时,每次抛掷都是独立的,不受之前结果的影响,并且每次抛掷得到正面或反面的概率都是相同的,这就是一个独立同分布(i.i.d.)的简单例子。

        相比之下,强化学习中的这两个假设并不成立。以雅达利游戏 Breakout 为例,如下图,发现智能体得到的观测(observation)不是独立同分布的,上一帧与下一帧间其实有非常强的连续性。 我们得到的数据是相关的时间序列数据,不满足独立同分布。另外,我们并没有立刻获得反馈,游戏没有 告诉我们哪个动作是正确动作。比如我们现在把木板往右移,这只会使得球往上或者往左去一点儿,我们 并不会得到立刻的反馈。因此,强化学习之所以这么困难,是因为智能体不能得到即时的反馈,然而我们依然希望智能体在这个环境里面学习。

        如下图所示,在强化学习中,训练数据是智能体与环境交互的过程。在打砖块游戏中,智能体从第 1 步开始采取动作(如移动木板接住球),接着在第 2 步再作出新的动作,整个过程形成一个序列。这个序列输入到网络后,网络根据当前状态输出动作(例如往右移或往左移)。

        与监督学习不同,强化学习没有立即的标签来判断当前动作是否正确,必须等到游戏结束时(可能10秒后)才能知道结果。当前动作是否对游戏胜利有帮助是不明确的,这带来了延迟奖励(delayed reward)的问题。这意味着强化学习中的反馈是延迟的,导致训练网络更加困难。智能体需要通过长时间的训练,逐渐学会哪些动作能够带来长期的成功,而不是立即的回报。

强化学习与监督学习的主要区别和特征总结如下:

  1. 样本类型

    • 监督学习:样本是独立的,数据满足独立同分布(IID),样本之间没有关联。
    • 强化学习:样本是序列数据,具有时间关联,上一状态和下一状态有密切关系,数据不是独立同分布的。
  2. 反馈机制

    • 监督学习:学习器知道每一步的正确标签,能够根据标签直接调整预测,训练过程有明确的反馈。
    • 强化学习:学习器不知道每一步的正确动作,需要通过试错(trial-and-error)不断探索发现最优动作。反馈信号(奖励)通常是延迟的,环境不会立即提供正确与否的反馈。
  3. 探索与利用

    • 强化学习中的核心问题是“探索利用”的权衡:
      • 探索(exploration):尝试新的动作,虽然可能带来更大回报,也可能失败。
      • 利用(exploitation):执行已知可以获得较高奖励的动作,通过重复执行已验证的策略来获得稳定的回报。
    • 这一问题在监督学习中没有体现,因为监督学习明确知道每一步的正确标签。
  4. 反馈延迟

    • 强化学习:奖励信号是延迟的,智能体可能在执行一系列动作后很久才知道某个动作是否正确。这使得强化学习更具挑战性,因为无法立刻获得反馈。
    • 监督学习:即时反馈,当预测出错时,立即通过标签修正。
  5. 时间与数据关联

    • 强化学习:时间非常重要,智能体的动作影响后续观测数据,形成关联性数据。这种序列数据使得训练不稳定,因为当前动作的效果可能影响未来的状态和奖励。
    • 监督学习:时间不重要,所有数据都是独立的,可以无视它们的顺序进行训练。
  6. 动作与环境的影响

    • 强化学习:智能体的动作直接影响其所获得的观测数据。如果智能体的策略不稳定或行为不合理,数据质量可能变差,影响训练效果。
    • 监督学习:输入数据与模型的预测过程没有直接的互动,数据是固定的,模型不会改变数据的生成过程。

总结: 强化学习的关键特征在于试错探索、延迟反馈、时间关联的样本,以及智能体通过与环境的交互不断优化自身行为。这与监督学习依赖独立同分布数据、标签驱动的明确反馈机制截然不同,也使得强化学习在实践中更加复杂和具有挑战性。

1.2、强化学习的例子

        为强化学习的一个经典例子,即雅达利的 Pong 游戏。如下图,Pong 游戏是一个类似乒乓球的游戏,左边和右边的选手通过挡板把球来回击打。右边的选手把球打到左边,左边的选手要接住球并把球打回右边。强化学习的智能体就是这个游戏的一个玩家。

        如果强化学习通过学习一个 策略网络来进行分类,那么策略网络会输入当前帧的图片,输出所有决策的可能性,比如往上移动的概率,如下图所示

        对于监督学习,我们可以直接告诉智能体正确动作的标签是什么。但在 Pong 游戏中, 我们并不知道它的正确动作的标签是什么,如下图所示

         在强化学习里面,我们让智能体尝试玩 Pong 游戏,对动作进行采样,直到游戏结束,然后对每个动作进行惩罚。如下图所示,这是一个预演(rollout的过程,预演是指我们从当前帧对动作进行采样,生成很多 局游戏。我们将当前的智能体与环境交互,会得到一系列观测。每一个观测可看成一个轨迹(trajectory。 轨迹就是当前帧以及它采取的策略,即状态和动作的序列:

 

 

        最后结束时,我们会知道到底有没有把这个球拍到对方区域,对方有没有接住,我们是赢了还是输了。我 们可以通过观测序列以及最终奖励(eventual reward)来训练智能体,使它尽可能地采取可以获得最终奖励的动作。一场游戏称为一个回合(episode或者试验(trial

1.3、强化学习的历史 

        标准强化学习 ——> 深度强化学习。如下图所示,它们的主要区别在于如何处理特征和动作选择:

1. 标准强化学习:

  • 特征设计:在标准强化学习中,首先需要设计很多特征,这些特征用于描述当前的状态。举个例子,像在 TD-Gammon 玩 Backgammon(西洋双陆棋)的过程中,我们需要人为地提取出一些能够反映游戏局势的特征,这些特征能帮助智能体理解当前的状态。

  • 动作选择:当得到这些特征后,可以训练一个分类器或价值估计函数,它会帮助智能体根据当前状态来选择动作。

  • 例子:TD-Gammon 通过提前设计好的特征,使用强化学习的方法来训练智能体玩双陆棋。

2. 深度强化学习:

  • 端到端训练:随着深度学习的发展,强化学习不再需要人为设计特征。通过神经网络,智能体可以直接从原始状态(比如屏幕上的图像或当前的数据信息)中学习到如何采取行动。

  • 不需要特征工程:深度强化学习的优势在于不用人为地设计特征,省去了复杂的特征工程。我们不需要设计特征,直接输入状 态就可以输出动作。我们可以用一个神经网络来拟合价值函数或策略网络。 神经网络本身能够从数据中学习出有用的特征,并自动优化决策。

  • 例子:深度强化学习的智能体(比如 AlphaGo 或雅达利游戏中的智能体)直接输入游戏画面,通过神经网络预测出下一步应该做的动作。这是一个端到端的过程,状态(比如当前屏幕的图片)直接输入,动作(比如移动挡板的方向)直接输出。

总结:

  • 标准强化学习:需要人为设计特征,训练分类器或价值估计函数。
  • 深度强化学习:直接从原始数据中学习特征,通过神经网络进行端到端训练。

1.4、强化学习的应用

        近年来,强化学习在诸如游戏、机器人等领域得到了广泛应用,甚至能够击败顶尖的人类棋手,原因有以下几点:

  • 计算能力提升:随着更强大的计算资源(如GPU)的发展,强化学习可以通过大量的试错来提升智能体的表现。
  • 信息积累与环境反馈:智能体在不断尝试中,从环境中获取大量信息,进而学会在复杂环境中获取更高的奖励。
  • 端到端优化:通过端到端训练,特征提取、价值估计和决策得以同时优化,使得智能体可以更有效地作出更优的决策。

经典的强化学习应用实例:

  • DeepMind的走路智能体:通过奖励机制,智能体学习如何在复杂环境中行走。为了保持平衡,它学会了举手动作,展现了适应性和灵活性。当环境难度增加时,智能体还能抵抗扰动,表现出更强的鲁棒性。
  • 机械臂抓取:强化学习让机械臂学会统一的抓取策略,无需为每个物体单独建模。分布式系统可以让多个机械臂同时训练,从而提升效率,使机械臂能够应对各种不同形状的物体进行最优的抓取。
  • OpenAI的机械臂翻魔方:OpenAI开发的带有手指的机械臂,能够通过强化学习在虚拟环境中学习后,成功应用到现实中。这种方式降低了真实环境中机械臂损坏的风险,并显著节约了成本。
  • 穿衣智能体:训练智能体完成复杂的穿衣操作,模拟人类穿衣过程中的精细动作,甚至能够处理扰动。虽然有时会失败,但整体上展现了强化学习在精细任务中的潜力。

总结:

        强化学习通过结合强大的计算资源、丰富的环境反馈以及端到端优化,在多个复杂任务中展现出了极大的应用潜力,推动了游戏、机器人等领域的技术进步。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

huggingface的数据集下载(linux下clone)

1. 安装lfs sudo apt-get install git-lfs 或者 apt-get install git-lfs 2. git lfs install git lfs install 3. git clone dataset包 第2,3步骤的截图如下:

Kubernetes学习笔记

Kubernetes学习笔记 API格式前缀API组API版本 Pod概念优势局限性创建Pod ReplicationController概念配置Pod模板 Kubernetes架构概述节点定义管理节点名称唯一性节点自注册手动节点管理节点状态节点心跳节点控制器逐出速率限制资源容量跟踪 API Kubernetes把其管理的资源均视为…

现代数字信号处理I-P4 CRLB+LMMSE 学习笔记

目录 学习资料视频链接: 1. 估计参数的CRLB回顾 2. 参数变换下的CRLB拓展 3. 矢量参数下的CRLB扩展 3.1 矢量参数下的CRLB公式 3.2 两个矩阵不等式关系的意义说明 3.3 矢量参数下CRLB公式的证明过程 4. 线性估计 重点注意事项:此处的线性估计&am…

零磁通电流探头的原理

在电力电子和自动化控制领域,电流测量的准确性至关重要。传统的开环式电流探头,尽管在交流电流测量中表现出色,但在直流或大电流测量时,常面临磁芯饱和、剩磁及温度变化带来的测量误差问题。为此,零磁通电流探头&#…

​​Spring6梳理17——基于XML的自动装配

以上笔记来源: 尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 ①引入 ②场景模拟 2.1 创建UserController类文件 2.2 创建UserService接口文件 2…

同济大学计算机考研

文章目录 一、初试1.院校情况1.复试名单2.报录比3.学硕人数 二、复试(一) 数据库2016复试题一、选择题 (Multiple Choices)二、简答题 2018复试题一、选择题(一)数据库:1-10(二)C语言&#xff1…

植物大战僵尸杂交版游戏分享

植物大战僵尸杂交版游戏下载:夸克网盘分享 无捆绑之类的隐形消费,下载即玩

【软件工程】过程和生命周期的建模

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 过…

springboot整合xxl-job实现定时任务

搭建调度中心xxl-job-admin 下载调度中心项目 gitee github 注: 下载项目的版本应与集成项目pom引用xxl-job版本号对应上。 执行初始化数据库SQL sql路径: doc/db/tables_xxl_job.sql XXL-JOB调度模块基于自研调度组件并支持集群部署,调…

flv格式如何转换mp4?将flv转换成MP4格式的9种转换方法

flv格式如何转换mp4?在进行flv转MP4的转换之前,了解两种格式的基本特点和差异也是至关重要的。flv格式以其流媒体传输的高效性和对Flash Player的依赖而闻名,而MP4则以其广泛的兼容性、高质量的音视频同步以及灵活的编码选项而著称。通过对比…

vue mixins使用示例

混入 (mixins): 是一种分发 Vue 组件中可以复用功能灵活的方式。混入对象可以包含任意组件的选项。当组件使用混入对象的时候,所有混入对象的选项将被混入该组件本身的选项。 使用示例: 定义使用的mixins对象 export const HelloWorldMixin {data() {r…

Chromium 沙盒Sandbox源码介绍(3)

本篇主要说下沙箱的环境变量策略【Environment】: 一、环境变量: getEnvironmentStrings 函数返回指向内存块的指针,该内存块包含调用进程的环境变量 (系统和用户环境变量) getEnvironmentStrings 函数 (processenv.h) - Win32 apps | Mic…

ubuntu2204配置cuda

ubuntu2204配置cuda ✅系统版本:ubuntu22.04 LTS ✅显卡:英伟达2070S ✅CPU:i9 10900 ✅主板:戴尔品牌机 教程💨💨💨💨: ps:本人按照该方法一遍成功&#…

EasyX:初始化绘图窗口initgraph() 的使用

前言 学习使用EasyX图形库的initgraph窗口函数。 一、创建新项目 二、创建C空项目 三、找个地方存一下,创建 四、如果左边的框框找不到 五、点视图,然后点解决方案管理器,左边的框框就出来了 六、源文件添加新建项 七、给文件取个名&#x…

qt QPushButton详解

QPushButton是Qt Widgets模块中的一个基本控件,用于提供可点击的按钮。它是用户界面中最为常见和常用的控件之一,通过点击按钮,用户可以触发特定的应用程序操作。 重要方法 QPushButton(const QIcon &icon, const QString &text, QWi…

数据通信与网络课程展示图谱问答展示系统

💡 你是否在学习“数据通信与网络”时感觉知识点分散,难以整理?学了后面忘记前面,知识点的关联也难以梳理?别担心!我们公司推出的【数据通信与网络课程展示图谱问答系统】帮你一次性解决所有问题&#xff0…

手撕反向传播

关于二分类的交叉熵损失部分数学推导过程。 有些地方加以注释,公式太多懒得MD格式了 #%% import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn import datasetsiris_data datasets.load_iris() in_put_data iris_data.data corr…

Golang | Leetcode Golang题解之第494题目标和

题目&#xff1a; 题解&#xff1a; func findTargetSumWays(nums []int, target int) int {sum : 0for _, v : range nums {sum v}diff : sum - targetif diff < 0 || diff%2 1 {return 0}neg : diff / 2dp : make([]int, neg1)dp[0] 1for _, num : range nums {for j …

【嵌入式Linux】Linux设备树详解

设备树是是Linux中一种用于描述硬件配置的数据结构&#xff0c;它在系统启动时提供给内核&#xff0c;以便内核能够识别和配置硬件资源。设备树在嵌入式Linux系统中尤其重要&#xff0c;因为这些系统通常不具备标准的硬件配置&#xff0c;需要根据实际的硬件配置来动态配置内核…

JMeter之mqtt-jmeter 插件介绍

前言 mqtt-jmeter插件是JMeter中的一个第三方插件&#xff0c;用于支持MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议的性能测试。MQTT是一种轻量级的发布/订阅消息传输协议&#xff0c;广泛应用于物联网和传感器网络中。 一、安装插件 mqtt-jmeter项目…