---
# System prepended metadata

title: 神經元之基本運算

---

模擬人類的大腦
> [name=李柏翰アヤセ]

基本的神經網路模型
===
以下為神經網路的學習模型，主要有三個層級，分別為輸入層隱藏層和輸出層
![神經網路](https://hackmd.io/_uploads/H1hPl4vTp.png)
* **輸入層**: 就像是神經系統中的**受器**，來自外界的資訊從輸入層進入人工神經網路後，對其進行分類與分析並將資訊往後傳遞下去。

* **隱藏層**: 就像是生物的**中樞神經系統**，主要的功能是對所接收到的資料作進一步處理。會對資料做某個形式的轉換，並整理所得的資料，再將結果往後傳遞。

* **輸出層**: 就像是神經系統中的**動器**，在接受到傳遞的訊息後特定的神經元會做出反應，其中反應尋號最強之神經元就是輸入資料辨識得到的結果

神經元之運算
===
前面介紹完了基本的神經網路模型，現在讓我們將權重(weight)、偏值(bias)加入，讓我們的神經網路更加的完整
![神經網路(1)](https://hackmd.io/_uploads/SJOBpKva6.png)

*上圖只標各層第一個神經元的權重標示*

* 權重(weight): 因為每一筆資料都不一樣，所以他們進到神經網路之後都會擁有自己的加權值。我們可以把加權值想像成每個節點與神經網路之關係，較大的權重對輸出的貢獻更大。
* 偏值(bias): 為了避免在計算中有0以及讓每個神經元都能被激發。

數學公式如下:
**∑wixi + b = (w1x1 + w2x2 + w3x3 + wixi) + b**
*x為輸入的值，w為權重，b為bias*

<小小實作一下>
```python=
import numpy as np

x = np.array([1.0, 0.5]) #輸入值
W1 = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) #第一層之權重
B1 = np.array([0.1, 0.2, 0.3]) #第一層之bias

A1 = np.dot(x, W1) + B1 #第一層之結果

W2 = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])
B2 = np.array([0.1, 0.2])

A2 = np.dot(Z1, W2) + B2 #第二層結果

W3 = np.array([[0.1, 0.3], [0.2, 0.4]])
B3 = np.array([0.1, 0.2])

A3 = np.dot(Z2, W3) + B3 #第三層結果，為輸出層
Y = A3
Y

```

結語
===
這個函數學習機產生出來的函數一定是線性的，若這樣設計的話，會有很大的限制，導致許多現實問題無法解決。這時，我們就需要**活化函數(activation function)** 來幫助我們得出真正的輸出，而活化函數的介紹在下一個筆記中~~~

參考資料
===
[-[1]neural-networks](https://youtu.be/iwh5o_M4BNU?si=nR1KsRwnwaEf4ubO)

[-[2]deep-learning-from-scratch](https://github.com/oreilly-japan/deep-learning-from-scratch)
