1. 深度學習與神經網絡
1.1 神經網絡基礎
Logistic迴歸
邏輯迴歸是一個主要用於二分分類的算法。即,給定一個輸入X,輸出一個改樣本屬於1對應類別的預測概率Y^=P(y=1|X)
邏輯迴歸損失函數
**損失函數(loss function)**用於衡量預測結果與真實值之間的誤差。最簡單的損失函數定義方式爲平方差損失:
當我們計算損失函數的某個點相對於w_1,w_2,bw1,w2,b的導數之後,就可以更新這次優化後的結果。
正向傳播與反向傳播
前面我們所做的整個過程分爲兩個部分,一個是從前往後的計算出梯度與損失,另外一部分是從後往前計算參數的更新梯度值。所以在神經網絡當中會經常出現兩個概念,正向傳播與反向傳播。
1.2 淺層神經網絡
也就是我們不只一個sigmoid了
1.3 激活函數的選擇
1、如果要做二分類,一定要選sigmoid
2、tanh函數,雙曲正切函數。缺點:tanh 函數存在和 sigmoid 函數一樣的缺點:當 z 趨緊無窮大(或無窮小),導數的梯度(即函數的斜率)就趨緊於 0,這使得梯度算法的速度會減慢。
3、Relu函數,當 z > 0 時,梯度始終爲 1,從而提高神經網絡基於梯度算法的運算速度,收斂速度遠大於 sigmoid 和 tanh。然而當 z < 0 時,梯度一直爲 0,但是實際的運用中,該缺陷的影響不是很大。
4、Leaky ReLU
爲什麼需要費線性激活函數?
如果網絡中沒有激活函數,那就沒有隱藏層,成線性感知器了,簡單的線性疊加
1.4 淺層神經網絡的前向傳播
1.5淺層神經網絡的反向傳播
參數:w[1],b[1],w[2],b[2]
兩步走
- 最後一次的梯度計算
- 隱藏層的梯度計算
1.6 深層神經網絡
- 爲什麼要使用深層網絡?
爲了識別更加複雜圖像識別語音識別等問題。
第一層提取人臉的輪廓和邊緣等,第二層講第一層學得的邊緣信息組合起來。。。。
參數與超參數
1 參數
參數即是我們在過程中想要模型學習到的信息(模型自己能計算出來的),例如 W[l]W[l],b[l]b[l]。而**超參數(hyper parameters)**即爲控制參數的輸出值的一些網絡信息(需要人經驗判斷)。超參數的改變會導致最終得到的參數 W[l],b[l] 的改變。
2 超參數
典型的超參數有:
- 學習速率:α
- 迭代次數:N
- 隱藏層的層數:L
- 每一層的神經元個數:n[1],n[2],…
- 激活函數 g(z) 的選擇
當開發新應用時,預先很難準確知道超參數的最優值應該是什麼。因此,通常需要嘗試很多不同的值。應用深度學習領域是一個很大程度基於經驗的過程。
參數初始化
- 爲什麼要隨機初始化權重
如果在初始時將兩個隱藏神經元的參數設置爲相同的大小,那麼兩個隱藏神經元對輸出單元的影響也是相同的,通過反向梯度下降去進行計算的時候,會得到同樣的梯度大小,所以在經過多次迭代後,兩個隱藏層單位仍然是對稱的。無論設置多少個隱藏單元,其最終的影響都是相同的,那麼多個隱藏神經元就沒有了意義。
在初始化的時候,W 參數要進行隨機初始化,不可以設置爲 0。b 因爲不存在上述問題,可以設置爲 0。
以 2 個輸入,2 個隱藏神經元爲例:
W = np.random.rand(2,2)* 0.01
b = np.zeros((2,1))
- 初始化權重的值選擇
這裏將 W 的值乘以 0.01(或者其他的常數值)的原因是爲了使得權重 W 初始化爲較小的值,這是因爲使用 sigmoid 函數或者 tanh 函數作爲激活函數時,W 比較小,則 Z=WX+b 所得的值趨近於 0,梯度較大,能夠提高算法的更新速度。而如果 W 設置的太大的話,得到的梯度較小,訓練過程因此會變得很慢。
ReLU 和 Leaky ReLU 作爲激活函數時不存在這種問題,因爲在大於 0 的時候,梯度均爲 1。
近於 0,梯度較大,能夠提高算法的更新速度。而如果 W 設置的太大的話,得到的梯度較小,訓練過程因此會變得很慢。**
ReLU 和 Leaky ReLU 作爲激活函數時不存在這種問題,因爲在大於 0 的時候,梯度均爲 1。