赞
踩
Self-Attention是用来处理Sequence数据的。
输入是Vector Set(Sequence)。
比如:
输出是什么?
希望网络可以考虑整个sequence的信息。
首先想到全连接网络,但是每个输入的sequence的长度是不确定的,因此如果想要使用全连接网路哈哈哈没法确定神经元的个数~~
所以,使用Self-Attention:可以实现每个输出都会考虑整个Sequence的信息。
如图所示,一个Self-Attention块的输入是input sequence或者是上一层的输出。
每个输出b都会考虑整个输入序列的信息。
1、首先求解输入之间的相关性权重α。
求解α的方法:
(1)Dot-product
(2)Additive
Self-Attention中的α的求解方法:
然后经过一个激活层,此处是Softmax也可以是其他的,比如ReLU。
使用矩阵运算总结Self-Attention的求解机理:
实现不同类型的relevance。
前面讲的Self-Attention中没有涉及位置信息,因此考虑加入位置编码。
上述的positional encoding是hand-crafted的。
也有其他的positional encoding方法此处就不列举了。
可以将image看成一个w*h的sequence,每个像素的vector中包含的是像素的RGB三通道值。
或者将image分块,每块是一个输入vector。
其实CNN可以看成是Self-Attention中的一种情况。
对于Self-Attention其实是针对一个query像素点求解其与其他所有像素点的k值(即relevance)通过k值得到其他像素点对该query像素点的相关性,
而CNN是使用卷积核划定了相关像素点的范围。
Self-Attention模型相比于CNN有更高的灵活性因此训练需要更多的数据。
RNN也是一种处理序列数据的模型。
Self-Attention可以很好地处理序列数据,可以实现序列数据的全依赖。
但是Self-Attention的运算量很大!需要更多的数据训练。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。