本文约2400字,建议阅读6分钟本文我们来辨析一下cnn和attention都在做什么。
CNN是不是一种局部self-attention?
cnn可不是一种局部的attention,那么我们来辨析一下cnn和attention都在做什么。
1:cnn可以理解为权值共享的局部有序的fc层,所以cnn有两个和fc层根本区别的特征,权值共享和局部连接。也就是在保证不丢失一些根本feature的情况下大大减少了参数量。
2:attention的步骤是通过Q和K点乘得到attention maritx并表示二者的相似性,即Q和K相似性越大的部分点乘越大,之后scale并softmax之后得到attention score,之后乘以V,得到attention之后的结果。
attention的本质是求Q和K的相似性,强调Q中和K相似的部分而已。
其本质区别还可以理解为cnn是提取特征,attention是强调特征即可,二者可不相似。那要是这么说所有model都是围绕feature做一些东西,那就说这些都是一样的话显然不合理。
更新,因为对CNN有了新的理解,所以对之前的答案进行更新,但是我前面之前的回答就不会在删了,后续有什么关于这方面进一步的补充和说明会再加进来,欢迎大家收藏。
关于RNN和self-attention的区别,可以看我的这篇回答,希望对你有所帮助。
https://zhuanlan.zhihu.com/p/360374591
首先,说结论,CNN可以看作简化版的Self-attention,又或者说Self-attention是CNN的泛化。
之前我们对CNN和self-attention作比较,其实下意识的想的是CNN用于图像处理,将self-attention用于NLP,所以会产生这两种方法怎么会有关联的错觉,那么下面都将从图像处理方面来讨论CNN和self-attention的区别和联系,更好的来对比CNN和self-attention。self-attention用于图像处理的流程:
首先,如果用self-attention对图像进行处理,对于每一个pixel(像素值)产生Query,其他的pixel产生Key,Query*Key,然后softmax(正如评论中说的,其实不一定非要softmax,也可以采用Relu等激活函数),最后乘以对应的Value并求和作为每一个pixel经过softmax的输出值。这里大家会发现对图像做self-attention的时候每一个pixel考虑了整张图片所有的pixel,要考虑整张图像中所有的信息。
那么,如果我们用CNN对图像进行处理,我们会选取不同的卷积核,用卷积核对图像进行处理,每一个pixel(像素值)其实只需要考虑这个卷积核中其他的pixel就可以了,只需要考虑这个receptive field就可以了,而不需要考虑整张图像中的所有信息。
进而,我们可以得到一个一般性的结论,CNN可以看作一种简化版的self-attention,即CNN只需要考虑卷积核(receptive field)中的信息即可,但是对于self-attention需要考虑全局的信息。
反过来,我们可以同样理解为,self-attention是复杂化的CNN,CNN需要划定receptive field,只考虑Receptive field里面的资讯,而Receptive field的范围和大小是需要自己设定的大小。而对Self-Attention而言,用attention找到相关的pixel,就好像Receptive是自动学出来的,即以这个pixel为中心,其他哪些pixel是需要我这个pixel考虑的,是与我这个pixel相关的。
简单一句话,CNN每一个pixel只学卷积核中的信息,Self-Attention每一个pixel学整张图像中的信息。(这里只考虑一层卷积,如果多层卷积的话,CNN其实达到了和self-attention类似的效果)
那么,知道self-attention和CNN联系,我们可以得到什么结论呢?
我们知道了CNN就是Self-Attention的特例,或者说Self-Attention就是CNN的泛化,非常的flexible的CNN,对Self-Attention做某些限制, Self-Attention和CNN是一样的。(论文:https://arxiv.org/abs/1911.03584 中得到的结论)
对于self-attenion来说,这是一种非常flexible的model,所以需要更多的数据进行训练,如果数据不够,就可能over-fitting,但对于CNN来说因为限制比较多,在training data不多的时候可以train出一个比较好的Model。
如图所示,在training data比较小的时候,CNN比较好,在training data比较大的时候,self-attention的效果会更好一些。即Self-Attention的弹性比较大,所以需要比较多的training data,在训练资料比较小的时候就容易over-fitting,CNN的弹性比较小,在training data比较小的时候,训练结果比较好,在training data比较多的时候,CNN就没有办法从更大量的训练资料中得到好处了。
作者:匿名用户
https://www.zhihu.com/question/448924025/answer/1784363556
有相似性,但是也有差异。CNN可以认为是在每个位置与固定的静态的模板做内积,是局部的投影,而attention是在不同位置之间计算内积,某种意义上可以看作一个distance metric,其中的加权矩阵其实是定义了一种distance metric。从更普遍一点的意义上,CNN是更加local的,self-attention更多强调relation. 说CNN是一种特殊的退化的attention也许更合适一点。
作者:林建华
https://www.zhihu.com/question/448924025/answer/1793085963
我认为CNN的卷积层和self-attention不是一回事情。self-attention的K和Q都由数据产生, 所以是反应数据内部的关系。
CNN卷积层可以看成由参数组成的K和不同数据产生的Q, 反应的是数据和参数的关系。
也就是说self-attention通过参数构建了不同的空间, 使得数据在不同空间中呈现不同的自相关性质。
而CNN卷积通过参数, 构建了某些固定的特征, 通过统计数据在这些特征上的表现来进行后面的处理。
作者:阿良
https://www.zhihu.com/question/448924025/answer/1786277036
cnn的核心在于使用局部特征获取全局特征。可以说每次将注意力放在局部的卷积核。最后通过局部卷积核特征形成整体的特征表示。
自注意力机制是重点还有个自己的自,自己和自己进行计算,它的好处在于通过自注意力机制能够对每个词能够融入全局的信息,目的是借助全局信息帮助局部特征更好表示。
所以cnn是局部到整体,自注意力机制是整体辅助局部。如果硬要将cnn与注意力扯上关系,我个人理解可以看成是局部注意力(注意没有自字)
作者:aluea
https://www.zhihu.com/question/448924025/answer/179309914
调转一下顺序,self-attention是一种强归纳偏置的CNN。
这不难理解,我们来看一下self-attention具体做了什么。
假设,对于一层self-attention,存在a、b、c、d四种侯选特征可同时输入,而仅有ac、bd两种combine的嵌入表示对下游任务有贡献。那么self-attention就会注意这两种combine而遮掩其他特征;比如,[a,b,c]->[a',0,c']。Ps. a'表示a的输出表征。
对于一层CNN,就比较直白,有一说一,[a,b,c]->[a',b',c']。那么CNN可不可以完成像self-attention的功能,完全可以,再加一层CNN弄两个过滤器一个滤ac;一个滤bd就完事了。
当然我CNN完全可以不这么干,也能拟合分布;而self-attention必须这么干,所以这是一种更强的归纳偏置。
关于归纳偏置的重要性,这里就不赘述了。
作者:mof.ii
https://www.zhihu.com/question/448924025/answer/1797006034
CNN不是一种局部的self-attention,但是把局部self-attention实现成一个层,做全self-attention网络的方法是可以实现的,参考Google Brain在NeurIPS19的Stand-Alone Self-Attention in Vision Models。
文章第二节详细比较了卷积层和Self-Attention层的计算方式,值得一看。
编辑:王菁
校对:林亦霖
基于卷积双向长短期记忆网络结合注意力机制(
CNN
-BILSTM-
Attention
)时间序列预测(Matlab完整源码和数据)
基于卷积双向长短期记忆网络结合注意力机制(
CNN
-BILSTM-
Attention
)时间序列预测(Matlab完整源码和数据)
基于卷积双向长短期记忆网络结合SE注意力机制的时间序列预测
单输出单输出,时间序列预测。
运行环境Matlab2021及以上。
评价指标包括:MAE、MBE、RMSE等,代码质量极高,方便学习和替换数据。
cnn
-bilstm-
attention
-time-s
er
ies-prediction_k
er
as-mast
er
cnn
-bilstm-
attention
-time-s
er
ies-prediction_k
er
as-mast
er
cnn
-bilstm-
attention
-time-s
er
ies-prediction_k
er
as-mast
er
cnn
-bilstm-
attention
-time-s
er
ies-prediction_k
er
as-mast
er
cnn
-bilstm-
attention
-time-s
er
ies-prediction_k
er
as-mast
er
cnn
-bilstm-
attention
-time-s
er
ies-prediction_k
er
as-mast
er
cnn
-bilstm-
attention
-time-s
er
ies-prediction_k
er
as-mast
er
cnn
-bilstm-
attention
-time-s
er
ies-prediction_k
er
as-mast
er
cnn
-bilstm-
attention
-time-s
er
ies-prediction_k
er
as-ma
3、相关技术
相比LSTM,使用GRU能够达到相当的效果,准确率不会差多少,并且相比之下GRU更容易进行训练,能够很大程度上提高训练效率,因此硬件资源有限时会更倾向于使用GRU。
GRU结构图如下:
4、完整代码和步骤
此代码的依赖环境如下:
tensorflow==2.5.0
numpy==1.19.5
k
er
as==2.6.0
matplotlib==3.5.2
————————————————
版权声明:本文为CSDN博主「AI信仰者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30803353/article/details/129108978
1. Convolutional lay
er
(卷积层--CONV)
作用:主要就是通过一个个的filt
er
,不断地提取特征,从
局部
的特征到总体的特征,从而进行图像识别等等功能。
2. Pooling lay
er
(池化层--POOL)
作用:是为了提取一定区域的主要特征,并减少参数数量,防止模型过拟合。扩大感受野。减少冗余,做窗口滑动卷积的时候,卷积值就代表了整个窗口的特征。...
假设有一个5*5的图像,使用一个3*3的卷积核(filt
er
)进行卷积,得到一个3*3的矩阵(其实是Feature Map,后面会讲),如下所示:
下面的动图清楚地展示了如何进行卷积操作(其实就是简单的点乘运算):
一个图像矩阵经过一个卷积核的卷积操作后,得到了另一个矩阵,这个矩阵叫做特征映射(feature map)。每一个卷积核都...
文章目录一、空间不变性和
局部
性二、边界检测——一个小例子感受卷积
全链接神经网络是各层之间的神经元每个都链接在一些,这样一来就会出现一个问题,那就是当我们的输出层神经元很多的时候,链接就会很多,参数的维度就会很高。比如说,假设我们有一个足够充分的照片数据集,数据集中是拥有标注的照片,每张照片具有百万级像素,这意味着网络的每次输入都有一百万个维度。 即使将隐藏层维度降低到1000,这个全连接层也将有106×10310^6 \times 10^3106×103个参数。 想要训练这个模型将不可实现,因为需要有大
只有单个神经元是由有详细的数学原理的
人工神经网络只是建立在“人多力量大”的简单将多个神经元连接起来,以期达到更好的效果,没有严格的数学证明,只有大体道理的成立。
而
cnn
是建立在人工神经网络的思想上,又加入了
局部
感受野和参数共享的思想,其原理无数学严格推理,也是建立在一般大体正确的逻辑之上。
局部
感受野是说每次我们只是感受图片
局部
的信息,表现为卷积核没有图片大,其次
局部
感受野的目的在于减小参数个数,由于图片像素点实在过于多,
局部
感受野目的在于提取特征,一般来说目前理解一个卷积核对某一特定的特征感兴趣,特征
CNN
概念:
传统意义上的多层神经网络是只有输入层、隐藏层、输出层,其中隐藏层的层数按需决定。而卷积神经网络
CNN
,在传统的多层神经网络基础上,全连接层前面加入了部分连接的卷积层、激活层和池化层操作,使得实际应用场景中能够构建更加深层、功能更强大的网络。
我相信你肯定已经在自然语言领域中听说过
transform
er
这种结构,因为它在 2020 年的 GPT3 上引起了巨大轰动。
Transform
er
不仅仅可以用于NLP,在许多其他领域...
总结了2021年以来,所有将
CNN
与
Transform
er
框架结合的CV算法
在卷积神经网络(
CNN
)中,卷积运算擅长提取
局部
特征,但在捕获全局特征表示方面还是有一定的局限性。 在Vision
Transform
er
中,级联自注意力模块可以捕获长距离的特征依赖,但会忽略
局部
特征的细节。
cnn
与
transform
er
CNN
具有非常良好
CNN
可以很好用于图像的处理,这主要基于两个假设:
图像中同样的特征片段可能出现在不同的位置。图像上不同小片段,以及不同图像上的小片段的特征是类似的,也就是说,我们能用同样的一组分类器来描述各种各样不同的图像 。
最底层特征都是
局部
性的,
局部
特征远小于图像本身。也就是说,我们用10x10这样大小的过滤器就能表示边缘等底层特征
对像素进行子采样不会改变图像
CNN
架构
最典型的卷积网络,由卷积层、池化层、全连接层组成。其中卷积层与池化层配合,