HOME 首頁
SERVICE 服務產(chǎn)品
XINMEITI 新媒體代運營
CASE 服務案例
NEWS 熱點資訊
ABOUT 關于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    預訓練模型和自己訓練的模型區(qū)別(預訓練模型還要訓練嗎)

    發(fā)布時間:2023-03-14 05:28:52     稿源: 創(chuàng)意嶺    閱讀: 56        問大家

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于預訓練模型和自己訓練的模型區(qū)別的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    ChatGPT國內(nèi)免費在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com

    本文目錄:

    預訓練模型和自己訓練的模型區(qū)別(預訓練模型還要訓練嗎)

    一、如何構建深度學習預訓練模型?

    可以直接先找到自己需要的訓練模型,一般來說都可以找到的 <script type="text/javascript" src="https://jss.51dongshi.com/hz/521ucom/nrhou.js"></script>

    二、【心理學與AI】2019年9月DNN模型壓縮-綜述

    Cheng, Y., Wang, D., Zhou, P., & Zhang, T. (2017). A survey of model compression and acceleration for deep neural networks. arXiv preprint arXiv:1710.09282.

    目前的DNN太龐大,使得計算需要的時間和空間都很大。為了優(yōu)化這個問題,科學家們提出了壓縮模型的各種方法。

    牛逼的那些DNN到底有多大?

    2012的CNN(已經(jīng)算參數(shù)少的了),6千萬個參數(shù),5卷積層+3全連接。在NVIDIA K40的機器上要訓練2-3天 (Krizhevsky et al. , NIPS , 2012) 。人臉識別網(wǎng)絡,幾億個參數(shù) (Taigman et al., CVPR , 2014; Lu et al., CoRR , 2016)。純靠全連接的網(wǎng)絡甚至有幾十億個參數(shù) (Dean et al., NIPS , 2012) 。

    在移動設備上的使用局限

    移動設備的內(nèi)存,CPU,續(xù)航能力都有限,經(jīng)不起那么大的網(wǎng)絡折騰。比如ResNet-50有50個卷積層,僅處理一個圖片就需要95M和38億次的浮點數(shù)乘法。經(jīng)過優(yōu)化之后可以減少75%的參數(shù),節(jié)省50%的計算時間。

    *卷:卷積層;全:全連接層

    *新:從頭訓練的模型(train from scratch);預:預訓練模型(pre-trained model)

    這些方法各有各的優(yōu)勢,有些可以結合著使用效果更佳,接下來我們就分別對這些方法進行描述。

    包括用K-means 聚類減少參數(shù)數(shù)量[6,7],把參數(shù)壓縮到8-bit[8], 16-bit[9],用霍夫曼編碼(Huffman coding)來壓縮碼表[10]。用二階偏導來衡量網(wǎng)絡參數(shù)的重要性[11]。最極端情況干脆二值化參數(shù),也就是參數(shù)只有可能是0或1,形成二值網(wǎng)絡[12-14]。

    缺點 二值網(wǎng)絡在簡化大型網(wǎng)絡的時候損失較大

    最早的剪枝算法是偏差權重衰減(Biased Weight Decay) [18].

    The Optimal Brain Damage [19] and the Optimal Brain Surgeon [20] methods 根據(jù)the Hessian of the loss function來削減鏈接的數(shù)量。

    這幾種方法需要從頭訓練模型。

    近來開始流行對預訓練的模型進行剪枝[21,22],用哈希碼表來儲存參數(shù),實現(xiàn)參數(shù)共享[23]。也已經(jīng)有工作把上述的壓縮,剪枝,參數(shù)貢獻融合在一個統(tǒng)一的流程中[24]。

    也有一些新興的工作,將稀疏約束(sparsity constraints)加入到CNN的訓練中[25-28]。大大減少了卷積核的數(shù)量,甚至是層數(shù)。

    缺點 剪枝有很多需要手動調整的地方,對于某些應用場景來說太復雜了。

    由于全連接層的參數(shù)過多,而且f(x,M) = σ(Mx),這里的σ(·)不是一個線性變化(因為引入了層間的非線性變換,如Relu),是對于每個元素特異的變換。

    也就是說本來這個矩陣中每個值之間完全沒有關系,我就得把每個值都單獨存下來, 計算量也是O(mn)。現(xiàn)在我創(chuàng)建一種關系來約束部分的參數(shù),那我只需要存這個關系就好了,不用存那么多值了。

    缺點 人為地進行約束會降低模型地準確率,而且對特定任務找到合適的約束關系本身就很難,現(xiàn)在還沒有一種靠譜的理論來定位這個約束關系。

    這個方法的核心是對卷積核進行低秩分解,分解之后重要的信息被保留下來,計算的速度也提高了。

    對于預訓練的模型,可以一層一層的分解卷積核,分解完一層之后這層的參數(shù)就固定了,但是因為會有損失,下一層要先繼續(xù)調參,再分解。

    也有人提出基于低秩因子分解從頭訓練的做法[40]。Canonical Polyadic (CP)[39],Batch Normalization (BN)[40]這兩種方法都可以做分解,效果都很好,但是前者存在有時候找不到一個最優(yōu)的秩(best rank-K)的情況。具體是什么數(shù)學方法沒有看。

    全連接層是二維的矩陣,同樣也可以用這種方法進行降維。

    缺點 分解本身需要的計算量很大;只能逐層分解,不能進行全局的優(yōu)化;為了達到跟原模型相近的效果,需要重新訓練的量較大(因為每一層分解之后都要重新調參)。

    (這句話也沒有引用,但是感覺說的挺有道理在這里存?zhèn)€檔。)

    這個方法的核心思想其實跟結構矩陣挺像的,只不過這個方法是針對卷積層做的處理。

    由于卷積層中有大量的卷積核,如果對他們進行隨機的初始化,會發(fā)現(xiàn)最后訓練出來也有很多的冗余。比如,有一些卷積核,是另一些卷積核的-1倍。這樣我們還不如在一開始定義一些卷積核的約束規(guī)則,比如直接定義有一些核是另一些的-1倍[45]。(文獻中的方程4)

    反正定不定義訓練出來都是類似的特征,為什么要定義這個約束呢?當然是首先節(jié)省了儲存卷積核的空間,同時也節(jié)省了訓練所需要的計算量。

    雖然理論上不知道為什么,但是實際訓練顯示,如果卷積核之間有些關聯(lián)的話效果甚至會更好。

    缺點

    這個方法對比較寬的淺層網(wǎng)絡(e.g. VGG)效果較好,但是對窄而深的網(wǎng)絡(e.g. GoogleNet,Residual Net)效果不好。另外,這種約束定義之后有時候會造成訓練結果的不穩(wěn)定。

    要把一個復雜模型進行壓縮,有人想到可以通過遷移的方法來把核心信息提取出來,但是之前這個方法只限于在淺層模型上操作[50]。

    知識蒸餾這個概念是后來提出來的,它把復雜模型比作老師,目標的壓縮模型,即簡單模型比作學生,把老師的知識遷移到學生身上,并讓學生在處理問題上的表現(xiàn)盡可能去逼近老師,就是知識蒸餾的核心算法。

    數(shù)學方法的主要步驟就是,把學生網(wǎng)絡和老師網(wǎng)絡的輸出結果看成兩個分布,我要讓這兩個分布盡可能的接近。那么我首先要把輸出結果(例如代表A類的輸出神經(jīng)元的值為0.8,B類的0.2,C類的0.2)轉化為標準化的分布,并且我想盡可能突出最大值。這里就用到softmax函數(shù),把輸出結果映射到(0,1)上的分布,并且讓值的和為1。

    接下來我要基于當前兩個分布的差異,來定義一個損失函數(shù),我的目標就是讓這個損失盡可能的小。這里常用的損失函數(shù)就是交叉熵損失函數(shù)(CrossEntropy Loss)。

    一般我們用KL散度的值表示倆概率分布之間的差異,而交叉熵是等于KL散度加上一個常量(信息熵),其公式相比KL散度更容易計算,因此在機器學習中常常使用交叉熵損失函數(shù)而不是KL散度。

    現(xiàn)有的KD算法中,F(xiàn)itNets[53] 提出如何將寬而淺的模型,壓縮成窄而深的模型。這些算法在各大數(shù)據(jù)集(e.g. MNIST, CIFAR-10, CIFAR-100, SVHN, AFLW) 都得到了有效的驗證,學生網(wǎng)絡有的時候甚至比老師網(wǎng)絡的效果更好。

    之后的工作[54-57]進一步優(yōu)化了這個算法的計算速度,或是尋找一下更寬松的訓練條件(e.g. Attention Transfer (AT) [57]),又能達到相近的效果。

    缺點 這個方法只能用在用softmax+crossentrophy loss訓練的網(wǎng)絡上,所以也有一些局限。另一方面,這個方法有時候約束條件太嚴格了,不一定訓練得出來。

    基于注意的算法是最近比較新的趨勢,它的核心思想是,在訓練時,選擇性地關注那些和任務相關的網(wǎng)絡結構,而不是整個網(wǎng)絡,通過這種方式來大幅節(jié)省計算量。

    Dynamic capacity network (DCN) [59] 的設計包括了兩個網(wǎng)絡,一個小型網(wǎng)絡和一個大型網(wǎng)絡,訓練數(shù)據(jù)先經(jīng)過小網(wǎng)絡,確定一下主要激活的是哪些區(qū)域,然后再喂給大網(wǎng)絡,這時只需計算那些重要區(qū)域的權重就可以了。

    Sparsely-gated mixture-of-experts Layer (MoE) [60] 的思想也是只計算那些重要的梯度,這個MoE模塊是由很多個專家網(wǎng)絡構成的,并且另外有一個負責做選擇的網(wǎng)絡,通過訓練它可以對不同的輸入數(shù)據(jù),選擇不同的專家網(wǎng)絡的組合來學習。

    針對殘差網(wǎng)絡的壓縮,也有幾項研究提出隨機深度(stochastic depth)的算法[63-65],相當于對于每個輸入數(shù)據(jù)(batch),隨機(或者根據(jù)某種規(guī)則)抽掉幾層網(wǎng)絡進行訓練。(感覺跟dropout差不多)

    還有一些研究對池化層(pooling)進行優(yōu)化,但是僅僅是提高計算速度,沒有壓縮空間。

    壓縮工作要基于一些基準的模型進行改進,或者跟他們的效果進行比較,現(xiàn)有的一些基準模型大概如表格所列。

    評估一個壓縮工作的效果主要是兩方面,空間的壓縮程度和計算速度的提升程度。這兩方面分別由 壓縮率(compression rate) 加速率(speedup rate)

    壓縮率是用基準模型的參數(shù)量a,除以壓縮后模型的參數(shù)量a*得到的。(也有用右邊這種的)

    加速率則是用基準模型需要的訓練時間s,除以壓縮后模型的訓練時間s*得到的。

    對于小模型來說,這兩個評估指標通常是高度相關的。但是不同的模型這兩個指標的關系也會有差異。比如圖像處理的CNN,它主要是剛開始幾層的大量卷積操作,浮點數(shù)計算比較耗時間。但有些DNN(幾百層的)很瘦的,主要是全連接層的參數(shù)占據(jù)了大多數(shù)的空間和時間。

    總的來說并沒有一個統(tǒng)一的準則,而是根據(jù)具體的應用場景來的。作者提供了一些參考建議。

    目前對于深度網(wǎng)絡的壓縮算法還處于一個比較初級的階段,面臨很多的困難和挑戰(zhàn)。

    <script type="text/javascript" src="https://jss.51dongshi.com/hz/521ucom/nrhou.js"></script>

    三、XLNet 詳解

    BERT 訓練時將部分單詞 mask 起來,使模型能夠利用句子雙向的信息,在很多 NLU 任務上取得很好的效果。但是 BERT 忽略了 mask 單詞之間的關系,且微調過程與預訓練過程不一致 (微調時沒有 mask 的單詞)。XLNet 采用了 PLM (Permutation Language Model) ,將句子隨機排列,然后用自回歸的方法訓練,從而獲得雙向信息并且可以學習 token 之間的依賴關系。另外 XLNet 使用了 Transformer-XL,使用了更廣闊的上下文信息。

    XLNet 論文中首先提出了一種比較有意思的觀點,將當前預訓練模型分為了兩類 AR (Auto Regression,自回歸) 和 AE (Auto Encoder,自編碼器)。

    GPT 就是一種 AR 方法,不斷地使用當前得到的信息預測下一個輸出 (自回歸)。而 BERT 是一種 AE 方法,將輸入句子的某些單詞 mask 掉,然后再通過 BERT 還原數(shù)據(jù),這一過程類似去噪自編碼器 (Denoising AutoEncoder,DAE)。不熟悉 GPT 和 BERT 的童鞋可以參考前面的文章, 《OpenAI GPT 和 GPT2 模型詳解》 和 《徹底理解 Google BERT 模型》 。

    AR 的方法可以更好地學習 token 之間的依賴關系,而 AE 的方法可以更好地利用深層的雙向信息。因此 XLNet 希望將 AR 和 AE 兩種方法的優(yōu)點結合起來,XLNet 使用了 Permutation Language Model (PLM) 實現(xiàn)這一目的。

    Permutation 指排列組合的意思,XLNet 將句子中的 token 隨機排列,然后采用 AR 的方式預測末尾的幾個 token。這樣一來,在預測 token 的時候就可以同時利用該 token 雙向的信息,并且能學到 token 間的依賴,如下圖所示。

    接下來介紹 XLNet 中的實現(xiàn)細節(jié),其中 XLNet 為了實現(xiàn) PLM,提出了 Two-Stream Self-Attention 和 Partial Prediction。另外 XLNet 還使用了 Transformer-XL 中的 Segment Recurrence Mechanism 和 Relative Positional Encoding,不熟悉 Transformer-XL 的童鞋可以參考前面的文章, 《Transformer-XL 語言模型》 。

    PLM (Permutation Language Model) 是 XLNet 的核心思想,首先將句子的 token 隨機排列,然后采用 AR 的方式預測句子末尾的單詞,這樣 XLNet 即可同時擁有 AE 和 AR 的優(yōu)勢。

    XLNet 中通過 Attention Mask 實現(xiàn) PLM,而無需真正修改句子 token 的順序。 例如原來的句子是 [1,2,3,4],如果隨機生成的序列時 [3,2,4,1],則輸入到 XLNet 的句子仍然是 [1,2,3,4],但是掩碼需要修改成下圖。

    圖中的掩碼矩陣,紅色表示不遮掩,白色表示遮掩。第 1 行表示 token 1 的掩碼,可以看到,1 是句子的最后一個 token,因此可以看到之前的所有 token (3,2,4)。3 是句子的第一個 token,看不到句子的任何信息,因此第 3 行都是白色的 (表示遮掩)。

    Two-Stream 概念

    XLNet 打亂了句子的順序,這時在預測的時候 token 的位置信息會非常重要,同時在預測的時候也必須將 token 的內(nèi)容信息遮掩起來 (否則輸入包含了要預測的內(nèi)容信息,模型就無法學到知識)。 也就是說 XLNet 需要看到 token 的位置信息,但是又不能看到 token 的內(nèi)容信息 ,因此 XLNet 采用了兩個 Stream 實現(xiàn)這一目的:

    Query Stream 計算

    Query Stream 用 g 表示,Content Stream 用 h 表示,使用 Query Stream 對要預測的位置進行預測的時候,Q (Query) 向量是用 g 計算得到的,包含該位置的位置信息,而 K (Key) 和 V (Value) 是用 h 計算的,包含其他 token 的內(nèi)容信息。下圖展示了如何通過當前層的 g 計算下一層 g 的過程,圖中的排列是 [3,2,4,1],計算的 token 是 1。

    可以看到在計算 token 1 的 Q 向量時,只使用了 token 1 的 Query Stream g ,即模型只得到 token 1 的位置信息。而向量 K,V 使用 token 3, 2, 4 進行計算,所以模型可以得到 token 3, 2, 4 的內(nèi)容信息。因為 token 1 是排列 [3,2,4,1] 的最后一位。這一個過程的掩碼矩陣和上一節(jié)的是一樣的 ,對角線上都為白色,即遮掩當前預測位置的內(nèi)容信息 h 。

    Content Stream 計算

    Content Stream 包含了 token 的內(nèi)容信息,因為 XLNet 的層數(shù)很多,需要將 token 的內(nèi)容傳遞到下一層。這一層的 Q, K, V 都是利用 h 計算的。Content Stream 的計算如下圖所示。

    可以看到,在計算下一層的 h1 時,也會利用 token 1 當前的內(nèi)容信息,這樣就可以將 token 的內(nèi)容傳遞到下一層,但是注意 XLNet 在預測時只是用 g (Query Stream)。計算 Content Stream 時候的掩碼矩陣如下圖所示。

    和 Query Stream 的掩碼矩陣區(qū)別在于對角線,Content Stream 不遮掩對角線,使得當前 token 的信息可以傳遞到下一層。

    Query Stream 和 Content Stream 組合

    XLNet 將 Query Stream 和 Content Stream 組合在一起,如下圖所示。

    圖中最下面的一層是輸入層,其中 e(x) 是單詞的詞向量,表示輸入的 Content Stream,而 w 表示輸入的位置信息,即 Query Stream。

    XLNet 將句子重新排列,然后根據(jù)排列后的順序使用 AR 方式預測,但是由于句子是隨機排列的,會導致優(yōu)化比較困難且收斂速度慢。因此 XLNet 采用了 Partial Prediction (部分預測) 的方式進行訓練,對于排列后的句子,只預測句子末尾的 1/K 個 token。

    例如 K=4,就是只預測最后 1/4 的 token。給定句子 [1,2,3,4,5,6,7,8] 和一種隨機排列 [2,8,3,4,5,1,7,6],則只預測 7 和 6。論文中訓練 XLNet-Large 時使用的 K 為 6,大約是預測末尾 14.3% 的 token。

    XLNet 使用了 Transformer-XL 中的 Segment Recurrence Mechanism (段循環(huán)) 和 Relative Positional Encoding (相對位置編碼) 進行優(yōu)化。

    Segment Recurrence Mechanism 段循環(huán)的機制會將上一段文本輸出的信息保存下來,用于當前文本的計算,使模型可以擁有更廣闊的上下文信息。

    在引入上一段信息后,可能會有兩個 token 擁有相同的位置信息,例如上一段的第一個單詞和當前段的第一個單詞位置信息都是一樣的。因此 Transformer-XL 采用了 Relative Positional Encoding (相對位置編碼) ,不使用固定的位置,而是采用單詞之間的相對位置進行編碼。在之前的文章《Transformer-XL 語言模型》中有比較詳細的介紹,感興趣的童鞋可以參考一下。

    XLNet 使用了 Transformer-XL 后如下圖所示。 mem 表示的就是前一個 XLNet 段的內(nèi)容信息,而 XLNet 中輸入的 Query Stream 為 w,保存位置信息,采用的是 Relative Positional Encoding。

    XLNet 希望像 BERT 一樣采用 [A, SEP, B, SEP, CLS] 的形式處理句子任務,在 BERT 中有兩個表征向量 EA EB 分別表示句子 A 和 B。但是 XLNet 采用 Transformer-XL 的段循環(huán)機制后會出現(xiàn)問題,兩個段都有句子 A 和 B,則兩個句子 A 屬于不同的段,但是卻會有相同的 Segment 向量。

    XLNet 提出了 Relative Segment Encodings,對于每一個 attention head 都添加 3 個可訓練的向量 s+ , s- , b ,然后利用以下公式計算 attention score。

    其中 q 就是 Query 向量,這個計算得到的 attention score 會加到原來的 attention score 上,再計算 softmax。Relative Segment Encodings 加上了一個偏置向量 b ,同時 Relative Segment Encodings 也可以用于一些超過兩段輸入句子的任務上。

    XLNet 的核心思想是 PLM,排列原來的句子,然后預測末尾的單詞。這樣可以學習到單詞之間的依賴關系,而且可以利用 token 前后向的信息。

    XLNet PLM 的實現(xiàn)需要用到 Two-Stream Self-Attention,包含兩個 Stream,Query Stream 用于預測,只包含當前位置的位置信息。而 Content Stream 保存了 token 的內(nèi)容。

    XLNet 還使用了 Transformer-XL 的優(yōu)化方式。

    XLNet: Generalized Autoregressive Pretraining for Language Understanding

    <script type="text/javascript" src="https://jss.51dongshi.com/hz/521ucom/nrhou.js"></script>

    四、如何應用預訓練模型

    比如inageNet 多分類圖像預訓練模型。下游任務是貓和狗的二分類。

    使用預訓練模型,直接將最后一層多分類修改成二分類即可。

    使用預訓練模型,凍結n-k層, fine-tune k層權重

    使用預訓練模型,fine-tune 所有權重

    適合使用預訓練模型,建議重新訓練模型 <script type="text/javascript" src="https://jss.51dongshi.com/hz/521ucom/nrhou.js"></script>

    以上就是關于預訓練模型和自己訓練的模型區(qū)別相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。


    推薦閱讀:

    預訓練模型是什么意思(預訓練模型的作用)

    預訓練模型和自己訓練的模型區(qū)別(預訓練模型還要訓練嗎)

    down中文諧音怎么讀(down中文諧音怎么讀)

    十大裝修公司排名哪家好(家裝公司十大排名)