神经网络入门篇:详解计算一个神经网络的输出(Computing a Neural Network's output)
一個神經(jīng)網(wǎng)絡(luò)的輸出
首先,回顧下只有一個隱藏層的簡單兩層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu):
圖1.3.1
其中,\(x\)表示輸入特征,\(a\)表示每個神經(jīng)元的輸出,\(W\)表示特征的權(quán)重,上標(biāo)表示神經(jīng)網(wǎng)絡(luò)的層數(shù)(隱藏層為1),下標(biāo)表示該層的第幾個神經(jīng)元。這是神經(jīng)網(wǎng)絡(luò)的符號慣例,下同。
神經(jīng)網(wǎng)絡(luò)的計算
關(guān)于神經(jīng)網(wǎng)絡(luò)是怎么計算的,從之前提及的邏輯回歸開始,如下圖所示。用圓圈表示神經(jīng)網(wǎng)絡(luò)的計算單元,邏輯回歸的計算有兩個步驟,首先按步驟計算出\(z\),然后在第二步中以sigmoid函數(shù)為激活函數(shù)計算\(z\)(得出\(a\)),一個神經(jīng)網(wǎng)絡(luò)只是這樣子做了好多次重復(fù)計算。
圖1.3.2
回到兩層的神經(jīng)網(wǎng)絡(luò),從隱藏層的第一個神經(jīng)元開始計算,如上圖第一個最上面的箭頭所指。從上圖可以看出,輸入與邏輯回歸相似,這個神經(jīng)元的計算與邏輯回歸一樣分為兩步,小圓圈代表了計算的兩個步驟。
第一步,計算\(z^{[1]}_1,z^{[1]}_1 = w^{[1]T}_1x + b^{[1]}_1\)。
第二步,通過激活函數(shù)計算\(a^{[1]}_1,a^{[1]}_1 = \sigma(z^{[1]}_1)\)。
隱藏層的第二個以及后面兩個神經(jīng)元的計算過程一樣,只是注意符號表示不同,最終分別得到\(a^{[1]}_2、a^{[1]}_3、a^{[1]}_4\),詳細結(jié)果見下:
\(z^{[1]}_1 = w^{[1]T}_1x + b^{[1]}_1, a^{[1]}_1 = \sigma(z^{[1]}_1)\)
\(z^{[1]}_2 = w^{[1]T}_2x + b^{[1]}_2, a^{[1]}_2 = \sigma(z^{[1]}_2)\)
\(z^{[1]}_3 = w^{[1]T}_3x + b^{[1]}_3, a^{[1]}_3 = \sigma(z^{[1]}_3)\)
\(z^{[1]}_4 = w^{[1]T}_4x + b^{[1]}_4, a^{[1]}_4 = \sigma(z^{[1]}_4)\)
向量化計算
如果執(zhí)行神經(jīng)網(wǎng)絡(luò)的程序,用for循環(huán)來做這些看起來真的很低效。所以接下來要做的就是把這四個等式向量化。向量化的過程是將神經(jīng)網(wǎng)絡(luò)中的一層神經(jīng)元參數(shù)縱向堆積起來,例如隱藏層中的\(w\)縱向堆積起來變成一個\((4,3)\)的矩陣,用符號\(W^{[1]}\)表示。另一個看待這個的方法是有四個邏輯回歸單元,且每一個邏輯回歸單元都有相對應(yīng)的參數(shù)——向量\(w\),把這四個向量堆積在一起,會得出這4×3的矩陣。
因此,
公式1.8:
\(z^{[n]} = w^{[n]}x + b^{[n]}\)
公式1.9:
\(a^{[n]}=\sigma(z^{[n]})\)
詳細過程見下:
公式1.10:
公式1.11:
\[\left[ \begin{array}{c} z^{[1]}_{1}\\ z^{[1]}_{2}\\ z^{[1]}_{3}\\ z^{[1]}_{4}\\ \end{array} \right] = \overbrace{ \left[ \begin{array}{c} ...W^{[1]T}_{1}...\\ ...W^{[1]T}_{2}...\\ ...W^{[1]T}_{3}...\\ ...W^{[1]T}_{4}... \end{array} \right] }^{W^{[1]}} * \overbrace{ \left[ \begin{array}{c} x_1\\ x_2\\ x_3\\ \end{array} \right] }^{input} + \overbrace{ \left[ \begin{array}{c} b^{[1]}_1\\ b^{[1]}_2\\ b^{[1]}_3\\ b^{[1]}_4\\ \end{array} \right] }^{b^{[1]}} \]對于神經(jīng)網(wǎng)絡(luò)的第一層,給予一個輸入\(x\),得到\(a^{[1]}\),\(x\)可以表示為\(a^{[0]}\)。通過相似的衍生會發(fā)現(xiàn),后一層的表示同樣可以寫成類似的形式,得到\(a^{[2]}\),\(\hat{y} = a^{[2]}\),具體過程見公式1.8、1.9。
圖1.3.3
如上圖左半部分所示為神經(jīng)網(wǎng)絡(luò),把網(wǎng)絡(luò)左邊部分蓋住先忽略,那么最后的輸出單元就相當(dāng)于一個邏輯回歸的計算單元。當(dāng)有一個包含一層隱藏層的神經(jīng)網(wǎng)絡(luò),需要去實現(xiàn)以計算得到輸出的是右邊的四個等式,并且可以看成是一個向量化的計算過程,計算出隱藏層的四個邏輯回歸單元和整個隱藏層的輸出結(jié)果,如果編程實現(xiàn)需要的也只是這四行代碼。
總結(jié)
通過本篇博客,讀者應(yīng)該可以能夠根據(jù)給出的一個單獨的輸入特征向量,運用四行代碼計算出一個簡單神經(jīng)網(wǎng)絡(luò)的輸出。接下來將了解的是如何一次能夠計算出不止一個樣本的神經(jīng)網(wǎng)絡(luò)輸出,而是能一次性計算整個訓(xùn)練集的輸出。
總結(jié)
以上是生活随笔為你收集整理的神经网络入门篇:详解计算一个神经网络的输出(Computing a Neural Network's output)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【scipy 基础】--线性代数
- 下一篇: 深入探索智能问答:从检索到生成的技术之旅