Self-Attention-APP
Applications …
Self-attention 当然是用得很广,我们已经提过很多次 transformer 这个东西

那我们大家也都知道说,在 NLP 的领域有一个东西叫做 BERT,BERT 里面也用到 Self-attention,所以 Self-attention 在 NLP 上面的应用,是大家都耳熟能详的
但 Self-attention,不是只能用在 NLP 相关的应用上,它还可以用在很多其他的问题上,
Self-attention for Speech
比如说在做语音的时候,你也可以用 Self-attention,不过在做语音的时候,你可能会对 Self-attention,做一些小小的改动,因为一般语音的,如果你要把一段声音讯号,表示成一排向量的话,这排向量可能会非常地长,
而每一个向量,其实只代表了 10 millisecond 的长度而已,所以如果今天是 1 秒钟的声音讯号,它就有 100 个向量了,5 秒钟的声音讯号,就 500 个向量了,你随便讲一句话,都是上千个向量了。
所以一段声音讯号,你要描述它的时候,那像这个 vector 的 sequence 它的长度是非常可观的,那可观的 sequence,可观的长度,会造成什么问题呢
你想想看,我们今天在计算这个 attention matrix 的时候,它的 计算complexity 是长度的平方

计算这个 attention matrix A′你需要做 L 乘以 L 次的 inner product,那如果这个 L 的值很大的话,它的计算量就很可观,你也需要很大的这个 memory,才能够把这个矩阵存下来
所以今天如果在做语音辨识的时候,一句话所产生的这个 attention matrix,可能会太大,大到你根本就不容易处理,不容易训练,所以怎么办呢
在做语音的时候,有一招叫做 Truncated Self-attention

Truncated Self-attention 做的事情就是,我们今天在做 Self-attention 的时候,不要看一整句话,就我们就只看一个小的范围就好
那至于这个范围应该要多大,那个是人设定的
那为什么我们知道说,今天在做语音辨识的时候,也许只需要看一个小的范围就好,那就是取决于你对这个问题的理解,也许我们要辨识这个位置有什么样的phoneme,这个位置有什么样的内容,我们并不需要看整句话,只要看这句话,跟它前后一定范围之内的资讯,其实就可以判断。
所以如果在做 Self-attention 的时候,也许没有必要看过一整个句子,也许没有必要让 Self-attention 考虑一整个句子,也许只需要考虑一个小范围就好,这样就可以加快运算的速度,这个是 Truncated Self-attention。
Self-attention for Image
我们都说 Self-attention 适用的范围是:输入是一个 vector set 的时候,那其实一张图片,我们也可以换一个观点,把它看作是一个 vector 的 set

这个是一个解析度 5 乘以 10 的图片,那这一张图片呢,可以看作是一个 tensor,这个 tensor 的大小是 5 乘以 10 乘以 3,3 代表 RGB 这 3 个 channel。你可以把每一个位置的 pixel,看作是一个三维的向量,所以每一个 pixel,其实就是一个三维的向量,那整张图片,其实就是 5 乘以 10 个向量的set。所以我们其实可以换一个角度,影像这个东西,其实也是一个 vector set,它既然也是一个 vector set 的话,你完全可以用 Self-attention 来处理一张图片,那有没有人用 Self-attention 来处理一张图片呢,是有的

那这边就举了两个例子,来给大家参考,那现在把 Self-attention 用在影像处理上,也不算是一个非常石破天惊的事情。