计算机视觉面试考点(16)优化器

计算机视觉工程师在面试过程中主要考察三个内容:图像处理、机器学习、深度学习。然而,各类资料纷繁复杂,或是简单的知识点罗列,或是有着详细数学推导令人望而生畏的大部头。为了督促自己学习,也为了方便后人,决心将常考必会的知识点以通俗易懂的方式设立专栏进行讲解,努力做到长期更新。此专栏不求甚解,只追求应付一般面试。希望该专栏羽翼渐丰之日,可以为大家免去寻找资料的劳累。每篇介绍一个知识点,没有先后顺序。想了解什么知识点可以私信或者评论,如果重要而且恰巧我也能学会,会尽快更新。最后,每一个知识点我会参考很多资料。考虑到简洁性,就不引用了。如有冒犯之处,联系我进行删除或者补加引用。在此先提前致歉了!

优化器的细节较多,难以死记硬背
希望通过这篇文章,让大家能够学会自己分析

什么是优化器?
我们在学习的过程中有一个目标
我们会不断向着目标前进
有些人前进到了清华
有些人前进到了蓝翔
原因是,在向目标的前进过程中,每个人有自己不同的策略

回归正题
损失函数就是模型的前进目标
优化器就是模型前进的策略

通过一个抽象的例子引出常用优化器

我在山顶,想要下山到海拔最低点

标准梯度下降法(GD, Gradient Descent)
我是个严谨的人
我询问了从古至今所有登过这座山的人
在山顶这个位置,如何才能下山
对他们所说的方向取一个平均,走出了第一步
站在新的位置上,我再次把所有的人询问一遍
得到一个新的方向,再走一步…

分析:
走一步的代价太大了
登过这座山的人如果很多很多,我的大脑一次性无法存储这些信息
如果东南西北都能下山,每个方向下山的人都是相同的
把他们的经验平均后,我只能停留在原地

数学模型:
在这里插入图片描述
w是所有的参数 对应 我的位置
t是迭代的次数 对应 我走了多少步
η是学习率 对应 我步子的大小
后面的是梯度 对应 前进的方向

随机梯度下降法(SGD, Stochastic Gradient Descent)
这次我决定莽撞一些
我询问一个人后,他让我去哪,我就去哪
到达新的位置后,我再问新的人…

分析:
问的人有登山高手
当然也有路人甲
甚至还有人故意坑你
所以虽然思考的时间短了
但是,走了很多弯路

数学模型:
在这里插入图片描述
将GD模型中的梯度改为上面的式子
(第二个x应该是y)

批量梯度下降法(BGD, Batch Gradient Descent)
既然太严谨,太莽撞都不行
折中一下吧
每次问n个人
对n个人的意见取平均

分析:
GD和SGD的折中

数学模型:
在这里插入图片描述

以上括号中的x和y可以理解成样本和标签

阶段总结:
局部最优点
当我走到大山中一个小山谷的谷底
很多人告诉我,这就是最低点了
于是我心满意足,停滞不前,最后永远留在了山谷里
或者
我要爬出山谷
爬上去一点,大家告诉我,往回走会到低的地方
于是我又走回谷底
来来回回,永远留在了山谷里
鞍点
什么是鞍点?
在这里插入图片描述
对应到我的下山故事
半山腰有缆车平台,缆车的方向是南北走向
从山底走到缆车平台的方向是东西走向
那么缆车平台就是鞍点

所以,根据其他人的意见
我在缆车的方向走来走去
我可能会认为缆车平台就是山底了
于是我同样停滞不前

动量法(Momentum)

这次我不走了
我开车
我的车速太快了或者惯性太大了
我一下子就冲出了山谷或者缆车平台

分析:
我加快了速度
同时也逃离了一些不该停留的地方
但是车速太快
一路狂奔,太头铁了
具体原因看下一个方法

数学模型:
在这里插入图片描述
v是参数更新的大小
a是超参数,一般取0.9
代表上一步更新的大小在这一次的行动中依然占很大的比重
也就是说我在下山的过程中有了很大的惯性,比如我开上了车
a越大,惯性越大,头越铁…

牛顿加速梯度(NAG, Nesterov accelerated gradient)
我头铁往山下狂奔不正是最初的目的吗?为何不可?
我们的初心:去往海拔最低点
头铁的坏处:北门是最低点,我却狂奔到了南门
虽然南门也是山底,但是不是我想要的山底

我想到了一个办法:
在我猛踩油门之前,我先向前面开一点,打探一下前面的信息
这个时候前面的路况告诉我别一直往北,该稍微往东一些了
所以我就向东北开车

分析:
动量法的优化

数学模型:
在这里插入图片描述
可以看出,计算梯度前
先根据上一步的方向,前进了一些
这就是和动量法的主要区别

阶段总结:
一座山的大小是固定的
我如果已经开着车在南北走向开了好几百里了
那么我应该可以在南北走向的车速放慢一些了
多向东西走向走一走
其中南北走向和东西走向代表两个参数
每个方向的车速,代表这个方向的学习率
下一个阶段的目标就是
将不同参数的学习率分离开
即南北方向慢一些,东西方向相对就快一些了

AdaGrad
随着我在南北走向开的越来越远
我逐渐降低了南北走向的速度

分析:
速度的大小是相对的
即使东西走向的速度没有加快,甚至小幅减小
但是如果南北走向的速度大幅减小
那么也等于增加了在东西走向的探索

数学模型:
在这里插入图片描述
注意,这次的参数不再是参数整体,而是单独的参数
gt是当前该参数的梯度平方大小
可以看出,分母将历史所有梯度平方求和(加的数是一个很小的数,防止分母为0)
即这个参数更新很多了,那以后就少更新一些

RMSProp
我想在南北走向慢一点
但是随着时间的推移
上述策略导致我在南北走向逐渐停滞不前
即使目的地北门就在我眼前
但是我在这个方向的速度太慢
1米的距离像1公里那么长
于是想到一个折中的办法
我之前对南北方向速度的惩罚利用的是在南北方向行驶的总距离
现在,我每走一步,对上述的总距离进行一个衰减
防止总距离最后太大,对我南北方向的行驶造成太大的阻力

分析:
AdaGrad的优化

数学模型:
在这里插入图片描述
E(g)就是总距离,a对总距离进行衰减
因为总距离是经过衰减的,所以此处的总距离不同于AdaGrad中的总距离

Adam
经过上面所有的分析,我终于找到了最理想的方法
将上述方法的优点全部结合

分析:
最常用或者默认的优化器

数学模型:
在这里插入图片描述
式1对应动量法的优点,即我在开车
式2对应我在同一个方向上行驶过多的约束
B1和B2是超参数,接近1的数,比如0.999
式3是对式1式2的放大
可以分析出,刚开始时,对两者的放大作用明显
时间久了,放大作用就小了
抽象一下:
就是时间久了,快到目的地了
车速可以适当变慢,没必要那么快了
对一个方向速度的惩罚减小,否则到达终点的速度太慢了

终于成功下山了
再见!

方法名称记忆?
Ada:adaption 自适应
m:动量
所以Adam就是两者联合


欢迎讨论 欢迎吐槽

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章