attention是什么?
我们现在有一个翻译任务,输入中文,输出英文。很显然需要用RNN来做。普通的RNN中的many-to-many一般就是一个输入元素针对一个输出元素,也就是说,一个中文字符,对应一个英文字符。但是这会导致长期记忆的问题。而attention就是在预测这个英文字符时,使用加权过的所有中文字符来预测,这个加权值就是attention。
如何计算attention weight?
针对每个英文字符,我们会构建一个小的全连接网络,然后concatenate上前一个英文字符的输出,输入是所有的中文字符,也就是一个n对1的全连接网络。而这个全连接网络中的weight就是我们的attention weight。一般描述不会说是构建全连接网络,而是说是做dot product来得到attention score(这大个有很多做法),然后加个activation(softmax啥的)来转换成概率,其实是一样的,因为这就是构建全连接网络的方法。

v2-d266bf48a1d77e7e4db607978574c9fc_r.jpg
https://web.stanford.edu/class/cs224n/slides/cs224n-2019-lecture08-nmt.pdf