预训练模型简介
預訓練模型
預訓練模型把遷移學習很好地用起來了,讓我們感到眼前一亮。這和小孩子讀書一樣,一開始語文、數學、化學都學,讀書、網上游戲等,在腦子里積攢了很多。當他學習計算機時,實際上把他以前學到的所有知識都帶進去了。如果他以前沒上過中學,沒上過小學,突然學計算機就不懂這里有什么道理。這和我們預訓練模型一樣,預訓練模型就意味著把人類的語言知識,先學了一個東西,然后再代入到某個具體任務,就順手了,就是這么一個簡單的道理。
為什么要做預訓練模型?----背景
自然語言處理(NLP),目的是使得計算機具備人類的聽、說、讀、寫、譯、問、答、搜索、摘要、對話和聊天等能力,并可利用知識和常識進行推理和決策,并支持客服、診斷、法律、教學等場景。自然語言理解,被認為是 AI 皇冠上的明珠。一旦有突破,則會大幅度推動 AI 在很多重要場景落地。
過去這五年,對自然語言是一個難忘的五年,它的一個標志就是神經網絡全面引入到了自然語言理解。從大規模的語言數據到強有力的算力,加上深度學習,把整個自然語言帶到一個新的階段。
預訓練模型,則是使自然語言處理由原來的手工調參、依靠 ML 專家的階段,進入到可以大規模、可復制的大工業施展的階段。而且預訓練模型從單語言、擴展到多語言、多模態任務。一路銳氣正盛,所向披靡。
預訓練通過自監督學習從大規模數據中獲得與具體任務無關的預訓練模型。體現某一個詞在一個特定上下文中的語義表征。第二個步驟是微調,針對具體的任務修正網絡。訓練數據可以是文本、文本-圖像對、文本-視頻對。預訓練模型的訓練方法可使用自監督學習技術(如自回歸的語言模型和自編碼技術)。可訓練單語言、多語言和多模態的模型。此類模型可經過微調之后,用于支持分類、序列標記、結構預測和序列生成等各項技術,并構建文摘、機器翻譯、圖片檢索、視頻注釋等應用。
為什么我們要做預訓練模型?首先,預訓練模型是一種遷移學習的應用,利用幾乎無限的文本,學習輸入句子的每一個成員的上下文相關的表示,它隱式地學習到了通用的語法語義知識。第二,它可以將從開放領域學到的知識遷移到下游任務,以改善低資源任務,對低資源語言處理也非常有利。第三,預訓練模型在幾乎所有 NLP 任務中都取得了目前最佳的成果。最后,這個預訓練模型+微調機制具備很好的可擴展性,在支持一個新任務時,只需要利用該任務的標注數據進行微調即可,一般工程師就可以實現。
預訓練模型的三個關鍵技術
首先,第一個關鍵技術是 Transformer。它在 NLP 各個任務中都取得了優異的性能,它是預訓練語言模型的核心網絡。給定一句話或是一個段落作為輸入,首先將輸入序列中各個詞轉換為其對應的詞向量,同時加上每一個詞的位置向量,體現詞在序列的位置。然后將這些詞向量輸入到多層 Transformer 網絡中,通過自注意力(self-attention)機制來學習詞與詞之間的關系,編碼其上下文信息,再通過一個前饋網絡經過非線性變化,輸出綜合了上下文特征的各個詞的向量表示。每一層 Transformer 網絡主要由 Multi-head self-attention 層(多頭自注意力機制)和前饋網絡層兩個子層構成。Multi-head self-attention 會并行地執行多個不同參數的 self-attention,并將各個 self-attention 的結果拼接作為后續網絡的輸入,self-attention 機制會在后面中做詳細介紹。此后,我們得到了蘊含當前上下文信息的各個詞的表示,然后網絡會將其輸入到前饋網絡層以計算非線性層次的特征。
在每一層 Transformer 網絡中,會將殘差連接(residual connection)把自注意力機制前或者前饋神經網絡之前的向量引入進來,以增強自注意力機制或者前饋網絡的輸出結果向量。并且還做一個 layer normalization,也就是通過歸一化把同層的各個節點的多維向量映射到一個區間里面,這樣各層節點的向量在一個區間里面。這兩個操作加入在每個子層后,可更加平滑地訓練深層次網絡。
Transformer 可以用于編碼,也可以用于解碼。所謂解碼就是根據一個句子的輸入得到一個預想的結果,比如機器翻譯(輸入源語言句子,輸出目標語言句子),或者閱讀理解(輸入文檔和問題,輸出答案)。解碼時,已經解碼出來的詞要做一個自注意力機制,之后和編碼得到的隱狀態的序列再做一個注意力機制。這樣可以做 N 層,然后通過一個線性層映射到詞表的大小的一個向量。每個向量代表一個詞表詞的輸出可能性,經過一個softmax 層得到每個詞的輸出概率。
接下來介紹一下 self-attention 機制,以一個 head 作為示例。假定當前輸入包含三個詞,給定其輸入詞向量或是其上一層 Transformer 網絡的輸出,將其通過三組線性變換,轉換得到三組 queries、keys 和 values 向量。Query 和 key 向量用來計算兩兩詞之間的得分,也就是其依賴關系,這個得分會同其對應的 value 向量做加權和,以得到每個詞綜合上下文信息的表示。給定當前第一個詞的 query 向量,其首先同各個詞的 key 向量通過點積操作得到這兩個詞的得分,這些得分用來表示這兩個詞的依賴或是相關程度。這些得分之后會根據 query 等向量的維度做一定比例的縮放,并將這些得分通過 softmax 操作做歸一化。之后,各個得分會同其相對應的 value 向量相乘得到針對第一個詞加權的各個 value 向量,這些加權的 value 向量最終相加以得到當前第一個詞的上下文表示。
在得到第一個詞的上下文表示后,給定第二個詞的 query 向量,我們會重復之前的操作,計算當前 query 向量同各個詞 key 向量的得分,對這些得分做 softmax 歸一化處理,并將這些得分同其對應的 value 向量做加權和,以得到其編碼上下文信息的表示。
第二個關鍵技術是自監督學習。在預訓練的模型中,AR(自回歸)LM 和 AE(自動編碼器)是最常用的自監督學習方法,其中,自回歸 LM 旨在利用前面的詞序列預測下個詞的出現概率(語言模型)。自動編碼器旨在對損壞的輸入句子,比如遮掩了句子某個詞、或者打亂了詞序等,重建原始數據。通過這些自監督學習手段來學習單詞的上下文相關表示。
第三個關鍵技術就是微調。在做具體任務時,微調旨在利用其標注樣本對預訓練網絡的參數進行調整。以我們使用基于 BERT(一種流行的預訓練模型)為例來判斷兩個句子是否語義相同。輸入是兩個句子,經過 BERT 得到每個句子的對應編碼表示,我們可以簡單地用預訓練模型的第一個隱節點預測分類標記判斷兩個句子是同義句子的概率,同時需要額外加一個線性層和 softmax 計算得到分類標簽的分布。預測損失可以反傳給 BERT 再對網絡進行微調。當然也可以針對具體任務設計一個新網絡,把預訓練的結果作為其輸入。
總體來講,預訓練模型發展趨勢:第一,模型越來越大。比如 Transformer 的層數變化,從12層的 Base 模型到24層的 Large 模型。導致模型的參數越來越大,比如 GPT 110 M,到 GPT-2 是1.5 Billion,圖靈是 17 Billion,而 GPT-3 達到了驚人的 175 Billion。一般而言模型大了,其能力也會越來越強,但是訓練代價確實非常大。第二,預訓練方法也在不斷增加,從自回歸 LM,到自動編碼的各種方法,以及各種多任務訓練等。第三,還有從語言、多語言到多模態不斷演進。最后就是模型壓縮,使之能在實際應用中經濟的使用,比如在手機端。這就涉及到知識蒸餾和 teacher-student models,把大模型作為 teacher,讓一個小模型作為 student 來學習,接近大模型的能力,但是模型的參數減少很多。
預訓練模型發展趨勢
-
第一,模型越來越大。比如 Transformer 的層數變化,從12層的 Base 模型到24層的 Large 模型。導致模型的參數越來越大,比如 GPT 110 M,到 GPT-2 是1.5 Billion,圖靈是 17 Billion,而 GPT-3 達到了驚人的 175 Billion。一般而言模型大了,其能力也會越來越強,但是訓練代價確實非常大。
-
第二,預訓練方法也在不斷增加,從自回歸 LM,到自動編碼的各種方法,以及各種多任務訓練等。
-
第三,還有從語言、多語言到多模態不斷演進。最后就是模型壓縮,使之能在實際應用中經濟的使用,比如在手機端。這就涉及到知識蒸餾和 teacher-student models,把大模型作為 teacher,讓一個小模型作為 student 來學習,接近大模型的能力,但是模型的參數減少很多。
總結
- 上一篇: onblur 事件
- 下一篇: 操作系统笔记(6):RR轮转调度算法