1、Attention 機(jī)制可以并行運(yùn)算嗎?如果可以,那原因是什么?如果不可以,那原因是什么?
在 Encoder 部分:
在 Attention 層與層之間不可以并行,因?yàn)榈?n 層的輸入依賴于第 n - 1 層的輸入,故不可以并行。
但在 Attention 層之內(nèi)是可以并行的,因?yàn)楦鶕?jù)公式 可以得知,在某一層內(nèi),第 j 個(gè)輸出就由全部的輸入所決定,換言之,在梯度反向傳播時(shí),可以將梯度同時(shí)傳給所有的輸入神經(jīng)節(jié)點(diǎn),故可以并行更新所有的參數(shù)。而此時(shí)可以將所有的輸入同時(shí)輸入神經(jīng)節(jié)點(diǎn),即可避免像 RNN 那樣,第 n 個(gè)輸出需要依賴第 n - 1 個(gè)輸出,從而可以實(shí)現(xiàn)并行。事實(shí)上 RNN 也可以同時(shí)傳入所有的輸入給輸入神經(jīng)節(jié)點(diǎn),但是由于梯度反向傳播時(shí),仍然需要從第 n 層傳給第 n - 1 層,從而無(wú)法實(shí)現(xiàn)梯度的并行更新。而并行輸入數(shù)據(jù)和并行更新參數(shù)的梯度均滿足,才是 Attention 在層內(nèi)可以實(shí)行并行計(jì)算的關(guān)鍵。
在 Decoder 部分:
因?yàn)?Decoder 在生成第 n 個(gè)輸出的時(shí)候是需要依賴第 n - 1 個(gè)輸出的,故而 Decoder 部分雖然也是由 Attention block (Attention 塊)組成的,但卻不可以并行計(jì)算。
Decoder 生成序列的過(guò)程:

2、k和v的來(lái)源總是相同的,q在encoder及第一級(jí)decoder中與k,v來(lái)源相同,在encoder-decoder attention layer中與k,v來(lái)源不同。為什么呢?

如圖 2.1 所示,在第一個(gè) decoder (一個(gè) decoder 共包含兩層,第二層被稱作 encoder-decoder attention layer )中,
第一層的 Q、K、V 均來(lái)自 Input,而第二層中的 Q 則來(lái)自第一層的 Output,K 和 V 則來(lái)自 encoder 的輸出。
3、為什么說(shuō) Attention 機(jī)制不會(huì)發(fā)生梯度消失呢?
因?yàn)槭褂昧藲埐钸B接
4、最后一個(gè) encoder 的輸出是傳給 Decoder 中的所有 decoder 作為輸入嗎?
是的
5、為什么 Q、K、V 的大小要是 batch_size 呢?是為了能夠在整個(gè)批次樣本中進(jìn)行并行計(jì)算嗎?
6、為什么 bert 中將 cls 作為編碼器的輸入?
因?yàn)?cls 已經(jīng)包含了整個(gè)句子的意思,由注意力得分乘以對(duì)應(yīng)的單詞并加總求和得到 cls 的向量值時(shí),就可以看出。另外 cls 跟其他所有的單詞都沒(méi)有關(guān)系,可以使得 cls 的語(yǔ)義僅只包含了句子的語(yǔ)義。