0
本文作者: AI研習(xí)社-譯站 | 2018-08-13 17:30 |
雷鋒網(wǎng)按:本文為AI研習(xí)社編譯的技術(shù)博客,原標(biāo)題 A Comprehensive guide to Fine-tuning Deep Learning Models in Keras (Part I),作者為 Felix Yu 。
翻譯 | 楊東旭 校對(duì) | 孟凡 整理 | MY
這篇文章中,我們將對(duì)實(shí)踐中的微調(diào)做一個(gè)全面的概述,微調(diào)是深度學(xué)習(xí)中常用的方法。
我將借鑒自己的經(jīng)驗(yàn),列出微調(diào)背后的基本原理,所涉及的技術(shù),及最后也是最重要的,在本文第二部分中將分步詳盡闡述如何在 Keras 中對(duì)卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行微調(diào)。
首先,為什么對(duì)模型進(jìn)行微調(diào)?
當(dāng)我們得到一個(gè)深度學(xué)習(xí)任務(wù)時(shí),例如,一個(gè)涉及在圖像數(shù)據(jù)集上訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)(Covnet)的任務(wù),我們的第一直覺(jué)將是從頭開(kāi)始訓(xùn)練網(wǎng)絡(luò)。然而,在實(shí)踐中,像 Covnet 這樣的深度神經(jīng)網(wǎng)絡(luò)具有大量的參數(shù),通常在百萬(wàn)數(shù)量級(jí)。在一個(gè)小的數(shù)據(jù)集(小于參數(shù)數(shù)量)上訓(xùn)練一個(gè) Covnet,會(huì)極大的影響網(wǎng)絡(luò)的泛化能力,通常會(huì)導(dǎo)致過(guò)擬合。
因此,更常見(jiàn)的是微調(diào)一個(gè)在大數(shù)據(jù)集上已經(jīng)訓(xùn)練好的模型,就像 ImageNet(120 萬(wàn)的標(biāo)注圖像),然后在我們的小數(shù)據(jù)集上繼續(xù)訓(xùn)練(即運(yùn)行反向傳播)。假如我們的數(shù)據(jù)集與原始數(shù)據(jù)集(例如 ImageNet)在上下文中沒(méi)有明顯的不同,則預(yù)訓(xùn)練模型已經(jīng)具有了處理我們自己的分類(lèi)問(wèn)題相應(yīng)的學(xué)習(xí)特征。
何時(shí)微調(diào)模型?
一般來(lái)說(shuō),如果我們的數(shù)據(jù)集在上下文中與預(yù)訓(xùn)練模型的訓(xùn)練數(shù)據(jù)集沒(méi)有明顯不同,我們應(yīng)該進(jìn)行微調(diào)。像 ImageNet 這樣大而多樣的數(shù)據(jù)集上的預(yù)訓(xùn)練網(wǎng)絡(luò),在網(wǎng)絡(luò)前幾層可以捕獲到像曲線(xiàn)和邊緣這類(lèi)通用特征,這些特征對(duì)于大多數(shù)分類(lèi)問(wèn)題都是相關(guān)且有用的。
當(dāng)然,如果我們的數(shù)據(jù)集代表一些非常具體的領(lǐng)域,例如醫(yī)學(xué)圖像或中文手寫(xiě)字符,并且找不到這個(gè)領(lǐng)域的預(yù)訓(xùn)練網(wǎng)絡(luò),那么我們應(yīng)該考慮從頭開(kāi)始訓(xùn)練網(wǎng)絡(luò)。
另一個(gè)問(wèn)題是,如果我們的數(shù)據(jù)集很小,那么在小數(shù)據(jù)集上微調(diào)預(yù)先訓(xùn)練的網(wǎng)絡(luò)可能會(huì)導(dǎo)致過(guò)擬合,特別是如果網(wǎng)絡(luò)的最后幾層是全連接層,就像 VGG 網(wǎng)絡(luò)的情況。根據(jù)我的經(jīng)驗(yàn),如果我們有幾千個(gè)原始樣本,并實(shí)現(xiàn)了常見(jiàn)的數(shù)據(jù)增強(qiáng)策略(翻譯,旋轉(zhuǎn),翻轉(zhuǎn)等),微調(diào)通常會(huì)使我們得到更好的結(jié)果。
如果我們的數(shù)據(jù)集非常小,比如少于一千個(gè)樣本,則更好的方法是在全連接的層之前將中間層的輸出作為特征(瓶頸特征)并在網(wǎng)絡(luò)的頂部訓(xùn)練線(xiàn)性分類(lèi)器(例如 SVM)。SVM 特別擅長(zhǎng)在小型數(shù)據(jù)集上繪制決策邊界。
微調(diào)技術(shù)
以下是一些實(shí)現(xiàn)微調(diào)通用的指導(dǎo)原則:
1. 常用的做法是截?cái)囝A(yù)訓(xùn)練網(wǎng)絡(luò)的最后一層(softmax 層),并將其替換為與我們自己的問(wèn)題相關(guān)的新 softmax 層。例如,ImageNet 上經(jīng)過(guò)預(yù)先訓(xùn)練的網(wǎng)絡(luò)帶有 1000 個(gè)類(lèi)別的 softmax 層。
如果我們的任務(wù)是 10 個(gè)類(lèi)別的分類(lèi),則網(wǎng)絡(luò)的新 softmax 層將是 10 個(gè)類(lèi)別而不是 1000 個(gè)類(lèi)別。然后,我們?cè)诰W(wǎng)絡(luò)上運(yùn)行反向傳播來(lái)微調(diào)預(yù)訓(xùn)練的權(quán)重。確保執(zhí)行交叉驗(yàn)證,以便網(wǎng)絡(luò)具有很好的泛化能力。
2. 使用較小的學(xué)習(xí)率去訓(xùn)練網(wǎng)絡(luò)。因?yàn)槲覀兤谕A(yù)先訓(xùn)練的權(quán)重相比隨機(jī)初始化權(quán)重要好很多,所以不希望過(guò)快和過(guò)多地扭曲這些權(quán)重。通常的做法是使此刻的初始學(xué)習(xí)率比從頭訓(xùn)練的初始學(xué)習(xí)率小 10 倍。
3. 還有一個(gè)常用的做法是凍結(jié)預(yù)訓(xùn)練網(wǎng)絡(luò)的前幾層的權(quán)重。這是因?yàn)榍皫讓硬东@了與我們的新問(wèn)題相關(guān)的曲線(xiàn)和邊緣等通用特征。我們希望保持這些權(quán)重的完整。相反,我們將在后面的層中專(zhuān)注于學(xué)習(xí)數(shù)據(jù)集中的特殊特征。
在哪里找到預(yù)訓(xùn)練網(wǎng)絡(luò)?
這要取決于深度學(xué)習(xí)框架。對(duì)于像 Caffe,Keras,TensorFlow,Torch,MxNet 等流行的框架,他們各自的貢獻(xiàn)者通常會(huì)保留已實(shí)現(xiàn)的最先進(jìn) Covnet 模型(VGG,Inception,ResNet 等)的列表和在 ImageNet 或 CIFAR 等常見(jiàn)數(shù)據(jù)集上的預(yù)訓(xùn)練權(quán)重。
找到這些預(yù)訓(xùn)練模型的最好方法是用 google 搜索特定的模型和框架。但是,為了方便您的搜索過(guò)程,我將在流行框架上的常用預(yù)訓(xùn)練 Covnet 模型放在一個(gè)列表中。
Caffe
Model Zoo -為第三方貢獻(xiàn)者分享預(yù)訓(xùn)練 caffe 模型的平臺(tái)
Keras
Keras Application - 實(shí)現(xiàn)最先進(jìn)的 Convnet 模型,如 VGG16 / 19,googleNetNet,Inception V3 和 ResNet
TensorFlow
VGG16
Inception V3
ResNet
Torch
LoadCaffe - 維護(hù)一個(gè)流行模型的列表,如 AlexNet 和 VGG。從 Caffe 移植的權(quán)重
MxNet
MxNet Model Gallery - 維護(hù)預(yù)訓(xùn)練的 Inception-BN(V2)和 Inception V3。
在 Keras 中微調(diào)
......
想要繼續(xù)閱讀,請(qǐng)移步至我們的AI研習(xí)社社區(qū):https://club.leiphone.com/page/TextTranslation/719
更多精彩內(nèi)容盡在 AI 研習(xí)社。
不同領(lǐng)域包括計(jì)算機(jī)視覺(jué),語(yǔ)音語(yǔ)義,區(qū)塊鏈,自動(dòng)駕駛,數(shù)據(jù)挖掘,智能控制,編程語(yǔ)言等每日更新。
雷鋒網(wǎng)雷鋒網(wǎng)
雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。