前置知识
全局平均池化(NIN)
就是每一层都求一下平均数,结合起来组成了向量。
为啥要搞上面这么个玩意呢?
因为将CNN处理过后得到的feature map直接拉成一条向量之后做softMAX做分类问题效果不好。
NIN的优点:
- 抑制过拟合。
- 可解释的雏形。
- 输入尺寸更加灵活。
NIN的缺点:
训练的收敛速度会变慢
what?
让模型自适应地去关注需要关注的地方。
分类
注意两种东西:
- 一个是空间当中的一部分(这块有个鸟)
- 还有一个东西就是关注channel,比如这个channel3 就是很重要的,那么我就多关注一下。
实现方式
常见的实现方式:
- SENet
- CBAM
- ECA
SENet
1、对输入进来的特征层进行全局平均池化。
2、然后进行两次全连接,第一次全连接神经元个数较少,第二次全连接神经元个数和输入特征层相同。
3、在完成两次全连接后,我们再取一次Sigmoid将值固定到0-1之间,此时我们获得了输入特征层每一个通道的权值(0-1之间)。
4、在获得这个权值后,我们将这个权值乘上原输入特征层即可。
CBAM
同时关注channel 和 pixel
他的网络总体结构长这样:
怎样实现呢?
ECAnet
SE block它只能进行channel层面上的注意力集中
ECAnet是 SEblock的加强版
作者认为
- Seblock当中的全连接层获取channel的依赖关系是低效的并且不必要的。
- 卷积有良好的跨通道获取信息的能力 => 改进方法:fc换conv
Transformers
Why?— 要整体分析
How?— Self-attention
Self-attention考虑了整个句子的咨询
他还可以叠起来:
self-attention是怎么运作的?
求一下字里行间,单词之间的关联性。
怎么求呢?— 有很多种方法,视频里面就说了两种,然后主要用的是Dot-product
下面的两个框框就是单词 == 向量。
这里有一个输出b1,他的大小取决于v的值和α‘,而α‘ 是经历过softmax的,所以呈现一定的比例性。
那么谁的a’越大,谁的v值就会主要地决定b的大小。
同样地:
从矩阵的角度来看上面的这些个操作:
再宏观地看一看:
我们发现 Wq 、 Wk 、 Wv需要去学习
ViT
图片输入转成 token
以像素作为token太烦,以patch作为token很舒服。