跳轉到

1.4 Dense Layer 與 Activation

範例程式:Open In Colab

Dense layer 是全連接層,activation function 則決定神經網路能不能學到非線性關係。若模型只有線性轉換,即使堆很多層,整體仍然等價於線性模型;加入非線性 activation 後,模型才有能力學習更複雜的決策邊界。

1. 學習目標

這篇用 XOR 任務說明 activation 的重要性。XOR 是一個典型的非線性分類問題:單純線性模型很難分類,但加入 ReLU 隱藏層後,DNN 可以把資料切出更好的決策邊界。

Notebook 會先畫出常見 activation function,再建立 XOR-like 二維資料,最後比較沒有隱藏層的線性模型與加入 ReLU 隱藏層的 DNN。這樣可以直接看到 activation 對模型表示能力的影響。

2. Dense layer 在做什麼?

Dense layer 的核心運算可以簡化成:

輸出 = activation(輸入 × 權重 + 偏差)

其中權重與偏差是模型會在訓練過程中學習的參數。

3. 常見 activation function

Activation 常見用途 特性
linear 回歸輸出層 不做非線性轉換
sigmoid 二元分類輸出層 輸出 0 到 1 的機率
tanh 部分序列模型或隱藏層 輸出 -1 到 1
relu DNN/CNN 隱藏層 訓練穩定、常用
softmax 多類別分類輸出層 輸出多類別機率分布

4. 為什麼 ReLU 常用?

ReLU 的公式是 max(0, x)。它簡單、計算快,而且在深層網路中通常比 sigmoid 更容易訓練。實務上,DNN 和 CNN 的隱藏層常以 ReLU 作為預設選擇。

Note

sigmoid 不代表不能用在隱藏層,但在深層網路中容易遇到梯度變小的問題。現代 DNN 通常把 sigmoid 留給二元分類輸出層。

5. 如何套用自己的模型?

常見搭配如下:

任務 輸出層 Loss
回歸 Dense(1) msemae
二元分類 Dense(1, activation='sigmoid') binary_crossentropy
多類別分類 Dense(class_count, activation='softmax') sparse_categorical_crossentropycategorical_crossentropy

6. 小結

Dense layer 負責學習特徵之間的加權組合,activation function 則讓模型具備非線性能力。理解這兩者,是看懂 DNN 架構的第一步。

後續在表格資料、影像或文字任務中,hidden layer 多半會使用 ReLU 或其變形,輸出層則依任務改成線性、sigmoid 或 softmax。