寫在前面:
最近在學習CS224n,系統的學習NLP理論。後面會把相關的學習筆記和代碼公開,歡迎大家和我一起討論。
#############################可愛的分割線###################################
CS224n系列:
【CS224n】Neural Networks, Backpropagation
【CS224n】Neural-Dependency-Parsing
【CS224n】Language Models, RNN, GRU and LSTM
【CS224n】Neural Machine Translation with Seq2Seq
【CS224n】ConvNets for NLP
1. Neural Networks: Foundations
1.1 A Neuron(單個神經元)
1.2 A Single Layer of Neurons(多個神經元的單層網絡)
1.3 Feed-forward Computation(前向計算)
1.4 Maximum Margin Objective Function(最大邊界損失函數)
其中,s爲正標籤樣本得分,爲負標籤樣本得分,爲邊界寬度,類似於SVM的分類間隔。
1.5 Training with Backpropagation – Element(反向傳播)
隨機梯度下降(SGD):
反向傳播準則爲鏈式法則,推導較長,參考:http://web.stanford.edu/class/cs224n/readings/cs224n-2019-notes03-neuralnets.pdf
2 Neural Networks: Tips and Tricks
2.1 Gradient Check(梯度檢查)
我們可以使用以下方法來對反向傳播計算的梯度結果做檢查:
該公式爲對參數求導,反向傳播計算的梯度結果應該接近於該結果。
實際應用中不直接求導的原因是真實場景的神經網絡的參數量巨大,每個參數每次迭代都要計算一次,使用該方法非常耗時。(反向傳播中使用矩陣運算可以大大提高效率)
2.2 Regularization(正則化)
正則化是爲了防止模型過擬合。
正則化:
正則化:參數的絕對值之和。
2.3 Dropout
Dropout也是一種正則化技術,同樣可以防止模型過擬合。
基本原理爲:訓練階段,每一次訓練過程,以p的概率隨機選擇一部分參數進行訓練,其他參數不動;測試階段,使用所有參數進行預測。
Dropout有效的原因:因爲dropout的隨機選擇訓練參數的特性,相當於訓練了很多個小網絡(指數級增長),最後平均化訓練結果(相當於做了ensemble,模型泛化能力更強)。
2.4 Neuron Units(激活函數)
激活函數主要關注公式及對應的曲線;
2.4.1 Sigmoid
sigmoid 求導:
2.4.2 Tanh
tanh函數爲sigmoid函數的可替代品,且比sigmoid函數更快收斂。區別在於sigmoid取值範圍爲[0,1],而tanh函數取值範圍爲[-1,1]。
2.4.3 Hard tanh
2.4.4 Soft sign
2.4.5 ReLU(Rectified Linear Unit)
2.4.6 Leaky ReLU
2.5 Data Preprocessing(數據預處理)
2.5.1 Mean Subtraction(去均值化)
Mean Subtraction就是在訓練數據中,計算均值,對每個樣本減去均值。一個重要的點是:均值計算過程只在訓練集中進行,得到的均值同時適用於訓練集,驗證集,測試集。
2.5.2 Normalization(歸一化)
歸一化是爲了把不同維度的特徵規範到同個範疇內,具體做法是對每個特徵除以各自的標準差。
2.5.3 Whitening
白化是將數據轉換爲恆等協方差的矩陣。
2.6 Parameter Initialization
一個好的參數初始化的策略是:將權重初始化在0附近的較小隨機數
實驗表明,上述初始化策略對於sigmoid和tanh激活函數,能更快地收斂和達到更低的錯誤率。
而偏置通常被初始化爲0.
2.7 Learning Strategies
其中,爲學習率,可以控制模型參數的學習速率。學習率的設置應該是先大後小。
2.9 Adaptive Optimization Methods
自適應優化方法,目的是爲了更好地控制學習率。
RMS:
從該式子可以看到,學習率跟訓練過程中的梯度有關,梯度累積越大,學習率越小(梯度累積越大,說明模型學到的東西更多,隨着學習過程的進行,學習率應該越來越低)。
Adam:
相比RMS,Adam多了個參數m,來控制學習率的變化。