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