人工智能:深层神经网络
為什么使用深層網絡
對于人臉識別等應用,神經網絡的第一層從原始圖片中提取人臉的輪廓和邊緣,每個神經元學習到不同邊緣的信息;網絡的第二層將第一層學得的邊緣信息組合起來,形成人臉的一些局部的特征,例如眼睛、嘴巴等;后面的幾層逐步將上一層的特征組合起來,形成人臉的模樣。隨著神經網絡層數的增加,特征也從原來的邊緣逐步擴展為人臉的整體,由整體到局部,由簡單到復雜。層數越多,那么模型學習的效果也就越精確。
通過例子可以看到,隨著神經網絡的深度加深,模型能學習到更加復雜的問題,功能也更加強大。
1.4.1 深層神經網絡表示
1.4.1.1 什么是深層網絡?
?
使用淺層網絡的時候很多分類等問題得不到很好的解決,所以需要深層的網絡。
1.4.2 四層網絡的前向傳播與反向傳播
?
在這里首先對每層的符號進行一個確定,我們設置L為第幾層,n為每一層的個數,L=[L1,L2,L3,L4],n=[5,5,3,1]
1.4.2.1 前向傳播
首先還是以單個樣本來進行表示,每層經過線性計算和激活函數兩步計算
z^{[1]} = W^{[1]}x+b^{[1]}, a^{[1]}=g^{[1]}(z^{[1]})z?[1]??=W?[1]??x+b?[1]??,a?[1]??=g?[1]??(z?[1]??), 輸入xx, 輸出a^{[1]}a?[1]??
z^{[2]} = W^{[2]}a^{[1]}+b^{[2]}, a^{[2]}=g^{[2]}(z^{[2]})z?[2]??=W?[2]??a?[1]??+b?[2]??,a?[2]??=g?[2]??(z?[2]??),輸入a^{[1]}a?[1]??, 輸出a^{[2]}a?[2]??
z^{[3]} = W^{[3]}a^{[2]}+b^{[3]},a^{[3]}=g^{[3]}(z^{[3]})z?[3]??=W?[3]??a?[2]??+b?[3]??,a?[3]??=g?[3]??(z?[3]??), 輸入a^{[2]}a?[2]??, 輸出a^{[3]}a?[3]??
z^{[4]} = W^{[4]}a^{[3]}+b^{[4]},a^{[4]}=\sigma(z^{[4]})z?[4]??=W?[4]??a?[3]??+b?[4]??,a?[4]??=σ(z?[4]??), 輸入a^{[3]}a?[3]??, 輸出a^{[4]}a?[4]??
我們將上式簡單的用通用公式表達出來,x = a^{[0]}x=a?[0]??
z^{[L]} = W^{[L]}a^{[L-1]}+b^{[L]}, a^{[L]}=g^{[L]}(z^{[L]})z?[L]??=W?[L]??a?[L?1]??+b?[L]??,a?[L]??=g?[L]??(z?[L]??), 輸入a^{[L-1]}a?[L?1]??, 輸出a^{[L]}a?[L]??
- m個樣本的向量表示
Z^{[L]} = W^{[L]}A^{[L-1]}+b^{[L]}Z?[L]??=W?[L]??A?[L?1]??+b?[L]??
A^{[L]}=g^{[L]}(Z^{[L]})A?[L]??=g?[L]??(Z?[L]??)
輸入a^{[L-1]}a?[L?1]??, 輸出a^{[L]}a?[L]??
1.4.2.2 反向傳播
因為涉及到的層數較多,所以我們通過一個圖來表示反向的過程
?
- 反向傳播的結果(理解)
單個樣本的反向傳播:
dZ^{[l]}=\frac{dJ}{da^{[l]}}\frac{da^{[l]}}{dZ^{[l]}}=da^{[l]}*g^{[l]}{'}(Z^{[l]})dZ?[l]??=?da?[l]????dJ???dZ?[l]????da?[l]????=da?[l]???g?[l]???′??(Z?[l]??)
dW^{[l]}=\frac{dJ}{dZ^{[l]}}\frac{dZ^{[l]}}{dW^{[l]}}=dZ^{[l]}\cdot a^{[l-1]}dW?[l]??=?dZ?[l]????dJ???dW?[l]????dZ?[l]????=dZ?[l]???a?[l?1]??
db^{[l]}=\frac{dJ}{dZ^{[l]}}\frac{dZ^{[l]}}{db^{[l]}}=dZ^{[l]}db?[l]??=?dZ?[l]????dJ???db?[l]????dZ?[l]????=dZ?[l]??
da^{[l-1]}=W^{[l]T}\cdot dZ^{[l]}da?[l?1]??=W?[l]T???dZ?[l]??
多個樣本的反向傳播
dZ^{[l]}=dA^{[l]}*g^{[l]}{'}(Z^{[l]})dZ?[l]??=dA?[l]???g?[l]???′??(Z?[l]??)
dW^{[l]}=\frac{1}{m}dZ^{[l]}\cdot {A^{[l-1]}}^{T}dW?[l]??=?m??1??dZ?[l]???A?[l?1]???T??
db^{[l]}=\frac{1}{m}np.sum(dZ^{[l]},axis=1)db?[l]??=?m??1??np.sum(dZ?[l]??,axis=1)
dA^{[l]}=W^{[l+1]T}\cdot dZ^{[l+1]}dA?[l]??=W?[l+1]T???dZ?[l+1]??
1.4.3 參數與超參數
1.4.3.1 參數
參數即是我們在過程中想要模型學習到的信息(模型自己能計算出來的),例如 W[l]W[l],b[l]b[l]。而超參數(hyper parameters)即為控制參數的輸出值的一些網絡信息(需要人經驗判斷)。超參數的改變會導致最終得到的參數 W[l],b[l] 的改變。
1.4.3.2 超參數
典型的超參數有:
- 學習速率:α
- 迭代次數:N
- 隱藏層的層數:L
- 每一層的神經元個數:n[1],n[2],...
- 激活函數 g(z) 的選擇
當開發新應用時,預先很難準確知道超參數的最優值應該是什么。因此,通常需要嘗試很多不同的值。應用深度學習領域是一個很大程度基于經驗的過程。
1.4.3.3 參數初始化
- 為什么要隨機初始化權重
如果在初始時將兩個隱藏神經元的參數設置為相同的大小,那么兩個隱藏神經元對輸出單元的影響也是相同的,通過反向梯度下降去進行計算的時候,會得到同樣的梯度大小,所以在經過多次迭代后,兩個隱藏層單位仍然是對稱的。無論設置多少個隱藏單元,其最終的影響都是相同的,那么多個隱藏神經元就沒有了意義。
在初始化的時候,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。
總結
以上是生活随笔為你收集整理的人工智能:深层神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 浅层神经网络
- 下一篇: 深度学习进阶:多分类与TensorFlo
