首页 > 其他 > 详细

Optimizer - 最优化

时间:2020-12-15 18:01:23      阅读:31      评论:0      收藏:0      [点我收藏+]

在机器学习中,我们会遇到一个词,叫Optimizer,中文翻译为最优化。

最优化的意思为,在特定情况下最大化或者最小化某一特定函数或者变量。

机器学习的Optimizer也一样,它的任务就是最小化loss。

假设我们的机器学习学习的是一个一元二次方程,去解里面的系数。

我们的loss描绘的就是每次机器学习用初始的系数,猜出来的结果和真实结果的关系。

y(predict) = W1 * x + B1

loss = y(真实) - y(predict) (举例,也可能不是这样的loss,比如平方差等)

我们不断地去拆W1, B1,然后也许不小心某次就蒙对了。可以怎么猜?猜多少?

这些问题就交由Optimizer去解决。

 

Optimizer的任务就是说,给定下一次的猜想,测试loss,不断循环往复这个过程,让loss最小。

有两个比喻描述这个过程:

1. 碗:Optimizer就像一个弹珠掉进了碗里,然后滚啊滚,滚到了最底下。

2. 爬山:Optimizer就像一个人蒙眼下山,不断尝试往下,最终最好能成功到达山底。

 

所以 Optimizer是一个数学问题。问题在于如何能够最快地到达山底,并避免掉进局部的“山底”(局部最优解)。

 

梯度下降法

最简单的就是梯度下降法,每次小步迭代,下山就继续下山,上山则反方向去走。

存在问题:小步的步子多大?太大了扯到蛋,太小了,可太累了,不知道走到何年何月。

机器学习在训练过程中常常需要设置一个learning rate,最后变成了一个调参的过程,需要开发者自行调试合适的learning rate,俗称炼丹,鬼知道放进去一个learning rate,会发生什么。也许不小心放入一颗断肠草,就练出来了呢?

(另外的问题:如何避免走入局部最优解?)

Momentum

为了解决learning 太快或者太慢的问题,我们引入了Momentum这个方案。

即,假设我们开始就是慢的,但是如果方向是对的,我们就会加快这个速度。

就像滚雪球下山,只要滚的方向对,我们的雪球就会越滚越大,累积的动能(Momentum)也越来越大。

用公式表示就是Vt = r Vt-1 + xxxJ(0),r = 0.9

Adam

当我们发现Momentum越滚越大的时候,有个问题就是我们会冲过头。

为了解决这个问题,Adam优化器引入了“摩擦力”,避免冲过头。

研究表明,Adam可以比其他优化器更快找到最优解或者收敛。

 

选哪种优化器

直接选Adam吧。当然没有现成的,就直接实现一个SGD也可以。

不过一般来说Adative learning rate会好很多。

 

参考文档

https://ruder.io/optimizing-gradient-descent/index.html#momentum

https://algorithmia.com/blog/introduction-to-optimizers

 

Optimizer - 最优化

原文:https://www.cnblogs.com/simpleminds/p/14139536.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!