iPAS 備考專區 登入

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

VGG16 架構哪個敘述正確?

原題

VGG16 連題組第三題:VGG16 層數深且結構規則,由多層卷積、池化及全連接層組成。了解各層的輸入/輸出維度、參數量及記憶體需求,有助於掌握 CNN 模型的組成邏輯與實作技巧。根據 VGG16 的模型架構,下列敘述何者正確? (A) AdaptiveAvgPool2d 的輸出會被攤平後傳入第一個全連接層;由於前一層池化輸出空間為 4×4,所以第一個線性層的輸入維度是 512×4×4 = 8192 (B) Linear-33(第一個全連接層)報出的 102,764,544 參數只包含權重,偏差(bias)沒有算在內 (C) 根據列出的「Estimated Total Size (MB) = 624.98」,表示訓練此模型只需大約 625MB 的 GPU 記憶體(包含所有 optimizer state 與梯度),所以一張 1 GB 的 GPU 就足夠訓練 (D) VGG16 包含 13 層卷積(conv)與 3 層全連接層(FC),總參數數目約為 138,357,544(約 138.36M)

白話

動物園影像辨識專案的工程師讀了 VGG16 的模型摘要報告後,面對四個關於 VGG16 架構的描述,每個描述都涉及具體的數字或設計細節,有些有細微的錯誤。

問你:四個關於 VGG16 架構的描述中,哪一個是正確的?

一句話總結

四個敘述中,正確的是選項 D:VGG16 確實有 13 層卷積與 3 層全連接,總參數約 138,357,544(138.36M)。其他三個選項各有一個具體的數字或概念錯誤。

情境

先感受問題:讀懂模型摘要表的「小陷阱」

動物園工程師印出 VGG16 的 model.summary(),拿到一張數字密密麻麻的報告:每層的輸出維度、參數量、記憶體佔用……老闆問:「這份報告的哪些數字是真的,哪些需要特別注意?」

這題考的是「能不能正確解讀模型摘要表」,四個選項都涉及具體數字,每個都有一個細微的認知陷阱:

  • 選項 A:空間尺寸的數字(4×4 vs 7×7)
  • 選項 B:參數量是否包含偏差(bias)
  • 選項 C:模型大小是否等於訓練所需記憶體
  • 選項 D:層數統計與總參數量(正確)

舊方法

直接相信模型摘要的數字,容易犯哪些誤解?

  1. 把 AdaptiveAvgPool2d 的輸出大小記錯:VGG16 的 AdaptiveAvgPool2d(7, 7) 輸出是 7×7,不是 4×4。第一個全連接層的輸入是 512×7×7 = 25,088,而不是 8,192。這個數字錯了,整個後續的計算都會錯。
  2. 誤以為參數量只計算權重,不含偏差:PyTorch 的 summary() 預設包含偏差(bias)在內。Linear(25088, 4096) 的參數量 = 25088×4096(權重) + 4096(偏差) = 102,764,544,兩者都算進去了。
  3. 把模型檔案大小等同於訓練 GPU 記憶體:torchsummary 的 Estimated Total Size 只包含模型權重的靜態大小,實際訓練還需要:梯度(同等大小)、optimizer state(Adam 需要再乘 3 倍)、中間激活值、mini-batch 資料。真實訓練記憶體通常是模型大小的 4-10 倍。
  4. 層數統計不清楚:VGG16 的 features 模組有 13 個 Conv2d,classifier 模組有 3 個 Linear,加上 BatchNorm、ReLU、MaxPool2d 等,總共約 44 個操作,但可訓練層只有 13+3=16 層。
  5. 總參數量估算不準確:138,357,544 是 VGG16 原始版本(輸出 1000 類)的準確數字,來自 conv 層的約 14.7M 加上全連接層的約 123.6M。

新方法

逐一比對:排除三個錯誤,確認選項 D

動物園工程師逐一驗證每個選項:

選項 A 的問題:VGG16 的 AdaptiveAvgPool2d 設定是 output_size=(7,7),不是 (4,4)。輸入 512×14×14 → 輸出 512×7×7。攤平後是 512×7×7 = 25,088,不是 8,192。這個選項的空間尺寸算錯了。

選項 B 的問題:Linear-33 的 102,764,544 已經包含 4,096 個偏差(bias)了,不是「只有權重」。PyTorch 的 summary() 預設把 bias 一起統計進參數量。

選項 C 的問題:Estimated Total Size 625 MB 只是權重佔用,不是訓練所需的全部 GPU 記憶體。訓練時還需要梯度(約 625 MB)、Adam 的 first/second moment(約 1.25 GB)、中間激活值(視 batch size 而定,可能幾百 MB 以上),一張 1 GB 的 GPU 遠遠不夠訓練。

選項 D 是正確的:VGG16 確有 13 層 Conv2d、3 層 Linear,總參數 138,357,544 ≈ 138.36M,這是文獻和程式碼都一致的數字。

這就是選項 D 講的:VGG16 包含 13 層卷積(conv)與 3 層全連接層(FC),總參數數目約為 138,357,544(約 138.36M)。

錯選項

為什麼其他選項是錯的

AAdaptiveAvgPool2d 輸出 4×4,輸入維度是 8192

字面在說什麼

池化層把特徵圖壓縮到 4×4,所以全連接層的輸入是 512×4×4 = 8192。

為什麼不對

VGG16 的 AdaptiveAvgPool2d 設定是 output_size=(7, 7),不是 (4, 4)。輸出是 512×7×7 = 25,088,第一個全連接層的輸入也是 25,088。選項 A 把 7×7 誤記成 4×4,導致後面的數字全部算錯。

誰會選錯

對 VGG16 的具體數字記憶模糊,只記得「最後要攤平」但不記得 7×7 這個細節,看到 4×4 = 16 × 512 = 8192 這個整齊的數字就覺得合理。

B102,764,544 只包含權重,不含偏差

字面在說什麼

模型摘要中 Linear-33 顯示的參數量只是純權重,bias 另外計算。

為什麼不對

PyTorch 的 torchsummary 和內建 summary() 都把 bias 計入每層的參數量。Linear(25088, 4096) 的 102,764,544 = 25,088×4,096(權重) + 4,096(bias)。bias 本身是可訓練參數,當然要統計在內。

誰會選錯

誤以為「參數量」只算「Weight 矩陣」,不含偏差項。事實上 bias 是全連接層不可或缺的一部分,幾乎所有框架的參數計數都包含它。

C625 MB 表示 1 GB GPU 足夠訓練

字面在說什麼

模型大小 625 MB,1 GB 的 GPU 記憶體就足夠訓練整個 VGG16。

為什麼不對

Estimated Total Size 只是推論(inference)時的模型權重大小。訓練時還需要:梯度(同等大小 ≈ 625 MB)、Adam optimizer 的 m 和 v(再加 1.25 GB)、每層的中間激活值(視 batch size 而定,幾百 MB 起跳)。實際訓練 VGG16 需要 4-8 GB 以上的 GPU 記憶體。

誰會選錯

看到「模型大小 625 MB」、「GPU 1 GB」直覺覺得「625 < 1000,裝得下」,沒考慮到訓練比推論需要多存梯度和 optimizer state。

變形題

同個考點下次怎麼變形

延伸

想再往下看,這 5 個

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

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

看官方原文 PDF

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