輸入
編碼方式:
- one-hot:
- word-embedding:能更明顯的區分不同類别的輸入 圖也能看作是多個向量輸入
輸出
- 每個向量都有一個label
- 一整個sequence有一個label
- 模型自己決定有多少個label(sequence to sequence)
重點介紹每個vector有一個label
- saw詞性第一個和第二個不同,但是網絡無法識别
- 通過聯系上下文解決 self-attention不隻是隻能做一次,能做很多次
- 文章: attention is all you need - transformer
- 第一步:找到與a1相關的向量, a表示兩個向量的關聯程度
- 計算a:
- dot-product
- additive 自己跟自己也要計算關聯度:
- 再計算softmax,得到每個的重要分數
- 最後每個向量生成一個v,每個向量對應的權重與另外的向量v相乘累加作為最終那個向量的輸出 用矩陣的形式表示: q與k計算attention分數,可以用矩陣與向量相乘表示: 多個向量的話組成一個矩陣,可以看作是矩陣和矩陣相乘:
A = K T ∗ Q A = K^T * Q A=KT∗Q
A ′ = s o f t m a x ( A ) A' = softmax(A) A′=softmax(A)
輸出 O = V ∗ A ′ O = V * A' O=V∗A′
總的過程如下: 唯一要學習的參數就是 W q W^q Wq, W k W^k Wk, W v W^v Wv
不同的變體
- multi-head self-attention
注意到self-attention 沒有位置資訊。
可以加入position編碼資訊(手工,或者學習得到)
應用
- 語音 由于語音資料非常大,可以采用truncated方式隻看很小的一個範圍,一定範圍之内的資料就能完成
- 圖像 整張圖檔5103, 每個位置的pixel看作是一個三維向量,每張圖看做是一個5*10的向量
- rnn如果需要記得之前的資訊的話需要一直儲存到memory
- rnn不能并行
- 圖