机器学习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/
作者
jhxxxxx
发布于
2024年10月11日
许可协议