吴恩达深度学习课程要点和概念记录一(神经网络及其优化)
最近正在學習吳恩達老師的深度學習課程,學習這些課程使我對博士期間讀論文遇到的各種深度學習概念有了更深入的理解,本博客希望對于吳老師課程中主要概念進行整體性地記錄,并加入自身研究中的一些認識,以便在以后工作中查閱以及復習之用。
神經網絡與深度學習
- 線性擬合,參數w,bw, bw,b,結果zzz,www維度對應輸入向量xxx的維度
- 邏輯回歸以及SigmoidSigmoidSigmoid函數,結果aaa
- 理解線性組合函數與非線性激活函數g(z)g(z)g(z)結合構成神經元
z=wx+ba=g(z)z=wx + b \\ a=g(z)z=wx+ba=g(z) - 損失函數:loss=?(yloga+(1?y)log(1?a))loss = -(yloga + (1-y)log(1-a))loss=?(yloga+(1?y)log(1?a))
- 梯度下降:基于dw,dbdw, dbdw,db更新w,bw, bw,b,參數:學習率α\alphaα
- 鏈式法則,計算圖,反向傳播
如何計算dz,da,dw,db - 結構化數據以及非結構化數據,人類與機器處理這兩種數據的不同
- 向量化與廣播(從一個向量到一組向量)
- 深度神經網絡中,第lll層神經網絡有n[l]n^{[l]}n[l]個神經元,計算每一層參數的維度:
W:(n[l],n[l?1])W: (n^{[l]}, n^{[l-1]})W:(n[l],n[l?1]), b:(n[l],1)b: (n^{[l]}, 1)b:(n[l],1)
可以理解為前一層神經元輸出,正好是下一層的輸入向量,對于下一層每個神經元,w維度與前一層神經元數量相同。 - 每一層結果的維度:Z,A:(n[l],m)Z, A: (n^{[l]}, m)Z,A:(n[l],m)
每一列代表一個數據實例 - 不同的激活函數: sigmoidsigmoidsigmoid,tanhtanhtanh,relurelurelu, reluleakyrelu_{leaky}reluleaky?
如果使用線性激活函數,多層神經網絡等價于一層神經網絡 - 隨機初始化:如果全部初始化為0,那么每層中每個神經元都是對稱的,它們對應的參數在梯度下降計算中也是相同的。
- 為什么需要深度?減少神經元數量,每一層逐漸進行特征抽象
- 參數與超參數。參數可以學習,超參數需要人工設置。
優化深度神經網絡
- 訓練集、驗證集、測試集
- 偏差與方差。偏差大是指Training Error 與 Bayes Error相差大,方差大是指Test Error與Training Error相差大。偏差和方差的比較是相對的。偏差大表示訓練不充分或者網絡結構太簡單,方差大表示存在過擬合問題
- 解決偏差大:使用更復雜的網絡結構、更多神經元、更多層,訓練更長時間
- 解決方差大:增加訓練數據、正則化、Early Stopping
- 正則化:L2、L1、Dropout
為什么正則化能夠解決方差大的問題:避免某個特征權重過高,避免學習離群點的特征,使網絡更簡單。 - Dropout應用時:訓練時對每一層采用一定的概率隨機dropout神經元,測試和應用時不dropout神經元
- Normalization Input: 將原始數據減去均值μ\muμ,再除以方差σ2\sigma^{2}σ2
μ=1mΣxx:=x?μσ2=1mΣx2x:=x/σ2\mu = \frac{1}{m}\Sigma x \\ x:=x-\mu \\ \sigma^{2} = \frac{1}{m}\Sigma x^2 \\ x:= x / \sigma ^ 2μ=m1?Σxx:=x?μσ2=m1?Σx2x:=x/σ2
好處:能夠選擇更大的學習率,如果權重之間差距過大,那么學習率只能選擇較小的值,否則無法保證cost函數經過一輪之后是下降的
- 梯度消失和梯度爆炸:W取值大于1或者小于1,在深度過高時,其計算的值要么趨于無窮大,要么趨于0.
- 選擇合適的W初始值。前一層神經元越多(即下一層輸入數據的特征越多,每個神經元權重分量越多),為了確保下一層神經元計算的Z值不要太大,選擇w越小。
[文章](https://blog.csdn.net/red_stone1/article/details/78208851])有講解 - 梯度檢查:可以采用導數的定義查看梯度計算是否正確
- batch梯度下降:在整個訓練集上進行訓練,每次進行一次梯度下降
- mini-batch 梯度下降:將訓練集進行劃分成若干等份,每份子集進行一次梯度下降。
適用于訓練集過大的情況。 - Epoch:在訓練集上完整地訓練一次被稱為一次epoch
- SGD:每次針對一個測試實例進行梯度下降
- 不同訓練場景下,cost函數變化:Batch 平穩下降,mini-batch震蕩下降
- 怎樣減小震蕩下降的幅度? 在梯度下降基礎上,引入新的優化算法
- 動量梯度下降算法:基于指數加權平均,使W、b變化盡可能平滑
- RMSprop:也是使W,b并盡可能平滑,每次梯度下降時dwd_wdw?要除以Sw\sqrt{S_{w}}Sw??
Sw=βSdw+(1?β)dw2S_{w} = \beta S_{dw} + (1-\beta)d_w^2Sw?=βSdw?+(1?β)dw2? - Adam優化算法:動量梯度下降與RMSprop結合
- 學習率遞減:隨著epoch增加,α\alphaα逐漸減小
- 局部最小值問題 與鞍點
- 隨機化選擇超參數進行Tuning:嘗試更多的超參數組合,避免網格化超參數tuning
不同種類超參數的重要性不同,對于每個超參數都要盡量嘗試更多的取值,并在tuning過程中逐步縮小范圍 - linear scale vs log scale 進行超參數取值
- Batch Normalization:在神經網絡每一層,對ZZZ進行標準化處理后,通過兩個可以訓練的參數γ\gammaγ和β\betaβ來自由設置ZZZ的方差和均值。
從原論文中有以下公式:
μ:=1mΣxiσ2:=1mΣ(xi?μ)2x^:=x?μσ2+?y^:=γx^+β\mu := \frac{1}{m}\Sigma x_i \\ \sigma^2 := \frac{1}{m}\Sigma(x_i-\mu)^2 \\ \hat{x} := \frac{x-\mu}{\sqrt{\sigma^2 + \epsilon}} \\ \hat{y} := \gamma\hat{x} + \beta μ:=m1?Σxi?σ2:=m1?Σ(xi??μ)2x^:=σ2+??x?μ?y^?:=γx^+β
好處:Z的方差和均值可以控制,那么每一層神經元參數相對獨立的,那么前面一層神經元參數變化太大不會影響到后面的神經元參數。因此能夠加速神經網絡訓練。Batch Normalization還有輕微正則化效果。
-
對單個測試實例使用batch normalization:基于指數加權平均估計測試實例的μ\muμ和σ\sigmaσ
-
多分類問題:softmax分類器,假設是三分類問題,z1z^1z1,z2z^2z2, z3z^3z3分別代表三個神經元的線性組合函數結果,并基于以下公式計算對應分類的概率
y1^=ez1ez1+ez2+ez3\hat{y^1} = \frac{e^{z^{1}}}{e^{z^{1}} + e^{z^{2}} + e^{z^{3}}}y1^?=ez1+ez2+ez3ez1? -
多分類問題的loss函數:
loss=?1mΣyilogyi^loss = -\frac{1}{m}\Sigma y_ilog\hat{y_i}loss=?m1?Σyi?logyi?^? -
深度學習框架
總結
以上是生活随笔為你收集整理的吴恩达深度学习课程要点和概念记录一(神经网络及其优化)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 昆明理工大学计算机面试题,2016年昆明
- 下一篇: C语言字符串中获取数字