3.5 向量化实现的解释-深度学习-Stanford吴恩达教授
| 3.4 多個例子中的向量化 | 回到目錄 | 3.6 激活函數 |
向量化實現的解釋 (Explanation for Vectorized Implementation)
在上一個視頻中,我們學習到如何將多個訓練樣本橫向堆疊成一個矩陣 XXX ,然后就可以推導出神經網絡中前向傳播(forward propagation)部分的向量化實現。
在這個視頻中,我們將會繼續了解到,為什么上一節中寫下的公式就是將多個樣本向量化的正確實現。
我們先手動對幾個樣本計算一下前向傳播,看看有什么規律: 公式3.16:
z[1](1)=W[1]x(1)+b[1]z[1](2)=W[1]x(2)+b[1]z[1](3)=W[1]x(3)+b[1]z^{[1](1)}=W^{[1]}x^{(1)}+b^{[1]}\\ z^{[1](2)}=W^{[1]}x^{(2)}+b^{[1]}\\ z^{[1](3)}=W^{[1]}x^{(3)}+b^{[1]}\\ z[1](1)=W[1]x(1)+b[1]z[1](2)=W[1]x(2)+b[1]z[1](3)=W[1]x(3)+b[1]
這里,為了描述的簡便,我們先忽略掉 b[1]b^{[1]}b[1] 后面你將會看到利用Python 的廣播機制,可以很容易的將 b[1]b^{[1]}b[1] 加進來。
現在 W[1]W^{[1]}W[1] 是一個矩陣, x(1),x(2),x(3)x^{(1)},x^{(2)},x^{(3)}x(1),x(2),x(3) 都是列向量,矩陣乘以列向量得到列向量,下面將它們用圖形直觀的表示出來: 公式3.17:
W[1]x=[???][????x(1)x(2)x(3)?????]=[????w(1)x(1)w(1)x(2)w(1)x(3)?????]=[????z[1](1)z[1](2)z[1](3)?????]=Z[1]W^{[1]}x= \left[\begin{matrix} \cdots\\ \cdots\\ \cdots\\ \end{matrix}\right] \left[\begin{matrix} \vdots & \vdots & \vdots & \vdots\\ x^{(1)} & x^{(2)} & x^{(3)} & \vdots\\ \vdots & \vdots & \vdots & \vdots\\ \end{matrix}\right]= \left[\begin{matrix} \vdots & \vdots & \vdots & \vdots\\ w^{(1)}x^{(1)} & w^{(1)}x^{(2)} & w^{(1)}x^{(3)} & \vdots\\ \vdots & \vdots & \vdots & \vdots\\ \end{matrix}\right]=\\ \left[\begin{matrix} \vdots & \vdots & \vdots & \vdots\\ z^{[1](1)} & z^{[1](2)} & z^{[1](3)} & \vdots\\ \vdots & \vdots & \vdots & \vdots\\ \end{matrix}\right] = Z^{[1]}W[1]x=?????????????????x(1)???x(2)???x(3)????????????=???????w(1)x(1)???w(1)x(2)???w(1)x(3)????????????=???????z[1](1)???z[1](2)???z[1](3)????????????=Z[1]
視頻中,吳恩達老師很細心的用不同的顏色表示不同的樣本向量,及其對應的輸出。所以從圖中可以看出,當加入更多樣本時,只需向矩陣 XXX 中加入更多列。
所以從這里我們也可以了解到,為什么之前我們對單個樣本的計算要寫成 z[1](i)=W[1]x(i)+b[1]z^{[1](i)}=W^{[1]}x^{(i)}+b^{[1]}z[1](i)=W[1]x(i)+b[1] 這種形式,因為當有不同的訓練樣本時,將它們堆到矩陣 XXX 的各列中,那么它們的輸出也就會相應的堆疊到矩陣 Z[1]Z^{[1]}Z[1] 的各列中。現在我們就可以直接計算矩陣 Z[1]Z^{[1]}Z[1] 加上 b[1]b^{[1]}b[1] ,因為列向量 b[1]b^{[1]}b[1] 和矩陣 Z[1]Z^{[1]}Z[1] 的列向量有著相同的尺寸,而Python的廣播機制對于這種矩陣與向量直接相加的處理方式是,將向量與矩陣的每一列相加。 所以這一節只是說明了為什么公式 Z[1]=W[1]X+b[1]Z^{[1]}=W^{[1]}X+b^{[1]}Z[1]=W[1]X+b[1] 是前向傳播的第一步計算的正確向量化實現,但事實證明,類似的分析可以發現,前向傳播的其它步也可以使用非常相似的邏輯,即如果將輸入按列向量橫向堆疊進矩陣,那么通過公式計算之后,也能得到成列堆疊的輸出。
最后,對這一段視頻的內容做一個總結:
由公式3.12、公式3.13、公式3.14、公式3.15可以看出,使用向量化的方法,可以不需要顯示循環,而直接通過矩陣 XXX 運算從就可以計算出 A[1]A^{[1]}A[1] ,實際上 XXX 可以記為 A[0]A^{[0]}A[0] ,使用同樣的方法就可以由神經網絡中的每一層的輸入 A[i?1]A^{[i-1]}A[i?1] 計算輸出 A[i]A^{[i]}A[i] 。其實這些方程有一定對稱性,其中第一個方程也可以寫成 Z[1]=W[1]A[0]+b[1]Z^{[1]}=W^{[1]}A^{[0]}+b^{[1]}Z[1]=W[1]A[0]+b[1] ,你看這對方程,還有這對方程形式其實很類似,只不過這里所有指標加了1。所以這樣就顯示出神經網絡的不同層次,你知道大概每一步做的都是一樣的,或者只不過同樣的計算不斷重復而已。這里我們有一個雙層神經網絡,我們在下周視頻里會講深得多的神經網絡,你看到隨著網絡的深度變大,基本上也還是重復這兩步運算,只不過是比這里你看到的重復次數更多。在下周的視頻中將會講解更深層次的神經網絡,隨著層數的加深,基本上也還是重復同樣的運算。
以上就是對神經網絡向量化實現的正確性的解釋,到目前為止,我們僅使用sigmoid函數作為激活函數,事實上這并非最好的選擇,在下一個視頻中,將會繼續深入的講解如何使用更多不同種類的激活函數。
課程板書
| 3.4 多個例子中的向量化 | 回到目錄 | 3.6 激活函數 |
總結
以上是生活随笔為你收集整理的3.5 向量化实现的解释-深度学习-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.4 多个例子中的向量化-深度学习-S
- 下一篇: 3.6 激活函数-深度学习-Stanfo