# Chpater 2: Neuron Model and Network Architectures
## 1. 目的
* 本章介紹簡化的神經元數學模型,並解釋人工神經元如何相連接形成各種網路架構。
## 2. 理論與實例
### 2.1 符號
* 標量(Scalars) --- 小寫的斜體(*italic*)字母,如 *a* , *b* , *c*
* 向量(Vectors) --- 小寫的黑正體(**nonitalic**)字母,如 **a** , **b** , **c**
* 矩陣(Matrices) --- 大寫的黑正體(**nonitalic**)字母,如 **A** , **B** , **C**
### 2.2 神經元模型
* Weight 權重
* Bias 偏移量
* Net Input 淨輸入
* Transfer Function 傳出函數
#### 1. 單輸入神經元(Single-Input-Neuron)
* 標量(Scalars)輸入 *p* 乘上標量權重 *w* 得到 *wp* ,再將其送入累加器($Σ$)。
* 另一個輸入 1 乘上bias *b* ,再將其送入累加器($Σ$)。
* 累加器($Σ$)輸出 *n* 通常被稱為淨輸入,其會送入transfer function *f* 。
* 在 *f* 中產生神經元的標量輸出 *a* 。
* 對應於Chapter 1的生物神經元 :
* weight *w* → **突觸**的連接強度
* 累加器($Σ$)和傳輸函數 *f* → **細胞體**
* 神經元輸出 *a* → **軸突**的訊號

* 實際的輸出 *a* 取決於所選擇的特定傳輸函數 *f*,下面將討論傳輸函數。
* *w* 和 *b* 是神經元的可調整標量參數。設計者可以選擇特定的傳輸函數,在一些學習規則中調整參數,以滿足特定的需要。
#### 2. 傳輸函數(transfer function)
* 傳輸函數可以是n的**線性**和**非線性**函數。可以用特定的傳輸函數滿足神經元要解決的特定問題。
* 本小節有許多transfer fuction,以下介紹三種:
* <font color="#f00">**Hard Limit Transfer Function**</font>
* 當函數的自變量小於0時,函數輸出為0
* 當函數的自變量大於或等於0時,函數輸出為1
* 下右圖描述使用了Hard Limit Transfer Function的單輸入神經元的特徵曲線,從中可以看出weight和Bias的影響。

* <font color="#f00">**Linear Transfer Function**</font>
* 輸出等於其輸入 *a* = *n*

* <font color="#f00">**Log-Sigmoid Transfer Function**</font>
* transfer fuction的輸入在($-∞$ , $∞$)間取值,輸出則在0到1之間取值,其數學表達是為 :
$$
a = \dfrac{1}{1+e^{-n}}
$$
* 某種程度上,Log-Sigmoid函數是可微的,所以用於反向傳播算法訓練的多層network才採用此transfer fuction。

:::spoiler **可參考其他的Transfer Function**

---
:::
#### 3. Multiple-Input Neuron(多輸入神經元)
* 一個神經元不只有一個輸入,具有R個輸入的神經元。
* 其輸入$p_1 , p_2 , ... , p_R$ 分別對應權重矩陣(Weight Matrix) $W$ 的元素 $w_{1,1} , w_{1,2} ,..., w_{1,R}$。

* 神經元的 Bias *b*,他與所有輸入的加權和累加,從而形成淨輸入 *n* :
$$
n = w_{1,1}p_{1} + w_{1,2}p_{2} + ... + w_{1,R}p_{R} + b
$$
* 此表達式也可以寫成矩陣形式:
$$
n = Wp + b
$$
* 其單個神經元的權重矩陣 **W** 只有一列元素。
* 神經元的輸出可以寫成:
$$
a = f(Wp + b)
$$
### 2.3 網路結構
* 一般來說多個輸入的單個神經元並不能滿足實際應用的要求。
* 實際應用中需要有多個並行操作的神經元,其組合稱之為"層"。
#### 1. 神經元的層(A Layer of Neurons)
* 下圖是由S個神經元組成的單層網路(single-layer network),R個輸入中的每一個輸入均與每個神經元相連,權重矩陣目前有S行。

* 輸入向量 $p$ 的每個元素均通過權重矩陣 $W$ 和每個神經元相連。美個神經元有一個bias $b_i$,一個累加器($Σ$),一個傳輸函數 *f* 和一個輸出 $a_i$ 。將所有個神經元輸出結合,可以得到一個輸出向量 $a$。
* <font color="#f00">**每層的輸入個數並不等於該層中神經元的數目(即是 $R≠S$)**</font>
* 同一層的神經元不一定會有相同的transfer function,可以把兩個併行操作網路組合在一起定義一種不同transfer function的的單個神經元(複合)。
* 輸入向量通過權重矩陣 $W$ 進入network :
$$
W = \left[
\begin{array}{cccc}
w_{1,1} & w_{1,2} & ... & w_{1,R} \\
w_{2,1} & w_{2,2} & ... & w_{2,R} \\
. & . & ... & . \\
. & . & ...& . \\
w_{S,1} & w_{S,2} & ... & w_{S,R} \\
\end{array}
\right]
$$
* 簡化圖如下,具有S個神經元、R個輸入的單層網路。

#### 2. Multiple Layers of Neurons 多層神經網路
* 每層都有自己權重矩陣 $W$, bias向量 **b** ,淨輸入向量 **n**和一個輸出向量 $a$。
* 這裡需要引入額外的符號來區分這些層次,每個變量附加一個*上標*來表示其所處層次。
* 第一層的權重矩陣可寫成 $W^1$, 第二層的權重矩陣可以些成 $W^2$。

* 如上圖所示,第一層有$R$個輸入、$S^1$個神經元,第二層有$S^2$個神經元,<font color="#f00">**不同層可以有不同數目的神經元**</font>。

* 右上圖來看,第一層和第二層分別為第二層和第三層的輸入。
* 第二層它有$R=S^1$個輸入, $S=S^2$個神經元, 和一個$S^1*S^2$維的權重矩陣 $W^2$。其輸入是 $a^1$, 輸出是 $a^2$。
* 若有四個外部便量作為網路輸入,那網路就有4個輸入。
* 若有網路七個輸出,那網路的**輸出層**就應該有七個神經元。
* 輸出信號所期望的特徵有助於選擇輸出層的transfer function。若輸出層要的是-1,不然就是1個話,那麼該輸出神經元就可以用Symmetrical Hard Limit。
* 是否使用Bias是可以選擇的:
* Bias給網路提供額外的變量,從而使網路具有更強的能力。
* 例如 : 若沒有bias,當網路輸入$p$為0時,一個神經元的淨輸入 $n$總是為0,這是不希望出現的情況,因此可以通過用bias來避免。
#### 3. Recurrent Networks 遞迴網路
* 介紹遞迴網路前,首先介紹一些簡單的構造模塊,第一種是延時模塊(delay block)
* 延遲輸出(delay output) $a(t)$由輸入 $u(t)$ 根據下式計算得到 :
$$
a(t) = u(t-1)
$$
* 輸出是延遲了一個time step的輸入

---
* 另一種用於<font color="#f00">**連續時間**</font>遞迴網路的構造模塊是<font color="#f00">**積分器**</font>。
* 積分器的輸出 $a(t)$ 由輸入 $u(t)$ 根據下式計算得到 :
$$
a(t) = \int_{0}^{t}u(τ)dτ + a(0)
$$
* 初始條件 $a(0)$由指向積分器模塊底部的箭頭來表示。

---
* 利用上述模塊就可以構造出遞迴網路,遞迴網路是一個反饋(feedback)的網路,它的部分輸出會連接到它的輸入。
* 這與前面所討論沒有backward連接的feedforward network 有很大的不同。

* 向量 $p$ 給出了其初始條件(即 $a(0)=p$)。網路根據前一次輸入計算當前的輸出:
$$
a(1) = satlines(Wa(0) + b) , a(2) = satlins(Wa(1)+b), ...
$$
* 遞迴網路比feedforward network在本質上具有更強的能力,它可以表現出時間性行為。
## 3. 小節
如何選取一種網路架構?!
* 應用問題的苗式從如下幾個方面非常有助於定義網路的結構:
1. 網路的輸入個數 = 應用問題的輸入數 ;
2. 輸出層神經元的數目 = 應用問題的輸出數目 ;
3. 輸出層的傳輸函數選擇至少部分依賴於應用問題的輸出描述
###### tags: `Neural Network Design`
<font color="#C60DAD ">**** </ font>
<font color =“#1032EE”> ****</font>
<font color="#f00">**</font>
<font color="#0A9C0C "></font>
<font color="#FCA117"></font>