Applications …

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

image-20210412204520085

那我们大家也都知道说,在 NLP 的领域有一个东西叫做 BERT,BERT 里面也用到 Self-attention,所以 Self-attention 在 NLP 上面的应用,是大家都耳熟能详的

Self-attention,不是只能用在 NLP 相关的应用上,它还可以用在很多其他的问题上

Self-attention for Speech

比如说在做语音的时候,你也可以用 Self-attention,不过在做语音的时候,你可能会对 Self-attention,做一些小小的改动,因为一般语音的,如果你要把一段声音讯号,表示成一排向量的话,这排向量可能会非常地长

image-20221126153358925

而每一个向量,其实只代表了 10 millisecond 的长度而已,所以如果今天是 1 秒钟的声音讯号,它就有 100 个向量了,5 秒钟的声音讯号,就 500 个向量了,你随便讲一句话,都是上千个向量了。

所以一段声音讯号,你要描述它的时候,那像这个 vector 的 sequence 它的长度是非常可观的,那可观的 sequence,可观的长度,会造成什么问题呢

你想想看,我们今天在计算这个 attention matrix 的时候,它的 计算complexity 是长度的平方

image-20210412210111322

计算这个 attention matrix A′你需要做 L 乘以 L 次的 inner product,那如果这个 L 的值很大的话,它的计算量就很可观,你也需要很大的这个 memory,才能够把这个矩阵存下来

所以今天如果在做语音辨识的时候,一句话所产生的这个 attention matrix,可能会太大,大到你根本就不容易处理,不容易训练,所以怎么办呢

在做语音的时候,有一招叫做 Truncated Self-attention

image-20210412210322691

Truncated Self-attention 做的事情就是,我们今天在做 Self-attention 的时候,不要看一整句话,就我们就只看一个小的范围就好

那至于这个范围应该要多大,那个是人设定的

那为什么我们知道说,今天在做语音辨识的时候,也许只需要看一个小的范围就好,那就是取决于你对这个问题的理解,也许我们要辨识这个位置有什么样的phoneme,这个位置有什么样的内容,我们并不需要看整句话,只要看这句话,跟它前后一定范围之内的资讯,其实就可以判断。

所以如果在做 Self-attention 的时候,也许没有必要看过一整个句子,也许没有必要让 Self-attention 考虑一整个句子,也许只需要考虑一个小范围就好,这样就可以加快运算的速度,这个是 Truncated Self-attention。

Self-attention for Image

我们都说 Self-attention 适用的范围是:输入是一个 vector set 的时候,那其实一张图片,我们也可以换一个观点,把它看作是一个 vector 的 set

image-20210412214143979

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

image-20210412214417887

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