介紹
DeepLearning課程總共五大章節,該系列筆記將按照課程安排進行記錄。
另外第一章的前兩週的課程在以前的Andrew Ng機器學習課程筆記(博客園)&Andrew Ng機器學習課程筆記(CSDN)系列筆記中都有提到,因此這裏再也不贅述。html
注意:這一系列的課程中用中括號表示層數,例如\(a^{[1]}\)表示第二層(隱藏層)的數據。算法
這個圖的內容有點多,跟着下面的步驟來理解這個圖吧:網絡
首先看藍色字體,這個2層的神經網絡(輸入層通常理解成第0層)有輸入層(input layer)、隱藏層(Hidden layer)、輸出層(output layer)組成機器學習
再看紫色字體,每一層用\(a^{[i]}, i=0,1...n\)表示,\(a^{[0]}\)表示輸入層的全部數據。而下標則表示某一層的某一行的具體的數據,例如\(a^{[1]}_1\)表示隱藏層的第一個元素。函數
最後是綠色字體,介紹的分別是\(w\)(權重)和\(b\)(偏置),其中\(w^{[1]}\)表示輸入層到隱藏層的權重,其是(4,3)的矩陣,而\(b^{[1]}\)是(4,1)的矩陣。學習
這個比較簡單就不作過多解釋了,主要就是線性代數的知識。字體
仍是以上面的神經網絡爲模型進行介紹,向量化過程以下:
for i in range(m):
\(\quad \quad z^{[1](i)}=W^{[1]}x^{(i)}+b^{[1]}\)
\(\quad \quad a^{[1](i)}=σ(z^{[1](i)})\)
\(\quad \quad z^{[2](i)}=W^{[2]}x^{(i)}+b^{[2]}\)
\(\quad \quad a^{[2](i)}=σ(z^{[2](i)})\)優化
上一節中使用了for循環和矩陣向量機,這裏能夠更加完全地向量化,讓運算更加簡單,以下:
\(Z^{[1]}=W^{[1]}X+b^{[1]}\)
\(A^{[1]}=σ(Z^{[1]})\)
\(Z^{[2]}=W^{[2]}X+b^{[2]}\)
\(A^{[2]}=σ(Z^{[2]})\)spa
經常使用的一共四個激活函數.net
(1): \(σ(z)=\frac{1}{1+e^{-z}}\),通常只用在二元分類的輸出層,由於二元分類通常要求輸出結果\(y∈{0,1}\),而σ函數恰好其閾值就在0,1之間。而其它層更加建議用其餘的激活函數。因此一個神經網絡可使用多種激活函數(用\(g^{[i]}\)表示第i層的激活函數)
(2): \(tanh(z) = \frac{e^z-e^{-z}}{e^z+e^{-z}}\),上下界限分別是1,-1。它相比於\(σ(z)\)表現更好的緣由是由於它的均值在0附近,有數據中心化的效果,因此下一層在學習的時候要更加方便和快速。可是\(σ(z)\)和\(tanh(z)\)有一個共同的缺點,就是當z很大或很小的時候,它們的斜率就會趨向於0,這會使得梯度降低的學習速率下降。
梯度不飽和。梯度計算公式爲:1{x>0}。所以在反向傳播過程當中,減輕了梯度彌散的問題,神經網絡前幾層的參數也能夠很快的更新。
計算速度快。正向傳播過程當中,sigmoid和tanh函數計算激活值時須要計算指數,而Relu函數僅須要設置閾值。若是x<0,f(x)=0,若是x>0,f(x)=x。加快了正向傳播的計算速度。
所以,Relu激活函數能夠極大地加快收斂速度,相比tanh函數,收斂速度能夠加快6倍
(4): Leaky Relu,你也許發現了Relu激活函數在當z小於0的時候導數爲0,雖然這在實踐中並不影響,可是爲了進一步優化提出了Leaky Relu,在z小於0時導數不爲0.表達式通常爲\(f(x)=max(0.01x,x)\)。其中0.01是一個可調的參數,相似於學習步長α。
若是不用激勵函數(其實至關於激勵函數是f(x) = x),在這種狀況下你每一層輸出都是上層輸入的線性函數,很容易驗證,不管你神經網絡有多少層,輸出都是輸入的線性組合,與只有一個隱藏層效果至關,這種狀況就是多層感知機(MLP)了。
正由於上面的緣由,咱們決定引入非線性函數做爲激勵函數,這樣深層神經網絡就有意義了(再也不是輸入的線性組合,能夠逼近任意函數)。最先的想法是sigmoid函數或者tanh函數,輸出有界,很容易充當下一層輸入(以及一些人的生物解釋balabala)。
九、10節的內容都是介紹的神經網絡的計算過程,更加詳細的能夠參看Andrew Ng機器學習課程筆記--week5(上)(神經網絡損失函數&反向傳播算法)
在神經網絡中,若是將參數所有初始化爲0 會致使一個問題,例如對於上面的神經網絡的例子,若是將參數所有初始化爲0,在每輪參數更新的時候,與輸入單元相關的兩個隱藏單元的結果將是相同的,既:
\(a_1^{(2)}=a_2^{(2)}\)這個問題又稱之爲對稱的權重問題,所以咱們須要打破這種對稱,這裏提供一種隨機初始化參數向量的方法: 初始化\(θ_{ij}^{(l)}\)爲一個落在 [-ε,ε]區間內的隨機數, 能夠很小,可是與上面梯度檢驗( Gradient Checking)中的ε沒有任何關係。