<center>
<img src = "https://i.imgur.com/PiXrWYP.jpg">
</center>
## Prerequisite
### MLP & DNN
多層感知器(MLP)和深度神經網路(DNN)都是神經網路的類型,但它們有一些重要的區別。
**多層感知器(MLP)**:
- MLP是最簡單和最常見的神經網路類型。
- 它由輸入層、一個或多個隱藏層和輸出層組成。
- MLP能夠處理線性可分和非線性可分的數據。
- MLP通常用於處理非線性可分的數據,如回歸分析。
- 由於其簡單性,它們最適合用於複雜的分類任務和預測建模。
**深度神經網路(DNN)**:
- DNN是具有深層的人工神經網路。
- MLP是DNN的一個子集,而DNN可以有迴圈,MLP則始終是前饋的。
換句話說,MLP是一種特定類型的神經網路,具有至少三層(輸入層、輸出層和至少一個隱藏層),而DNN則是具有更多或更深層的神經網路。
### Regularization
正則化(Regularization)是一種用於機器學習和神經網絡中的技術,旨在減少模型的過度擬合(overfitting)問題。
過度擬合發生在模型在訓練數據上表現很好,但在新的、未見過的數據上表現很差的情況下,這是因為模型在訓練數據上學到了噪聲或不必要的細節,而忽略了通用的特徵。
正則化的目標是使模型更加泛化,即在新數據上表現更好。
在神經網絡中,最常見的正則化方法包括 L1 正則化和 L2 正則化。
這些方法通常通過修改損失函數或成本函數,引入額外的懲罰項(penalty term)來實現。
1. **L1 正則化(Lasso 正則化)**:
L1 正則化通常用於權重的稀疏化,可以幫助模型選擇最重要的特徵,並將不重要的特徵的權重變為零。它的數學表示如下:
$$
J(\theta) = \text{損失函數} + \lambda \sum_{i=1}^{n} |w_i|
$$
其中:
- $J(\theta)$ 是經過正則化的成本函數。
- $\lambda$ 是正則化參數,控制正則化的程度。
- $w_i$ 是權重參數。
2. **L2 正則化(Ridge 正則化)**:
L2 正則化通常用於防止權重參數變得過大,它的數學表示如下:
$$
J(\theta) = \text{損失函數} + \lambda \sum_{i=1}^{n} w_i^2
$$
其中:
- $J(\theta)$ 是經過正則化的成本函數。
- $\lambda$ 是正則化參數,控制正則化的程度。
- $w_i$ 是權重參數。
這些正則化項被添加到原始的損失函數中,通常以 $J(\theta)$ 的形式,然後通過梯度下降等優化算法來最小化整體成本函數。
正則化有助於避免過度擬合,提高模型的泛化能力,使其在新數據上更好地表現。
選擇正則化參數 $\lambda$ 是一個重要的超參數調整過程,它可以影響正則化的程度。
## Goal
神經網絡是一種機器學習模型,模擬了人類神經元之間的信息傳遞,用於學習從數據中提取特徵和解決各種任務。
## Background
一個典型的神經網絡可以表示為多個層次的神經元,其中包括輸入層(input layer)、隱藏層(hidden layers)和輸出層(output layer)。
我們用下標表示不同的層,並使用上標表示每個層中的神經元。
輸入層包含特徵或輸入變數,我們用 $x^{(i)}$ 表示第 $i$ 個輸入特徵。通常,這些特徵將組成一個向量 $x$,其中 $x = [x^{(1)}, x^{(2)}, \ldots, x^{(n)}]$,其中 $n$ 是特徵的數量。
隱藏層可以有多個層次,我們用 $a^{[l]}_j$ 表示第 $l$ 層的第 $j$ 個神經元的激活值。這些激活值是根據前一層的輸出計算得出的,通常使用 activation function 進行非線性轉換。具體來說,每個隱藏層的激活值可以通過以下方式計算:
$$
a^{[l]}_j = f^{[l]}\left(\sum_{i} w^{[l]}_{ij}a^{[l-1]}_i + b^{[l]}_j\right)
$$
其中:
- $l$ 表示層的索引(輸入層為 0,隱藏層和輸出層依次遞增)。
- $j$ 表示神經元的索引。
- $w^{[l]}_{ij}$ 表示第 $l$ 層的第 $j$ 個神經元與第 $l-1$ 層的第 $i$ 個神經元之間的權重。
- $b^{[l]}_j$ 表示第 $l$ 層的第 $j$ 個神經元的偏差項(bias term)。
- $f^{[l]}$ 是 activation function,用於引入非線性性質。
輸出層的激活值 $a^{[L]}_j$ 用於表示神經網絡的輸出。在分類任務中,通常使用 softmax 函數來獲得每個類別的概率分佈。
神經網絡的訓練過程涉及到調整權重和偏差項,以最小化損失函數,以實現所需的任務,例如分類或回歸。
以下是有關 Neural Network 不同類型的架構

## Implementation
## From Scratch
[Feedforward Neural Network](https://github.com/jacksonchen1998/2023-NYCU-DL/blob/main/Homework%201/hw1-1/hw1_1_311511052.ipynb)
## More example
[Natural Language Processing with Disaster Tweets](https://www.kaggle.com/competitions/nlp-getting-started/overview)
## Reference
歡迎更仔細閱讀以下相關內容以了解本篇知識
- [一文了解神经网络MLP(ANN), CNN, RNN](https://zhuanlan.zhihu.com/p/261056748)
- [The mostly complete chart of Neural Networks, explained](https://kim.hfg-karlsruhe.de/neural-network-chart/)