優(yōu)化算法
1. 如何解決訓(xùn)練樣本少的問題
要訓(xùn)練一個(gè)好的 CNN 模型,通常需要很多訓(xùn)練數(shù)據(jù),尤其是模型結(jié)構(gòu)比較復(fù)雜的時(shí)候, 比如 ImageNet 數(shù)據(jù)集上訓(xùn)練的模型。雖然深度學(xué)習(xí)在 ImageNet 上取得了巨大成功,但是一個(gè) 現(xiàn)實(shí)的問題是,很多應(yīng)用的訓(xùn)練集是較小的,如何在這種情況下應(yīng)用深度學(xué)習(xí)呢?有三種方法 可供讀者參考。
??
(1)可以將 ImageNet 上訓(xùn)練得到的模型做為起點(diǎn),利用目標(biāo)訓(xùn)練集和反向傳播對其進(jìn) 行繼續(xù)訓(xùn)練,將模型適應(yīng)到特定的應(yīng)用。ImageNet 起到預(yù)訓(xùn)練的作用。
??
(2)如果目標(biāo)訓(xùn)練集不夠大,也可以將低層的網(wǎng)絡(luò)參數(shù)固定,沿用 ImageNet 上的訓(xùn)練集 結(jié)果,只對上層進(jìn)行更新。這是因?yàn)榈讓拥木W(wǎng)絡(luò)參數(shù)是最難更新的,而從 ImageNet 學(xué)習(xí)得到 的底層濾波器往往描述了各種不同的局部邊緣和紋理信息,而這些濾波器對一般的圖像有較好 的普適性。
??
(3)直接采用 ImageNet 上訓(xùn)練得到的模型,把最高的隱含層的輸出作為特征表達(dá),代 替常用的手工設(shè)計(jì)的特征。
2. 什么樣的樣本集不適合用深度學(xué)習(xí)?
1)數(shù)據(jù)集太小,數(shù)據(jù)樣本不足時(shí),深度學(xué)習(xí)相對其它機(jī)器學(xué)習(xí)算法,沒有明顯優(yōu)勢。
??
(2)數(shù)據(jù)集沒有局部相關(guān)特性,目前深度學(xué)習(xí)表現(xiàn)比較好的領(lǐng)域主要是圖像/語音 /自然語言處理等領(lǐng)域,這些領(lǐng)域的一個(gè)共性是局部相關(guān)性。圖像中像素組成物體,語音 信號中音位組合成單詞,文本數(shù)據(jù)中單詞組合成句子,這些特征元素的組合一旦被打亂, 表示的含義同時(shí)也被改變。對于沒有這樣的局部相關(guān)性的數(shù)據(jù)集,不適于使用深度學(xué)習(xí)算 法進(jìn)行處理。舉個(gè)例子:預(yù)測一個(gè)人的健康狀況,相關(guān)的參數(shù)會(huì)有年齡、職業(yè)、收入、家 庭狀況等各種元素,將這些元素打亂,并不會(huì)影響相關(guān)的結(jié)果。
3. 有沒有可能找到比已知算法更好的算法?
對于訓(xùn)練樣本(黑點(diǎn)),不同的算法 A/B 在不同的測試樣本(白點(diǎn))中有不同的表現(xiàn),這表示:對于一個(gè)學(xué)習(xí)算法A,若它在某些問題上比學(xué)習(xí)算法B更好,則必然存在一些問題, 在那里B比A好。
??
也就是說:對于所有問題,無論學(xué)習(xí)算法 A 多聰明,學(xué)習(xí)算法 B 多笨拙,它們的期望性 能相同。
??
但是:沒有免費(fèi)午餐定力假設(shè)所有問題出現(xiàn)幾率相同,實(shí)際應(yīng)用中,不同的場景,會(huì)有不 同的問題分布,所以,在優(yōu)化算法時(shí),針對具體問題進(jìn)行分析,是算法優(yōu)化的核心所在。
4. 何為共線性, 跟過擬合有啥關(guān)聯(lián)?
共線性:多變量線性回歸中,變量之間由于存在高度相關(guān)關(guān)系而使回歸估計(jì)不準(zhǔn)確。
產(chǎn)生問題:共線性會(huì)造成冗余,導(dǎo)致過擬合。
解決方法:排除變量的相關(guān)性、加入權(quán)重正則。
5. 廣義線性模型是怎被應(yīng)用在深度學(xué)習(xí)中?
深度學(xué)習(xí)從統(tǒng)計(jì)學(xué)角度,可以看做遞歸的廣義線性模型。
??
廣義線性模型相對于經(jīng)典的線性模型
(
y
=
w
x
+
b
)
(y=wx+b)
(y=wx+b),核心在于引入了連接函數(shù)
g
(
?
)
g(\cdot)
g(?),形式變?yōu)?
y
=
g
?
1
(
w
x
+
b
)
y=g-1(wx+b)
y=g?1(wx+b)。
??
深度學(xué)習(xí)時(shí)遞歸的廣義線性模型,神經(jīng)元的激活函數(shù),即為廣義線性模型的鏈接函數(shù)。邏 輯回歸(廣義線性模型的一種)的 Logistic 函數(shù)即為神經(jīng)元激活函數(shù)中的 Sigmoid 函數(shù),很多 類似的方法在統(tǒng)計(jì)學(xué)和神經(jīng)網(wǎng)絡(luò)中的名稱不一樣,容易引起困惑。
6. 造成梯度消失的原因?
神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中,通過改變神經(jīng)元的權(quán)重,使網(wǎng)絡(luò)的輸出值盡可能逼近標(biāo)簽以降低誤差 值,訓(xùn)練普遍使用 BP 算法,核心思想是,計(jì)算出輸出與標(biāo)簽間的損失函數(shù)值,然后計(jì)算其相 對于每個(gè)神經(jīng)元的梯度,進(jìn)行權(quán)值的迭代。
??
梯度消失會(huì)造成權(quán)值更新緩慢,模型訓(xùn)練難度增加。造成梯度消失的一個(gè)原因是,許多激 活函數(shù)將輸出值擠壓在很小的區(qū)間內(nèi),在激活函數(shù)兩端較大范圍的定義域內(nèi)梯度為
0
0
0。造成學(xué) 習(xí)停止。
7. 權(quán)值初始化方法有哪些?
權(quán)值初始化的方法主要有:常量初始化(constant)、高斯分布初始化(gaussian)、 positive_unitball 初始化、均勻分布初始化(uniform)、xavier 初始化、msra 初始化、雙線性初 始化(bilinear)。
??
1. 常量初始化(constant)
??
把權(quán)值或者偏置初始化為一個(gè)常數(shù),具體是什么常數(shù),可以自己定義。
??
2. 高斯分布初始化(gaussian)
??
需要給定高斯函數(shù)的均值與標(biāo)準(zhǔn)差。
3. positive_unitball 初始化
讓每一個(gè)神經(jīng)元的輸入的權(quán)值和為
1
1
1,例如:一個(gè)神經(jīng)元有
100
100
100 個(gè)輸入,讓這
100
100
100 個(gè)輸入
的權(quán)值和為
1
1
1. 首先給這
100
100
100 個(gè)權(quán)值賦值為在
(
0
,
1
)
(0,1)
(0,1)之間的均勻分布,然后,每一個(gè)權(quán)值再 除以它們的和就可以啦。這么做,可以有助于防止權(quán)值初始化過大,從而防止激活函數(shù)(sigmoid 函數(shù))進(jìn)入飽和區(qū)。所以,它應(yīng)該比較適合 simgmoid 形的激活函數(shù)。
4. 均勻分布初始化(uniform)
將權(quán)值與偏置進(jìn)行均勻分布的初始化,用 min 與 max 控制它們的的上下限,默認(rèn)為
(
0
,
1
)
(0,1)
(0,1)。
5. xavier 初始化
對于權(quán)值的分布:均值為
0
0
0,方差為(
1
1
1 / 輸入的個(gè)數(shù))的均勻分布。如果我們更注重前
向傳播的話,我們可以選擇 fan_in,即正向傳播的輸入個(gè)數(shù);如果更注重后向傳播的話,我們選擇 fan_out, 因?yàn)樵诜聪騻鞑サ臅r(shí)候,fan_out 就是神經(jīng)元的輸入個(gè)數(shù);如果兩者都考慮的話, 就選 average = (fan_in + fan_out) /
2
2
2。對于 ReLU 激活函數(shù)來說,XavierFiller 初始化也是很適合。關(guān)于該初始化方法,具體可以參考文章1、文章2,該方法假定激活函數(shù)是線性的。
6. msra 初始化
對于權(quán)值的分布:基于均值為
0
0
0,方差為(
2
2
2/輸入的個(gè)數(shù))的高斯分布;它特別適合 ReLU 激活函數(shù),該方法主要是基于 Relu 函數(shù)提出的,推導(dǎo)過程類似于 xavier。
7. 雙線性初始化(bilinear)
常用在反卷積神經(jīng)網(wǎng)絡(luò)里的權(quán)值初始化
8. 啟發(fā)式優(yōu)化算法中,如何避免陷入局部最優(yōu)解?
啟發(fā)式算法中,局部最優(yōu)值的陷入無法避免。啟發(fā)式,本質(zhì)上是一種貪心策略,這也在客 觀上決定了不符合貪心規(guī)則的更好(或者最優(yōu))解會(huì)錯(cuò)過。
??
簡單來說,避免陷入局部最優(yōu)就是兩個(gè)字:隨機(jī)。
??
具體實(shí)現(xiàn)手段上,可以根據(jù)所采用的啟發(fā)式框架來靈活地加入隨機(jī)性。比如遺傳里面,可 以在交叉變異時(shí),可以在控制人口策略中,也可以在選擇父本母本樣本時(shí);禁忌里面,可以在 禁忌表的長度上體現(xiàn),也可以在解禁策略中使用,等等。這些都要結(jié)合具體問題特定的算例集, 需要反復(fù)嘗試摸索才行。參數(shù)的敏感性是一個(gè)問題,建議不要超過
3
3
3 個(gè)參數(shù),參數(shù)越不敏感越好。不同算例集用不同種子運(yùn)行多次(
100
100
100 次左右才有統(tǒng)計(jì)意義),統(tǒng)計(jì)平均性能即可。需注 意全局的隨機(jī)重啟通常來說不是一個(gè)好辦法,因?yàn)榈扔谥鲃?dòng)放棄之前搜索結(jié)果,萬不得已不要 用,或者就是不用。
??
三個(gè)原則應(yīng)該把握:越隨機(jī)越好;越不隨機(jī)越好;二者平衡最好。
??
1. 越隨機(jī)越好
??
沒有隨機(jī)性,一定會(huì)陷入局部最優(yōu)。為了獲得更大的找到最優(yōu)解的期望,算法中一定要有
足夠的隨機(jī)性。具體體現(xiàn)為魯棒性較好,搜索時(shí)多樣性較好。算法的每一步選擇都可以考慮加入隨機(jī)性,但要控制好概率。比如,某個(gè)貪心策略下,是以概率 $1 $做某一動(dòng)作,可以考慮將其 改為以概率
0.999
0.999
0.999 做之前的操作,以剩余概率做其他操作。具體參數(shù)設(shè)置需調(diào)試。
??
2. 越不隨機(jī)越好
??
隨機(jī)性往往是對問題內(nèi)在規(guī)律的一種妥協(xié)。即沒有找到其內(nèi)在規(guī)律,又不知道如何是好, 為了獲得更好的多樣性,逼不得已加入隨機(jī)。因此,對給定問題的深入研究才是根本:分辨出 哪些時(shí)候,某個(gè)動(dòng)作就是客觀上能嚴(yán)格保證最優(yōu)的——這點(diǎn)至關(guān)重要,直接決定了算法性能。 最好的算法一定是和問題結(jié)構(gòu)緊密相連的,范范地套用某個(gè)啟發(fā)式的框架不會(huì)有出色的性能。 當(dāng)然,如果不是追求性能至上,而是考慮到開發(fā)效率實(shí)現(xiàn)成本這些額外因素,則另當(dāng)別論。
??
3. 二者平衡最好
??
通常情況下,做好第一點(diǎn),可以略微改善算法性能;做好第二點(diǎn),有希望給算法帶來質(zhì)的提高。而二者調(diào)和后的平衡則會(huì)帶來質(zhì)的飛躍。
??
貪心是“自強(qiáng)不息”的精進(jìn),不放過任何改進(jìn)算法的機(jī)會(huì);多樣性的隨機(jī)是“厚德載物”的一分包 容,給那些目前看似不那么好的解一些機(jī)會(huì)。調(diào)和好二者,不偏頗任何一方才能使算法有出色 的性能。要把握這種平衡,非一朝一夕之功,只能在反復(fù)試驗(yàn)反思中去細(xì)細(xì)品味。
??
要結(jié)合具體問題而言,范范空談無太大用。
9. 凸優(yōu)化中如何改進(jìn) GD 方法以防止陷入局部最優(yōu)解?
在對函數(shù)進(jìn)行凸優(yōu)化時(shí),如果使用導(dǎo)數(shù)的方法(如:梯度下降法/GD,牛頓法等)來尋找最優(yōu)解,有可能陷入到局部最優(yōu)解而非全局最優(yōu)解。
??
為了防止得到局部最優(yōu),可以對梯度下降法進(jìn)行一些改進(jìn),防止陷入局部最優(yōu)。
??
但是請注意,這些方法只能保證以最大的可能找到全局最優(yōu),無法保證
100
%
100\%
100%得到全局最優(yōu)。
??
(1)incremental GD/stochastic GD
??
在 GD 中,是需要遍歷所有的點(diǎn)之后才計(jì)算
w
w
w 的變化的;但是,在 stochastic GD 中,每輸入一個(gè)點(diǎn),就根據(jù)該點(diǎn)計(jì)算下一步的
w
w
w,這樣,不僅可以從 batch training 變成 online training 方法,而且每次是按照單點(diǎn)的最優(yōu)方向而不是整體的最優(yōu)方向前進(jìn),從而相當(dāng)于在朝目標(biāo)前進(jìn)的路上多拐了好多彎,有可能逃出局部最優(yōu)。
??
(2)momentum 方法
??
momentum 相當(dāng)與記憶住上一次的更新。在每次的更新中,都要加一個(gè)
k
k
k 倍的上一次更新 量。這樣,也不再是按照標(biāo)準(zhǔn)路線前進(jìn),每次的步驟都容易受到上一次的影響,從而可能會(huì)逃 出局部最優(yōu)。另外,也會(huì)加大步長,從而加快收斂。
10. 常見的損失函數(shù)?
機(jī)器學(xué)習(xí)通過對算法中的目標(biāo)函數(shù)進(jìn)行不斷求解優(yōu)化,得到最終想要的結(jié)果。分類和回歸 問題中,通常使用損失函數(shù)或代價(jià)函數(shù)作為目標(biāo)函數(shù)。
??
損失函數(shù)用來評價(jià)預(yù)測值和真實(shí)值不一樣的程度。通常損失函數(shù)越好,模型的性能也越好。
??
損失函數(shù)可分為經(jīng)驗(yàn)風(fēng)險(xiǎn)損失函數(shù)和結(jié)構(gòu)風(fēng)險(xiǎn)損失函數(shù)。經(jīng)驗(yàn)風(fēng)險(xiǎn)損失函數(shù)指預(yù)測結(jié)果和 實(shí)際結(jié)果的差別,結(jié)構(gòu)風(fēng)險(xiǎn)損失函數(shù)是在經(jīng)驗(yàn)風(fēng)險(xiǎn)損失函數(shù)上加上正則項(xiàng)。
??
下面介紹常用的損失函數(shù):
??
1)
0
?
1
0-1
0?1 損失函數(shù)
??
如果預(yù)測值和目標(biāo)值相等,值為
0
0
0,如果不相等,值為
1
1
1:
L
(
Y
,
f
(
x
)
)
=
{
1
??????
,
????
Y
≠
f
(
x
)
,
0
??????
,
????
Y
=
f
(
x
)
.
L(Y,f(x))= \left\{ \begin{array}{} 1\;\;\;,\;\;Y\ne f(x), \\ 0\;\;\;,\;\;Y=f(x). \end{array} \right.
L(Y,f(x))={1,Y=f(x),0,Y=f(x).?
??
一般的在實(shí)際使用中,相等的條件過于嚴(yán)格,可適當(dāng)放寬條件:
L
(
Y
,
f
(
x
)
)
=
{
1
??????
,
????
∣
Y
?
f
(
x
)
∣
≥
T
,
0
??????
,
????
∣
Y
?
f
(
x
)
∣
<
T
.
L(Y,f(x))= \left\{ \begin{array}{} 1\;\;\;,\;\;|Y - f(x)| \ge T, \\ 0\;\;\;,\;\;|Y-f(x)| < T. \end{array} \right.
L(Y,f(x))={1,∣Y?f(x)∣≥T,0,∣Y?f(x)∣<T.?
??
2)絕對值損失函數(shù)
??
和
0
?
1
0-1
0?1 損失函數(shù)相似,絕對值損失函數(shù)表示為:
L
(
Y
,
f
(
x
)
)
=
∣
Y
?
f
(
x
)
∣
.
L(Y,f(x))=|Y-f(x)|.
L(Y,f(x))=∣Y?f(x)∣.
??
3)平方損失函數(shù)
L
(
Y
∣
f
(
x
)
)
=
∑
N
(
Y
?
f
(
x
)
)
2
.
L(Y|f(x))=\sum_{N}(Y-f(x))^2.
L(Y∣f(x))=N∑?(Y?f(x))2.
??
這點(diǎn)可從最小二乘法和歐幾里得距離角度理解。最小二乘法的原理是,最優(yōu)擬合曲線應(yīng)該 使所有點(diǎn)到回歸直線的距離和最小。
??
4)
l
o
g
log
log 對數(shù)損失函數(shù)
L
(
Y
,
P
(
Y
∣
X
)
)
=
?
l
o
g
P
(
Y
∣
X
)
.
L(Y,P(Y|X))=-logP(Y|X).
L(Y,P(Y∣X))=?logP(Y∣X).
??
常見的邏輯回歸使用的就是對數(shù)損失函數(shù),有很多人認(rèn)為邏輯回歸的損失函數(shù)式平方損失, 其實(shí)不然。邏輯回歸它假設(shè)樣本服從伯努利分布,進(jìn)而求得滿足該分布的似然函數(shù),接著取對 數(shù)求極值等。邏輯回歸推導(dǎo)出的經(jīng)驗(yàn)風(fēng)險(xiǎn)函數(shù)是最小化負(fù)的似然函數(shù),從損失函數(shù)的角度看, 就是
l
o
g
log
log 損失函數(shù)。
??
5)指數(shù)損失函數(shù)
??
指數(shù)損失函數(shù)的標(biāo)準(zhǔn)形式為:
L
(
Y
∣
f
(
x
)
)
=
e
x
p
[
?
y
f
(
x
)
]
.
L(Y|f(x))=exp[-yf(x)].
L(Y∣f(x))=exp[?yf(x)].
??
例如 AdaBoost 就是以指數(shù)損失函數(shù)為損失函數(shù)。
??
6)Hinge 損失函數(shù)
Hinge 損失函數(shù)的標(biāo)準(zhǔn)形式如下:
L
(
y
)
=
m
a
x
(
0
,
1
?
t
y
)
.
L(y)=max(0, 1-ty).
L(y)=max(0,1?ty).
其中 y y y 是預(yù)測值,范圍為 ( ? 1 , 1 ) (-1,1) (?1,1), t t t 為目標(biāo)值,其為 ? 1 -1 ?1 或 1 1 1。
在線性支持向量機(jī)中,最優(yōu)化問題可等價(jià)于:
m
i
n
w
,
b
∑
i
=
1
N
(
1
?
y
i
(
w
x
i
+
b
)
)
+
λ
∥
w
2
∥
\underset{w,b}{min}\sum_{i=1}^{N}(1-y_i(wx_i+b))+\lambda \lVert w^2 \rVert
w,bmin?i=1∑N?(1?yi?(wxi?+b))+λ∥w2∥
11. 如何進(jìn)行特征選擇(feature selection)?
1 如何考慮特征選擇
當(dāng)數(shù)據(jù)預(yù)處理完成后,我們需要選擇有意義的特征輸入機(jī)器學(xué)習(xí)的算法和模型進(jìn)行訓(xùn)練。通常來說,從兩個(gè)方面考慮來選擇特征:
??
(1)特征是否發(fā)散:如果一個(gè)特征不發(fā)散,例如方差接近于
0
0
0,也就是說樣本在這個(gè)特 征上基本上沒有差異,這個(gè)特征對于樣本的區(qū)分并沒有什么用。
??
(2)特征與目標(biāo)的相關(guān)性:這點(diǎn)比較顯見,與目標(biāo)相關(guān)性高的特征,應(yīng)當(dāng)優(yōu)選選擇。除移除低方差法外,本文介紹的其他方法均從相關(guān)性考慮。
2 特征選擇方法分類
根據(jù)特征選擇的形式又可以將特征選擇方法分為 3 3 3 種:
??
(1)Filter:過濾法,按照發(fā)散性或者相關(guān)性對各個(gè)特征進(jìn)行評分,設(shè)定閾值或者待選擇
閾值的個(gè)數(shù),選擇特征。
??
(2)Wrapper:包裝法,根據(jù)目標(biāo)函數(shù)(通常是預(yù)測效果評分),每次選擇若干特征,或
者排除若干特征。
??
(3)Embedded:嵌入法,先使用某些機(jī)器學(xué)習(xí)的算法和模型進(jìn)行訓(xùn)練,得到各個(gè)特征的權(quán)值系數(shù),根據(jù)系數(shù)從大到小選擇特征。類似于 Filter 方法,但是是通過訓(xùn)練來確定特征的優(yōu)劣。
3 特征選擇目的
(1)減少特征數(shù)量、降維,使模型泛化能力更強(qiáng),減少過擬合;
??
(2)增強(qiáng)對特征和特征值之間的理解。拿到數(shù)據(jù)集,一個(gè)特征選擇方法,往往很難同時(shí)完成這兩個(gè)目的。通常情況下,選擇一種自己最熟悉或者最方便的特征選擇方法(往往目的是降維,而忽略了對特征和數(shù)據(jù)理解的目的)。 本文將結(jié)合 Scikit-learn 提供的例子介紹幾種常用的特征選擇方法,它們各自的優(yōu)缺點(diǎn)和問題。
12 . 梯度消失/梯度爆炸原因,以及解決方法
1 為什么要使用梯度更新規(guī)則?
在介紹梯度消失以及爆炸之前,先簡單說一說梯度消失的根源—–深度神經(jīng)網(wǎng)絡(luò)和反向傳 播。目前深度學(xué)習(xí)方法中,深度神經(jīng)網(wǎng)絡(luò)的發(fā)展造就了我們可以構(gòu)建更深層的網(wǎng)絡(luò)完成更復(fù)雜 的任務(wù),深層網(wǎng)絡(luò)比如深度卷積網(wǎng)絡(luò),LSTM 等等,而且最終結(jié)果表明,在處理復(fù)雜任務(wù)上, 深度網(wǎng)絡(luò)比淺層的網(wǎng)絡(luò)具有更好的效果。但是,目前優(yōu)化神經(jīng)網(wǎng)絡(luò)的方法都是基于反向傳播的 思想,即根據(jù)損失函數(shù)計(jì)算的誤差通過梯度反向傳播的方式,指導(dǎo)深度網(wǎng)絡(luò)權(quán)值的更新優(yōu)化。 這樣做是有一定原因的,首先,深層網(wǎng)絡(luò)由許多非線性層堆疊而來,每一層非線性層都可以視 為是一個(gè)非線性函數(shù)
f
(
x
)
f(x)
f(x)(
f
(
x
)
f(x)
f(x)非線性來自于非線性激活函數(shù)),因此整個(gè)深度網(wǎng)絡(luò)可以視為是一個(gè)復(fù)合的非線性多元函數(shù):
F
(
x
)
=
f
n
(
?
f
3
(
f
2
(
f
1
(
x
)
?
θ
1
+
b
)
?
θ
2
+
b
)
?
?
)
F(x)=f_n(\cdots f_3(f_2(f_1(x)*\theta_1+b)*\theta_2+b)\cdots)
F(x)=fn?(?f3?(f2?(f1?(x)?θ1?+b)?θ2?+b)?)
??
我們最終的目的是希望這個(gè)多元函數(shù)可以很好的完成輸入到輸出之間的映射,假設(shè)不同的輸入,輸出的最優(yōu)解是
g
(
x
)
g(x)
g(x) ,那么,優(yōu)化深度網(wǎng)絡(luò)就是為了尋找到合適的權(quán)值,滿足
L
o
s
s
=
L
(
g
(
x
)
,
F
(
x
)
)
Loss=L(g(x),F(x))
Loss=L(g(x),F(x))取得極小值點(diǎn),比如最簡單的損失函數(shù):
L
o
s
s
=
∥
g
(
x
)
?
f
(
x
)
∥
2
2
.
Loss = \lVert g(x)-f(x) \rVert^2_2.
Loss=∥g(x)?f(x)∥22?.
??
假設(shè)損失函數(shù)的數(shù)據(jù)空間是下圖這樣的,我們最優(yōu)的權(quán)值就是為了尋找下圖中的最小值點(diǎn), 對于這種數(shù)學(xué)尋找最小值問題,采用梯度下降的方法再適合不過了。
2 梯度消失、爆炸原因?
梯度消失與梯度爆炸其實(shí)是一種情況,看接下來的文章就知道了。兩種情況下梯度消失經(jīng) 常出現(xiàn),一是在深層網(wǎng)絡(luò)中,二是采用了不合適的損失函數(shù),比如 sigmoid。梯度爆炸一般出 現(xiàn)在深層網(wǎng)絡(luò)和權(quán)值初始化值太大的情況下,下面分別從這兩個(gè)角度分析梯度消失和爆炸的原因。
??
(1)深層網(wǎng)絡(luò)角度
??
對激活函數(shù)進(jìn)行求導(dǎo),如果此部分大于
1
1
1,那么層數(shù)增多的時(shí)候,最終的求出的梯度更新 將以指數(shù)形式增加,即發(fā)生梯度爆炸,如果此部分小于
1
1
1,那么隨著層數(shù)增多,求出的梯度更 新信息將會(huì)以指數(shù)形式衰減,即發(fā)生了梯度消失。
??
從深層網(wǎng)絡(luò)角度來講,不同的層學(xué)習(xí)的速度差異很大,表現(xiàn)為網(wǎng)絡(luò)中靠近輸出的層學(xué)習(xí)的 情況很好,靠近輸入的層學(xué)習(xí)的很慢,有時(shí)甚至訓(xùn)練了很久,前幾層的權(quán)值和剛開始隨機(jī)初始 化的值差不多。因此,梯度消失、爆炸,其根本原因在于反向傳播訓(xùn)練法則,屬于先天不足, 另外多說一句,Hinton 提出 capsule 的原因就是為了徹底拋棄反向傳播,如果真能大范圍普及, 那真是一個(gè)革命。
??
(2)激活函數(shù)角度
??
計(jì)算權(quán)值更新信息的時(shí)候需要計(jì)算前層偏導(dǎo)信息,因此如果激活函數(shù)選擇不合適,比如使用 sigmoid,梯度消失就會(huì)很明顯了,原因看下圖,左圖是sigmoid的損失函數(shù)圖,右邊是其倒數(shù)的圖像,如果使用 sigmoid 作為損失函數(shù),其梯度是不可能超過
0.25
0.25
0.25 的,這樣經(jīng)過鏈?zhǔn)角髮?dǎo)之后,很容易發(fā)生梯度消失。
3 梯度消失、爆炸的解決方案
方案1-預(yù)訓(xùn)練加微調(diào)
??
此方法來自Hinton在2006年發(fā)表的一篇論文,Hinton為了解決梯度的問題,提出采取無監(jiān)督逐層訓(xùn)練方法,其基本思想是每次訓(xùn)練一層隱節(jié)點(diǎn),訓(xùn)練時(shí)將上一層隱節(jié)點(diǎn)的輸出作為輸入,而本層隱節(jié)點(diǎn)的輸出作為下一層隱節(jié)點(diǎn)的輸入,此過程就是逐層“預(yù)訓(xùn)練”(pre-training);在預(yù)訓(xùn)練完成后,再對整個(gè)網(wǎng)絡(luò)進(jìn)行“微調(diào)”(fine-tunning)。Hinton在訓(xùn)練深度信念網(wǎng)絡(luò)(Deep Belief Networks中,使用了這個(gè)方法,在各層預(yù)訓(xùn)練完成后,再利用BP算法對整個(gè)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。此思想相當(dāng)于是先尋找局部最優(yōu),然后整合起來尋找全局最優(yōu),此方法有一定的好處,但是目前應(yīng)用的不是很多了。
??
方案2-梯度剪切、正則
??
梯度剪切這個(gè)方案主要是針對梯度爆炸提出的,其思想是設(shè)置一個(gè)梯度剪切閾值,然后更新梯度的時(shí)候,如果梯度超過這個(gè)閾值,那么就將其強(qiáng)制限制在這個(gè)范圍之內(nèi)。這可以防止梯度爆炸。
??
另外一種解決梯度爆炸的手段是采用權(quán)重正則化(weithts regularization)比較常見的是l1l1正則,和l2l2正則,在各個(gè)深度框架中都有相應(yīng)的API可以使用正則化。
??
方案3-relu、leakrelu、elu等激活函數(shù)
??
Relu
??
思想也很簡單,如果激活函數(shù)的導(dǎo)數(shù)為1,那么就不存在梯度消失爆炸的問題了,每層的網(wǎng)絡(luò)都可以得到相同的更新速度,relu就這樣應(yīng)運(yùn)而生。
??
relu函數(shù)的導(dǎo)數(shù)在正數(shù)部分是恒等于1的,因此在深層網(wǎng)絡(luò)中使用relu激活函數(shù)就不會(huì)導(dǎo)致梯度消失和爆炸的問題。
relu的主要貢獻(xiàn)在于:
??
(1)解決了梯度消失、爆炸的問題
??
(2)計(jì)算方便,計(jì)算速度快
??
(3)加速了網(wǎng)絡(luò)的訓(xùn)練
??
同時(shí)也存在一些缺點(diǎn):
??
(1)由于負(fù)數(shù)部分恒為0,會(huì)導(dǎo)致一些神經(jīng)元無法激活(可通過設(shè)置小學(xué)習(xí)率部分解決);
??
(2)輸出不是以0為中心的。
??
leakrelu
??
leakrelu就是為了解決relu的0區(qū)間帶來的影響,其數(shù)學(xué)表達(dá)為:leakrelu
=
m
a
x
(
k
?
x
,
0
)
=max(k*x,0)
=max(k?x,0)其中
k
k
k是leak系數(shù),一般選擇
0.01
0.01
0.01或者
0.02
0.02
0.02,或者通過學(xué)習(xí)而來。
??
方案4-batchnorm
??
Batchnorm是深度學(xué)習(xí)發(fā)展以來提出的最重要的成果之一了,目前已經(jīng)被廣泛的應(yīng)用到了各大網(wǎng)絡(luò)中,具有加速網(wǎng)絡(luò)收斂速度,提升訓(xùn)練穩(wěn)定性的效果,Batchnorm本質(zhì)上是解決反向傳播過程中的梯度問題。Batchnorm全名是Batch Normalization,簡稱BN,即批規(guī)范化,通過規(guī)范化操作將輸出信號
x
x
x規(guī)范化到均值為
0
0
0,方差為
1
1
1保證網(wǎng)絡(luò)的穩(wěn)定性。
??
方案5-殘差結(jié)構(gòu)
??
事實(shí)上,就是殘差網(wǎng)絡(luò)的出現(xiàn)導(dǎo)致了Imagenet比賽的終結(jié),自從殘差提出后,幾乎所有的深度網(wǎng)絡(luò)都離不開殘差的身影,相比較之前的幾層,幾十層的深度網(wǎng)絡(luò),在殘差網(wǎng)絡(luò)面前都不值一提,殘差可以很輕松的構(gòu)建幾百層,一千多層的網(wǎng)絡(luò)而不用擔(dān)心梯度消失過快的問題,原因就在于殘差的捷徑(shortcut)部分。文章來源:http://www.zghlxwxcb.cn/news/detail-827887.html
??
方案6-LSTM
??
LSTM全稱是長短期記憶網(wǎng)絡(luò)(long-short term memory networks),是不那么容易發(fā)生梯度消失的,主要原因在于LSTM內(nèi)部復(fù)雜的“門”(gates)。文章來源地址http://www.zghlxwxcb.cn/news/detail-827887.html
到了這里,關(guān)于深度學(xué)習(xí)優(yōu)化算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!