網(wǎng)站名稱是什么/網(wǎng)站優(yōu)化網(wǎng)絡推廣seo
目錄
- 前言
- 1. 簡介
- 2. 神經(jīng)網(wǎng)絡中的鏈式法則
- 3. 微積分的計算
- 4. 公式含義
- 5. 代價函數(shù)對權重偏置的敏感度
- 6. 多個神經(jīng)元的情形
- 7. 回顧
- 相關資料
- 結語
前言
3Blue1Brown 視頻筆記,僅供自己參考
這個章節(jié)主要來深度講解反向傳播中的一些微積分理論
官網(wǎng):https://www.3blue1brown.com
視頻:https://www.bilibili.com/video/BV16x411V7Qg
1. 簡介
這章開始我們就假設你已經(jīng)看過第三章了,上章讓大家直觀上感受了反向傳播算法的原理
在這章里,我們會更深入講解一些其中的微積分理論,這個看不太懂很正常,所以我們的六字格言 “停一停想一想” 在這依舊管用,這章我們的目標是給大家展示在機器學習中,我們一般是怎么理解鏈式法則的,這點跟別的基礎微積分課講得會有點不一樣
對于微積分不夠熟悉的觀眾,我之前已經(jīng)做了一整個系列了,大家感興趣的可以看看:Calculus
2. 神經(jīng)網(wǎng)絡中的鏈式法則
我們從最最簡單的網(wǎng)絡講起吧,每層只有一個神經(jīng)元
圖上這個網(wǎng)絡就是由 3 個權重和 3 個偏置決定的,我們的目標是理解代價函數(shù)對于這些變量有多敏感,這樣我們就知道怎么調整這些變量才可以使得代價降低得最快,
我們先來關注最后兩個神經(jīng)元吧,我給最后一個神經(jīng)元的激活值一個上標 L,表示它處于第 L 層,那么,前一個神經(jīng)元的激活值就是 a ( L ? 1 ) a^{(L-1)} a(L?1),這里的上標不是指數(shù),而是用來標記我們正在討論哪一層,過一會我會用到下標來表示別的意思
給定一個訓練樣本,我們把這個最終層激活值要接近的目標叫做 y,例如 y 可能是 0 或者 1,那么這個簡易網(wǎng)絡對于單個訓練樣本的代價就等于 ( a ( L ) ? y ) 2 \color{black}(a^{(L)}-\color{gold}y\color{black})^2 (a(L)?y)2,對于這個樣本,我們把這個代價值標記為 C 0 \color{red}C_0 C0?
還記得嗎,最終層的激活值是這么算出來的,即一個權重 w L \color{blue}w^L wL 乘上前一個神經(jīng)元的激活值再加上一個偏置 b L \color{pink}b^L bL,最后把加權和塞進一個特定的非線性函數(shù),例如 sigmoid 或者 ReLU 之類的,給這個加權和起一個名字會方便很多,就叫它 z L \color{green}z^L zL 好了,跟對應的激活值用同一個上標
這里的項挺多,概括起來我們拿權重 w L \color{blue}w^L wL、前一個激活值 a ( L ? 1 ) a^{(L-1)} a(L?1) 以及偏置值 b L \color{pink}b^L bL 一起來算出 z L \color{green}z^L zL 再算出 a ( L ) a^{(L)} a(L),最后再用上常量 y \color{gold}y y 算出代價值 C 0 \color{red}C_0 C0?,當然 a ( L ? 1 ) a^{(L-1)} a(L?1) 也是由它自己的權重和偏置決定的,以此類推,但我們現(xiàn)在重點不在那里
上面這些東西都是數(shù)字,沒錯吧,我們可以想象每個數(shù)字都對應一個數(shù)軸,我們第一個目標是理解代價函數(shù)對權重 w L \color{blue}w^L wL 的微小變化有多敏感,或者換句話講求 C 0 \color{red}C_0 C0? 對 w L \color{blue}w^L wL 的導數(shù)
當你看到 ? w \color{blue}\partial w ?w 之類的項時,請把它當做這是對 w \color{blue}w w 的微小擾動,好比改變 0.01,然后把 ? C 0 \color{red}\partial C_0 ?C0? 當做 “改變 w \color{blue}w w 對 C 0 \color{red}C_0 C0? 的值造成的變化”,我們求得是這兩個數(shù)的比值
概念上說 w L \color{blue}w^L wL 的微小變化會導致 z L \color{green}z^L zL 產(chǎn)生些變化,然后會導致 a L a^L aL 產(chǎn)生變化,最終影響到代價值
那么,我們把式子拆開,首先求 z L \color{green}z^L zL 的變化量比上 w L \color{blue}w^L wL 的變化量,也就是求 z L \color{green}z^L zL 關于 w L \color{blue}w^L wL 的導數(shù),同理考慮 a L a^L aL 的變化量比上因變量 z L \color{green}z^L zL 的變化量,以及最終的 C 0 \color{red}C_0 C0? 的變化量比上直接改動 a L a^L aL 產(chǎn)生的變化量
這不就是鏈式法則么,把三個比值相乘就可以算出 C 0 \color{red}C_0 C0? 對 w L \color{blue}w^L wL 的微小變化有多敏感
3. 微積分的計算
現(xiàn)在圖上多了一大堆符號,稍微花點時間理解一下每個符號都是什么意思吧,因為馬上我們就要對各個部分求導了
C 0 \color{red}C_0 C0? 關于 a L a^L aL 的導數(shù)就是 2 ( a ( L ) ? y ) \color{black}2(a^{(L)}-\color{gold}y\color{black}) 2(a(L)?y),這也就意味著導數(shù)的大小跟網(wǎng)絡最終的輸出減目標結果的差成正比,如果網(wǎng)絡的輸出差別很大,即使 w \color{blue}w w 稍稍變一點代價也會改變非常大
a L a^L aL 對 z L \color{green}z^L zL 求導就是求 sigmoid 的導數(shù),或就你選擇的非線性激活函數(shù)求導
而 z L \color{green}z^L zL 對 w L \color{blue}w^L wL 求導結果就是 a L ? 1 a^{L-1} aL?1
4. 公式含義
對我自己來說,這里如果不退一步好好想想這些公式的含義,很容易卡住
就最后這個導數(shù)來說,這個權重的改變量 ? w \color{blue}\partial w ?w 對最后一層的影響有多大取決于之前一層的神經(jīng)元,所謂的 “一同激活的神經(jīng)元關聯(lián)在一起” 的出處即來源于此
不過這只是包含一個訓練樣本的代價對 w ( L ) \color{blue}w^{(L)} w(L) 的導數(shù),由于總的代價函數(shù)是許許多多訓練樣本所有代價的總平均,它對 w ( L ) \color{blue}w^{(L)} w(L) 的導數(shù)就需要求 ? C ? w ( L ) \frac{\color{red}\partial C}{\color{blue}\partial w^ {(L)}} ?w(L)?C? 這個表達式之于每一個訓練樣本的平均
當然這只是梯度向量 ? C \color{red}\nabla C ?C 的一個分量,而梯度向量 ? C \color{red}\nabla C ?C 本身則由代價函數(shù)對每一個權重和每一個偏置求偏導構成的
5. 代價函數(shù)對權重偏置的敏感度
值得注意的是,求出這些偏導中的一個就完成了一大半的工作量,對偏置的求導步驟也就基本相同,只要把 ? z ? w \frac{\color{green}\partial z}{\color{blue} \partial w} ?w?z? 替換成 ? z ? b \frac{\color{green}\partial z}{\color{pink} \partial b} ?b?z?,對應的公式中可以看出導數(shù) ? z ? b \frac{\color{green}\partial z}{\color{pink} \partial b} ?b?z? 等于 1
這里也涉及到了反向傳播的概念,我們來看下這個代價函數(shù)對上一層激活值的敏感度,展開來說,鏈式法則的第一項 z \color{green}z z 對上一層激活值的敏感度就是權重 w ( L ) \color{blue}w^{(L)} w(L)
雖然說過我們不能直接改變激活值,但我們很有必要關注這個值,因為我們可以反向應用鏈式法則來計算代價函數(shù)對之前的權重偏置的敏感度
6. 多個神經(jīng)元的情形
你可能覺得這個例子舉得太簡單了,畢竟每層只有一個神經(jīng)元,而真實的神經(jīng)網(wǎng)絡會比這個例子復雜百倍,然而說真的,每層多加若干個神經(jīng)元并不會復雜很多,真的,只不過多寫一些下標罷了
我們用加上下標的神經(jīng)元來表示 L 層的若干神經(jīng)元,而不是用 a ( L ) a^{(L)} a(L) 統(tǒng)稱 L 層的激活值,現(xiàn)在用 k 來標注 L-1 層的神經(jīng)元,j 則是 L 層的神經(jīng)元
現(xiàn)在要求代價函數(shù),我們從期望的輸出著手,計算上一層激活值和期望輸出的差值的平方然后求和,即求 ( a j ( L ) ? y j ) 2 \color{black}(a_j^{(L)}-\color{gold}y_j\color{black})^2 (aj(L)??yj?)2 的和
由于權重的數(shù)量多了不少,那么每個權重要多用幾個下標,我們記連接第 k 個神經(jīng)元和第 j 個神經(jīng)元的連線為 w j k ( L ) \color{blue}w_{jk}^{(L)} wjk(L)?,這些下標感覺像標反了,可能有點別扭,不過和第一章中的權重矩陣的下標是一致的
同樣的,把加權和記為 z 總是很方便,那么最后一層的激活值依然等于指定的函數(shù)(如 sigmoid)在 z 處的函數(shù)值
你懂我意思吧,現(xiàn)在的方程式和之前每層只有一個神經(jīng)元的時候本質是一樣的,只是看著復雜一些
鏈式法則形式的導數(shù)表達式所描述的代價對某個權重的敏感度也是一樣的,這里大家可以暫停推導一下每一項的含義,唯一改變的是代價對 L-1 層激活值的導數(shù)
此時,激活值可以通過不同的途徑影響代價函數(shù),也就是說,神經(jīng)元一邊通過 a 0 ( L ) a_0^{(L)} a0(L)? 來影響代價函數(shù),另一邊通過 a 1 ( L ) a_1^{(L)} a1(L)? 來影響代價函數(shù),得把這些都加起來,然后…就搞定了
只要計算出倒數(shù)第二層代價函數(shù)對激活值的敏感度,接下來只要重復上述過程,計算喂給倒數(shù)第二層的權重和偏置就好了
7. 回顧
現(xiàn)在長吁一口氣吧!如果上面這些明白了,那你就看明白了神經(jīng)網(wǎng)絡的主力—反向傳播
鏈式法則表達式給出了決定梯度每個分量的偏導,使得我們能不斷下探,最小化神經(jīng)網(wǎng)絡的代價
靜下來想一想你會發(fā)現(xiàn)這些復雜的層層疊疊很燒腦,消化這些知識需要花一些時間,這很正常
相關資料
- http://neuralnetworksanddeeplearning.com/chap2.html
- https://github.com/mnielsen/neural-networks-and-deep-learning
- https://colah.github.io/posts/2015-08-Backprop/
結語
這個章節(jié)我們主要學習了反向傳播以微積分的形式表達,其核心就是鏈式法則
OK,以上就是本章的全部內(nèi)容了,下章我們來講 Transformer,敬請期待😄