---
# System prepended metadata

title: 4.1～4.1.3_李紘宇

---

# 4.1～4.1.3
## 生物上的神經網路

以下是一個神經元的示意圖：

人類的神經網路是由非常多的神經元連接而成，一個神經元有許多樹突和一條軸突，樹突負責接受其他神經元傳出的訊號，軸突負責傳出訊號。

![](https://hackmd.io/_uploads/r1BZQS_03.png)

神經元會整合輸入的訊號，一旦細胞膜電位超過閾值(-55mV)，則神經元會產生動作電位(+40mV)，由軸突傳遞到下一個神經元的樹突。動作電位的產生，遵循「全有全無定律」，超過閾值電位會瞬間提升，反之則會回到靜止電位(-70mV)。
![](https://hackmd.io/_uploads/HykrwBOA3.png  =80%x)

## 機器學習中的神經元
### 感知機
在機器學習中，科學家試著模擬出人腦中的神經網路，以達到學習的目的。因此，我們首先需要造出一個類似於神經元的東西。人造的神經元有許多類型，其中一種最基本的神經元是「**感知機**」。感知機是一個函數，計算公式如下

\begin{equation}
f_{\mathbf{w},b}(\mathbf{x}) = sign_b(\sum\limits_{j}w_j x_j)
\end{equation}

其中$\mathbf{w}$是權重，$\mathbf{x}$是神經元輸入的值，$b$是閾值。$sign_b()$是步階函數，表達式如下

\begin{equation}
sign_b(z) = 
\begin{cases}
 1, & z \ge b\\
 0, & else
\end{cases}
\end{equation}

感知機整合了輸入的訊號，並用步階函數模擬人類神經元達到閾值就產生動作電位的效果。
### 神經元
在機器學習中，神經元有許多種，但差別只在於啟動函數。線性回歸、邏輯回歸、softmax和感知機都是神經元的一種。神經元是一個函數，它將多個輸入經過加權和，在經過一個啟動函數，輸出值。神經元的表達是如下

\begin{equation}
a = g(\sum\limits_{j}w_j x_j)
\end{equation}

其中，a是神經元的輸出，g是啟動函數。啟動函數有多種選擇，感知機即是啟動函數為步階函數的神經元。啟動函數，也可選擇tanh、ReLU、LeakReLU、simoid、softmax。

### 啟動函數
#### 1. sigmoid
函數：$f(x) = \frac{1}{1+e^{-x}}$

適用情況：
* 明確的預測，即非常接近1或0

缺點：
* 輸出值接近1或0時，梯度趨近於0，所以和sigmoid神經元連接的神經元，權重更新緩慢。若是神經網路太多sigmoid神經元達飽和，會讓神經網路無法反向傳播。
* 不以中心點為零，會導致下一個神經元產生偏置偏移，會使得收斂速度變慢。
* 計算成本高昂，因為exp()較其他函數計算成本高。
#### 2. tanh
函數：$f(x) = tanh(x)$

優點：
* 中心點為零
* 在二分類問題，一般將tanh作為隱藏層，sigmoid作為輸出層。

缺點：
* 依然有梯度消失的問題。
#### 3. ReLU
函數：$f(x) = max(0,x)$

優點：
* 當輸入為正時，導數為1，一定程度上改善了梯度消失問題，加速梯度下降的收斂速度。
* 計算速度快得多。ReLU 函數中只存在線性關係，因此它的計算速度比sigmoid 和tanh 更快。
* 被認為具有生物學合理性（Biological Plausibility），比如單側抑制、寬興奮邊界。

缺點：
* Dead ReLU 問題。當輸入為負時，ReLU 完全失效，在正向傳播過程中，這不是問題。有些區域很敏感，有些則不敏感。但是在反向傳播過程中，如果輸入負數，則梯度將完全為零。
* 不以零為中心，給後一層的神經網絡引入偏置偏移，會影響梯度下降的效率。
#### 4. LeakReLU
函數：\begin{equation}
f(x) = 
\begin{cases}
 x, & x > 0\\
 \gamma x, & else
\end{cases}
\end{equation}

優點：
* 解決ReLU函數中的梯度消失問題 
#### 5. softmax
函數：$S_i = \frac{e^{x_i}}{\sum\limits_j e^{x_j}}$

softmax神經元較特別，它沒有經過加權，是一個輸出多個值得神經元。
優點：
* Softmax訓練的深度特徵，會把整個超空間或者超球，按照分類個數進行劃分，保證類別是可分的，這一點對多分類任務如MNIST和ImageNet非常合適，因為測試類別必定在訓練類別中。

缺點：
* 在零點不可微
* 負輸入的梯度為零，這意味著對於該區域的激活，權重不會在反向傳播期間更新，因此會產生永不激活的死亡神經元。
* Softmax並不要求類內緊湊和類間分離，這一點非常不適合人臉識別任務，因為訓練集的1W人數，相對測試集整個世界70億人類來說，非常微不足道，而我們不可能拿到所有人的訓練樣本，更過分的是，一般我們還要求訓練集和測試集不重疊

[參考資料1](https://zhuanlan.zhihu.com/p/364620596)、[參考資料2](https://blog.csdn.net/xiaosongshine/article/details/88826715)

## 前饋神經網路
下圖是一個前饋神經網路。前饋神經網路由輸入層、隱含層和輸出層組成。每層皆是由一列神經元組成，資訊傳遞方向，是由一層神經元傳遞至下一層神經元，不會往回傳遞。且同層神經元沒有聯繫。
![](https://hackmd.io/_uploads/SkVIuau03.jpg)

神經網路的層數稱為神經網路的深度，較深的神經網路，稱之為「**深度神經網路**」。基於深度神經網路的機器學習稱之為「**深度學習**」。

### 前向傳播
神經網路一層一層計算，最終輸出值的過程，稱之為「**前向傳播**」。
我們設$\mathbf{W}^{[l]}$表示第$l$層每個神經元的權重，$\mathbf{b}^{[l]}$為第$l$層每個神經元的偏置，$g^{[l]}$為第$l$層的啟動函數，$\mathbf{a}^{[l]}$為第$l$層每個神經元的輸出。前向傳播計算公式如下

\begin{equation}
\mathbf{a}^{[l]}=g^{[l]}(\mathbf{a}^{[l-1]}\mathbf{W}^{[l]}+\mathbf{b}^{[l]})
\end{equation}

其中
$$
\mathbf{a}^{[l]}=
\begin{bmatrix}
a^{[l]}_1 & a^{[l]}_2 & ... &a^{[l]}_p
\end{bmatrix}
，a^{[l]}_i表示第l層第i個神經元的輸出
$$


$$
\mathbf{W}^{[l]} = 
\begin{bmatrix}
W^{[l]}_{11} & W^{[l]}_{12} & ... & W^{[l]}_{1q}\\
W^{[l]}_{21} & W^{[l]}_{22} & ... & W^{[l]}_{2q}\\
&...&\\
W^{[l]}_{p1} & W^{[l]}_{p2} & ... & W^{[l]}_{pq}\\
\end{bmatrix}
，W^{[l]}_{ij}表示第l層第j個神經元，對第(l-1)層第i個神經元輸入的權重
$$

$$
\mathbf{b}^{[l]}=
\begin{bmatrix}
b^{[l]}_1 & b^{[l]}_2 & ... &b^{[l]}_q
\end{bmatrix}
，b^{[l]}_i表示第l層第i個神經元的偏置
$$

問題:

sigmoid的缺點是甚麼?  
softmax的缺點是甚麼?
