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