Transformer、VIT、swin transformer
Transformer:https://blog.csdn.net/qq_37541097/article/details/117691873,总结:
- Self-Attention:输入n个向量,每个向量得到一组(q,k,v),通过Attention(Q, K,V)将不同向量的(q,k,v)进行相互联系,最后就得到了n个输出。
- Multi-Head Attention:Multi-Head就是将每个向量得到的(q,k,v)分为多份(多头)
VIT:自然语言中使用Transformer,需要将自然语言编码成特征向量,最后输入到使用Multi-Head Attention组织的网络中。
在图像中,就是利用卷积网络进行特征提取,从而将图像编码成特征向量,最后输入到使用Multi-Head Attention组织的网络中。
Swin-Transformer:这个网络好像没有像VIT中一样,用到了很多的cnn结构??
【问题】为什么说transformer计算量比CNN大?
Transformer
参考:https://blog.csdn.net/qq_37541097/article/details/117691873
self-Attention
首先介绍self-Attention:
变量说明:
经过 变成了 , 为一个向量, 是 为行组成的矩阵,即 是 为行组成的矩阵,即 是 为行组成的矩阵,即 中的乘法都是点积。- 除以
的原因在论文中的解释是“进行点乘后的数值很大,导致通过softmax后梯度变的很小”,所以通过除以 来进行缩放。
的i行都代表 与每个k之间的匹配程度,将 的每一行都通过一个softmax函数,从而让 的每行之和为一。 的每一行都是一组权重, 的每一行都是每个 乘以权重后相加的结果,每一组权重生成 的一行。 中的每个 都是代表对某个a提取的各种信息,而 的每一行整合了所有 的信息,所以 的每一行的意义应该和卷积网络中的一个通道一样的,因为卷积网络中的每个通道也都是集合了输入的图片的所有信息。
【问题】那么transformer与卷积网络的区别是什么呢?
答:我认为在卷积网络中像素点之间的是没有乘法的,而在transformer中像素点之间是有乘法的,这就让模型的表达能力更强,但是由于像素点之间存在乘法,就会导致反向传播的时候,更新参数比较“乏力”,所以transformer需要更多的数据喂入。
Multi-Head Attention
定义:Multi-Head就是将每个向量得到的(q,k,v)分为多份(多个head),每个head进行self-Attention操作。多个head产生多个输出,将这个多个输出进行拼接和映射操作(通过一个全连接)得到最终输出。具体见链接
计算量:由于Multi-Head Attention每个head的维数减少,总计算成本与self-Attention相似。当去掉Multi-Head Attention最后的映射操作,则Multi-Head Attention的计算量和self-Attention一样。
位置编码:由于输入的
VIT
【问题】感觉VIT将本来好好的图片进行了切割,然后又使用transformer将切割的各个部分进行联系,感觉有点多此一举。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?