在某個模型訓練過程中遇到的難題及其解決辦法、對自動超參數調優方法的理解、模型部署時如何實現熱更新、說一說最近看過的一篇論文

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度學習實戰(不定時更新)


fasttext模型在大量類別上能夠快速訓練的原因、爲了提升fasttext模型的評估指標做了哪些優化 

簡述BERT模型的訓練過程、BERT模型在推斷過程中做了哪些性能優化、BERT模型在訓練過程中做了哪些性能優化 

在某個模型訓練過程中遇到的難題及其解決辦法、對自動超參數調優方法的理解、模型部署時如何實現熱更新、說一說最近看過的一篇論文

Softmax反向傳播推導、Bert的模型架構


問題:說一說在某個模型訓練過程中遇到的難題及其解決辦法

問題背景

因爲在實際工作中,大部分工程師都會遇到一些棘手的特殊問題,他們可能由已有數據,選擇的模型,以及硬件資源等因素決定。這也是驗證你是否有過實際操作的開放問題之一。

解題思路

第一步: 確定需要涉獵的模型

  • 微調BERT模型:
    • 這裏我們選擇帶有語言模型頭的BERT預訓練模型,在自己構建的三層MLP網絡下進行微調的過程。

第二步: 闡述遇到的典型問題和解決辦法

  • 遇到的問題:
    • 模型在訓練過程中,每batch的平均損失始終保持在0.6931的值附近(或恆等於0.6931),導致模型不再收斂,預測結果一般都指向固定標籤。
  • 出現原因:
    • 出現0.6931不收斂問題的內在原因是因爲使用交叉熵損失時,In0.5=0.6931,也就是說模型在訓練時落入了一個“自認爲的”局部最優點,默認概率0.5是最穩妥的答案,而且很難通過梯度自適應的步長走出該區域。外在原因是由於模型前期接收的數據張量的複雜程度過高,如:每條數據都是768x300(詞嵌入維度x文本對齊長度)的稠密矩陣,模型無法從批次數據中獲得相應的規律。
  • 什麼情況下出現:
    • 該問題一般出現在使用大型預訓練模型微調時,如Bert,XLNET的微調等,如果是完全的自構建模型,可以通過減小embedding和文本對齊長度,或適量增大batch_size的大小來解決對應的問題。而在使用預訓練模型時,因爲輸出的維度是固定的且比較大,在長文本語料下,減小文本對齊長度將損失很多重要特徵(不可取),增大batch_size的大小又很容易引起內存溢出。
  • 解決辦法:
    • 爲了解決該問題,應該使用動態有序數據訓練方法,即對訓練數據進行處理,使的文本較短且規律明顯的語料作爲前幾個批次的數據進入模型(注意:前期不要使用shuffle)長文本且規律不明顯的樣本放在語料後,這樣如此幾輪訓練使得模型有了一定的“知識基礎”,再在後邊的輪次裏shuffle數據以提升泛化能力。

答案

在我們微調帶有三層MLP的BERT預訓練模型時,模型訓練時不收斂且損失一直在0.6931附近。最後我們使用了“動態有序數據訓練”解決了該問題。


問題:說一說對自動超參數調優方法的理解

問題背景

自動超參數調優一直以來都是模型訓練過程中重要的一步,因此,考察對其的理解也是面試中經常出現的題目。

解題思路

第一步: 找出核心知識點並解析

  • 自動超參數調優的方法:

    • 隨機搜索(Random Search):無放回的隨機從給定的參數範圍內進行超參數選擇。優點:在大量超參數調節情況下速度最快。缺點:效果無法保證,不能獲得全局最優。
    • 網格搜索(Grid Search):通過給定的參數可能值,遍歷其所有的組合進行超參數選擇。優點:少量超參數時效果表現出色。缺點:超參數組合成指數增長,導致調優過程緩慢,同樣不能不能保證獲得全局最優。
    • 貝葉斯優化(Bayesian Optimization):假設每個超參數都服從高斯分佈,根據起始的幾個超參數點,使用貝葉斯估計,得到超參數在該點的均值和方差(即新的高斯分佈),之後會使用一個叫做acq function的函數(它是關於當前已知點均值和方差的函數,如:均值+N*方差)來根據當前分佈的均值和方差選取下一組超參數,以此類推。
    • 超頻優化(Hyperband):首先從所有超參數組合中進行隨機均勻採樣,對所選的超參數組合進行驗證,根據驗證結果淘汰部分超參數的可能值,之後在此基礎上繼續隨機均勻採樣超參數組合(不再使用淘汰值)進行驗證,直到結果滿足要求或者唯一。隨機均勻採樣也可以用上述的貝葉斯優化來代替,這種結合的方法叫做BOHB(Bayesian Optimization Hyperband)。
  • 實現自動超參數調優的工具:

    • 對於tensorflow框架訓練的模型,我們使用keras Tuner工具來實現。當前只支持隨機搜索和超頻優化。
    • 對於pytorch框架訓練的模型,我們使用ray tune工具來實現。支持上述所有的優化方法以及BOHB。

第二步: 整合核心知識點形成答案

答案

首先,明確超參數調優過程本身並不是一個凸優化問題,因此也無法使用常規的優化方法找到一組最優解。 因此,工程中常用的自動化超參數調優方法有:隨機搜索,網格搜索以及貝葉斯優化 隨機搜索和網格搜索的邏輯相對簡單,貝葉斯優化邏輯相對複雜,它假設每個超參數都服從高斯分佈,根據起始的幾個超參數點,計算其後驗分佈,得到超參數在該點的均值和方差(即新的高斯分佈),之後會使用一個叫做acq function的函數(它是關於當前已知點均值和方差的函數,如:均值+N*方差)來根據當前分佈的均值和方差選取下一組超參數,以此類推。 對於tensorflow框架訓練的模型,我們使用keras Tuner工具來實現。 對於pytorch框架使用ray tune工具來實現。 在我們現有的項目中,使用貝葉斯優化對已有的超參數進行調優確實能夠提升1.5%的驗證準確率。


問題9:模型部署時如何實現熱更新

問題背景

模型部署是模型使用的重要環節,其中熱更新更是模型部署的硬性標準,因此,考察如何保證模型在部署時能夠熱更新非常重要。

解題思路

第一步: 找出核心知識點並解析

  • 不同框架模型的部署方案:
    • pytorch框架:一般模型爲.pth文件,可以使用flask框架進行封裝部署。
    • tensorflow/keras框架:一般是.pb或.h5文件,一般使用tensorflow-serving進行封裝(.h5可以轉換成.pb)。
  • 模型熱更新:
    • 在使用表現更好的模型替換原有的模型時,需保證模型服務不能中斷。

第二步: 整合核心知識點形成答案

答案

在我們項目中,使用pytorch訓練的模型,部署時使用flask框架搭建服務,爲了保證模型能夠熱更新,這裏一般啓動兩個相同的服務,使用nginx中的backup功能,需要更換模型時,只暫停一個服務進行更換,另一個服務繼續工作。使用tensorflow訓練的模型,部署時使用tensorflow-serving,自帶模型熱更新功能。


問題10:說一說最近看過的一篇論文

問題背景

主動閱讀/復現論文能夠體現一名工程師對職業的喜愛以及優秀的學習能力。因此在面試中,面試官往往通過你最近所閱讀一篇論文來考察。

解題思路

第一步: 找出核心知識點並解析

  • 選擇一篇最近發表的有影響力的論文:
    • 這裏選擇2020-3-13英偉達公司發表的Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism,論文地址: https://arxiv.org/pdf/1909.08053.pdf

  • 閱讀論文後需要總結的點:
    • 1,論文中的主要實驗結論是什麼
    • 2,閱讀論文後對你的啓發是什麼

  • 上述論文—Megatron-LM(威震天語言模型)的主要實驗結論:
  • 1,利用數據和模型並行的分佈式技術訓練了具有3.9B(3.9億)參數的BERT-large模型,起名爲Megatron-3.9B,在GLUE的很多數據集上都取得了SOTA成績。

2,利用數據和模型並行的分佈式技術訓練了具有8.3B(8.3億)參數的GPT-2語言模型,並在數據集Wikitext103,LAMBADA,RACE都上取得SOTA成績(最佳成績)。

  • 上述論文—Megatron-LM(威震天語言模型)對我們的啓發:
    • 上述的大型模型能夠在短時間內訓練完成並取得SOTA成績,一方面體現了算力的重要性,另一方面體現了模型並行(分佈式)和數據並行技術關鍵性。這兩項優化技術在加速模型訓練和推斷過程中至關重要。

第二步: 整合核心知識點形成答案

答案

最近看了一篇英偉達公司發表的Megatron-LM,該篇論文共有兩個主要的結論:1,利用數據和模型並行的分佈式技術訓練了具有3.9B(3.9億)參數的BERT-large模型,在GLUE的很多數據集上都取得了SOTA成績。同時,還訓練了具有8.3B(8.3億)參數的GPT-2語言模型,並在數據集Wikitext103,LAMBADA,RACE都上取得SOTA成績(最佳成績)。通過這篇論文,一方面體現了算力的重要性,另一方面體現了模型並行和數據並行技術關鍵性。這兩項優化技>術在加速模型訓練和推斷過程中至關重要。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章