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

【机器学习】算法改进——小批量和软更新

系列文章目录

第十八章 Python 机器学习入门之强化学习


目录

系列文章目录

文章目录

前言

一、算法改进——小批量

1 什么是小批次?

2 小批量梯度下降做什么?

3  在强化学习中使用小批量学习算法

二、算法改进——软更新



前言

当构建好了强化学习的算法,我们还可以对算法进行一些改进,本文主要讲了两个改进。一个是小批量另一个是软更新。

使用小批量,它可以加速强化学习算法,而且也适用于监督学习,加速监督学习算法;

软更新,它可以帮助强化学习算法更好地收敛。


一、算法改进——小批量

Mini-batch 

1 什么是小批次?

从监督学习开始,这是一个住房规模和价格的数据集,可以使用线性回归预测房价,为了求参数,我们提出了一个代价函数,并使用梯度下降更新参数。

我们的数据集很小,假设只有47个训练示例,那如果我们有一个非常大的数据集怎么办?假设m= 1亿,

那么我们梯度下降的每一步都需要计算超过1亿个样本的平均值,这是非常慢的。

梯度下降的每一步都意味着我们将计算这个总和或超过1亿个示例的平均值,然后我们采用一个微小的梯度下降步骤,然后返回并必须扫描我们整个1 亿个示例数据集再次计算下一步的导数。再采取另一个微小的梯度下降步骤。

以此类推,当数据集非常大时,这种梯度下降算法结果很慢。

小批量梯度下降的想法是不在此循环的每次迭代中使用所有的 1亿个训练示例,我们在这个大的数据集中选择一个较小的数据集,假设取1000个训练示例m=1000。

在每一步中,我们不会使用全部1亿个训练示例,而是选择100个或m 个主要示例的子集,代价函数前面的1/m 做出相应的更新。现在通过梯度下降的每次迭代只需要查看1000个而不是1亿个示例,每一步都需要更少的时间,这会导致更有效的算法。

2 小批量梯度下降做什么?

在算法的第一次迭代中,可能对数据的子集部分进行迭代;第二次迭代中,对数据的子集部分进行迭代以此类推。每次迭代运行得更快。

图右边,一个房子尺寸和价格得数据集,如果我们一次使用5个数据子集来采取一个梯度下降步骤,下一次迭代中,我们采用另外5个不同得示例来进行梯度下降步骤,以此类推,我们可以对所以数据进行梯度下降。 

来看一下梯度下降,对于批量梯度下降,梯度下降得每一步都会使得参数可靠,接近代价函数得全局最小值;

对于小批量梯度下降或小批量学习算法,在进行梯度下降时,它可能不会一直朝着全局最小值运动,甚至可能照着远离全局最小值得方向运行,但是对于整体(平均)来说,小批量梯度下降将趋向全局最小值,不可靠而且有点乱,但是每次迭代得计算代价要低得多(我们选择得是小批量),所以小批量学习或小批量下降,当我们有一个非常大的数据集时,它是一个更快的算法。

事实上,对于监督学习,我们有一个非常大的数据集,小批量学习或小批量梯度下降与其他优化算法(如Atom)一起使用比批量梯度下降更常见,

3  在强化学习中使用小批量学习算法

回到我们的强化学习算法,这是我们之前看到的算法,在这里使用小批量学习算法。

虽然我们的 回放缓冲区 (Replay buffer)中存储了10000个最近的元组,我们每次训练模型时,并不是使用全部的10000个元组。同样的,我们获取子集,比如说一次训练1000个元组示例,并使用这1000个示例来创建仅1000个示例的神经网络。

事实证明,这将使得训练模型的每次迭代都多一点,但是这比一次训练10000个模型要快得多,这个强化学习算法总体上会加快速度,这就是小批量可以加快速度的方式。不管是监督学习算法还是强化学习算法都可以使用小批量来加快速度。 

二、算法改进——软更新

soft update

第二个改进是软更新,它可以使算法收敛更加可靠,强化学习算法的最后一步是将Q = Qnew,这可能存在一个问题,如果我们把一个新的神经网络训练成新的,但是它并不是一个好的神经网络,也就有说Qtest可能还没有原来的Q 好,软更新的方法有助于防止这种情况的发生,来看看软更新怎么发挥作用。

对于神经网络,Q会有一些参数W,B,当我们训练新的神经网络时,我们会得到一些参数W_new ,B_new,

如果不适应软更新,我们会设置W= W_new ,B= B_new,这就是Q = Qnew的意思。

通过软更新,我们所做的就是设置W=0.01W_new + 0.99 W , B= 0.01B_new + 0.99B ,这里的0.01 和0.99 都是我们可以设置的超参数。

事实证明,使用软更新方法会导致强化学习算法更可靠的收敛,这使得强化学习算法不太可能振荡或转向或具有不良特性。

相关文章:

  • JMX概念及实际开发应用【实现IP黑名单】
  • flask-sqlalchemy连接数据库
  • 在设计测试用例前你应该考虑的重点在哪里?
  • 5.Nodejs中的包、npm、第三方模块、package.json以及cnpm
  • 如何使用Google Analytics跟踪WordPress网站的用户参与度
  • 大型医院his系统源码 医院信息管理系统源码 C/S架构
  • EN 16069建筑物用隔热产品.工厂制造的聚乙烯泡沫(PEF)产品—CE认证
  • UE4 源码解析----引擎初始化流程
  • 叶酸PEG衍生物​DBCO-PEG-Folate,DBCO-PEG-FA,二苯基环辛炔-聚乙二醇-叶酸
  • 【dll】windows下使用vs编译动态链接库dll与使用
  • 2022年ios证书最新申请流程
  • 普冉 PY32F003 资料和入坑方法
  • springboot+微信小程序健康饮食系统毕业设计源码280920
  • 介绍日本日置IM7583阻抗分析仪
  • 如何开始做股票量化交易?
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Lsb图片隐写
  • Python - 闭包Closure
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SwizzleMethod 黑魔法
  • windows下如何用phpstorm同步测试服务器
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 将回调地狱按在地上摩擦的Promise
  • 力扣(LeetCode)56
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 我从编程教室毕业
  • 我的业余项目总结
  • 我与Jetbrains的这些年
  • 一个完整Java Web项目背后的密码
  • 一起参Ember.js讨论、问答社区。
  • 如何在招聘中考核.NET架构师
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (ros//EnvironmentVariables)ros环境变量
  • (TOJ2804)Even? Odd?
  • (ZT)一个美国文科博士的YardLife
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (十三)Flask之特殊装饰器详解
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .gitignore
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET BackgroundWorker
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET建议使用的大小写命名原则
  • .NET使用存储过程实现对数据库的增删改查
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .stream().map与.stream().flatMap的使用
  • [20181219]script使用小技巧.txt
  • [Android学习笔记]ScrollView的使用
  • [C#] 我的log4net使用手册