我的新書AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題的教材投影片已製作完成
歡迎各位有需要的教師和博碩文化索取教材

如何從預先訓練的模型中提取特徵

如何從一個已經訓練好的模型(預訓練模型)中,提取出我們感興趣的資料特徵。

什麼是預訓練模型?

預訓練模型就像是一個已經受過良好教育的人,他對很多事情都有基本的認識。在機器學習中,預訓練模型是指在一個非常大且多樣的資料集上訓練過的模型。例如,一個圖像識別的預訓練模型可能已經看過數百萬張圖片,因此它對各種物體、場景都有很深的理解。

我們可以將整個預先訓練的模型看作是一個特徵提取器。 將輸入數據丟入預先訓練的模型中,然後使用模型的最後一層輸出 (通常是分類層) 作為特徵。

為什麼要提取特徵?

  • 加速模型訓練: 如果我們有一個新的任務,但資料量不夠大,直接訓練一個新的模型可能會效果不佳。這時,我們可以利用預訓練模型提取出來的特徵,作為新模型的輸入。因為這些特徵已經包含了大量有用的資訊,所以新模型只需要學習如何將這些特徵組合起來,就能達到不錯的效果。
  • 理解模型: 通過分析提取出來的特徵,我們可以更好地了解模型是如何工作的,哪些特徵對模型的預測結果影響最大。
  • 轉移學習: 將一個模型在一個任務上學到的知識,應用到另一個相關的任務上。

具體範例

使用 ImageNet 預訓練模型進行圖像分類

情境: 假設我們有一個小型的新數據集,包含貓、狗和馬的圖片,我們希望訓練一個模型來區分這三種動物。我們可以利用 ImageNet 預訓練模型來加速這個過程。ImageNet 是一个非常大的圖像數據集,包含數百萬張圖片和數千個類別。

步驟:

  1. 選擇預訓練模型: 我們選擇一個在 ImageNet 上訓練好的 CNN 模型,例如 ResNet50 或 VGG16。這些模型已經學習到了圖像中常見的低層特徵(如邊緣、紋理)和高層特徵(如物體的形狀、位置)。
  2. 移除最後一層: 這些模型的最後一層通常是一個全連接層,用於輸出 ImageNet 中的所有類別。由於我們的任務只有三個類別,所以我們將這一層移除。
  3. 添加新的分類器: 在移除的層之後,我們添加一個新的全連接層,輸出節點數為 3(貓、狗、馬),並初始化隨機權重。
  4. 固定前面的層: 為了保留預訓練模型學到的豐富特徵,我們可以將前面的層的權重固定住,只訓練新添加的分類器。
  5. 訓練模型: 使用我們的小型数据集對模型進行訓練。由於前面的層已經學習到了很多有用的特徵,因此我們只需要訓練很少的迭代次數就能達到不錯的效果。

為什麼這麼做?

  • ImageNet 預訓練模型已經學習到了圖像中非常豐富的通用特徵,例如邊緣、紋理、物體的形狀等。這些特徵對於我們的任務(貓、狗、馬的分類)也是非常有用的。
  • 固定前面的層可以大大減少需要訓練的參數數量,加速訓練過程,並且可以防止過度擬合。
  • 只訓練最後一層可以讓我們快速適應新的任務,而不需要從頭開始訓練一個全新的模型。

提取特徵的常見應用場景

  • 小數據集的分類問題:當訓練數據不足時,使用預訓練模型可以提高模型的泛化能力。
  • 遷移學習:將一個模型在一個任務上學到的知識,遷移到另一個相關的任務上。
  • 特征可視化:通過分析提取的特徵,可以更好地理解模型的工作原理。

從預訓練模型中提取特徵是一種非常有效的技術,可以幫助我們在各種機器學習任務中取得更好的效果。
關鍵在於選擇適合的預訓練模型,並根據具體的任務進行適當的調整。


17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。

如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!