Attention原理图解(非常详细)

tech2023-09-11  87

1.前言

希望大家结合上一篇博文讲的seq2seq详细总结来看,这样的模型其实是存在缺点的:

遗忘:输入文本很长时,语义向量c 偏向于记住靠近它的几个单词,它的运行机制相当于读完整个文本再去做翻译,而我们人类会一句一句的翻译,这样就引入了Attention 机制它与 seq2seq 最大的不同是: seq2seq 的语义向量 c 是固定的,而Attention 每个时刻的 语义向量 c 不同seq2seq模型的语义向量 c 无法表达输入序列各单词的重要性,而attenton 每个时刻的c向量都能反映输入单词的权重关系seq2seq没有对齐机制,而attention具有这种性质,它能计算出目标单词与哪个输入单词关系最大

2. 简单的网络结构

看个图,大家就能明白啦 h1,h2,h3,h4是 RNNCeil 每个时刻的隐层状态

3.attention模型结构分析

这个结构图比上面画的更官方一点

编码部分是双向的GRUh 是编码的隐层状态(有正向和反向)s 是解码的隐层状态
观查到 s3, y3的箭头有3个。像seq2seq讲解那样画一个输入关系的图,便于好记~

① 观测上图:每一时刻t 的输出y_t 由三个要素决定:t 时刻i的隐状态 s_t,t 时刻的语义向量c_t,上一时刻 t−1的输出y_t−1 每一时刻t 的隐层状态s_t 由三个要素决定:t-1 时刻i的隐状态 s_t-1,t 时刻的语义向量c_t,上一时刻 t−1的输出y_t−1 这里 ht’ 就是 s_t, ht-1’ 是 s_t-1 同样:f 是 softmax层(在论文中接了Maxout层),g 是RNNCeil 如RNN, GRU ②语义向量 C 怎么得到? ? hi 是双向隐层拼接的结果 αt,i 是第 t 时刻,hi 的权重系数 S 是解码部分的隐层状态,h 是编码部分的隐层状态

以上面那个图为例:求第 三 时刻的 语义向量 c3: c3 = α3,1 * h1 + α3,2 * h2 + α3,3 * h3 + α3,4 * h4 好了,我们现在的问题就只剩计算 score(s, h)

4. 计算权重α

这里的权重反映的是相似度,αt,i有两种方法求 score 计算完之后必须用 softmax 归一化

score衡量两个向量的相关性,衡量两向量相关性的方法有:
内积:越大越相似 score (x,y) = x • y 缺点:x, y向量维度必须一致才能做内积乘以一个矩阵W,W的作用是把 x, y 维度变得一样 score (x,y) = (x^T)Wy训练神经网络 以 x ,y 向量作为输入,输出为一个实数,只有一个隐层h 如图: 只要把 x,y 向量换成St-1, hi 或 St, hi 就可以计算score了 对比三种方法:第 2 种最好,因为x 和 y 有关联,score 就是真正意思上的相似的,而第三种,将 x,y 统一作为输入,已经变得无关了。
最新回复(0)