深度学习(神经网络)
文章目錄
- 神經網絡歷史
- 形式神經元模型(M-P模型)
- 感知器
- 多層感知器
- 誤差反向傳播算法
- 誤差函數和激活函數
- 誤差函數
- 二次代價函數
- 交叉熵代價函數
- 激活函數
- sigmoid函數
- RELU函數
- 似然函數
- softmax函數
- 隨機梯度下降法
- 批量學習方法
- 在線學習
- 小批量梯度下降法
- 學習率
- 自適應調整學習率---AdaGrad方法
神經網絡歷史
- 提出形式神經元模型(M-P模型)(1943)
- 提出感知器(1958)
- 感知器無法解決線性不可分問題(1969)
- 提出神經認知機(1980)
- 提出霍普菲爾德模型(1982)
- 提出誤差反向傳播算法(1986)
- 提出卷積神經網絡(1989)
- 提出將 預訓練和自編碼器 與 深度神經網絡 相結合(2006)
- 提出在卷積神經網絡中引入ReLU作為激活函數(2012)
形式神經元模型(M-P模型)
- 多個輸入結點 x i x_i xi? 對應一個輸出結點
- 每個輸入結點乘以連接權重 w i w_i wi?,相加得到 y y y
- y大于閾值h,輸出1,否則輸出0。
感知器
感知器能夠通過訓練自動確定參數
引入誤差修正學習:根據實際輸出與期望輸出的差值調整權重 w i w_i wi? 和閾值 h h h。
多層感知器
由 多層結構的感知器 遞階組成 輸入值向前傳播的網絡。(前饋網絡、正向傳播網絡)
通常采用三層結構:輸入層,中間層,輸出層。
誤差反向傳播算法
通過比較實際輸出和期望輸出得到的誤差信號,把誤差信號從輸出層逐層向前傳播得到各層的誤差信號,再通過調整各層的連接權重以減小誤差。
通過實際輸出和期望輸出之間的誤差 E E E 和梯度進行調整。
例:
y 1 = w 1 x + 1 , w 1 = 2 y 2 = w 2 y 1 2 , w 2 = 1 ; y_1 = w_1x + 1,w_1 = 2\\ y_2 = w_2y_1^2,w_2 = 1; y1?=w1?x+1,w1?=2y2?=w2?y12?,w2?=1;
現輸入 x = 1 x = 1 x=1 ,期望輸出 y 2 = 3 y_2 = 3 y2?=3
代入求得: y 1 = 2 ? 1 + 1 = 3 y_1 = 2 * 1 + 1 = 3 y1?=2?1+1=3, y 2 = 1 ? 3 2 = 10 y_2 = 1 * 3^2 = 10 y2?=1?32=10
誤差 E E E:與期望值相差 3 ? 10 = ? 7 3-10 = -7 3?10=?7
誤差反向傳播的梯度:
? y 2 ? w 2 = y 1 2 = 9 ? y 2 ? w 1 = ? ( w 1 x + 1 ) 2 ? w 1 = 2 x 2 w 1 + 2 x = 6 或 = ? y 2 ? y 1 ? y 1 ? w 1 = 2 w 2 y 1 ? x = 6 \frac{\partial y_2}{\partial w_2} = y_1^2 = 9 \\ \quad\\ \frac{\partial y_2}{\partial w_1} = \frac{\partial (w_1x+1)^2}{\partial w_1} = 2x^2w_1 + 2x = 6\\ 或\\ =\frac{\partial y_2}{\partial y_1}\frac{\partial y_1}{\partial w_1} = 2w_2y_1 * x= 6 ?w2??y2??=y12?=9?w1??y2??=?w1??(w1?x+1)2?=2x2w1?+2x=6或=?y1??y2???w1??y1??=2w2?y1??x=6
梯度的意義:
? y ? w :當 w = w + △ w ,則 y = y + ? y ? w △ w \frac{\partial y}{\partial w}:當w = w + \bigtriangleup w,則y = y + \frac{\partial y}{\partial w}\bigtriangleup w ?w?y?:當w=w+△w,則y=y+?w?y?△w
已知:
誤差為 ? 7 ,梯度 ? y 2 ? w 2 = 9 , ? y 2 ? w 1 = 6 誤差為-7,梯度 \frac{\partial y_2}{\partial w_2} = 9,\frac{\partial y_2}{\partial w_1} =6 誤差為?7,梯度?w2??y2??=9,?w1??y2??=6
故可修改( η 表示學習率,設 η = 1 \eta 表示學習率,設\eta =1 η表示學習率,設η=1 )
w 1 = w 1 + η E ? y 2 ? w 1 = 2 + 1 ? ( ? 7 ) / 6 = 2 ? 7 / 6 = 5 / 6 w 2 = w 2 + η E ? y 2 ? w 2 = 1 + 1 ? ( ? 7 ) / 9 = 1 ? 7 / 9 = 2 / 9 w_1 = w_1 + \frac{\eta E}{\frac{\partial y_2}{\partial w_1} } = 2 + 1*(-7)/6 = 2 - 7/6= 5/6\\ \quad\\ w_2 = w_2 + \frac{\eta E}{\frac{\partial y_2}{\partial w_2} } = 1 + 1 * (-7)/9 = 1-7/9 = 2/9 w1?=w1?+?w1??y2??ηE?=2+1?(?7)/6=2?7/6=5/6w2?=w2?+?w2??y2??ηE?=1+1?(?7)/9=1?7/9=2/9
w 1 , w 2 已被調整為新值, w 1 = 5 6 , w 2 = 2 9 w_1,w_2已被調整為新值,w_1 = \frac{5}{6},w_2=\frac{2}{9} w1?,w2?已被調整為新值,w1?=65?,w2?=92?
將此值帶入原式計算,
y 1 = 11 6 , y 2 = 121 162 y_1 = \frac{11}{6} , y_2 = \frac{121}{162} y1?=611?,y2?=162121?
可看到, y 2 y_2 y2?從原先的 10 10 10 被調整到了 121 / 162 121/162 121/162,可以看到,通過誤差反向傳播確實可以修正權值 w 1 , w 2 w_1,w_2 w1?,w2?。
但是過大的學習率會導致結果過擬合,如上,我們需要最后值為3,但修改后的值甚至小于了1。因此調整合適的學習率 η \eta η是必須的。
誤差函數和激活函數
【機器學習基礎】2、代價函數\損失函數匯總
誤差函數
用于計算誤差值 E E E
引自:https://www.cnblogs.com/go-ahead-wsg/p/12346744.html
二次代價函數
C = 1 2 n ∑ x 1 , … x n ∥ y ( x ) ? a L ( x ) ∥ 2 C=\frac{1}{2 n} \sum_{x_{1}, \ldots x_{n}}\left\|y(x)-a^{L}(x)\right\|^{2} C=2n1?x1?,…xn?∑? ?y(x)?aL(x) ?2
- C表示代價函數
- x表示樣本
- y表示實際值
- a表示輸出值
- n表示樣本的總數;
其中 a = σ ( z ) , z = ∑ w j ? x j + b a=\sigma(z), z=\sum w_j*x_j +b a=σ(z),z=∑wj??xj?+b
- a代表激活函數的輸出值
- σ代表sigmoid函數
? C ? w = ( a ? y ) σ ′ ( z ) x ? C ? b = ( a ? y ) σ ′ ( z ) \frac {\partial C} {\partial w} = (a-y)\sigma' (z)x \\\quad\\ \frac {\partial C} {\partial b} = (a-y)\sigma' (z) ?w?C?=(a?y)σ′(z)x?b?C?=(a?y)σ′(z)
注:由于反向誤差梯度與sigmoid函數的導數有關,而sigmoid函數的導數會在值較大時有較小的倒數,故會導致權值調整較小。
如下圖所示:
因此引入交叉熵代價函數
交叉熵代價函數
交叉熵代價函數(Cross-entropy cost function)是用來衡量人工神經網絡(ANN)的預測值與實際值的一種方式。與二次代價函數相比,它能更有效地促進ANN的訓練。
C = ? 1 n ∑ x 1 , x n [ y ln ? a + ( 1 ? y ) ln ? ( 1 ? a ) ] C=-\frac{1}{n} \sum_{x_{1}, x_{n}}[y \ln a+(1-y) \ln (1-a)] C=?n1?x1?,xn?∑?[ylna+(1?y)ln(1?a)]
- C表示代價函數
- x表示樣本
- y表示實際值
- a表示輸出值
- n表示樣本的總數;
a = σ ( z ) , z = ∑ w j ? x j + b σ ′ ( z ) = σ ( z ) ( 1 ? σ ( x ) ) a=\sigma(z), z=\sum w_j*x_j +b\\ \quad\\ \sigma'(z) = \sigma(z)(1-\sigma (x)) a=σ(z),z=∑wj??xj?+bσ′(z)=σ(z)(1?σ(x))
梯度求解
? C ? w j = ? 1 n ∑ x ( y σ ( z ) ? ( 1 ? y ) 1 ? σ ( z ) ) ? σ ? w j = ? 1 n ∑ x ( y σ ( z ) ? ( 1 ? y ) 1 ? σ ( z ) ) σ ′ ( z ) x j = 1 n ∑ x σ ′ ( z ) x j σ ( z ) ( 1 ? σ ( z ) ) ( σ ( z ) ? y ) = 1 n ∑ x x j ( σ ( z ) ? y ) ? C ? b = 1 n ∑ x ( σ ( z ) ? y ) \begin{aligned} \frac{\partial C}{\partial w_{j}} & =-\frac{1}{n} \sum_{x}\left(\frac{y}{\sigma(z)}-\frac{(1-y)}{1-\sigma(z)}\right) \frac{\partial \sigma}{\partial w_{j}} \\ & =-\frac{1}{n} \sum_{x}\left(\frac{y}{\sigma(z)}-\frac{(1-y)}{1-\sigma(z)}\right) \sigma^{\prime}(z) x_{j} \\ & =\frac{1}{n} \sum_{x} \frac{\sigma^{\prime}(z) x_{j}}{\sigma(z)(1-\sigma(z))}(\sigma(z)-y) \\ & =\frac{1}{n} \sum_{x} x_{j}(\sigma(z)-y) \\ \frac{\partial C}{\partial b} & =\frac{1}{n} \sum_{x}(\sigma(z)-y) \end{aligned} ?wj??C??b?C??=?n1?x∑?(σ(z)y??1?σ(z)(1?y)?)?wj??σ?=?n1?x∑?(σ(z)y??1?σ(z)(1?y)?)σ′(z)xj?=n1?x∑?σ(z)(1?σ(z))σ′(z)xj??(σ(z)?y)=n1?x∑?xj?(σ(z)?y)=n1?x∑?(σ(z)?y)?
可以看出:權值 w w w 和偏執值 b b b 的調整與 σ ′ ( z ) σ′(z) σ′(z) 無關,另外,梯度公式中的 σ ( z ) ? y σ(z)?y σ(z)?y
表示輸出值與實際值放入誤差。所以當誤差越大時,梯度就越大,參數w和b的調整就越快,訓練的速度也就越快。
總結:當輸出神經元是線性的,那么二次代價函數就是一種合適的選擇。如果輸出神經元是S型函數,那么比較適合交叉墑代價函數。
激活函數
激活函數類似于人類神經元,對輸入信號進行線性或非線性變換。
- M-P模型中使用step函數作為激活函數
- 多層感知器中使用sigmoid函數,或tanh函數(雙曲正切函數)
- 最近幾年在深度學習中,修正線性單元(Rectified Linear Unit,ReLU)
sigmoid函數
f ( u ) = 1 1 + e ? u u = ∑ i = 1 n w i x i f(u) = \frac{1}{1+e^{-u}} \\\quad\\ u = \sum_{i=1}^nw_ix_i f(u)=1+e?u1?u=i=1∑n?wi?xi?
偏導數:
? f ( u ) ? u = f ( u ) ( 1 ? f ( u ) ) \frac{\partial f(u)}{\partial u} = f(u)(1-f(u)) ?u?f(u)?=f(u)(1?f(u))
RELU函數
f ( u ) = m a x ( 0 , u ) ? f ( u ) ? u = 1 f(u) = max(0,u)\\ \quad\\ \frac{\partial f(u)}{\partial u} = 1 f(u)=max(0,u)?u?f(u)?=1
似然函數
似然函數用于計算多層感知器的輸出結果,通常以softmax函數作為似然函數。
softmax函數
p ( y k ) = e x p ( u 2 k ) ∑ q = 1 Q e x p ( u 2 q ) p(y^k) = \frac{exp(u_{2k})}{\sum_{q=1}^Q exp(u_{2q})} p(yk)=∑q=1Q?exp(u2q?)exp(u2k?)?
softmax函數的分母是對輸出層所有單元(q = 1,······,Q)的激活函數值的求和,起到歸一化的作用。
隨機梯度下降法
使用部分訓練樣本進行迭代計算,這種方法叫做隨機梯度下降法(Stochastic Gradient Descent,SGD),與之相對的是批量學習方法。
批量學習方法
計算時遍歷全部訓練樣本,設第 t t t 次迭代各訓練樣本誤差為 E n t E_n^t Ent? ,通過所有誤差項計算全部訓練樣本誤差:
E = ∑ n = 1 n E n E = \sum_{n=1}^n E_n E=n=1∑n?En?
基于全部訓練樣本得到權重權重調整值并修正網絡連接權重
w = w ? η ? E ? w w = w - \eta \frac{\partial E}{\partial w} w=w?η?w?E?
然后使用調整后的連接權重測試全部訓練樣本,如此反復迭代計算權重調整并修正網絡。
- 優點:能有效抑制訓練集內帶噪聲的樣本所導致的輸入模式劇烈變動
- 缺點:每次調整連接權值,所有樣本都要參與訓練,所有訓練時間長
在線學習
逐個輸入訓練樣本
由于在線學習每次迭代計算一個訓練樣本,所以訓練樣本的差異會導致結果出現大幅變動。
迭代結果的變動可能導致訓練無法收斂。
小批量梯度下降法
介于在線學習和批量學習之間,將訓練集分成幾個子集D,每次迭代使用一個子集。
小批量下降法能夠縮短單次訓練時間,又能降低迭代結果的變動。
由于隨機梯度下降法只使用部分訓練樣本,每次迭代后樣本集的趨勢都會發生變化,所以減少了迭代結果陷入局部最優解的情況。
學習率
用來確定權重連接調整的系數。
如果學習率過大,則有可能修正過頭
如果學習率較小,收斂速度會很慢。
自適應調整學習率—AdaGrad方法
用學習率除以截至當前時刻 t t t 的梯度 ▽ E \bigtriangledown E ▽E 的累計值,得到神經網絡的連接權重 w w w.
w = w ? η ▽ E ( t ) ∑ i = 1 t ( ▽ E ( i ) ) 2 + ε w = w - \eta\frac{\bigtriangledown E^{(t)}}{\sqrt{ \sum_{i=1}^t(\bigtriangledown E^{(i)})^2 +}\varepsilon } w=w?η∑i=1t?(▽E(i))2+?ε▽E(t)?
總結
以上是生活随笔為你收集整理的深度学习(神经网络)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux如何在文件中写命令,Linux
- 下一篇: 小乌龟使用教程(最简单版本)