深入理解强化学习——强化学习和有监督学习

news2024/11/16 22:20:22

分类目录:《深入理解强化学习》总目录


通过前文的介绍,我们现在应该已经对强化学习的基本数学概念有了一定的了解。这里我们回过头来再看看一般的有监督学习和强化学习的区别。以图片分类为例,有监督学习(Supervised Learning)假设我们有大量被标注的数据且通常假设样本空间中全体样本服从一个未知分布,我们获得的每个样本都是独立地从这个分布上采样获得的,即独立同分布(Independent and Identically Distributed,IID),比如汽车、飞机、椅子这些被标注的图片,这些图片都要满足独立同分布,即它们之间是没有关联关系的。假设我们训练一个分类器,比如神经网络。为了分辨输入的图片中是汽车还是飞机,在训练过程中,需要把正确的标签信息传递给神经网络。 当神经网络做出错误的预测时,比如输入汽车的图片,它预测出来是飞机,我们就会直接告诉它,该预测是错误的,正确的标签应该是汽车。最后我们根据类似错误写出一个损失函数(Loss Function),通过反向传播(Back Propagation)来训练神经网络。所以在监督学习过程中,有两个假设:

  • 输入的数据(标注的数据)都应是没有关联的。因为如果输入的数据有关联,学习器是不好学习的
  • 需要告诉学习器正确的标签是什么,这样它可以通过正确的标签来修正自己的预测

在强化学习中,有监督学习的两个假设其实都不能得到满足。以雅达利(Atari) 游戏Breakout为例,如下图所示,这是一个打砖块的游戏,控制木板左右移动从而把球反弹到上面来消除砖块。在玩游戏的过程中,我们可以发现智能体得到的观测(Observation)不是独立同分布的,上一帧与下一帧间其实有非常强的连续性。我们得到的数据是相关的时间序列数据,不满足独立同分布。另外,我们并没有立刻获得反馈,游戏没有告诉我们哪个动作是正确动作。比如现在把木板往右移,这只会使得球往上或者往左一点儿,我们并不会得到即时的反馈。因此,强化学习之所以困难,是因为智能体不能得到即时的反馈,然而我们依然希望智能体在这个环境中学习。
雅达利(Atari) 游戏
如下图所示,强化学习的训练数据就是一个玩游戏的过程。我们从第1步开始,采取一个动作,比如我们把木板往右移,接到球。第2步我们又做出动作,得到的训练数据是一个玩游戏的序列。比如现在是在第3步,我们把这个序列放进网络,希望网络可以输出一个动作,即在当前的状态应该输出往右移或者往左移。这里有个问题,我们没有标签来说明现在这个动作是正确还是错误的,必须等到游戏结束才可能知道,这个游戏可能10s后才结束。现在这个动作到底对最后游戏是否能赢有无帮助,我们其实是不清楚的。这里我们就面临延迟奖励(Delayed Reward)的问题,延迟奖励使得训练网络非常困难。
强化学习玩Breakout
对于一般的有监督学习任务,我们的目标是找到一个最优的模型函数,使其在训练数据集上最小化一个给定的损失函数。在训练数据独立同分布的假设下,这个优化目标表示最小化模型在整个数据分布上的泛化误差(Generalization Error),用简要的公式可以概括为:
最优模型 = arg ⁡ min ⁡ 模型 E ( 特征 , 标签 ) ∼ 数据分布 [ 损失函数 ( 标签 , 模型 ( 特征 ) ) ] \text{最优模型}=\arg\min_{\text{模型}} E_{(\text{特征}, \text{标签})\sim \text{数据分布}}[\text{损失函数}(\text{标签}, \text{模型}(\text{特征}))] 最优模型=arg模型minE(特征,标签)数据分布[损失函数(标签,模型(特征))]

相比之下,强化学习任务的最终优化目标是最大化智能体策略在和动态环境交互过程中的价值。根据上面的分析,策略的价值可以等价转换成奖励函数在策略的占用度量上的期望:
最优策略 = arg ⁡ max ⁡ 策略 E ( 状态 , 动作 ) ∼ 策略占用度量 [ 奖励函数 ( 状态 , 动作 ) ] \text{最优策略}=\arg\max_{\text{策略}} E_{(\text{状态}, \text{动作})\sim \text{策略占用度量}}[\text{奖励函数}(\text{状态}, \text{动作})] 最优策略=arg策略maxE(状态,动作)策略占用度量[奖励函数(状态,动作)]

观察以上两个优化公式,我们可以总结出两者的相似点和不同点:

  • 有监督学习和强化学习的优化目标相似,即都是在优化某个数据分布下的一个分数值的期望。
  • 二者优化的途径是不同的,有监督学习直接通过优化模型对于数据特征的输出来优化目标,即修改目标函数而数据分布不变;强化学习则通过改变策略来调整智能体和环境交互数据的分布,进而优化目标,即修改数据分布而目标函数不变。

综上所述,一般有监督学习和强化学习的范式之间的区别为:

  • 有监督学习关注寻找一个模型,使其在给定数据分布下得到的损失函数的期望最小。而强化学习关注寻找一个智能体策略,使其在与动态环境交互的过程中产生最优的数据分布,即最大化该分布下一个给定奖励函数的期望。
  • 强化学习输入的样本是序列数据,而不像监督学习里面样本都是独立的。
  • 学习器并没有告诉我们每一步正确的动作应该是什么,学习器需要自己去发现哪些动作可以带来最多的奖励,只能通过不停地尝试来发现最有利的动作。
  • 智能体获得自己能力的过程,其实是不断地试错探索(Trial-and-error Exploration)的过程。探索 (Exploration)和利用(Exploitation)是强化学习里面非常核心的问题。其中,探索指尝试一些新的动作, 这些新的动作有可能会使我们得到更多的奖励,也有可能使我们“一无所有”,而利用指采取已知的可以获得最多奖励的动作,重复执行这个动作,因为我们知道这样做可以获得一定的奖励。因此,我们需要在探索和利用之间进行权衡,这也是在监督学习里面没有的情况。
  • 在强化学习过程中,没有非常强的监督者(Supervisor),只有奖励信号(Reward Signal),并且奖励信号是延迟的,即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈,所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后,如果我们使用监督学习,我们就可以立刻获得一个指导,比如,我们现在采取了一个错误的动作,正确的动作应该是什么。而在强化学习里面,环境可能会告诉我们这个动作是错误的,但是它并没有告诉我们正确的动作是什么。而且更困难的是,它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方。

通过与监督学习的比较,我们可以总结出强化学习的一些特征:

  • 强化学习会试错探索,它通过探索环境来获取对环境的理解。
  • 强化学习智能体会从环境里面获得延迟的奖励。
  • 在强化学习的训练过程中,时间非常重要,因为我们得到的是有时间关联的数据(Sequential Data), 而不是独立同分布的数据。在机器学习中,如果观测数据有非常强的关联,会使得训练非常不稳定。这也是为什么在监督学习中,我们希望数据尽量满足独立同分布,这样就可以消除数据之间的相关性。
  • 智能体的动作会影响它随后得到的数据,这一点是非常重要的。在训练智能体的过程中,很多时 候我们也是通过正在学习的智能体与环境交互来得到数据的。所以如果在训练过程中,智能体不能保持稳定,就会使我们采集到的数据非常糟糕。我们通过数据来训练智能体,如果数据有问题,整个训练过程就会失败。所以在强化学习里面一个非常重要的问题就是,怎么让智能体的动作一直稳定地提升。

本文梳理了强化学习和有监督学习在范式以及思维方式上的相似点和不同点。在大多数情况下,强化学习任务往往比一般的有监督学习任务更难,因为一旦策略有所改变,其交互产生的数据分布也会随之改变,并且这样的改变是高度复杂、不可追踪的,往往不能用显式的数学公式刻画。这就好像一个混沌系统,我们无法得到其中一个初始设置对应的最终状态分布,而一般的有监督学习任务并没有这样的混沌效应。

参考文献:
[1] 张伟楠, 沈键, 俞勇. 动手学强化学习[M]. 人民邮电出版社, 2022.
[2] Richard S. Sutton, Andrew G. Barto. 强化学习(第2版)[M]. 电子工业出版社, 2019
[3] Maxim Lapan. 深度强化学习实践(原书第2版)[M]. 北京华章图文信息有限公司, 2021
[4] 王琦, 杨毅远, 江季. Easy RL:强化学习教程 [M]. 人民邮电出版社, 2022

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea软件_启动出错永久办法leetcode关联

目录 idea启动出错启动出错原因1 永久关联leetcode idea启动出错 idea启动没反应的话,在idea的安装目录bin目录下有idea.bat,加入pause,双击启动,如果有问题,idea不会启动,控制台会输出相应错误信息,如果没…

互联网Java工程师面试题·Java 并发编程篇·第二弹

目录 14、什么是 Callable 和 Future? 15、什么是 FutureTask?使用 ExecutorService 启动任务。 16、什么是并发容器的实现? 17、多线程同步和互斥有几种实现方法,都是什么? 18、什么是竞争条件?你怎样发现和解决竞争&…

Jetson Orin NX 开发指南(1): 系统烧录

一、SDK Manager SDK Manager 工具是 NVIDIA 官方推荐的烧写和管理 Jetpack 系统组件的一个图形化烧写工具,使用起来非常的简单方便,但是该软件需要在 x86 的 Ubuntu 18.04 或 Ubuntu 20.04 的系统上运行,因此我们需要准备一台安装了 Ubuntu…

照片怎么压缩变小?

照片怎么压缩变小?在使用聊天工具时,出现无法传输照片的情况很常见,这通常是因为电脑或手机中照片的文件体积太大了。此外,如果照片过大,也会占用设备的内存,导致设备性能下降。因此,我们需要将…

广告牌安全监测,保障户外广告牌的安全与稳定

随着城市的发展和现代化,广告牌已经成为城市风景的一部分。然而,随之而来的是广告牌安全问题,因为它们暴露在各种天气和环境条件下,一旦掉落,可能对人们的生命和财产造成威胁。广告牌安全监测有效的解决了这一问题&…

腾讯云2核4G轻量服务器5M带宽支持多少人同时在线?

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问?5M带宽下载速度峰值可达640KB/秒,阿腾云以搭建网站为例,假设优化后平均大小为60KB,则5M带宽可支撑10个用户同时在1秒内打开网站,从CPU内存的角度,网站程序效…

Python中协程异步IO(asyncio)理解与入门

1、asyncio import asyncio# coroutine function: async开头的函数 async def main():print(hello)await asyncio.sleep(1)print(world)coro main() # coroutine object:协程对象# 当生成协程对象的时候,并不运行函数里面的程序。 # 运行时需要两步走…

10.10 作业

全局函数实现运算符重载 #include "05_fun.h"// 全局函数实现运算符重载// 算数运算符重载 - * / % const Per operator(const Per &L, const Per &R) {Per temp;temp.a L.a R.a;temp.b L.b R.b;return temp; } const Per operator-(const Per &L…

【python海洋专题十六】对大陆周边的数据进行临近插值

前几期内容 画温度、盐度的年平均和季节平均的平面分布图, 对于IAP粗分辨率数据进行处理得到的图像,大陆周围都没有数值。 没能呈现较为漂亮的图像。 甚至是老师或者编辑要求大陆周围不能有空白, 又不想对数据进行全部的分辨率更细的插值。 此时,使用周围临近的数据点代…

GitHub【入门】从入门到会用(千字总结●超详细)

我的个人主页:☆光之梦☆_C语言基础语法(超详细),【java入门】语法总结-CSDN博客 创作不易,如果能帮到你就好 特别标注:我的C语言专栏写的超详细,强烈推荐你去看看哦 注:你的 👍点赞…

epoll 定时器

参考&#xff1a; Linux下使用epoll监听定时器-CSDN博客 但是这个用的是gettimeofday。 本人使用的是 #include <stdlib.h> #include<stdio.h> #include <sys/timerfd.h> #include <sys/epoll.h> #include <unistd.h> #include <sys/time.…

实施运维02

一.网线制作 1.所需材料 网线&#xff0c;水晶头&#xff0c;网线钳&#xff0c;水晶头, 路由器或者网络测速仪 网线钳 网线制作标准 T568A标准&#xff08;交叉线&#xff09;&#xff1a;适用链接场合&#xff1a;电脑-电脑、交换机-交换机、集线器-集线器 接线顺序&…

ESXI使用esxtop命令监控存储的性能

1、监控每个hba卡的io性能 a. ssh登录esxi后台&#xff0c;执行esxtop&#xff0c;再按d切换到磁盘视图&#xff08;hba模式&#xff09; b. 要显示完整的设备名称&#xff1a;SHIFTL&#xff0c;输入36 c. 显示其他的性能指标字段&#xff1a;按f&#xff0c;按a-j选择需要的字…

黑马点评-05缓存穿透问题及其解决方案,缓存空字符串或使用布隆过滤器

缓存穿透问题(缓存空) 缓存穿透的解决方案 缓存穿透(数据穿透缓存直击数据库): 缓存穿透是指客户端请求访问缓存中和数据库中都不存在的数据,此时缓存永远不会生效并且用户的请求都会打到数据库 数据库能够承载的并发不如Redis这么高&#xff0c;如果大量的请求同时访问这种…

准备熬夜加班?curllibcurl 高危漏洞明日公布

近日&#xff0c;curl项目的作者bagder(Daniel Stenberg)在GitHub中发布消息称&#xff0c;将在2023年10月11日发布curl的8.4.0版本。同时&#xff0c;他们还将公开两个漏洞&#xff1a;CVE-2023-38545和CVE-2023-38546。如下图所示&#xff1a; 图片来源于互联网 其中CVE-202…

【算法|双指针系列No.4】leetcode11. 盛最多水的容器

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

十大排序算法Java实现及时间复杂度

文章目录 十大排序算法选择排序冒泡排序插入排序希尔排序快速排序归并排序堆排序计数排序基数排序桶排序时间复杂度 参考资料 十大排序算法 选择排序 原理 从待排序的数据元素中找出最小或最大的一个元素&#xff0c;存放在序列的起始位置&#xff0c; 然后再从剩余的未排序元…

C# Windows 窗体控件中的边距和填充

可以将 Margin 属性、Left、Top、Right、Bottom 的每个方面设置为不同的值&#xff0c;也可以使用 All 属性将它们全部设置为相同的值。 在代码中设置Margin&#xff0c;元素的左边设置为5个单位、上边设置为10个单位、右边设置为15个单位和下边设置为20个单位。 TextBox myT…

10_10C++

X-mid #include <iostream> using namespace std; class Kun {//算术运算符friend const Kun operator(const Kun &k1,const Kun &k2);friend const Kun operator-(const Kun &k1,const Kun &k2);friend const Kun operator*(const Kun &k1,const Ku…

AI能否取代程序员:探讨人工智能在编程领域的角色

引言&#xff1a; 随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;人们开始思考&#xff1a;AI是否能够取代程序员&#xff1f;这个问题引发了广泛的讨论和辩论。一些人认为&#xff0c;AI的出现将彻底改变编程的面貌&#xff0c;而另一些人则坚信&#xf…