iPAS 備考專區 登入

iPAS AI 應用規劃師 中級 科目三 機器學習技術與應用・114 年第二次・L23・第 49 題

Titanic MLP 參數量怎麼算?

原題

Titanic MLP 連題組第二題:參考下圖執行結果,下列何者正確? model = Sequential() model.add(Input(shape=(X_train.shape[1],))) model.add(Dense(10, activation="relu")) model.add(Dense(10, activation="relu")) model.add(Dense(1, activation="sigmoid")) model.summary() model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"]) Model: "sequential" Layer (type) Output Shape Param # dense (Dense) (None, 10) 空格 1 dense_1 (Dense) (None, 10) 空格 2 dense_2 (Dense) (None, 1) 11 敘述: A:activation="relu" 其數學式為 f(x) = 1/(1+e^(-x)) B:空格 1 值為 110,空格 2 值為 100 C:空格 1 值為 100,空格 2 值為 110 D:activation="sigmoid" 一般用於多類別分類預測模型

白話

Titanic MLP 分析專案中,工程師建了一個三層全連接網路,輸入是 9 個特徵,輸出是「是否存活」的二元分類。model.summary() 輸出了每層的輸出形狀和參數量,但第一、第二個 Dense 層的參數量留下了空格 1 和空格 2。題目還附上了四個敘述,考你對激活函數和參數量計算的理解。

問你:四個敘述中,哪一個是正確的?

一句話總結

正確的是選項 C:空格 1(第一個 Dense 層)= 100,空格 2(第二個 Dense 層)= 110。輸入 9 維 → 輸出 10,參數 = 9×10+10 = 100;輸入 10 維 → 輸出 10,參數 = 10×10+10 = 110。

情境

先感受問題:每層的「連線數」加「偏差數」就是參數量

Titanic MLP 的工程師建了一個三層網路,要在 model.summary() 的空格裡填入每層的參數量。

計算 Dense 層參數量的公式很固定:每個輸出神經元都和每個輸入神經元有一條連線(weight),再加上一個偏差(bias)。所以:

  • Dense(10),輸入維度是 X_train.shape[1] = 9:參數 = 9×10(weight)+ 10(bias)= 90+10 = 100
  • Dense(10),輸入來自前一層輸出的 10 個神經元:參數 = 10×10 + 10 = 100+10 = 110
  • Dense(1),輸入來自 10 個神經元:參數 = 10×1 + 1 = 11(題目已給出)

關鍵:第一層 Dense 的輸入是 9(Titanic 的 9 個特徵),第二層的輸入是 10(上一層的輸出),所以兩者的參數量不一樣,是 100 和 110,而不是 110 和 100。

舊方法

容易算錯的三個地方

  1. 忘記加 bias:Dense(10) 輸入 9 維,只算 9×10=90,忘記加 10 個 bias,得到 90 而不是 100。bias 是每個輸出神經元各一個,不是共用。
  2. 把空格 1 和空格 2 弄反:第一層輸入是 9 維(特徵數),第二層輸入是 10 維(上一層輸出),所以第一層 100 < 第二層 110,不是反過來的 110 和 100。
  3. 混淆 ReLU 和 Sigmoid 的公式:ReLU 的公式是 f(x) = max(0, x),Sigmoid 的公式才是 f(x) = 1/(1+e^(-x))。兩者是不同的激活函數。
  4. Sigmoid 用在多分類:Sigmoid 輸出 0-1 之間的單一數值,用於二元分類(是/否);多分類用 Softmax,輸出每個類別的機率,總和為 1。
  5. Input 層沒有參數:model.add(Input(shape=(9,))) 不算一個有參數的層,它只是定義輸入形狀,所以第一個 Dense 的「輸入來源」是 9,不需要特別計算 Input 層的參數。

新方法

按公式計算:(input + 1) × output

Titanic MLP 的工程師逐層計算:

dense(第一層 Dense(10)):輸入 = X_train.shape[1] = 9,輸出 = 10

參數 = 9 × 10 + 10 = 90 + 10 = 100(空格 1)

dense_1(第二層 Dense(10)):輸入 = 前一層輸出 = 10,輸出 = 10

參數 = 10 × 10 + 10 = 100 + 10 = 110(空格 2)

dense_2(第三層 Dense(1)):輸入 = 10,輸出 = 1

參數 = 10 × 1 + 1 = 10 + 1 = 11(題目已給)

空格 1 = 100,空格 2 = 110,這就是選項 C 的答案。

這就是選項 C 講的:空格 1 值為 100,空格 2 值為 110。

錯選項

為什麼其他選項是錯的

Aactivation="relu" 的公式是 f(x) = 1/(1+e^(-x))

字面在說什麼

ReLU 激活函數的數學式是 Sigmoid 公式。

為什麼不對

ReLU(Rectified Linear Unit)的公式是 f(x) = max(0, x):x 大於 0 就輸出 x,小於等於 0 就輸出 0。f(x) = 1/(1+e^(-x)) 是 Sigmoid 函數的公式,兩者名稱和公式完全不同。

誰會選錯

記得「激活函數有個 S 型公式」,但不知道那是 Sigmoid 而非 ReLU;或者把 ReLU 和 Sigmoid 的名字背混了。

B空格 1 為 110,空格 2 為 100

字面在說什麼

第一個 Dense 層有 110 個參數,第二個有 100 個。

為什麼不對

第一個 Dense(10) 的輸入是 X_train.shape[1] = 9(Titanic 的特徵數),參數 = 9×10+10 = 100;第二個 Dense(10) 的輸入是上一層的 10 個神經元,參數 = 10×10+10 = 110。選項 B 把兩個空格的數字弄反了。

誰會選錯

對第一個 Dense 的「輸入是 9 還是 10」不確定,看到兩個都是 Dense(10) 就以為輸入也是 10,計算出 110;但第一個 Dense 的輸入其實是特徵數 9。

Dactivation="sigmoid" 一般用於多類別分類預測模型

字面在說什麼

Sigmoid 激活函數用於多類別分類。

為什麼不對

Sigmoid 輸出 0-1 之間的單一數值,代表「屬於正類的機率」,只適合二元分類(survived=0 或 1)。多類別分類(例如辨識 10 種數字)需要 Softmax,它輸出每個類別的機率,且所有類別的機率加起來等於 1。Titanic 預測「存活/死亡」正是典型的二元分類,用 Sigmoid 完全正確。

誰會選錯

誤以為 Sigmoid 可以輸出多個類別的機率,或者記混了 Sigmoid 和 Softmax 的用途。

變形題

同個考點下次怎麼變形

延伸

想再往下看,這 5 個

答案、題目或解析有問題?回報這題

出處:iPAS 經濟部產業人才能力鑑定 ・ 114 年第二梯次 iPAS AI 應用規劃師 中級 科目三 機器學習技術與應用 第 49 題

看官方原文 PDF

原題 © 經濟部產業發展署,AITerms.tw 僅作教學解析使用,本站解析以 CC BY-NC-SA 4.0 授權。