CV学习:李宏毅2021机器学习(3)

本周事情稍微有点多,因此稍微延缓了几天,下周就会恢复正常。
这次主要是针对于CNN进行的总结,总体较为基础,有问题可以告诉我,我会第一时间更正。

CNN(Convolutional Neural Network)卷积神经网络

CNN是我们耳熟能详的图像处理架构,那么究竟什么是CNN,我们为什么要使用CNN呢?要解决这些问题,我们就必须先介绍一下CNN最主要运用的场所,图像分类(Image Classification)

Image Classification

对于分类的问题,之前我们已经学习了一些方法,将它们用于图像分类上好像也没有什么大不了的。
对于一张1001003的图片,我们先前如何处理呢?
在这里插入图片描述
我们或许需要先把它拉成一个30000维的vector,然后将它们作为一个Feature Factor输入进Fully Connected Network(因为至今我们只学过这一种网络构架),之后经过数个隐层,一个Output Layer,中间使用一些Activation Function与Batch Normalization方法。主观上看,如此就可以轻松解决这些问题。
但实际上真的这么简单么?
我们假设在第一层隐层有1000个神经元(由于需要匹配输入的30000个,太少是不可取的),那么我们会需要多少个可变参数weight呢?
w = 3 × 100 × 100 × 1000 = 3 × 10 7 w=3\times100\times100\times1000=3\times{10}^7 w=3×100×100×1000=3×107
仅仅一层,就带来了如此庞大参数数量,虽然较大的参数可以提升模型的弹性,但也很容易导致模型Over fitting.
在这里插入图片描述
针对这个问题,有许多解决办法,例如:
1.在全连接层增加Dropout随机失活,可以防止模型过度依赖于某些神经元,增加泛化性。
2.将输出层改为Global Average Pooling(GAP全局平均池化)
在这里插入图片描述
3.结合图像分类与其他分类问题的不同性,构建新的网络架构。

CNN简介

对于图像分类问题,大多数时候并不一定图中每个像素都对结果有贡献,并且很多时候,特征将能够一锤定音分类结果。
在这里插入图片描述
对于上图的分类,我们究竟应该如何进行分类呢?例如,假如将图中的陆地换成草原,或者将后面的背景换做海洋,这会影响我们对于动物的判断么?不会的。那么我们究竟是通过什么鉴别这个动物的种类的呢?

有一种比较可能的方法,就是当我们看到鸟嘴,并且当我们看到翅膀与爪子的时候,我们就会反应过来,它是一只鸟。

举例来说,当有一个Neural说看到了鸟嘴,有一个Neural说看到了翅膀,另一个Neural说看到了爪子的时候,模型可能就能判断出来这是一只鸟。那么,为了分辨出重要的Patterns我们或许不需要让每一个Neural都看遍每一个像素,而是选择一个Size让它在意自己的小区域就可以了。

第一次简化

我们限制了每个Neural的视野,并将它作用的范围称作Receptive Field(感受野),那么对于一个6 * 6 * 3的image,我们假设感受野为3 * 3,它将会把这个27个像素拉成向量,输入一个网络中,如下图。
在这里插入图片描述
之后我们选择很多个这样的方块,它可以是各种大小或形状的。显然,同一个范围可以有多个检测器,它们可以互相重叠,覆盖,一切都随意安排。
但一般来说,我们设置Kernel_size = 3 * 3,观察全部通道。除此之外我们还设置Strides = 2(举个例子),将这个方框向右平移一段距离,就形成了一个新的视野,同样向下也一样。当感受野超出图片边界我们还会进行Padding来补充图片大小。

第二次简化

但是,我们或许会问,不同的方框做的都是寻找Patterns的问题,为什么它们的Weight不同呢?难道鸟嘴出现在左上角和出现在中间有不同的含义么?显然,我们可以进一步简化模型参数,这就是Parameter Sharing(参数共享)在这里插入图片描述
这样又大大缩减了参数数量。
计算过程如下图:
在这里插入图片描述

Pooling(池化层)

我们一般使用Maxpooling,池化层没有任何参数,它采取的是选择自己视野中最大的作为输出,并且一般各个感受域不重叠。在这里插入图片描述
不过,池化层的初衷是为了压缩图像,选择出其中最具有特征的那个。是当年限制于算力而做出的妥协。如今,为了提高准确率,已经出现了大量全卷积的网络架构,它们完全抛弃了Pooling,这或许也是一种趋势吧。

经典的CNN架构

我们会将卷积层与池化层交替使用,最终使用Flatten(也就是将Pooling输出的值抻平为Vector)输入到过去的Fully Connected Network中。
在这里插入图片描述
我们称使用了卷积层的神经网络架构为CNN.

CNN缺陷

CNN有许多问题

  • 不同领域的模型构建相差甚远,需要结合实际考量。在这里插入图片描述

  • 无法适应图片的旋转,平移,反转等等变换,需要在训练时通过对数据预处理增加其泛用性。

  • 一般情况下只适用于图片,或者类图片方面,用于其他方面效果不佳

自注意力机制(self-attention)

我们先前的输入,都是一个向量,即使是使用CNN,也需要经过一层Flatten拉成向量(如果使用GAP则不用),而输出则是一个类别。

那么,如果我们的输入是一排向量,并且向量的数量会改变,我们要如何处理呢?在这里插入图片描述

文字处理

假设我们将句子的每个单词都转化为一个向量的话,那么,这个句子就构成了一个Vector Set,并且随着句子长度的变化,Vector Set也将随之改变。

单词向量化

一般的想法是,将其变为一维的向量,比如,我们定义apple是第一个单词,banana是第二个单词,man是第三个单词等等。但这样带来的问题也很明显,apple和banana都是水果靠的近,而banana与man类别不同为什么离得也近呢?这将会导致有许多问题。

因此,又有人发明了Word Embedding,用多维坐标,将相同类别的单词群聚在一起。

还有One-hot Encoding(热编码)的方法,但由于向量过大,导致参数过度而被极大的限制了用途。

在Attention is all you need这篇论文中,提到了一种十分强大与巧妙地方法。

词性辨别(POS Tagging)

当我们考虑到Output的形式时,我们可以先从较简单的数目相同的例子作为考虑。
I      s a w      a      s a w I\ \ \ \ saw\ \ \ \ a\ \ \ \ saw I    saw    a    saw
上述这个例子,对每个单词选取词性,直觉的想法就是,将每个单词,分别输入到Model中进行分类,但这很显然有问题。
在这里插入图片描述
在这个句子中Saw与Saw并没有不同,但词性却不相同,模型却根本不会发现这其中的差别,并最终给出错误的答案。

那么,我们或许需要考虑前后文的关系,将多个单词同时输入到模型中,这样才能较好的解决问题。
在这里,我们需要引入自注意力机制,在过去的一篇文章,我已经简要介绍过Self-attention的基本做法

Source-Free Domain Adaptation for Semantic Segmentation论文总结
总的来说,就是对设置一组,或多组W,Q矩阵,,并通过矩阵乘法,得出每个单词的Queries,Value和Key值,再通过这些值去为这个单词的注意力打分,去看在运算单词A的时候,对B的注意力有多大。
在这里插入图片描述
一般,我们有Dot-product的方法,也有Additive的方法,但由于前者计算量更小,速度更快,我们选择前者作为主要方法。(当然,Transformer就是使用这总方法)

其中α表示单词A对B的注意力有多大。我们就可以运用这个值去提取单词的重要信息,它们全都储存在Value里面。
A t t e n t i o n ( Q , K , V ) = S o f t M a x ( Q K T d k ) V Attention(Q,K,V)=SoftMax\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=SoftMax(dk QKT)V
显然,当α较小的时候,其V对整体的影响小到看不见了,而使用Soft Max的原因,我认为也是为了放大这个大小差距,使得大的更大,小的影响趋于零。当然,使用其他的理论上也没有什么问题,甚至可能有更好的效果。在这里插入图片描述
最终,将这个值输出为b,得出我们想要的Output,或者,你认为这还不够注意力,你可以使用多层自注意力层,又或者,你觉得注意力不够大,你可以使用Multiple-head(多头)Attention任意的聚焦你的注意力。

总结

本周学习了CNN以及自注意力的部分,剩下的部分将在下周进行补充。本周确实学业繁忙,临近期中希望人没事。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值