大模型有兩個流程:預訓練和推理。
GLM模型原理的理解,就是預訓練流程的梳理,如下流程所示:
input輸入層會預處理輸入資料,在預訓練過程中,該輸入資料,其實就是預先準備好的預料資料集,也就是常說的6B,130B大小的資料集。
GLM統一了自編碼模型與自迴歸模型,主要是在該處理過程實現的。該過程也被成為自迴歸空格填充。該過程體現了自編碼與自迴歸思想:
1、自編碼思想:在輸入文字中,隨機刪除連續的tokens,做成掩碼[MASK]。
2、自迴歸思想:順序重建連續tokens。在使用自迴歸方式預測缺失tokens時,模型既可以存取帶掩碼的文字,又可以存取之前已經被取樣的spans。
輸入可以被分成兩部分:Part A是被損壞的文字,Part B由masked spans組成。
假設原始輸入文字是,取樣的兩個文字片段是以及。那麼mask後的文字序列是:,即Part A;、即PartB。
再對Part B的片段進行shuffle。每個片段使用填充在開頭作為輸入,使用填充在末尾作為輸出。如論文中的圖所示:
掩碼處理時,會隨機選擇輸入序列中的某些詞語進行掩碼(mask)處理。掩碼的目的是讓模型學習預測那些被掩碼的詞語。讓模型能夠在預訓練過程中更好地學習語言規律和上下文資訊。
掩碼處理的流程如下:
從結構化來思考,剖析下這個過程所涉及到的一些開發知識點。
在基於Transformer網路架構的模型中,位置編碼是必不可少的一個處理,其作用簡單來說就是在沒有顯式順序資訊的情況下,為模型提供關於詞的相對位置的資訊,以便讓模型理解輸入序列中的序列資訊以及上下文資訊。
位置編碼在GLM中,通過採用一種稱為"旋轉位置編碼"(RoPE)的方法來處理的。RoPE是一種相對位置編碼技術,它能夠有效地捕捉輸入序列中不同token之間的相對位置資訊。相較於傳統的絕對位置編碼,RoPE具有更好的外推性和遠端衰減特性,能夠更好地處理長文字。
在GLM中,使用二維位置編碼,第一個位置id用來標記Part A中的位置,第二個位置id用來表示跨度內部的相對位置。這兩個位置id會通過embedding表被投影為兩個向量,最終都會被加入到輸入token的embedding表達中。如論文中的圖所示:
自注意力機制中的矩陣計算如圖所示:
這裡面的道道暫時還沒有摸清,不過計算的邏輯還是基於Tranformer網路中的自注意力計算,只是這框出來的藍黃綠,其表徵有點道道。
GLM在原始single Transformer的基礎上進行了一些修改:
1)重組了LN和殘差連線的順序;
2)使用單個線性層對輸出token進行預測;
3)啟用函數從ReLU換成了GeLUS。
這些修改是比較常見的,簡單瞭解下即可。
清華ChatGLM底層原理詳解
GLM(General Language Model)論文閱讀筆記