3.Gradient Descent
3.1 Tuning Learning Rates
梯度下降算法中最重要的參數(shù)是學(xué)習(xí)速率η。學(xué)習(xí)速率過(guò)小,迭代過(guò)慢帝嗡,花費(fèi)時(shí)間長(zhǎng)轧拄;學(xué)習(xí)速率過(guò)大,會(huì)躍過(guò)最小值點(diǎn),無(wú)法使損失函數(shù)降到最低,永遠(yuǎn)無(wú)法找到最小值點(diǎn)。如下圖:
一種流行而簡(jiǎn)單的想法是每隔一段時(shí)間根據(jù)一些因素減小學(xué)習(xí)速率
- 開(kāi)始時(shí)我們遠(yuǎn)離目標(biāo)點(diǎn)光羞,所以可以前進(jìn)得快一些,使用較大的學(xué)習(xí)速率
- 在經(jīng)歷幾次迭代之后怀大,離目標(biāo)點(diǎn)比較接近時(shí)減小學(xué)習(xí)速率
- 舉例:可以假設(shè)學(xué)習(xí)速率是依賴(lài)迭代次數(shù)的纱兑,在第t次更新參數(shù)時(shí)(其中η是常數(shù))
另外,需要注意的是不同的參數(shù)應(yīng)該是設(shè)置不一樣的學(xué)習(xí)速率化借。這是因?yàn)閾p失函數(shù)在不同的參數(shù)方向上陡峭程度不太一樣潜慎。
最簡(jiǎn)單的一種方法是Adagrad(還有很多其他的方法)
化簡(jiǎn)后:
那么為什么可以用這樣子的方法呢?
回顧一下蓖康,選擇學(xué)習(xí)速率需要考慮以下幾個(gè)因素:
- 越靠近目標(biāo)點(diǎn)铐炫,學(xué)習(xí)速率越小 ----方法是η除以t+1的平方根,上圖是紅色部分
- 不同參數(shù)使用不同的學(xué)習(xí)速率 --所有之前關(guān)于參數(shù)w的微分的均方差就是達(dá)到這個(gè)目的蒜焊,上圖藍(lán)色部分
在一個(gè)參數(shù)的時(shí)候倒信,微分越大意味著距離目標(biāo)點(diǎn)越遠(yuǎn);但是當(dāng)有兩個(gè)參數(shù)時(shí)泳梆,雖然L關(guān)于w1的微分值大于L關(guān)于w2的微分值鳖悠,但是距離目標(biāo)點(diǎn)的遠(yuǎn)近卻很難說(shuō),因?yàn)楹芸赡躄在w1方向上下降特別快优妙,雖然微分值大了些乘综,可能反而更加接近目標(biāo)點(diǎn)。
反映損失函數(shù)L關(guān)于參數(shù)變化的快慢通常使用二次微分套硼,但是有時(shí)候會(huì)遇到當(dāng)參數(shù)很多的時(shí)候計(jì)算一次微分就很慢卡辰,再計(jì)算二次就花費(fèi)太多的時(shí)間,所以Adagrad在不增加計(jì)算量的情況下熟菲,使用了一次微分來(lái)估算二次微分看政。
3.2 隨機(jī)梯度下降 SGD
與一般梯度下降的不同點(diǎn)在于,損失函數(shù)只是針對(duì)一個(gè)樣本的抄罕,每次針對(duì)一個(gè)樣本來(lái)更新參數(shù)。SGD計(jì)算速度更快于颖,雖然不是每次迭代都向著全局最優(yōu)方向呆贿,但是大的總體方向是向著全局最優(yōu)方向的。
3.3 Feature Scaling
對(duì)于不同的特征,如果數(shù)據(jù)量綱不同做入,那么x1和x2的變化對(duì)于y的影響不一樣大冒晰,從而對(duì)于LOSS函數(shù)的影響也不一樣大,所以在使用Gradient Descent時(shí)不同參數(shù)一定要使用不同的速率竟块,除非用Adagrad不然比較難算壶运。我們可以看到用一般梯度下降,更新參數(shù)的時(shí)候方向是順著等高線方向浪秘,而不是朝著最低點(diǎn)方向蒋情,所以進(jìn)行feature scaling后,參數(shù)更新比較有效率耸携。
Feature Scaling 的方法
有很多feature scaling方法棵癣,常用的是標(biāo)準(zhǔn)化,對(duì)所有data每一維進(jìn)行標(biāo)準(zhǔn)化
3.4 Gradient Descent Theory
梯度下降方法是基于泰勒展開(kāi)的夺衍,所以要使得每次迭代后損失函數(shù)變小狈谊,必須保證學(xué)習(xí)速率η無(wú)限小。