基於Keras 對深度學習模型進行微調的全面指南Part 1
來自專欄 AI研習社社區4 人贊了文章
本文為AI研習社編譯的技術博客,原標題 A Comprehensive guide to Fine-tuning Deep Learning Models in Keras (Part I),作者為 Felix Yu 。
翻譯 | 楊東旭 校對 | 孟凡 整理 | MY
在這篇文章中,我們將對實踐中的微調做一個全面的概述,微調是深度學習中常用的方法。
我將借鑒自己的經驗,列出微調背後的基本原理,所涉及的技術,及最後也是最重要的,在本文第二部分中將分步詳盡闡述如何在 Keras 中對卷積神經網路模型進行微調。
首先,為什麼對模型進行微調?
當我們得到一個深度學習任務時,例如,一個涉及在圖像數據集上訓練卷積神經網路(Covnet)的任務,我們的第一直覺將是從頭開始訓練網路。然而,在實踐中,像 Covnet 這樣的深度神經網路具有大量的參數,通常在百萬數量級。在一個小的數據集(小於參數數量)上訓練一個 Covnet,會極大的影響網路的泛化能力,通常會導致過擬合。
因此,更常見的是微調一個在大數據集上已經訓練好的模型,就像 ImageNet(120 萬的標註圖像),然後在我們的小數據集上繼續訓練(即運行反向傳播)。假如我們的數據集與原始數據集(例如 ImageNet)在上下文中沒有明顯的不同,則預訓練模型已經具有了處理我們自己的分類問題相應的學習特徵。
何時微調模型?
一般來說,如果我們的數據集在上下文中與預訓練模型的訓練數據集沒有明顯不同,我們應該進行微調。像 ImageNet 這樣大而多樣的數據集上的預訓練網路,在網路前幾層可以捕獲到像曲線和邊緣這類通用特徵,這些特徵對於大多數分類問題都是相關且有用的。
當然,如果我們的數據集代表一些非常具體的領域,例如醫學圖像或中文手寫字元,並且找不到這個領域的預訓練網路,那麼我們應該考慮從頭開始訓練網路。
另一個問題是,如果我們的數據集很小,那麼在小數據集上微調預先訓練的網路可能會導致過擬合,特別是如果網路的最後幾層是全連接層,就像 VGG 網路的情況。根據我的經驗,如果我們有幾千個原始樣本,並實現了常見的數據增強策略(翻譯,旋轉,翻轉等),微調通常會使我們得到更好的結果。
如果我們的數據集非常小,比如少於一千個樣本,則更好的方法是在全連接的層之前將中間層的輸出作為特徵(瓶頸特徵)並在網路的頂部訓練線性分類器(例如 SVM)。SVM 特別擅長在小型數據集上繪製決策邊界。
微調技術
以下是一些實現微調通用的指導原則:
1. 常用的做法是截斷預訓練網路的最後一層(softmax 層),並將其替換為與我們自己的問題相關的新 softmax 層。例如,ImageNet 上經過預先訓練的網路帶有 1000 個類別的 softmax 層。
如果我們的任務是 10 個類別的分類,則網路的新 softmax 層將是 10 個類別而不是 1000 個類別。然後,我們在網路上運行反向傳播來微調預訓練的權重。確保執行交叉驗證,以便網路具有很好的泛化能力。
2. 使用較小的學習率去訓練網路。因為我們期望預先訓練的權重相比隨機初始化權重要好很多,所以不希望過快和過多地扭曲這些權重。通常的做法是使此刻的初始學習率比從頭訓練的初始學習率小 10 倍。
3. 還有一個常用的做法是凍結預訓練網路的前幾層的權重。這是因為前幾層捕獲了與我們的新問題相關的曲線和邊緣等通用特徵。我們希望保持這些權重的完整。相反,我們將在後面的層中專註於學習數據集中的特殊特徵。
在哪裡找到預訓練網路?
這要取決於深度學習框架。對於像 Caffe,Keras,TensorFlow,Torch,MxNet 等流行的框架,他們各自的貢獻者通常會保留已實現的最先進 Covnet 模型(VGG,Inception,ResNet 等)的列表和在 ImageNet 或 CIFAR 等常見數據集上的預訓練權重。
找到這些預訓練模型的最好方法是用 google 搜索特定的模型和框架。但是,為了方便您的搜索過程,我將在流行框架上的常用預訓練 Covnet 模型放在一個列表中。
- Caffe
Model Zoo -為第三方貢獻者分享預訓練 caffe 模型的平台
- KerasKeras Application - 實現最先進的 Convnet 模型,如 VGG16 / 19,googleNetNet,Inception V3 和 ResNet
- TensorFlowVGG16Inception V3
ResNet
- TorchLoadCaffe - 維護一個流行模型的列表,如 AlexNet 和 VGG。從 Caffe 移植的權重
- MxNetMxNet Model Gallery - 維護預訓練的 Inception-BN(V2)和 Inception V3。
在 Keras 中微調
在這篇文章的第二部分,我將詳細介紹如何在 Keras 中對流行模型 VGG,Inception V3 和 ResNet 進行微調。
如果您有任何問題或想法,請隨時在下面發表評論。
您也可以在 Twitter 上關注我 @flyyufelix。
原文鏈接:
A Comprehensive guide to Fine-tuning Deep Learning Models in Keras (Part I)
一個專註於
AI技術發展和AI工程師成長的求知求職社區
誕生啦!
歡迎大家訪問以下鏈接或者掃碼體驗
https://club.leiphone.com/page/homehttps://club.leiphone.com/page/home (二維碼自動識別)
推薦閱讀:
※比TD、MC、MCTS指數級快,性能超越A3C、DDQN等模型,這篇RL演算法論文在Reddit上火了
※ACL 2018 | 神經語言模型如何利用上下文信息:長距離上下文的詞序並不重要
※當前最好的詞句嵌入技術概覽:從無監督學習轉向監督、多任務學習
※乾貨 —— Frank-Wolfe演算法
※DeepMind論文解讀:讓機器更深入地理解文本
TAG:深度學習DeepLearning | 神經網路 | 機器學習 |