专栏首页Spark学习技巧机器学习之学习率 Learning Rate

机器学习之学习率 Learning Rate

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

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

梯度下降的伪代码如下:

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

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

  }

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

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

   (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);

说明:本文为http://blog.datumbox.com/tuning-the-learning-rate-in-gradient-descent/ 的译文版,原文作者 Vasilis Vryniotis.

希望有助于大家理解与使用!

本文分享自微信公众号 - Spark学习技巧(bigdatatip),作者:果壳里的熊猫

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 知乎数据埋点方案

    从业务过程中采集埋点,是数据驱动型公司的必要条件。知乎的产品功能评审环节,不仅有 PRD (Product requirement document),还加入了...

    Spark学习技巧
  • 必读:再讲Spark与kafka 0.8.2.1+整合

    Kafka在0.8和0.10版本引入了新的消费者API,所以spark Streaming与kafka的整合提供了两个包。 请根据你的集群选用正确的包。注意,...

    Spark学习技巧
  • 如何“假装”成为一名好程序员?

    最近我对一位资深程序员就工作生活问题进行了深度采访,采访内容如下: Q:请问你工作多久了? 5年了 ? Q:你觉得,程序员这份工作对你有什么影响吗? 有 ? ?...

    Spark学习技巧
  • 机器学习算法(1)--梯度下降法的几种形式

    阅读目录 1. 批量梯度下降法BGD 2. 随机梯度下降法SGD 3. 小批量梯度下降法MBGD 4. 总结   在应用机器学习算法时,我们通常采用梯度下降法来...

    IT派
  • 响应式+扁平化FrontOpen2主题的圆角样式分享

    在扁平化大行其道的时代,似乎很多人潜意识的认为扁平化就必须为方角,而拟物化才应该是圆角。其实大错特错,证明的方法很简单,去借一部跑着 IOS7 系统的苹果就知道...

    张戈
  • 机器学习应该知道的事(下)

    新的一周又开始了,作为引子的review,还是有点长的,大家可以耐心的读读,绝对会让你有种豁然开朗的感觉。下周的重点是统计语言模型,别想的那么复杂,实际上就是贝...

    哒呵呵
  • 基于FPGA的Canny算子设计(一)

    Canny算子计算流程: 高斯滤波和Sobel算子已经在前面讲过,所以这里主要讨论非最大值抑制和滞后分割电路设计。 非最大值一直电路设计 非最大值抑制主要是对...

    瓜大三哥
  • 高性能设置圆角,告别离屏渲染

    今天来写一个老生常谈的话题,也是一个面试的高频问题,我也在面试时不止一次被问到过这个问题——如何高性能的设置圆角。就用他作为2017年春节上班之后的第一篇文章。

    Originalee
  • Disney+:小孩儿和极客们的美好世界

    Disney+上周正式亮相。经过一些小问题之后,该服务现在开始正常运行。它可以通过多种设备广泛使用,提供了一系列内容,还可以将它们快速无缝地下载到移动设备里。

    shellmik
  • 麒麟芯片有多少技术来自美国高通?

    原则上讲麒麟芯片和高通都属于arm架构,属于同一个根系,但是高通由于在技术积累上比较早,所以在对框架掌握上高通的定制框架会更加的熟悉一些,同时对于细节的把握上更...

    程序员互动联盟

扫码关注云+社区

领取腾讯云代金券