【强化学习】一文带你理清强化学习

整理不易,希望留个赞再走哦!!

学习路线

pic_center” width=“20%”/
这个图描述的比较清晰,蓝框里是整个强化学习的一些概念基础了,橙色是一些学习方法,可以针对性的选择一些,废话不多说,接下来就按照这个路线图展开。

1. 马尔可夫链

马尔科夫链:用来描述智能体和环境互动的过程

  1. 智能体在环境中,观察到状态(S);
  2. 状态(S)被输入到智能体,智能体经过计算,选择动作(A);
  3. 动作(A)使智能体进入另外一个状态(S),并返回奖励®给智能体。
  4. 智能体根据返回,调整自己的策略。 重复以上步骤,一步一步创造马尔科夫链。
  5. 马尔可夫链包含三要素:state,action,reward

2. V值和Q值

在这里插入图片描述在这里插入图片描述
接下来是V值和Q值,从某个状态,按照策略 ,走到最终状态很多很多次;最终获得奖励总和的平均值,就是V值。从某个状态选取动作A,走到最终状态很多很多次;最终获得奖励总和的平均值,就是Q值。这就是Q值,这两个值有什么区别呢?
在这里插入图片描述
在这里插入图片描述
一个状态的V值,就是这个状态下的所有动作的Q值,在策略下的期望。
在这里插入图片描述
在这里插入图片描述

Q就是子节点的V的期望!但要注意,需要把R计算在内。
在这里插入图片描述

V值和Q值之后我们再来了解一下蒙特卡罗(MC)和时序差分(TD)。MC和TD都是估算V值的一种方式,不同点是蒙地卡罗会让智能体从某个状态S出发,直到最终状态,然后回过头来给每个节点标记这次的价值G。
G代表了某次,智能体在这个节点的价值。
而时序差分是一步一回头。用下一步的估值,估算当前状态的估值。
于是得到S - A - G 的数据。这里的G就是对于状态S,选择了A的评分。也就是说, - 如果G值正数,那么表明选择A是正确的,我们希望神经网络输出A的概率增加。(鼓励) - 如果G是负数,那么证明这个选择不正确,我们希望神经网络输出A概率减少。(惩罚) - 而G值的大小,就相当于鼓励和惩罚的力度了。

3. Q-Learning和SARSA

接下来我们开始正式了解一些常用的强化学习。首先是Q-learning和SARSA,这两种方法的主要思路在于,用同一个策略下产生的动作A的Q值替代V(S_(t+1))。
在这里插入图片描述
在这里插入图片描述

可以看到他们俩的更新公式长得很像,只差一个max,SARSA的想法是,用同一个策略下产生的动作A的Q值替代V(St+1)。Q-learning用所有动作的Q值的最大值替代V(St+1)。

4. 深度强化学习 DQN

开始进入深度强化学习的部分了。为什么深度强化学习这么强,是因为深度强化学习增加了一个很强的武器——深度神经网络。

深度神经网络就是一个函数。函数其实也很简单,就是描述两个东西的对应关系。F(x) = y , 描述的就是x和y之间的关系。
以前的函数,需要我们去精心设计的,要设计,就要描述其中的关系。但有些东西我们明明知道他们有关系,但又不好描述清楚。
例如,手写数字识别,一个正常人写的数字8,我们人类都能认出来。但我们却描述不出来,我们知道是两个圈是8,但有些人的圈明明不闭合,我们也认得出是8…
在这里插入图片描述

但深度神经网络这个工具就能自己学会这些关系。
我们先设一个Magic’(X),其中的X就是输入的图片;计算结果是各个数字的概率。这个判断一开始通常都是错的,但没关系,我们会慢慢纠正它。
纠正就需要有一个目标,没有目标就没有对错了。这里的目标是我们人类给他们标注的,告诉Magic’:这是数字8。
目标和现实的输出总是有一段距离的,这段距离我们称为损失(loss).
我们调整我们Magic’函数的参数,让损失最小化。也就是说,离目标越来越近。
这就是深度强化学习的主要思想。

Q-learning有一个问题:只能解决格子类型离散型状态问题,对连续型状态束手无策。
这是因为Q-learning在实做的时候用的是Q表格(Q-table)。表格这玩意儿注定就只能存离散的东西。但我们刚才说的神经网络,正好就能解决这个问题,因为神经网络是个函数,可以处理连续型的问题。两者一拍即合!DQN相当于Q-learning的Qtable换成深度神经网络,相当于用一根曲线穿过离散状态下所有的点。
在这里插入图片描述
在这里插入图片描述

Policy Gradient(PG)

这个时候我们发现,我们前面的方法都是通过Q值和V值来计算,也就是基于价值value。而PG用了一种全新的思路,用蒙特卡罗方法的G值来更新网络。也就是说,PG会让智能体一直走到最后,然后回溯计算G值。PG的思路比较新颖,但是缺点在于实际效果不太稳定,在某些环境下学习比较困难。所以我们希望用TD来代替MC,我们可不可以把PG和DQN结合起来呢?
在这里插入图片描述
如果你想详细学习这个模型,可以移步其他博客。当然也是我学习的过程中整理出来的,会有用别人图的情况,如果你觉得侵权可以随时跟我说我删帖。如果你想问原贴在哪也欢迎私信我哦!以下同理
PG原理:【强化学习】Policy Gradient原理
PG代码及注释:【强化学习】Policy Gradients代码注释版本

Actor-Critic

这个就是actor-critic思路的来源,AC准确来说是PG的TD版本。通过定义两个网络,actor网络和Critic网络。Critic网络负责估算Q值 Actor网络负责估算策略。AC方法相对PG来说具有更好的性能,同时也解决了连续动作空间的问题。
在这里插入图片描述
AC原理:【强化学习】Actor Critic原理
AC代码及注释:【强化学习】AC注释版本
A3C原理:【强化学习】A3C原理
A3C代码及注释:【强化学习】A3C代码注释版本

PPO

下一种PPO,这是目前使用最广泛的一种强化学习方法。PPO基于Actor-Critic框架,因此PPO也有两个网络,这是因为AC可以解决连续动作空间这一优点。PPO在AC的基础上主要做了两点改进,一个是延展的AC的TD(0),变成TD(N)的N步更新。第二点是在AC的基础上使用重要性采样,将在线策略变成了离线策略。
在这里插入图片描述
PPO代码及注释:【强化学习】PPO代码注释版本

DDPG

DDPG就是为了解决DQN连续控制型问题而产生的。
DQN的神经网络就相当于用线把Q-table的状态连起来。那到DDPG中,Critic网络就相当于我们用一张布,把整个Q-table的所有柱子都覆盖了。
在这里插入图片描述
在这里插入图片描述

DDPG的Actor接受输入一个状态,就相当于在这块布切沿着这个状态S切一个面。Actor的任务就是希望在这个面上找寻最高点,也就是最大的Q值。

所以和AC不同,DDPG预估的是Q而不是V。而DDPG的Actor采用的是梯度上升的方式找出最大值。而AC和PPO的Actor采用带权重更新的方法。

DDPG起源于DQN,是DQN解决连续控制问题的一个解决方法。
而DQN有一个众所周知的问题,就是Q值会被高估。这是因为我们用argmaxQ(s’)去代替V(s’),去评估Q(s)。当我们每一步都这样做的时候,很容易就会出现高估Q值的情况。
而这个问题也会出现在DDPG中。而要解决这个问题的思路,也在DQN的优化版本中。相信大家很快就明白,就是double DQN。

TD3

在TD3中,我们可以用了两套网络估算Q值,相对较小的那个作为我们更新的目标。这就是TD3的基本思路。
在这里插入图片描述
在这里插入图片描述

我们可以再次回到我们关于“布”的想象。
在DDPG中,计算target的时候,我们输入时s_和a_,获得q,也就是这块布上的一点A。通过估算target估算另外一点s,a,也就是布上的另外一点B的Q值。
在TD3中,计算target时候,输入s_到actor输出a后,给a加上噪音,让a在一定范围内随机。这又什么好处呢。
好处就是,当更新多次的时候,就相当于用A点附近的一小部分范围(准确来说是在s_这条线上的一定范围)的去估算B,这样可以让B点的估计更准确,更健壮。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Eclipse是一个开放源代码的集成开发环境(IDE),可用于Java开发,但也可以用于其他编程语言的开发。在本文中,我将向你展示如何使用Eclipse进行Java开发。 1. 下载Eclipse 首先,你需要从Eclipse官方网站下载Eclipse IDE。下载页面上将提供几个不同的版本,包括Eclipse IDE for Java Developers、Eclipse IDE for JavaScript and Web Developers,以及Eclipse IDE for C/C++ Developers等。选择适合你的版本,然后按照安装向导进行安装。 2. 创建Java项目 一旦你安装了Eclipse,你可以启动它并创建一个新的Java项目。选择“File”->“New”->“Java Project”,然后按照向导创建一个新的Java项目。在创建项目时,你需要指定项目名称、项目类型以及JRE版本等信息。 3. 创建Java类 一旦你创建了一个Java项目,你就可以创建一个Java类。选择你的Java项目,在“src”文件夹上右键单击,然后选择“New”->“Class”。输入类名和选择要继承的类(如果有的话),然后点击“Finish”。 4. 编写Java代码 现在你已经创建了一个Java类,可以开始编写Java代码了。在Eclipse的编辑器中,你可以输入Java代码并保存它。当你保存Java文件时,Eclipse会自动编译你的代码,并在Problems视图中显示任何编译错误。 5. 运行Java程序 一旦你编写了Java代码并保存了它,你可以运行Java程序。右键单击Java文件,然后选择“Run As”->“Java Application”。如果一切顺利,你的Java程序将在控制台中输出结果。 6. 调试Java程序 如果你的Java程序出现了错误或不按预期运行,你可以使用Eclipse的调试器来调试它。在Eclipse的编辑器中,你可以设置断点并启动调试器。当程序执行到断点时,调试器会暂停程序并允许你检查变量、运行代码等。 7. 导入外部JAR包 有时,你可能需要使用外部JAR包来完成你的Java项目。在Eclipse中,你可以简单地将外部JAR包导入到你的项目中。右键单击Java项目,然后选择“Build Path”->“Configure Build Path”。在“Libraries”选项卡上,你可以添加外部JAR包。 总结 在本文中,我们介绍了如何使用Eclipse进行Java开发。我们学习了如何创建Java项目、创建Java类、编写Java代码、运行Java程序、调试Java程序以及导入外部JAR包。Eclipse具有强大的功能,可以大大提高Java开发的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值