ML讀書筆記(前向神經網絡)

A.

1. 擬合異或的問題

2個輸入變量X和Y,寫出異或真值表(<0,0>=>0, <0,1>=>1, <1,0>=>1, <1,1>=>0),擬合異或:

如果直接使用線性變化+激活函數,即f(aX+bY+c), f可以爲sigmoid函數,根據激活函數單調性,由第1和第2條可得b是正數,由第1和第3條可得a是正數,第2和第4條可得a是負數和之前矛盾,第3和第4條可得b是負數和之前矛盾。

使用一層隱藏層+激活函數+線性輸出層,隱藏層只有2個神經元,激活函數用ReLU; 神經元H1=X+Y-1;神經元H2=-X-Y+1; 前者得(-1,0,0,1),後者得(1,0,0,-1);經過ReLU,前者得Z1=(0,0,0,1),後者得Z2=(1,0,0,0);輸出層-Z1-Z2+1, 得(0,1,1,0),即異或;

通用近似定理:至少一層具有任何一種“擠壓”性質的激活函數的隱藏層+線性輸出層,只要隱藏層單元足夠多,可以以任意精度近似任何函數。(一層隱藏層,不太好學習到參數,所以通常都是多層)

 

B.

激活函數的作用:對於線性不可分問題(如異或函數),需要非線性變換對數據的分佈進行重新映射。非線性激活函數,可避免多層網絡等效於單層線性函數(M*N=V),從而獲得更強大的擬合能力。

sigmoid函數的導數=p(1-p); tanh函數的樣子:f(z)=(e^z-e^(-z))/(e^z+e^(-z)), 導數=1-p^2; ReLU函數的導數=當z>0時爲1,當z<=0時爲0。

梯度消失問題(導數接近0時,叫做“飽和”):sigmoid函數,當p接近0和接近1時,導數p(1-p)接近0;tanh函數,當p接近1和-1時,導數1-p^2接近0;

tanh(x)=2sigmoid(2x)-1,即tanh函數相當於sigmoid經過伸縮和平移後的;

ReLU的3個優點:1.不需要計算指數,計算複雜度低;2.ReLU的非飽和性可以有效解決梯度消失問題,提供相對寬的激活邊界(x>0都是激活範圍?);3. ReLU的單側抑制提供了網絡的稀疏表達能力(?)

ReLU的缺點:負輸入值的梯度被置0,可能導致一定比例的神經元不可逆死亡,部分參數的梯度無法更新,可能導致訓練失敗。

ReLU, Leaky ReLU, PReLU, RReLU

 

C.

反向傳播的梯度推導:注意最後一層,平方誤差損失函數則不要加激活函數,交叉熵損失函數是softmax後的p和Label-y進行交叉熵,也不用激活函數(softmax函數之前也是線性變化,沒有激活函數)

softmax的梯度推導,很麻煩;

平方誤差損失函數,爲什麼最後一層不使用激活函數:從梯度消失的角度看,加了激活會使梯度更容易消失;

 

D.

權重初始化,除了bias可以初始化爲0之外,不能全部初始化爲相等值或者0:如果全相等,會導致每層所有神經元的值全相等,反向傳播時每層梯度也全相等,廢了;

隨機初始化權重:(-\frac{1}{\sqrt{d}},\frac{1}{\sqrt{d}})   d是神經元的輸入向量維度;

 

Dropout: 本質是模型集成,可降低過擬合。假設有N個神經元,則相當於2^N個不同的網絡,進行集成;

書上說在測試階段進行縮放;先進些的是在訓練階段期間對激活值進行縮放,而測試階段保持不變,從而減少測試階段計算量

當前Dropout被大量利用於全連接網絡,而且一般人爲設置爲0.5或者0.3,而在卷積隱藏層由於卷積自身的稀疏化以及稀疏化的ReLu函數的大量使用等原因,Dropout策略在卷積隱藏層中使用較少

Dropout爲何有效:1. 減少神經元之間的聯合適應性,可降低過擬合;2.下一層的節點減少受上一層某個特別“強”的節點影響,相當於加了正則化;3. 模型集成,可降低過擬合;

 

輸入數據歸一化的原因:如果數據分佈離原點遠,只分布在某一個象限,則要學習的分割超平面w就會1.學習慢,2.容易陷入局部最優;歸一化以後數據分佈落在原點的四周,有助於w的快速收斂;

歸一化之後還得伸縮和平移,儘量恢復原始數據分佈(?)

BN(Batch Normalization): 每個神經元(而不是整個層)(u,\sigma ,\gamma ,\beta的個數:BP神經網絡的話,等於神經元的個數;卷積神經網絡的話,等於卷積核的個數,在當前mini-batch上進行歸一化;可使得網絡在每次mini-batch都去擬合範圍類似的數據分佈,更容易訓練;相當於給數據加了約束,增強了模型的泛化能力;

BN在測試時,就並沒有batch的概念,因此,這個時候用的均值和方差是全量訓練數據的均值和方差,這個可以通過移動平均法求得。

訓練時用mini-batch的歸一化,而不是全局歸一化,目的是增強模型魯棒性,減少過擬合。也正是因此,BN一般要求將訓練集完全打亂,並用一個較大的batch值,否則,一個batch的數據無法較好得代表訓練集的分佈,會影響模型訓練的效果。

\gamma ,\beta的作用:如果使用激活函數使用sigmoid,那麼這個操作會強制輸入數據分佈在sigmoid接近線性的部分,接近線性的模型顯然不好(影響整個模型的表達能力)。所以要學習伸縮和平移這兩個參數;

 

E.

1. CNN的稀疏交互:輸出之和輸入的局部區域有關;物理意義:現實世界中的數據都具有局部的特徵結構,先學習局部特徵,再將局部特徵組合起來得到複雜特徵。

2. CNN的參數共享:卷積覈對不同的輸入區域用的同一組參數;物理意義:使得卷積層具有平移等變性,即先卷積再平移,和先平移再卷積,是等價的。

均值池化VS最大池化:均值池化對背景的保留效果更好;最大池化更好的提取紋理信息;

重疊池化:步長小於窗口時;空間金字塔池化:用多種size的池化,最後將結果拼在一起;

池化能保持對平移、伸縮、旋轉操作的不變形(?)

CNN用在文本上:他用了2種embedding(1.預訓練好就不改變的;2.隨着Task訓練而變化的),卷積的輸入就變成了2個通道;

反向傳播的公式推導,可以說明梯度消失問題,隨着層數增多而明顯消失;

ResNet:爲了解決退化問題(層數越多,在訓練集和測試集上的效果不升反降);原因:梯度消散;

把x直接加到後面兩層的輸出F(x)上,即H(x)=F(x)+x,這樣F(x)只需要擬合H(x)-x即殘差,使得多加一層不會讓效果更差;反向傳播時,梯度可直接傳至兩層之前;

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