机器学习2021-CNN+Self-Attention
CNN & Self-Attention
Convolutional Neural Network(CNN)
专门用于影像处理
引入:Image classification
- 一张100100的RGB图片,可以看作3100*100,分别是channel,高,宽。
- 按照之前的想法,使用全连接网络,feature有3100100,假设sigmoid有100个,那么参数w将达到3*10^7个,参数越多,意味着模型越有弹性,但训练成本也会越高,越容易overfitting
Observation 1:
- Identify some critical patterns,做图像分类时,只需要侦测到重要的pattern即可,不需要看整张图片
Simplification 1:
- 划分receptive field,每个neuron只对一个receptive field的范围负责,并且receptive field彼此之间是可以有重叠,且同个范围可以有多个neuron负责
- typical setting:
- all channels
- kernel size: 3x3
- Each receptive field has a set of neurons(e.g. 64)
- stride=1 or 2
- 超出影像范围时进行padding(补零或是其他)
- the receptive fields cover the whole image
Observation 2:
- The same patterns appear in different region,相同的pattern可能会出现在图像上不同的位置
Simplification 2:
- 让不同receptive field的neuron共享参数,parameter sharing,即它们的weight是相同的
- typical setting:
- 每个receptive field都有64个neuron侦测,即一组参数Filter1,Filter2,…,共享的参数就是这些filter,即对应不同receptive field的neuron的weight完全相同
小节:
- 最开始是fully connected network,然后划分多个receptive field,每个neuron不用看整张图片,再然后neuron之间可以共享参数,整个model bias是不断增加的,对模型的限制也是增加的。
- 补充:共享参数也可以理解为一个filter扫过整张图片
Observation 3:
- Subsampling the pixels will not change the object,当缩小图片时,不会影响图像识别
Simplification 3:
- pooling:把图片变小,可以有效减少运算量。对细微的检测可能会有影响,所以不一定会使用。
The whole CNN:
Image=⇒Convolution=⇒Pooling=⇒Convolution=⇒Pooling=⇒Flatten=⇒Fully Connected Layers=⇒softmax=⇒result
- 补充:CNN不适用于scaling和rotation, need data augmentation
Self-attention
引入:
- 之前的问题都是基于输入是a vector,并且输出是a scalar or a class。那么,当输入是a set of vectors(sequence)且长度不固定,而输出是scalars或classes时,问题该如何解决呢?
- vector set as input举例:
- 句子输入,每个词汇是一个向量,句子就是多个长度不一的向量
- 语音输入,每个frame对应一个向量
- Graph,每个node对应一个向量
- 输出方式:
- 每个vector对应有一个label,例如词性标注
- The whole sequence has a label,只有一个输出
- 模型自定义label的数量
- 针对第一种情况:每个vector对应有一个label,例如sequence labeling
- fully-connected可以考虑一个window里的上下文,但始终是有极限的,如何才能考虑整个sequence呢?
- 这就是self-attention可以解决的问题
实现细节:
- 输入时input或者是a hidden layer,self-attention 可以和fully-connected交替使用
- 针对每个输入向量ai,通过和对应的Wq,Wk,Wv矩阵相乘,有对应的q,k,v向量,每个qi和所有的ki进行dot-product(表示两个向量间的关联程度),再和分别所有的vi相乘在相加得到bi。每一个bi都按照这样的方式得出,就是self-attention所做的事情。所有的bi是同时计算的,是parallel的
- 进阶版本Multi-head self-attention:
- 当有different type of relevance时,可以控制产生多种不同的q,k,v,最后再乘以一个矩阵来得到bi
- Positional Encoding:
- self-attention里本身是没有位置信息的
- 可以为每个position人为设置一个unique positional vector ei
Application:
- Transfomer
- Bert(NLP)
- Speech
- Image
Self-attention vs CNN:
- CNN可以看作是简化版的self-attention。而self-attention是复杂化的CNN,可以看作是自己学出来receptive field。
- self-attention is good for more data,而CNN is good for less data
Self-attention vs RNN:
目前使用RNN的应用基本逐渐都被self-attention取代了
- RNN对于最右边的输出要考虑最左边的输入是很困难的,除非该信息一直存在memory里
- 而对于self-attention只需把对应的query和key进行match相乘即可得到(天涯若比例)
- RNN是nonparallel的
- self-attention是parallel的,效率更高
self-attention特点:运算量比较大,相当于广义的transformer
机器学习2021-CNN+Self-Attention
http://example.com/2024/10/11/机器学习入门/机器学习2021-CNN-Self-Attention/