計算機視覺面試考點(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就是兩者聯合


歡迎討論 歡迎吐槽

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