基於Pre-trained模型加速模型學習的6點建議

2020-12-13 騰訊網

首先,為什麼要調整模型?

像卷積神經網絡( CNN )這樣的深度學習模型具有大量的參數;一般稱之為超參數,因為它們不是固定值,需要迭代優化。通常可以通過網格搜索的方法來查找這些超參數的最佳值,但需要大量硬體和時間開銷。那麼,一個真正的數據科學家是否滿足於只是猜測這些超參數呢?答案當然是否定的。

改進模型的最佳方法之一是,基於專業團隊的設計和體系結構上來進行改進,但這些專業的知識往往需要對某一領域具有深入的了解,且通常需要有強大的硬體支持。一般這些專業的團隊都喜歡把他們的訓練好的模型(pre-trained model)開源出來,無償提供給別人使用。基於這些pre-trained model來做研究和應用,可以省去大量的時間和資源。

深度學習技巧

這裡分享幾種方法,如何基於預訓練好的模型來降低深度學習模型訓練時間,提升模型的準確性:

1、選擇最適用於做pre-trained模型的網絡結構:了解遷移學習(transfer learning)的優點,或者一些強大的CNN網絡結構。主要考慮,有些領域之間看起來不明顯,但領域之間卻共享一些具有潛在特性(share potential latent features)。

2、使用較小的學習率:由於預先訓練的權重(weights)通常比隨機初始化的權重更好,因此調整需要更精細!如何選擇主要取決於training landscape和學習的進展情況,但需要仔細檢查每個epoch的training errors,分析如何能讓模型達到收斂。

3、使用Dropout:就像Ridge和LASSO正則化技術對於回歸模型一樣,對於所有模型都存在需要優化的參數alpha或Dropout。這是一個超參數,取決於需要解決的具體問題,只能通過不停實驗的方法得到。先對超參數做比較大的調整(gridsearch時選擇一個比較大的變化範圍),比如NP. logspace(),然後像上面的一樣減小學習速率。循環上述過程直到找到最優值。

4、限制權重大小:可以限制某些層的權重的最大範數(絕對值),可以提升模型泛化的能力。

5、不要改變第一層網絡的權值:神經網絡的第一個隱含層傾向於捕捉通用和可解釋(universal and interpretable)的特徵,如形狀、曲線或交叉(shapes、curves and interactions),這些特徵通常與跨域(domains)相關。應該經常把這些特徵放到一邊,把重點放在進一步優化meta latent level在水平上。這可能意味需要添加隱藏層!

6、修改輸出層:把模型參數替換成適用於要解決新領域的新的激活函數和輸出大小。但是,不要把自己局限於最明顯的解決方案中。比如,儘管MNIST只需要10個輸出類,但這些數字有共同的變化,允許有12 - 16個類可能會更好地解決這些問題,並提高模型性能!

Keras中的技巧

如何在Keras MNIST中修改Dropout和限制權重的大小:

Dropout最佳實踐

1、使用20–50 %的,比較小的Dropout,建議20 %的輸入(Inputs)。值取得太小,不起作用;值取得太大,不好收斂。

2、在輸入層和隱藏層上使用Dropout。這一方法已被證明可以提高深入學習的效果。

3、使用較大的(帶衰減率)學習速率(learning rate with decay),以及較大的動量(momentum)。

4、限制模型的權重!大的學習速率容易導致梯度爆炸。通過對網絡權值施加約束(如最大範數正則化(max-norm regularization),其大小為5 )可以改善結果。

5、使用更大的網絡。在較大的網絡上使用Dropout,可能會獲得更好的性能,從而使模型有更多的機會學習獨立表示(Independent representations)。

給一個例子,如何在Keras中修改MNIST模型最後一層,輸出14個類別:

如何在網絡的最初五層中固定網絡的權值(Freeze weights):

此外,可以將該層的學習速率設置為零,或者使用參數的自適應學習算法,如Adadelta或Adam。這有點複雜,在Caffe等其他平臺上可以更好地實現。

預訓練模型庫

Keras

Kaggle List https://www.kaggle.com/gaborfodor/keras-pretrained-models

Keras Application:https://keras.io/applications/

OpenCV Example:https://www.learnopencv.com/keras-tutorial-fine-tuning-using-pre-trained-models/

TensorFlow

VGG16:https://github.com/ry/tensorflow-vgg16

Inception V3:https://github.com/tensorflow/models/blob/master/inception

ResNet:https://github.com/ry/tensorflow-resnet

Torch

LoadCaie:https://github.com/szagoruyko/loadcaffe

Caffe

Model Zoo:https://github.com/BVLC/caffe/wiki/Model-Zoo

TensorBoard的Graph的可視化

了解模型的整體結構通常很重要。下面給出一個例子,如何直接使用Python可視化訓練的模型:

http://nbviewer.jupyter.org/github/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/deepdream/deepdream.ipynb

相關焦點

  • 入門 | 深度學習模型的簡單優化技巧
    改進模型的最佳方法之一是基於在你的領域進行過深入研究的專家的設計和體系結構,他們通常擁有強大的硬體可供使用。而且,他們經常慷慨地開源建模架構和原理。儘管 MNIST 看起來似乎需要 10 個輸出類,但有些數字有共同的變量,允許 12-16 個類可能會更好地解決這些變量,並提高模型性能!與上面提到的提示一樣,深度學習模型應該隨著我們接近輸出而不斷修改和定製。
  • 深度學習模型推理優化加速技術
    Winograd、模型剪裁與稀疏化FFT/Winograd卷積算法(Op-level)模型剪枝(許多實驗證明:神經網絡都是過參數化的):稀疏連接、張量分解、channel剪枝;結構化剪枝(通常能提升運算速度,非結構剪枝過於隨機的話,效果不明顯)核的稀疏化模型參數共享低秩分解:使用矩陣對參數進行分解估計(屬於模型壓縮);SVD、tucker
  • 深度學習模型壓縮與加速綜述
    近年來,深度學習模型在CV、NLP等領域實現了廣泛應用。然而,龐大的參數規模帶來的計算開銷、內存需求,使得其在計算能力受限平臺的部署中遇到了巨大的困難與挑戰。因此,如何在不影響深度學習模型性能的情況下進行模型壓縮與加速,成為了學術界和工業界的研究熱點。
  • 基於LSTM的多變量多步預測模型
    >1、移動滑窗數據集構建想要對時序序列的數據進行值預測,數據集的構建是很重要的一步,我們需要基於原始的數據集來構建得到一個有監督的數據集來讓我們的模型學習到原始時序序列數據中的特點,從而實現對未來時刻的預測,滑窗數據集構建原理示意圖如下:
  • 時間序列的LSTM模型預測——基於Keras
    一、問題背景    現實生活中,在一系列時間點上觀測數據是司空見慣的活動,在農業、商業、氣象軍事和醫療等研究領域都包含大量的時間序列數據。時間序列的預測指的是基於序列的歷史數據,以及可能對結果產生影響的其他相關序列,對序列未來的可能取值做出預測。
  • 自主在線案例學習體驗的構念模型研究——基於結構方程模型的探索
    關鍵詞:案例教學;自主在線學習;問卷信效度;探索性因子分析;結構方程模型一、引言隨著學習型社會的加速構建及網絡信息技術的日益成熟,在線情境下的自主學習將成為未來學習的重要發展趨勢[1]。自主在線學習提供了不同於教師引導的學習體驗,其海量的學習資源和靈活自由的學習方式滿足了資訊時代學習者自我提升和終生學習的需要。
  • 基於深度學習的三大生成模型:VAE、GAN、GAN的變種模型
    本章將為讀者介紹基於深度學習的生成模型。前面幾章主要介紹了機器學習中的判別式模型,這種模型的形式主要是根據原始圖像推測圖像具備的一些性質,例如根據數字圖像推測數字的名稱,根據自然場景圖像推測物體的邊界;而生成模型恰恰相反,通常給出的輸入是圖像具備的性質,而輸出是性質對應的圖像。
  • 廣義線性模型學習
    基於信息標準的模型選擇有多種選擇時,估計器 LassoLarsIC 建議使用 Akaike information criterion (Akaike 信息準則)(AIC)和 Bayes Information criterion (貝葉斯信息準則)(BIC)。
  • 競賽比完,代碼、模型怎麼處理?Kaggle大神:別刪,這都是寶藏
    步驟 6:預提交鉤子(hook)一直手動運行 flake8、black 和 mypy 會覺得厭倦。一個名為 pre-commit 的鉤子能夠解決這個問題。一個更好的解決方案是在 TensorFlow 或 Keras 上使用 torchvision 中的 torch.utils.model_zoo.load_url 函數:from retinaface.pre_trained_models import get_modelmodel = get_model("resnet50_2020-07-20
  • 基於B—S模型和二叉樹模型的期權定價比較
    2.4元/份,合約到期日為今年6月22日,選取該期權合約1月18日至5月3日每個交易日的收盤價(共計70個交易日)。本文之所以選擇6月期權合約,主要基於以下原因:6月期權合約是季月合約(季月是指3、6、9、12月),與其他月份合約相比,該期權合約在期權市場上交易時間較長,約為半年左右,因此積累的交易數據較多,可以在很大程度上避免由於數據本身的缺陷導致最終期權定價效率分析時的誤差。與此同時,本文選取上海同業拆放利率Shibor1年期利率作為無風險利率。
  • 基於模型的系統工程 | 工業新概念
    (4) 參照《SE願景2020》解釋,中文定義納入從基於文檔模式到基於模型模式的範式轉移,點出MBSE產生緣由和要解決的問題。例如,美軍方從2012年開始開發融合MBSE和基於模型工程方法的面向裝備全生命期的基於模型系統採辦框架。
  • 基於深度學習的代理模型比模擬器表現更好,並可能加速科學發現
    的一篇論文中發表的美國國家科學院學報》(PNAS), LLNL研究者描述深學習驅動管匯的發展和周期性一致(MaCC)代理模型結合綜合神經網絡能夠快速、準確地模擬複雜的科學流程,包括高能量密度物理ICF參與。
  • 圖模型+Bert香不香?完全基於注意力機制的圖表徵學習模型Graph-Bert
    通過將原始圖分解為以每個節點為中心的多個子圖來學習每個節點的表徵信息,這不僅能解決圖模型的預訓練問題,還能通過並行處理還提高效率。模型假死和過於平滑都可以歸結於傳統 GNN 的類卷積特徵學習方式以及基於聚合操作(mean,max,sum)的信息更新方式,這會導致隨著模型層數加深,模型會逐漸喪失對輸入的響應,因此一般GNN都是只堆疊不超過兩層。同時,模型學習到的不同節點的表徵信息也會愈發相似,從而變得無法區分。此外,由於傳統GNN都考慮圖中的固有內在連接(即邊),因此無法對圖數據進行並行化處理。
  • BERT相關模型匯總梳理
    ALBERT 的出發點在於,如果模型參數持續變大,會出現兩類問題:GPU/TPU OOM;模型效果退化。基於此,ALBERT 考慮減少模型的參數。1. Factorized embedding parameterization:之前的模型中,都會使
  • 深度學習模型壓縮方法
    核的稀疏化,在訓練過程中,對權重的更新進行誘導,使其更加稀疏,對於稀疏矩陣,可以使用更加緊緻的存儲方式,如CSC,但是使用稀疏矩陣操作在硬體平臺上運算效率不高,容易受到帶寬的影響,因此加速並不明顯。除此之外,量化、Low-rank分解、遷移學習等方法也有很多研究,並在模型壓縮中起到了非常好的效果。
  • 基於BOPPPS模型的有效課堂教學設計
    目前國內已經開始在實際教學中引入BOPPPS教學模型,但更多的是與實際課程相結合的經驗總結[3][4][5][6],該模型是一個能夠幫助教師分解並分析教學過程、找出教學盲點、改善並提升教學成效的工具。他將學習闡釋為一個以具體體驗為起點和終點的循環過程:具體體驗—反思觀察—抽象概括—行動實踐—具體體驗,通過不斷的如此循環,形成一個連貫的學習經歷,在學習過程中學習者自動地完成反饋與調整。BOPPPS教學模型就是一個基於Kolb體驗式學習模型的教學框架。
  • ReZero:使用加權殘差連接加速深度模型收斂
    比如看圖中紅色曲線,在高層的時候,梯度的範數尚且較大,但當來到底層的時候,梯度的範數就非常小,特別是在Decoder端,幾乎趨於零。這說明了深層模型仍然有比較嚴重的梯度消失問題。下表是12層的Transformer使用各方法在enwiki8數據集上的收斂情況。可以看到,ReZero只需要8800次迭代,而原始Transformer需要13690次迭代,速度方面加快了56%。
  • 新加坡國立大學在讀博士張景鋒:基於對抗學習的模型魯棒性研究...
    因此,提升深度學習神經網絡的魯棒性變得愈發重要。對抗學習是目前提升模型魯棒性最有效的方式,其核心思路是針對當前的神經網絡構建對抗樣本,然後通過不斷更新網絡參數來學習對抗樣本。傳統對抗學習是基於極小極大算法(Minimax),這是一種找出失敗的最大可能性中最小值的演算法(即最小化對手的最大收益)。
  • 【ReZero】使用加權殘差連接加速深度模型收斂
    為了能夠更好地解決NLP模型上的訓練問題,本文提出了一種非常簡單的方法:ReZero——對每個殘差連接加上一個可學習的係數——使得模型能在訓練初期更加穩定,進而促進整個訓練過程。本方法在12層的Transformer上取得約56%的訓練加速,在32層前饋網絡上取得15倍的加速,在ResNet54上實現了32%的加速。
  • 一文讀懂最強中文NLP預訓練模型ERNIE
    基於飛槳開源的持續學習的語義理解框架ERNIE 2.0,及基於此框架的ERNIE 2.0預訓練模型,在共計16個中英文任務上超越了BERT和XLNet, 取得了SOTA效果。本文帶你進一步深入了解ERNIE的技術細節。