AI 第15天:深度學習的核心概念
今天的課程將帶領大家進入深度學習的世界,了解深度學習的核心概念與基礎原理。深度學習是人工智慧與機器學習中的重要分支,透過多層神經網路模擬人類大腦的學習方式。
課程目標
- 了解深度學習的基本概念與運作原理。
- 掌握神經網路的核心組成部分與工作流程。
- 初步認識反向傳播與梯度下降演算法。
課程內容
1. 深度學習的概念
1.1 深度學習是什麼?
深度學習是一種基於人工神經網路的機器學習技術,擅長於:
- 圖像處理(如人臉識別、自駕車影像分析)。
- 語音處理(如語音識別、語音合成)。
- 自然語言處理(如機器翻譯、文本生成)。
1.2 深度學習與傳統機器學習的區別
| 特性 | 傳統機器學習 | 深度學習 | |——————–|————————|———————-| | 特徵提取 | 手動設計 | 自動從數據中學習 | | 算法複雜度 | 依賴經驗 | 通過多層神經網路學習 | | 適合的數據類型 | 結構化數據 | 圖像、音頻、文本等非結構化數據 |
2. 人工神經網路 (ANN) 的基本結構
2.1 神經網路的組成
- 輸入層(Input Layer):接收數據輸入,例如圖像的像素值或文本的特徵向量。
- 隱藏層(Hidden Layers):執行數據的特徵提取與學習,多層結構是深度學習的核心。
- 輸出層(Output Layer):產生預測結果,例如分類標籤或數值。
2.2 神經元的工作原理
每個神經元模擬大腦中的神經元,計算公式如下: \(z = \sum_{i=1}^{n} w_i x_i + b\) \(a = \sigma(z)\)
- ( w_i ):權重,表示每個輸入的影響程度。
- ( b ):偏置,用於調整模型的輸出。
- ( \sigma ):激活函數,決定神經元的輸出,例如 Sigmoid 或 ReLU。
3. 激活函數(Activation Function)
3.1 常見激活函數
Sigmoid 函數
\(\sigma(z) = \frac{1}{1 + e^{-z}}\) 適用於概率輸出,但容易造成梯度消失。ReLU(Rectified Linear Unit)函數
\(f(z) = \max(0, z)\) 解決了梯度消失問題,適合大部分深度學習模型。Softmax 函數
用於多分類問題,將輸出轉換為概率分布。
4. 前向傳播與反向傳播
4.1 前向傳播(Forward Propagation)
- 數據從輸入層經過隱藏層傳遞到輸出層。
- 每層的神經元執行加權計算並應用激活函數。
- 最終產生預測值。
4.2 反向傳播(Backward Propagation)
- 計算預測值與實際值的損失(Loss)。
- 反向更新每層的權重與偏置,最小化損失函數。
5. 損失函數與梯度下降
5.1 損失函數(Loss Function)
損失函數用於衡量模型的預測誤差,常見的有:
- 均方誤差(MSE):用於迴歸問題。
- 交叉熵損失(Cross-Entropy Loss):用於分類問題。
5.2 梯度下降(Gradient Descent)
梯度下降是深度學習中常用的優化演算法:
- 計算損失函數相對於權重的梯度。
- 沿梯度方向更新權重,使損失最小化。
更新公式:
\(w = w - \eta \cdot \frac{\partial L}{\partial w}\)
- ( \eta ):學習率,決定步伐大小。
- ( \frac{\partial L}{\partial w} ):損失函數對權重的偏導數。
6. 實作:使用 TensorFlow 建立簡單的神經網路
以下範例展示如何使用 TensorFlow 建立簡單的分類模型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
# 生成假數據
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 建立模型
model = Sequential([
Dense(64, activation='relu', input_shape=(X_train.shape[1],)),
Dense(32, activation='relu'),
Dense(1, activation='sigmoid')
])
# 編譯模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 訓練模型
history = model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=32)
# 評估模型
loss, accuracy = model.evaluate(X_test, y_test)
print(f"測試集準確率: {accuracy:.2f}")
課後作業
- 練習修改神經網路的結構(層數與神經元數量),觀察模型的性能變化。
- 查找不同激活函數的用途,嘗試用其他激活函數(如 Sigmoid、Tanh)。
- 思考並回答:
- 為什麼需要使用激活函數?
- 前向傳播與反向傳播的角色分別是什麼?
本文章以 CC BY 4.0 授權