AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》
20/100 第二週:多層感知器 MLP
20.小結與測驗-:兩層感知器分類玩具資料 🎮 開始打造屬於你的神經網路!
________________________________________
✅ 一、單元重點總覽(11~19 節整理)
11 🏗結構解析 : MLP = 輸入層 + 隱藏層 + 輸出層,全連接 Dense 結構
12 🧱為何需要隱藏層?: 隱藏層能學會抽象特徵與非線性邏輯(例如 XOR)
13 🔧激活函數 : ReLU、Tanh、Sigmoid 為神經元提供非線性能力
14 📉學習率與梯度下降 : 學習率決定更新步伐大小,搭配 SGD、Adam 等優化器進行學習
15 ⚖損失函數 : 分類用 Cross Entropy,迴歸用 MSE;選錯會導致學習困難
16 📦批次訓練策略 : Mini-Batch 為實務主流訓練法,兼顧效率與穩定性
17 🌱權重初始化 : He/Xavier 根據激活函數選擇,避免梯度爆炸或消失
18 🛑早停與模型保存 : EarlyStopping + ModelCheckpoint 可有效防過擬合並保留最佳模型
19 🌧Dropout : 模擬神經網路部分失效,強迫模型泛化,降低過擬合風險
________________________________________
📝 二、概念測驗(單選題)
1️⃣ 激活函數的主要作用是?
A. 增加模型深度
B. 引入非線性,提升模型表達力
C. 降低記憶體用量
D. 替代損失函數
✅ 答案:B
🔍 解析:若無非線性激活,神經網路只能學線性映射。
________________________________________
2️⃣ Dropout 的主要目的?
A. 提高學習率
B. 儲存模型
C. 模型泛化、避免過擬合
D. 快速初始化
✅ 答案:C
🔍 Dropout 會隨機關閉部分神經元,迫使模型更有彈性學習。
________________________________________
3️⃣ 哪個損失函數最適合二分類任務?
A. Mean Squared Error
B. Categorical Cross Entropy
C. Binary Cross Entropy
D. Hinge Loss
✅ 答案:C
🔍 Binary Cross Entropy 可處理 0/1 機率輸出,對應 Sigmoid。
________________________________________
4️⃣ Early Stopping 的作用是?
A. 加速模型推論
B. 在最佳驗證表現時自動停止訓練
C. 記錄訓練日誌
D. 增加學習率
✅ 答案:B
🔍 可防止模型持續訓練至過擬合,節省資源。
________________________________________
5️⃣ Xavier 與 He 初始化的差異?
A. Xavier 適合 ReLU
B. He 會固定所有權重
C. Xavier 適用 Sigmoid,He 適用 ReLU
D. Xavier 只用於輸出層
✅ 答案:C
🔍 兩者設計出發點不同,適用不同的激活函數。
________________________________________
✍️ 三、簡答題
Q1. 為什麼使用 Dropout 能改善模型的泛化能力?
✅ 參考解答: Dropout 會在訓練時隨機忽略部分神經元連接,讓模型不依賴單一特徵而學習更多樣性,有效減少過擬合現象。
________________________________________
Q2. 試說明 Early Stopping + Model Checkpoint 結合的優點?
✅ 參考解答: Early Stopping 能偵測驗證集效能停止進步的時點並提前停止訓練;ModelCheckpoint 則可在此同時保留當前最優模型,確保模型部署效能最佳。
________________________________________
🎮 四、實作任務:兩層 MLP 分類玩具資料
📦 使用 make_moons 模擬分類問題:
python
from sklearn.datasets import make_moons
X, y = make_moons(n_samples=1000, noise=0.2, random_state=42)
🧠 建立模型(兩層感知器):
python
import tensorflow as tf
from tensorflow.keras import layers
model = tf.keras.Sequential([
layers.Dense(32, activation='relu', input_shape=(2,)),
layers.Dropout(0.3),
layers.Dense(16, activation='relu'),
layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(X, y, epochs=30, batch_size=32, validation_split=0.2)
這段程式碼利用 make_moons 產生一個具噪音的二分類資料集,常用來模擬非線性分類任務。模型為一個簡單的全連接神經網路,包含兩層隱藏層:第一層有 32 個神經元並搭配 ReLU 激活與 30% Dropout,第二層有 16 個 ReLU 神經元,最後輸出層使用 Sigmoid 激活,適用於二分類。模型使用 Adam 優化器與二元交叉熵損失函數,並以 20% 的資料做驗證集,訓練 30 輪。整體設計簡潔,適合用於練習非線性分類與 Dropout 正規化技巧。
📈 這是你實作出來的第一個完整 MLP 分類模型,已可應對非線性邊界的真實資料集!
________________________________________
🎯 小結與啟示
✅ 你已掌握建構與訓練 MLP 所需的基本技術
✅ MLP 能處理二分類、多分類、迴歸等任務,是神經網路入門核心
✅ 適當結合激活函數、初始化策略、正則化手段與早停法,可打造穩定表現的模型