我们尝试用人记忆和理解事物的方式来思考人工智能:
为什么我们需要引入这种Attention机制,以seq2seq为例:
传统的seq2seq可以理解为让RNN从左往右看一遍要Encode的序列,并将记忆不断存入隐藏层。但是隐藏层的维度是有限的,就像人类的记忆力有限,当序列很长时,读到最后一个word时很可能已经对开头的word发生遗忘,要以看一遍的记忆完整复述整个序列或者对序列做翻译等操作,是存在局限的。
因此我们可以借助人类产生工作记忆的方式,在decode时计算当前隐藏层和之前序列隐藏层的关联度,或者说当前这个decoder模块要关注的encoder隐藏层有哪些,要有多少关注度。
decoder端的隐藏层 z z z和encoder端隐藏层 h h h的关联度 α \alpha α计算可以有几种常见的方法:
- 利用余弦相似度计算 c o s ( z , h ) cos(z,h) cos(z,h)
- 以[ z , h z,h z,h]为输入, α \alpha α为目标输入训练全连接层
- α = h T W z \alpha = h^TWz α=h