網站首頁 編程語言 正文
encoder 的 attention
- 場景:現在要訓練的內容是 I love my dog -> 我喜歡我的狗
- 那么在 encoder 端的輸入是: I love my dog;
- 假設經過 embedding 和位置編碼后,I love my dog 這句話肯定已經變成了一個向量,但是在這里方便起見,我們依然用 I love my dog 來表示經過了處理之后的向量表示,后面有機會我會將向量的維度拆解開再給大家講一遍
- 接下來要進入 encoder 端的 attention 層了
attention 的動機
- 動機很簡單:生成一個張量,張量表示了輸入的每一個詞向量和其他詞向量之間的關系。
- 這個關系的表示,需要在一個給定維度的空間中完成(在另外一個空間中求相似度,后面會解釋)。而在多少維度的空間中進行,就取決于我們在 attention 中指定的線性層的維度
如何衡量關系——相似度
- 我們初中就學過,衡量兩個向量的相似度的方法就是向量點乘,數值越大越相似
- 而編碼過的單詞天生就是向量
如何構造兩個相乘的向量
- 難道要用 I I I 向量和所有的 L o v e , m y , d o g Love, my, dog Love,my,dog 都相乘一遍得到相似度么?
- 這個思考方向是對的,但是存在一個問題,就是這樣乘出的相似度沒有意義,因為在當前的表示空間中,所有的詞的向量表示都是固定的;
- 而我們想讓那些彼此相乘的向量具有以下特點:
- 這些向量能夠代表文本向量的信息,因為我們還是想要得到 I I I 到底和 L o v e Love Love 關系更近還是和 M y My My 關系更近
- 這些向量能夠帶有可學習的參數,通過神經網絡的迭代自己學出來;這樣可以保證在不同的場景下,權重可以自行改變,有時候 I I I 可以和 l o v e love love 的關系更近,而有些時候則和其他的單詞的關系更近
- 所以這很自然有一個想法:
- 我直接以原文本的向量為基礎,通過線性層對他的特征進行一次處理,這樣得到的向量不就具有上述特點了么;
- 線性層的輸入是原文本的向量,這樣可以保證線性層的輸出是原文本的一種表示,這相當于將原本的所有詞向量映射到另外一個高維空間中的向量,而這個過程引入了可學習的參數,相當于那些被映射過去的向量之間的關系并未確定,而是需要根據 loss 和反向傳播不斷更新才能最終收斂,直到那時,詞向量之間的關系才被最終確定。
-
這就是 Transformer 中總是提到的 q , k , v q, k, v q,k,v 向量和 Q , K , V Q,K,V Q,K,V 矩陣的作用了;我們先說 q , k , v q, k, v q,k,v 向量;后面很自然地會過渡到 Q , K , V Q, K, V Q,K,V 矩陣。
-
我們以 I I I 這個文本為例,對他采用線性層生成一個 q q q 向量,這個 q q q 向量包含了 I I I 向量原本的信息,然后對其他的所有文本也都通過線性層生成他們各自的 k k k 向量;這些 k k k 向量其實和 q q q 是完全一樣的東西,都只是線性層的輸出而已,但是為了進行后面的操作,我們人為地對這些向量進行區分
-
當然,除了 I I I 之外的單詞也會產生 q q q 向量,只是這里我們先看 I I I 這個單詞,所以先將 I I I 當做主角,其他單詞的 q q q 向量也是同樣的作用,如法炮制
-
得到 I I I 的 q q q 向量之后,讓這個 q q q 向量和其他所有單詞產生的 k k k 向量 k l o v e , k m y , k d o g k_{love}, k_{my}, k_{dog} klove?,kmy?,kdog? 進行點乘,是不是就可以獲得 I 對其他所有單詞的值(有幾個單詞就產生幾個值)但是這些值還不能叫做權重,因為相似度計算出的值范圍根本不確定;因此我們對這些值共同算一個 softmax 就可以得到權重值了。
-
舉個??,假設 I I I 的 q q q 向量和每個 k k k 計算得到的值分別為 [ a , b , c , d ] [a, b, c, d] [a,b,c,d];這些值要進行放縮之后再 s o f t m a x softmax softmax 才能得到最終的權重值。
-
再強調一遍,這個權重值會根據訓練的不同階段而不斷更新,但是我們知道,通過這個步驟, I I I 建立了它對所有單詞的關系,這些關系其實就只是在另外一個高維空間中的相似度數值而已。
-
最終還要再用 v 向量再去和每一個生成的相似度權重 s i m _ q k _ n sim\_{qk}\_n sim_qk_n (每一個都是標量)相乘之后相加,得到一個最終的向量。這個最終的向量編碼了 I 和其他詞向量的關系
-
同樣的,對于 L o v e , m y , d o g Love, my, dog Love,my,dog 這些詞向量,也通過相同的方式獲得了他們各自的最終和其他詞向量在高維空間中的關系表示
-
我們用向量的維度來具體的,更加深入理解一下這個過程:
- 假設 I , l o v e , m y , d o g I,love,my,dog I,love,my,dog 都已經被 e m b e d d i n g embedding embedding 成維度為 6 的向量,即, ( 1 , 6 ) (1,6) (1,6)
- 線性層選的神經元個數都是 5,即, ( 1 , 5 ) (1, 5) (1,5) 代表我們想在一個 5 維的空間中構建這些詞之間的關系
- 那么 q , k , v q, k, v q,k,v 也都是 ( 1 , 5 ) (1, 5) (1,5) 的向量
- 當 I I I 的 q i q_i qi?(1,5) 與這四個 k k k 點乘之后,可以得到 4 個標量,
- 將這 4 個標量分別與 v i : ( 1 , 5 ) v_i: (1,5) vi?:(1,5) 相乘(標量乘)并相加,得到的最終還是一個向量 v i ′ : ( 1 , 5 ) v_i^{'}: (1, 5) vi′?:(1,5),這個 v i ′ v_i^{'} vi′? 編碼了 q i q_i qi? 和其他詞向量在 5 維空間中的相關關系。
- 這個過程中的 q i q_i qi? 和多個 k k k 進行運算的步驟可以轉成向量和矩陣的乘法, q i q_i qi?,和 4 個 k 組成的張量 K : ( 4 , 5 ) K: (4, 5) K:(4,5) 進行相乘,(注意,這里要將 K K K 進行轉置),得到 q K T q K^T qKT 維度是 ( 1 , 5 ) ? ( 5 , 4 ) = ( 1 , 4 ) (1, 5)* (5, 4)= (1, 4) (1,5)?(5,4)=(1,4)就是那四個標量值組成的向量
- 這只是一個對 q i q_i qi? 求算 a t t e n t i o n attention attention 的整體步驟,而我們剛好要對所有單詞生成的 q 都進行這個過程,所以我們可以也把 q q q 做成 Q Q Q,也就是將所有的 4 個單詞的 q q q 直接拼起來組成的 Q : ( 4 , 5 ) Q: (4, 5) Q:(4,5), 與剛才的 K T : ( 5 , 4 ) K^T: (5,4) KT:(5,4) 得到 權重矩陣 Q K T : ( 4 , 4 ) QK^{T}: (4, 4) QKT:(4,4)
- 然后將所有單詞的 v 向量也拼起來,組成 V : ( 4 , 5 ) V: (4, 5) V:(4,5) 與權重矩陣 ( 4 , 4 ) (4, 4) (4,4) 最終得到 a t t e n t i o n attention attention 的矩陣 Q K T V ( 4 , 5 ) QK^{T} V (4,5) QKTV(4,5)這其中的 4 代表的是這 4 個單詞與其他單詞的 a t t e n t i o n attention attention 關系的編碼, 5 則代表這些 a t t e n t i o n attention attention 關系被編碼的空間是一個維度為 5 的空間。5 個數值來共同表示這些關系。
原文鏈接:https://blog.csdn.net/qq_42902997/article/details/127286929
相關推薦
- 2023-01-18 C#實現圖片輪播功能的示例代碼_C#教程
- 2022-03-16 ASP.NET?Core在Linux下為dotnet創建守護進程_基礎應用
- 2022-05-20 ASP.NET?MVC項目部署方式介紹_基礎應用
- 2023-07-04 Linux直接創建SSH無密碼連接
- 2022-05-31 C?語言的弱符號與弱引用你了解嗎_C 語言
- 2022-02-01 Axure谷歌瀏覽器Chrome擴展程序下載及安裝方法
- 2022-10-06 react-router-dom入門使用教程(路由的模糊匹配與嚴格匹配)_React
- 2023-08-16 el-input輸入框去除邊框,且實現自動換行功能
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支