引入
回憶一下高中生物中學到的知識:當一個神經元受到足夠強的刺激的時候,就會被激活向下一個神經元釋放遞質,然后激活下一個神經元,以此類推,最終將信號傳導到需要的地方。
那么我們的神經網絡也是由此而來建模而來,我們需要着重需要定義的一些量就是:
- 怎么樣才算足夠強的刺激
- 如何表示被激活
- 如何向下一個神經元傳遞信息
神經元
一般神經網絡都會非常大,所以神經元定義要盡量的簡單。一般用一個線性組合+激活函數來表示。

線性組合:
\[g(x)=\mathrm{w}^T\mathrm{x} \]
偏置項隱含表示在\(x_0\)里。
激活函數:
\[f(z)=\begin{equation}\nonumber\begin{cases}1\qquad z>0\\0\qquad otherwise\end{cases}\end{equation} \]
即用階躍函數表示激活函數。
神經元:
\[y=f(x)=\begin{equation}\nonumber\begin{cases}1\qquad \mathrm{w}^T\mathrm{x}>0\\0\qquad otherwise\end{cases}\end{equation} \]
那么我們可以理解成線性組合表示刺激的大小,而激活函數定義了多大刺激可以激活神經元,最終神經元就表示了這樣。
其實這就是個感知機。
但是這里我們為了后面方便求導,用sigmoid來表示激活函數:
\[sigmoid(x)=\frac{1}{1+e^{-x}} \]
激活函數也可以選擇普通的階躍函數,這里選擇sigmoid是因為方便后面的求導。
那么神經元就是:
\[y=\frac{1}{1+e^{-\vec{w}^T\centerdot\vec{x}}} \]
神經網絡

那么將神經元用一定的規則進行連接就可以得到神經網絡。
上圖是一個全連接(full connected)的神經網絡,我們以這個神經網絡作為例子。
這里要對神經網絡的一些基本的部分進行說明。
- 輸入層,即輸入x的那一層。
- 輸出層,即輸出y的那一層。
- 隱層,輸入層和輸出層之間不管隔了多少層都叫隱層。
這里以計算某一個輸出\(y_1\)為例:
\[\begin{align}\nonumber y_1&=sigmoid(\vec{w}^T\centerdot\vec{a})\\ \nonumber &=sigmoid(w_{84}a_4+w_{85}a_5+w_{86}a_6+w_{87}a_7+w_{8b}) \end{align}\]
那么\(a_4\)就是:
\[\begin{align}\nonumber a_4&=sigmoid(\vec{w}^T\centerdot\vec{x})\\ \nonumber &=sigmoid(w_{41}x_1+w_{42}x_2+w_{43}x_3+w_{4b}) \end{align}\]
其他\(a\)的值同理。
向量表示
那么第一個隱層的向量\(\vec{a}\):
\[\vec{a}= \begin{bmatrix} a_4 \\ a_5 \\ a_6 \\ a_7 \\ \end{bmatrix} \]
對應的權重:
\[ W= \begin{bmatrix} \vec{w}_4 \\ \vec{w}_5 \\ \vec{w}_6 \\ \vec{w}_7 \\ \end{bmatrix}= \begin{bmatrix} w_{41},w_{42},w_{43},w_{4b} \\ w_{51},w_{52},w_{53},w_{5b} \\ w_{61},w_{62},w_{63},w_{6b} \\ w_{71},w_{72},w_{73},w_{7b} \\ \end{bmatrix} \]
對此過程不清楚的可以翻譯參考1。
由此我們其實可以看出,一層的權重可以用一個矩陣來表示,那么整個神經網絡的權重就可以用一個三維的張量來表示了。所有一般來說神經網絡的權重會表示成一個三維的數組。
前向計算
那么對於這樣的一個神經網絡:

我們可以使用這樣的一個過程:
\[\begin{align}\nonumber &\vec{a}_1=f(W_1\centerdot\vec{x})\\ \nonumber &\vec{a}_2=f(W_2\centerdot\vec{a}_1)\\ \nonumber &\vec{a}_3=f(W_3\centerdot\vec{a}_2)\\ \nonumber &\vec{y}=f(W_4\centerdot\vec{a}_3)\\ \nonumber \end{align} \]
從\(\vec{x}\)得到\(\vec{y}\)。
這個過程就叫做前向計算。
參考
- 零基礎入門深度學習