李宏毅机器学习2021笔记—self-attention(下)

这里是李宏毅机器学习2021笔记self-attention的下篇。如果没看过上篇,可以先看上篇李宏毅机器学习2020笔记-—self-attention(上)。学习本节内容,需要一定的基础知识储备。

之前我们已经介绍了,怎么根据input的一排a,得到一个b1.
这里需要强调一点,b1到b4,并不需要按顺序。
(这里就不再赘述怎么得到b1了)
这里我们从矩阵乘法的角度再来看一遍b是怎么产生的。李宏毅机器学习2021笔记—self-attention(下)_第1张图片

每一个a,都分别要产生不同的q,k,v。
要用矩阵运算表示的话,就是每一个a都要乘上一个wq,这里我们可以把它们合起来看成是一个矩阵。就相当于矩阵I乘上一个Wq得到一个矩阵Q。(线性代数内容,很简单)
k和v以此类推,只是现在把它写成了矩阵的形式。

下一步:李宏毅机器学习2021笔记—self-attention(下)_第2张图片
就是k1和q1做inner-product,得到α1,1,同理得到α1,2和α1,3……
这几步的操作,可以看做是一个矩阵的相乘。写成右上角的形式。
李宏毅机器学习2021笔记—self-attention(下)_第3张图片
然后这几步的操作是一模一样的,矩阵相乘,行乘以列,线性代数内容。
然后我们把A做一个normalization,比如做一个softmax,让每一个column里面的值,相加得1,得到一个A’。
李宏毅机器学习2021笔记—self-attention(下)_第4张图片
b就是把v拼起来,乘以一个A’,两个矩阵相乘。
李宏毅机器学习2021笔记—self-attention(下)_第5张图片
其实这一连串的操作,就是矩阵的乘法。
O就是这层的输出。
这里只有Wq和Wk和Wv是未知的,是需要通过我们的训练资料找出来的。李宏毅机器学习2021笔记—self-attention(下)_第6张图片
这里有一个进阶的版本,叫做multi-head self-attention

相关,有很多种不同的定义,有很多不同的形式。
我们先得到q再乘以不同的东西,得到两个不同的q,这就是产生了多个“头”。
接下来做self-attention,就是把1这类一起做,把2这类一起做,得到bi,1
然后得到不同的bi1和bi2,再乘以一个矩阵W0,最后得到一个bi。
但是这样的话,每一个input,它的位置的信息是没有的,对于输入而言,每一个操作都是一模一样的。但是在实际上,有一些位置的信息是很重要的,比如动词不容易放在句首。
李宏毅机器学习2021笔记—self-attention(下)_第7张图片
这里用到一个叫做positional encoding的技术:
为每一个位置设定一个向量,叫做位置向量,每一个不同的位置,有一个不同的向量ei,然后把ei加到ai上面。
最早的transformer用的ei,就像涂上,每一个颜色,都代表一个向量,把向量分别在不同的位置相加得到,每一个位置都有一个专属的e。
这样的位置向量,是人为设定的,但是它会产生很多问题。比如我定义向量的时候它的长度只有128,但是sequence有129怎么办呢?
这个位置向量,是一个仍然待研究的问题。有各种各样不同的人为设定的位置向量,还可以让机器根据资料去自己学习出来。李宏毅机器学习2021笔记—self-attention(下)_第8张图片
这个图上面就是各种各样不同的位置向量。
下面就是self-attention在不同领域的应用。以图像领域为例
在这里插入图片描述
我们之前所讲的,self-attention是在输入一排向量的时候,比较适用。
图像就可以看做是一个向量集合,就是把每一个位置的像素,看成是一个向量,这样的话我们就可以把图片看成一个向量集合。
李宏毅机器学习2021笔记—self-attention(下)_第9张图片
这里有两个把self-attention用在图像处理上的例子。
那么用self-attention和用CNN处理图片有什么区别和联系呢?
在这里插入图片描述
如果我们用self-attention来处理图片,其中一个1产生query,用其他的像素产生key,那我们在做内积的时候,是考虑到整张图片的。但是如果我们是用卷积核,filter的话,就是我们只会考虑这里面的一部分信息,那么CNN就相当于是一种简化版的self-attention。
对于CNN来说,我要划定感受野,它的范围的大小,是人为决定的。
对于self-attention来说,它是机器自动学出来的。在这里插入图片描述
有这么一篇论文,19年1月发的,它会用数学关系严格的证明,CNN就是简化版的self-attention。self-attention只要设定一定的参数,可以做到和CNN一模一样的事情。
在这里插入图片描述
我们在讲overfiting的时候说,比较灵活的模型,它需要更多的数据,如果数据集不够,它效果可能不好。
上面这张图片,就是谷歌发的一篇论文,
把一张图片拆成16x16的patch,然后它就把每一个patch看成是一个word,(因为transformer一开始是用在NLP上面的),取了一个名字,叫做一张图价值16x16个文字。
横轴是训练的图片的量,10M就是一千万,比较了self-attention是浅蓝色这条线,CNN是深灰色这条线。随着资料量越来越多,self-attention的结果越来越好,但是在数据集小的时候,CNN的结果是要比self-attention要好的。

至于RNN,RNN已经基本上被self-attention取代了。
RNN之前博主也看过,就是一个记忆机制,也是,在考虑一个向量的信息的时候 ,加入其它向量的位置信息,可以看成是self-attention的一种特殊情况。
李宏毅机器学习2021笔记—self-attention(下)_第10张图片
self-attention也可以用在GNN上面,在做attention matrix的时候,只需要计算有edge相连的node就好。
在这里插入图片描述
self-attention有非常多的变形。
它的一个问题就是,运算量会非常大(肯定的嘛,CNN就相当于是全连接去掉一些权重,把CNN进行简化),然后它会有各种各样的变形 ,最早的transformer,用的就是这个 ,广义的transformer就是指的self-attention。
我们可以看到,很多新的former,横轴表示比原来的transformer运算速度快 ,但是纵轴表示效果变差。

你可能感兴趣的:(李宏毅深度学习笔记,机器学习,人工智能,深度学习)