
依據英文論文( Attention is All You Need ),練習寫 transformer 程式 (Positional encoding程式篇)。

AI程式研究&英文學堂 grammarAI
177 位粉絲
200 影片觀看·2024年7月26日
在自然語言處理領域,Transformer模型中的一個關鍵組件是位置編碼(Positional Encoding)層。這一層用於描述序列中實體的位置或順序,使每個位置都有唯一的表示。在Transformer模型中,單純使用索引值來表示位置是不夠的,因為長序列的索引值可能會非常大。此外,將索引值標準化到0和1之間也會帶來問題,特別是當序列長度變化時,它們的標準化方式會有所不同。
因此,Transformer模型採用了一種巧妙的編碼方案,即使用位置編碼向量。位置編碼層的輸出是一個矩陣,其中每一行表示序列中的一個對象的編碼,這個編碼包含了對象本身的信息以及它的位置信息。
例如,對於短語「I am a robot」,位置編碼矩陣會將每個詞的位置信息編碼為一個向量。
位置編碼的實現使用了正弦和餘弦函數,不同頻率的正弦和餘弦函數被用於編碼不同的維度。對於位置k,位置編碼矩陣的第(k, 2i)個元素由sin(k / n^(2i/d))計算得出,第(k, 2i+1)個元素則由cos(k / n^(2i/d))計算得出。其中,n是一個用戶定義的標量,通常設為10000,而d是輸出嵌入空間的維度。
透過這種方式,位置編碼不僅在位置間引入了唯一性,還通過正弦和餘弦函數的周期性來捕捉序列中不同位置之間的關係。這種方法允許模型在不使用循環結構的情況下處理長序列,並保持對序列位置的敏感性。這對於理解語言中的句法結構和上下文依賴性至關重要。
使用Python和NumPy,可以很容易地實現位置編碼。通過這種實現,我們可以生成一個包含位置信息的矩陣,用於進一步的自然語言處理任務。這種編碼方法使Transformer模型能夠在多種語言處理任務中表現出色,例如機器翻譯和文本生成。
