新鮮速遞:圖解新穎LLM的CoPE位置編碼 原創
1.快速總覽
研究人員提出了一種新穎的位置編碼方法,稱為上下文位置編碼(下文稱之為CoPE),它有別于基于標記的傳統位置編碼范式。
- 它以上下文依賴的方式測量位置,在按位置尋址時會更加自由
- 它在如下的任務中獲得不錯的收益:Flip-Flop, Selective Copy, Counting, Language Modeling, and Code Modeling tasks
- 它優于現有方法,尤其是在域外泛化場景
- 它有可能改善其他領域的編碼,例如視頻和語音。在這些領域,基于Token位置的編碼不太合適。
2.位置編碼的思考
大型語言模型(LLMs)如何理解句子中單詞的順序?這是語言理解的關鍵部分,這樣的機制稱為位置編碼( Positional Encoding)。
先考慮一個簡單的例子:“狗坐在椅子上”。若只給出LLM一個單詞列表“dog、sat、on、the、chair”,它不知道哪個單詞排在第一位、第二位,而位置編碼此時就大派用場。
位置編碼主要是用于添加有關序列中每個單詞位置的信息,幫助大模型解碼個中含義。從常識出發,有很多不同的方法可以實現。例如絕對位置編碼,其中每個單詞都被分配一個表示其位置的唯一向量;還有相對位置編碼,其中相對于當前單詞測量位置。但是,這兩種方法都基于對Token進行計數編碼,而不考慮上下文。
上圖為傳統Transformer的位置編碼
在這里舉個例子,假如n=10000(超參數,可以設置),L=6(輸入序列長度),d_model=4(向量維度)。那么下圖為每個Token的編碼向量P0,……,P5的計算方法。這里值得一提的是P下標0,……5某種意義上就是每個Token的位置信息。
研究人員認為現有的位置編碼方法不足以完成更復雜的任務,例如理解句子或段落的結構,因此CoPE(上下文位置編碼)誕生。它與上下文相關,也意味著一個單詞的位置不僅取決于它在序列中的數字位置,還取決于它與其他單詞的關系以及文本的整體結構。
上圖體現了新的位置編碼和傳統相對位置編碼之間的區別。傳統的方法從11開始一直延續到0(最近)。仔細觀察,CoPE的位置編碼和Q和K相關。
3.傳統的位置編碼
絕對位置編碼:想象一個單詞序列,每個單詞都有一個與之關聯的唯一向量。此向量表示其在序列中的位置。因此,第一個單詞有一個表示位置 1 的向量,第二個單詞有一個表示位置 2 的向量,依此類推。相對位置編碼:相對位置編碼考慮單詞在序列中的相對位置。它不是為每個位置分配一個固定的向量,而是計算當前單詞和它所關注的單詞之間的距離。例如“前N個單詞”、“后退M個單詞”等。
論文中給出了一個例子,給出一段文字,問它某個單詞出現幾次。結果GPT4和Llama2都撲街了。
因為模型依賴于標記位置,當單詞與上次出現之間的距離很大或序列長度不可預測時,標記位置可能不精確。
下圖為論證過程,沒興趣的讀者可以跳過。大致的意思就是假設有個輸入“yyyyxyyyy……”,若是序列過長,大于某個閾值(i > Δ/δ )則大模型則無法關注到x。
4.CoPE
CoPE提供了一種新穎的方法,通過考慮上下文來解決現有方法的局限性。對于序列中的每個單詞,CoPE 會計算每個前一個單詞的門值(gate value)。門值是通過將當前單詞的查詢向量與前一個單詞的鍵向量進行比較來確定的。門值為 1 表示前一個詞很重要,在位置測量中應予以考慮。值為 0 表示前一個單詞不相關。
CoPE 使用門值的累積總和來計算每個單詞相對于當前單詞的位置。這意味著位置編碼不僅是一個數字,而是相關單詞的計數。
由于位置編碼不一定是整數,所以CoPE使用整數位置之間的插值來生成位置嵌入(Embedings)。然后嵌入添加到K向量,從而允許Q向量在注意力機制中使用。
一頭霧水,沒關系,拿論文的實例來講解下。
假如輸入為“Alice was tired. She tried reading. A rabbit came”,當前的單詞為“came”。
- CoPE 將首先計算此序列中每個單詞的門值。例如,單詞“tired”的門值可能為1,表示它與當前單詞相關,而“rabbit”的門值可能為0,表示不相關。
- ?然后,CoPE 將使用這些門值的累積總和來計算數值。例如,“tired”相對于最后一個單詞“came”的位置可以認為是2。
- 緊接著CoPE 將為位置2生成一個位置嵌入,該位置嵌入將是位置1和3的之間的插值。
- 最后,將獲得到的位置嵌入加到單詞“tired”的K向量中,允許模型根據其上下文位置(而不僅僅是其在序列中的數字位置)來關注“tired”。
當然實際的算法比較復雜,上面僅僅是為了輔助理解。一般而言注意力的運算如下公式,其實就是上面那張可視化的數學表達方法
而CoPE則利用Qi和Kj相乘過激活函數σ,累加得到Pij。
這個時候pij不一定是個整數,因此不能像RoPE一樣將Pij進行變換得到位置編碼向量。因此首先針對每個p ∈ [0, T]分配一個可以學習的編碼向量e[p],然后按照下面的公式進行插值處理。
最終在進行注意力的計算:
5.小結
這幅圖展示了CoPE可以將注意力集中在抽象元素上,例如當前段落(左)和章節(右)。這里展示了Wikitext-103上僅由位置引起的注意力。由于CoPE是語境化的,它根據段落和章節的位置來關注它們。在左側,可以它留意到了各段由換行符分隔(用黑色加號標記),而右側則留意到章節標題分隔,例如“==說明==”(黑色加號記)。
最后來看看它的榮譽墻,Flip-Flop Task要求模型記住特定單詞的最后一次出現,并在可以有“ignore”指令的序列中找回其相關的部分。CoPE 在此任務中的表現優于現有方法,尤其是在當前單詞與最后一個“w”之間的距離遠遠超出的場景。
Selective Copy Task要求模型有選擇地從序列中復制標記,跳過指定的“空白”標記。CoPE 在這項任務上獲得了滿分,顯示了它處理特定單詞和排除不需要的元素的能力。
CoPE 還在代碼任務上進行了測試。實驗表明與傳統方法相比,它提高了困惑度分數。這表明CoPE在更多結構化數據領域中可能有一定的提升。
本文轉載自 ??魯班模錘??,作者: 龐德公
