输入
编码方式:
- 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不能并行
- 图