最近在讀自然語言處理中的 Transformer 架構時被 Attention 的 Q (Query), K (Key), V (Value) 弄得一頭霧水, 完全無法理解其意義與作用. 今天在看歐萊里的 "NaturalLanguage Processing with Transformer" 這本書時, 在第三章關於 decoder 的部分看到作者以考試作弊來解密 Q, K, V 這三個陣列的意義, 我覺得很有意思, 我加油添醋地大致翻譯了這段比喻, 記下來慢慢品味 :
"encoder-decoder 架構中的 attention 可以這麼解釋 : 想像你自己是 decoder, 正坐在教室中參加猜字測驗, 你的任務是根據之前收到的輸入文字預測接下來會出現的字. 這很難ㄟ, 你又不是半仙怎麼知道文章中下一個會出現的字是甚麼. 好消息是, 坐在你旁邊的 encoder 同學他手上有完整的文章, 他可以偷偷告訴你接下來會出現的字; 但壞消息是, 他是來自土耳其的交換學生, 他手上的全文是用阿拉伯文寫的, 就算他偷偷告訴你你也聽不懂. 但聰慧如你想出了一個辦法來作弊, 你把已經收到的訊息 (這就是 Query) 畫成一張卡通圖案遞給他, 他根據此圖意思在全文中搜尋看看哪個段落符合你圖中所描述的意思 (Key), 找到後就將那段落後面將出現的字 (此即 Value) 也畫成卡通圖給你, 嘿嘿, 你就這樣通過了考試."
哈哈, 這個比喻實在是太生動有趣了, 回頭再重新把 encoder-decoder 架構的 QKV 原理看幾遍, 好好來琢磨琢磨, 說不定很快就能開竅了.
2022-12-22 補充 :
我在 "Deep Learning with PyTorch Step by Step" 這本書的 p829 看到 Q, K, V 的解釋 : 編碼器的隱藏狀態被來做為 keys (K) 與 values (V), 而編碼器的隱藏狀態則稱為 query (Q). 這些名稱的由來是, 編碼器的功能類似資料庫中的 key-value 儲存方式, 而編碼器則是去查詢 (query) 它.
沒有留言 :
張貼留言