学习率 Learning Rate

本文从梯度学习算法的角度中看学习率对于学习算法性能的影响,以及介绍如何调整学习率的一般经验和技巧。

在机器学习中,监督式学习(Supervised Learning)通过定义一个模型,并根据训练集上的数据估计最优参数。梯度下降法(Gradient Descent)是一个广泛被用来最小化模型误差的参数优化算法。梯度下降法通过多次迭代,并在每一步中最小化成本函数(cost function)来估计模型的参数(weights)。

梯度下降的伪代码如下:


  重复已下过程,直到收敛为止{

    ωj = ωj - λ ∂F(ωj) / ∂ωj

  }

说明:(1) ω是模型参数, F()是成本函数, ∂F(ωj) / ∂ωj 是ω 的一阶导数,λ 是学习率

   (2)如果F()是单调函数,经过多次迭代会得到最小的成本函数;如果F()非单调,那么我们有可能陷入局部最优,一个简单的解决办法是通过多次尝试不同的ω初始值,对比不同估计参数下的成本函数的值是否一致,来发现是否陷入局部最优。

   (3)梯度下降法未必是最优的计算权重参数的方法,但是作为一种简单快速的方法,常常被使用。参照Andrew Ng的Stanford公开课程。


梯度下降过程的图示如下:

学习率的调整

为了能够使得梯度下降法有较好的性能,我们需要把学习率的值设定在合适的范围内。学习率决定了参数移动到最优值的速度快慢。如果学习率过大,很可能会越过最优值;反而如果学习率过小,优化的效率可能过低,长时间算法无法收敛。所以学习率对于算法性能的表现至关重要。

对于不同大小的数据集,调节不同的学习率

根据我们选择的成本函数F()不同,问题会有区别。当平方误差和(Sum of Squared Errors)作为成本函数时, ∂F(ωj) / ∂ωj 会随着训练集数据的增多变得越来越大,因此学习率需要被设定在相应更小的值上。

解决此类问题的一个方法是将学习率λ 乘上1/N,N是训练集中数据量。这样每部更新的公式变成下面的形式:

ωj = ωj - (λ/N) * ∂F(ωj) / ∂ωj

相关内容可参考: Wilson et al. paper “The general inefficiency of batch training for gradient descent learning”

另外一种解决方法是:选择一个不被训练集样本个数影响的成本函数,如均值平方差(Mean Squared Errors)。

在每次迭代中调节不同的学习率

在每次迭代中去调整学习率的值是另一种很好的学习率自适应方法。此类方法的基本思路是当你离最优值越远,你需要朝最优值移动的就越多,即学习率就应该越大;反之亦反。

但是这里有一个问题,就是我们并不知道实际上的最优值在哪里,我们也不知道每一步迭代中我们离最优值有多远。

解决办法是,我们在每次迭代的最后,使用估计的模型参数检查误差函数(error function)的值。如果相对于上一次迭代,错误率减少了,就可以增大学习率,以5%的幅度;如果相对于上一次迭代,错误率增大了(意味着跳过了最优值),那么应该重新设置上一轮迭代ωj 的值,并且减少学习率到之前的50%。这种方法叫做 Bold Driver.

建议:归一化输入向量

归一化输入向量在机器学习问题中是一个通用的方法。在一些应用中,由于使用距离或者特征方差,要求必须归一化输入向量,因为如果不归一化将导致结果会严重被具有大方差的特征和不同的尺度影响。归一化输入能够帮助数值最优方法(例如,梯度下降法)更快,更准确地收敛。

尽管有一些不同的归一化变量的方法,[0,1]归一化(也叫做min-max)和z-score归一化是两种最为广泛应用的。

XminmaxNorm = (X - min(X)) / (max(X) - min(X));

XzscoreNorm = (X - mean(X)) / std(X);

(第一个是非标准的归一化,第二个是正太化),两个可以做一个二选一,进行数据标准化!!!!

第一个的范围是0-1

第二个的范围是无穷,概率积分后落入-3δ---3δ

第二个就是把数据编程了均值为0,方差为1 的一组数,只是把数据位移了一下, 然后在Y轴上压扁了一下,但范围还是无穷

常用两种数据标准化方法相关推荐

  1. Hbase表两种数据备份方法-导入和导出示例

    Hbase表两种数据备份方法-导入和导出示例 本文将提供两种备份方法 -- 1) 基于Hbase提供的类对hbase中某张表进行备份 2) 基于Hbase snapshot数据快速备份方法 场合:由于 ...

  2. 【指数编制系列二】数据标准化方法

      在系统学习指数编制方法之前,先介绍一下几个指数编制过程中会经常使用的数据处理方法,如:数据标准化方法.权重设置方法.异常值处理方法.因为在后面指数编制过程中会经常用到这些方法.接下来我还是按照分类 ...

  3. 常用的数据标准化方法

    数据的标准化(normalization)是将数据按照一定规则缩放,使之落入一个小的特定区间.这样去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权.其中最典型的 ...

  4. python代码规范化_数据标准化方法及其Python代码实现

    数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间.目前数据标准化方法有多种,归结起来可以分为直线型方法(如极值法.标准差法).折线型方法(如三折线法).曲线型方法 ...

  5. 史上最容易理解————GET和POST两种基本请求方法的区别

    GET和POST两种基本请求方法的区别 GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过req ...

  6. 前端图片有时候能显示有时候不显示_web前端基础教程:两种数据存储思路

    Web前端开发基础,Web前端基础教程 数据存储是数据流在加工过程中产生的临时文件或加工过程中需要查找的信息.数据以某种格式记录在计算机内部或外部存储介质上.数据存储要命名,这种命名要反映信息特征的组 ...

  7. fstream与 C 风格(例如fread 和 fwrite )两种读写文件方法的效率比较

    我觉得作者写的挺好,评论也写的很对. 目前我的项目就是在VS2008+Qt+win7上开发的.我上次总结的QFile和C语言对文件操作的性能比较.--读取double型二进制数据文件也说明了这个问题. ...

  8. 【转载】面向对象建模与数据库建模两种分析设计方法的比较

    [转载]面向对象建模与数据库建模两种分析设计方法的比较 板桥里人 http://www.jdon.com 2007/9/23(转载请保留) 我们知道:一个软件从无到有需要经过如下几个阶段:分析.设计. ...

  9. 《Java安全编码标准》一2.11 IDS10-J不要拆分两种数据结构中的字符串

    2.11 IDS10-J不要拆分两种数据结构中的字符串 在历史遗留系统中,常常假设字符串中的每一个字符使用8位(一个字节,Java中的byte).而Java语言使用16位表示一个字符(Java中的Ch ...

最新文章

  1. ContentType 列表
  2. php mysql增删改查实例_php连接数据库实现用户数据的增删改查实例
  3. Stm32 Bootloader整理
  4. POJ - 1961 最小循环节
  5. Kotlin 与 Java有什么区别(最全最新的)
  6. Android Gradle Plugin 源码解析之 externalNativeBuild
  7. JQuery Ajax传递整个表单数据方法
  8. 安卓监听软键盘搜索键
  9. 【年度重磅】2020华为云社区年度技术精选合集,700页+免费下载!
  10. 实例化Spring容器的两种常用方式
  11. easyui框架搭建
  12. MATLAB/Simulink模型开发乐高EV3 双足平衡机器人
  13. 稳压集成块LM78XX LM79XX
  14. mysql判断叠字_格律诗的八大语法特点
  15. 诗琳通:中泰友谊使者,曾在汶川地震时曾为汶川灾区捐款1100万
  16. 【汇正财经】大盘窄幅震荡,节前资金有避险情绪
  17. 控制台也能炫-chrome浏览器控制台输出彩色文字
  18. 访美著名医学中心后,清华董家鸿院士提出了“4I战略”
  19. web前端开发自学难吗,前端开发网上学习
  20. 教师资格计算机面试题,2019上半年高中信息技术教师资格证面试试题(精选)第二批...

热门文章

  1. 数字图像压缩基本理论
  2. 深度学习理论篇之 ( 十一) -- 卷积神经网络之风云盛世(三)
  3. 七段数码管数字时钟实时显示显示(年月日时分秒)
  4. iOS 证书过期影响范围
  5. nginx 服务器重启命令,关闭
  6. 【源代码】 用Eclipse编写的Java小程序——自动售卖机
  7. 老笔记本安装ESXI和群晖,不再吃灰
  8. Tachyon--以内存为核心的开源分布式存储系统
  9. Cadence仿真——直流小信号分析(AC)
  10. 使用Oh my Posh设置Windows PowerShell主题要点