「注意力機制 Attention Mechanisms」,
是學習「自然語言處理 Natural Language Processing NLP」以及
「大語言模型 Large Language Model LLM」技術細節必備的概念。
而根據Sebastian Raschka [1] 的著書"Build a Large Language Model (From Scratch)"[2],
常見的注意力機制有四種:
01 簡化自注意力 Simplified Self-Attention
02 自注意力 Self-Attention
03 因果注意力 Causal Attention
04 多頭注意力 Multi-Head Attention
這樣一想,或許訓練特定領域的語言模型,
可以直接用具體表格重新預訓練,然後再看作任務的效果如何。
如果可以補缺失值補得很好,那一切其實都很好。
那麼,當我們在對「長序列 Long Sequences」建模時,
如果不使用自注意力機制,會發生什麼問題呢? [3]
注意力機制的設計,
其實起源於「編碼器-解碼器循環神經網路 Encoder-Decoder Recurrent Neural Networks」[4]。
而編碼器-解碼器循環神經網路起源於「機器翻譯 Machine Translation」[5]。
你有想過機器是怎麼做翻譯的嗎?
機器其實不是像人類這樣一的單字對應一個單字去翻譯,
而是使用「編碼器 Encoder」與「解碼器 Decoder」來做語言之間的翻譯。
其中編碼器的任務,是「閱讀 Read」與「處理 Process」完整的文本,
而解碼器的任務,則是「產生 Produced」翻譯過後的文本。
而做機器翻譯最受歡迎的框架,就是「循環神經網路 Recurrent Neural Networks」[6]。
而編碼器-解碼器循環神經網路具體的工作方式,
首先編碼器會把輸入的文本,照「順序」去處理,接著更新其自身的「隱層狀態 Hidden State」。
「隱層狀態 Hidden State」就是「隱層 Hidden Layer」的「內部值 Internal Value」,
你也可以將「隱層狀態 Hidden State」理解成神經網路的「記憶細胞 Memory Cell」。
而解碼器,則是要將「最終隱層狀態 Final Hidden State」轉換為翻譯後的句子。
然而,循環神經網路最大的問題,就是「想不起來早期的記憶細胞」,
而更傾向於從「近期的記憶細胞」來翻譯句子。
這樣造成的主要問題是「脈絡遺失 Loss of Context」,
對於那種複雜句子就沒輒了。
而循環神經網路的這個弱點,也推動了注意力機制的設計。
Reference
[1] https://sebastianraschka.com/
[2] Figure 3.2, https://www.manning.com/books/build-a-large-language-model-from-scratch
[3] Section 3.1, https://www.manning.com/books/build-a-large-language-model-from-scratch
[4] https://d2l.ai/chapter_recurrent-modern/encoder-decoder.html
[5] https://d2l.ai/chapter_recurrent-modern/machine-translation-and-dataset.html
[6] https://en.wikipedia.org/wiki/Recurrent_neural_network