机器学习基础知识

1、过拟合(Overfitting)&欠拟合(Underfitting)

training error:模型在训练中的误差

generalization error(泛化误差):模型对于新的数据上运行产生的误差

请添加图片描述

请添加图片描述

过拟合:记住太多细节,使训练误差低但是泛化误差高

2、预训练和自监督学习

请添加图片描述

  • 预训练致力于学习通用的表征,从而可被轻易的迁移到多个下游应用场景
  • 自监督学习是指训练目标不基于标注标签,而是基于数据本身的内在结构,可极大利用现实中易获取的无标签数据进行知识学习。

对于预训练任务全部基于成对标注数据的工作比如CLIP,亦或是模型仅适用于特定任务的自监督学习工作。

对比学习在NLP领域的经验,自监督预训练使用的数据量越大,模型越复杂,那么模型能够吸收的知识就越多,对下游任务效果来说越好。

在CV领域,自监督学习对代理任务的设计经历了三个阶段:

  1. Prediction-based Tasks

    ​ 基于预测的自监督学习任务属于视觉自监督学习中相对早期的工作。这些任务包括patch relation prediction(预测图片中两个patch的相对位置),rotation prediction(判断图片旋转角度),color prediction(对灰色图片上色),frame order prediction(判断视频帧序列顺序),video speed prediction(判断视频被几倍速播放)

  2. Contrastive-based Tasks(基于对比的任务)

    ​ 随着对比学习的火热,对比学习逐渐成为主流的视觉自监督任务。比如MoCo,simCLR等系列工作,通过对图片进行随机两种增强操作(剪裁,翻转等)构造正例对,拉近同一张图片不同形态的特征距离,拉远不同图片之间的特征距离。基于对比学习的方法虽然在ImageNet图片分类任务上取得不错的表现,但对于更细粒度的图片相关任务表现则欠佳,其更偏向于学习全局的图片语义特征。

  3. Generative-based Tasks(基于生成的任务)

    由于对比学习任务在细粒度知识表征学习方面存在缺陷,受NLP预训练模型的启发,近期很多工作将重点放在如何有效的将MLM任务迁移到CV自监督学习中。如mask region prediction,mask frame prediction等任务。

3、MLP算法——多层感知机

MLP算法,也被称为前馈神经网络。

MLP的forward结构可以简单的看成:
O u t p u t = I n p u t × W e i g h t s + b i a s e s Output=Input×Weights+biases Output=Input×Weights+biases

其中:

Input:N×C1 Weights:C1×C2

biases:C2×1 Output:N×C2

Input一共N行,每行C1个Feature,MLP能够实现将C1维转换为C2维。

C2维中每一维都整合了原来全部C1维的信息,但不同维度对这些信息的侧重点不同。(经过MLP,相当于把原来整行的信息揉成一团,再揉成了C2个不同形状,代表原来那行信息的C2个不同特征。)

单层感知机一般结构:

请添加图片描述

感知机是一种线性分类模型,感知机模型的假设空间是定义在特征空间中的所有线性分类模型或者线性分类器,即函数集合{f | f(x) = w · x + b}

学习规则:修改神经网络的权重和偏置值的方法和构成(也叫训练),学习规则的目的是为了训练网络来完成某些工作。网络的实际输出和目标相比较,然后应用学习规则来调整网络的权重和偏置值,使得网络的实际输出进一步靠近目标输出。

4、BN的理解

思考:为什么传统的神经网络在训练开始之前,要对输入的数据做Normalization?

原因在于神经网络学习过程本质上是为了学习数据的分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另一方面,一旦在mini-batch梯度下降训练的时候,每批训练数据的分布不相同,那么网络就要在每次迭代的时候去学习以适应不同的分布,这样将会大大降低网络的训练速度,这也是为什么我们需要对所有训练数据做一共Normalization预处理的原因。

刚开始初始化的 (w,b)会把数据分布变得很离谱,模型就会难以学习收敛,也会出先学习慢和梯度消失的问题。当然也会造成过拟合的风险。

所以通过BN,可以讲batch每通过一次卷积层后,都能规范化到原点附件的非线性函数的近似线性范围里。
x ^ ( k ) = x ( k ) − E [ x ( k ) ] V a r [ x ( k ) ] \hat{x}^{(k)}=\frac {x^{(k)}-E[x^{(k)}]} {\sqrt{Var[x^{(k)}]}} x^(k)=Var[x(k)] x(k)E[x(k)]
BatchNorm的本质:

  • BN要做的就是把越来越偏离的分布给他拉回来
  • 再重新规范化到均值为0方差为1的标准正态分布
  • 这样能够使得激活函数在数值层面更敏感,训练更快
  • 有一种感觉:经过BN之后,把数值分布强制在了非线性函数的线性区域中

BN层在激活函数之前。BN层的作用机制也许是通过平滑隐藏层输入的分布,帮助随机梯度下降的进行,缓解随机梯度下降权重更新对后续层的负面影响。实际上,无论是放非线性激活之前,还是之后,也许都能发挥这个作用。只不过取决于具体激活函数的不同,效果也许有一点差别。

5、L1正则化和L2正则化

L1:稀疏与特征选择
J ( θ ⃗ ) = 1 2 ∑ i = 1 m ( h θ ~ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n ∣ θ j ∣ J(\vec{θ})=\frac{1}{2} \sum\limits_{i=1}^{m} (h_{\tilde{θ}}(x^{(i)})-y^{(i)})^2 +\lambda \sum\limits_{j=1}^{n}|θ_j| J(θ )=21i=1m(hθ~(x(i))y(i))2+λj=1nθj
L2:平滑特征
J ( θ ⃗ ) = 1 2 ∑ i = 1 m ( h θ ⃗ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 J(\vec{θ})=\frac{1}{2} \sum\limits_{i=1}^{m} (h_{\vec{θ}}(x^{(i)})-y^{(i)})^2 +\lambda \sum\limits_{j=1}^{n}θ_j^2 J(θ )=21i=1m(hθ (x(i))y(i))2+λj=1nθj2
L1求导后为:sign(θ) 相当于稳定前进,都为1,最后学成0

L2求导后为:θ 相当于越来越慢,很多参数都接近0,平滑

6、SimCLR:一个典型的负例对比学习方法

  1. 它相对于之前的模型效果有明显的提升
  2. 采取对称结构,整体相对简洁清晰
  3. 它奠定的结构,已成为其它对比学习模型的标准构成部分

如何构造正负例

请添加图片描述

正例构造方法如上图。对于某张图片,从可能的增强操作集合T中,随机抽取两种:t1 ~ T 及t2 ~ T,分别作用在原始图片上,形成两张经过增强的新图像,两者互为正例。训练时,Batch内任意其它图像,都可以做为x1或x2的负例。

对比学习希望习得某个表示模型,它能够将图片映射到某个投影空间,并在这个空间内拉近正例的距离,推远负例距离。也就是说,迫使表示模型能够忽略表面因素,学习图像的内在一致结构信息,即学会某些类型的不变性,比如遮挡不变性、旋转不变性、颜色不变性等。SimCLR证明了,如果能够同时融合多种图像增强操作,增加对比学习模型任务难度,对于对比学习效果有明显提升作用。

构造表示学习系统

通过这个系统,将训练数据投影到某个表示空间内,并采取一定的方法,使得正例距离比较近,负例距离比较远。

请添加图片描述

上图展示了SimCLR模型的整体结构。

随机从无标签训练数据中取N个构成一个Batch,对于Batch里的任意图像,根据上述方法构造正例,形成两个图像增强视图:Aug1和Aug2。Aug1和Aug2各自包含N个增强数据,并分别经过上下两个分支,对增强图像做非线性变换,这两个分支就是SimCLR设计出的表示学习所需要的投影函数,负责将图像数据投影到某个表示空间。

以上分支为例,Aug1首先经过特征编码器 Encoder(一般采用ResNet做为模型结构,这里以函数 fθ代表),经CNN转换成对应的特征表示。之后,是另外一个非线性变换结构 Projector(由 [FC->BN->ReLU->FC]两层MLP构成,这里以函数gθ代表),进一步将特征表示hi映射成另外一个空间里的向量zi。这样,增强图像经过gθ(fθ(x))两次非线性变换,就将增强图像投影到了表示空间,下分枝的Aug2过程类似。

FC是全连接层,BN就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。

对于Batch内某张图片x来说,在Aug1和Aug2里的对应的增强后图像分别是xi和xj,他们互为正例,而xi和Aug1及Aug2里除xj之外的其它任意2N~2个图像都互为负例。在经过变换后,增强图像被投影到表示空间。通过定义合适的损失函数,来实现“正例距离较近,负例距离较远”的目标。

距离度量函数

度量函数,判断两个向量在投影空间里的距离远近,一般采用相似性函数来作为距离度量标准。具体而言,相似性计算函数采取对表示向量L2正则后的点积或者表示向量间的Cosine相似性:
S ( z i , z j ) = z i T z j ∣ ∣ z i ∣ ∣ 2 ∣ ∣ z j ∣ ∣ 2 S(z_i,z_j)=\frac{z_i^Tz_j}{||z_i||_2||z_j||_2} S(zi,zj)=∣∣zi2∣∣zj2ziTzj
损失函数

SimCLR的损失函数采用排名InfoNCE Loss,某个例子对应的InfoNCE损失为:
L i = − l o g e S ( z i , z j + ) τ ∑ j = 0 K e S ( z i , z j ) τ L_i=-log\frac{e^{\frac{S(z_i,z_j^+)}{\tau}}}{\sum_{j=0}^Ke^{\frac{S(z_i,z_j)}{\tau}}} Li=logj=0KeτS(zi,zj)eτS(zi,zj+)
InfoNCE函数,分子部分鼓励正例相似度越高越好,也就是在表示空间内距离越近越好;而分母部分,则鼓励任意负例之间的向量相似度越低越好,也就是距离越远越好。

上面介绍了SimCLR的关键做法,本身这个过程,其实是标准的预训练模式;利用海量的无标注图像数据,根据对比学习指导原则,学习出好的Encoder模型以及它对应产生的特征表示。所谓好的Encoder,就是说输入图像,它能学会并抽取出关键特征,这个过程跟Bert模型通过MLM自监督预训练其实目的相同,只是做法有差异。学好Encoder后,可以在解决下游具体任务的时候,用学到的参数初始化Encoder中的ResNet模型,用下游任务标注数据来Fine-tuning模型参数,期待预训练阶段学到的知识对下游任务有迁移作用。由此可见,SimCLR看着有很多构件,比如Encoder、Projector、图像增强、InfoNCE损失函数,其实我们最后要的,只是Encoder,而其它所有构件以及损失函数,只是用于训练出高质量Encoder的辅助结构。目前所有对比学习模型都是如此,这点还请注意。

SimCLR的贡献,一个是证明了复合图像增强很重要;另外一个就是这个Projector结构。这两者结合,给对比学习系统带来很大的性能提升,将对比学习性能提升到或者超过了有监督模型,在此之后的对比学习模型,基本都采取了Encoder+Projector的两次映射结构,以及复合图像增强方法

7、交叉熵损失函数

**信息量的大小与信息发生的概率成反比,**概率越大,信息量越小。概率越小,信息量越大。

设某一事件发生的概率为P(x),其信息量表示为:
I ( x ) = − l o g ( P ( x ) ) I(x)=-log(P(x)) I(x)=log(P(x))
其中I(x)表示信息量,这里log表示以e为底的自然对数。

信息熵也被称为熵,用来表示所有信息量的期望。期望是试验中每次可能结果的概率乘以其结果总和。
H ( x ) = − ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) ( X = x 1 , x 2 , x 3 . . . , x n ) H(x)=-\sum\limits_{i=1}^nP(x_i)log(P(x_i))\quad\quad (X=x_1,x_2,x_3...,x_n) H(x)=i=1nP(xi)log(P(xi))(X=x1,x2,x3...,xn)

H ( p , q ) = − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) H(p,q)=-\sum\limits_{i=1}^np(x_i)log(q(x_i)) H(p,q)=i=1np(xi)log(q(xi))

交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的差异性。

多个事件同时发生的概率是多个事件概率相乘,总信息量是多个事件信息量相加。

  • 交叉熵能够衡量同一个随机变量中的两个不同概率分布的差异程度,在机器学习中就表示为真实概率分布与预测概率分布之间的差异。
  • 交叉熵的值越小,模型预测效果就越好。
  • 交叉熵经常搭配softmax使用,将输出的结果进行处理,使其多个分类的预测值和为1,再通过交叉熵来计算损失。

8、RPN(区域生成网络)

全称Region Proposal Network,Region Proposal的中文意思是“区域选取”,也就是“提取候选框”的意思,所以RPN就是用来提取候选框的网络。

请添加图片描述

图一 Faster RCNN整体结构图

请添加图片描述

图二 RPN结构图

上图展示了RPN的整个过程,一个特征图经过sliding window处理,得到256维特征,然后通过两次全连接得到结果2k个分数和4k个坐标。

RPN的输入特征是图一中的公共Feature Map,把3×3的sliding window看作是对特征图做了一次3×3的卷积操作,最后得到了一个channel数目是256的特征图,尺寸与公共特征图相同,假设为256×(H×W)。

我们可以近似的把这个特征图看作有H×W个向量,每个向量是256维,那么图中的256维指的是其中的一个向量,然后我们要对每个特征向量做两次全连接操作,一个得到2个分数,一个得到4个坐标,由于我们要对每个向量做同样的全连接操作,等同于对整个特征图做两次1×1的卷积,得到一个2×H×W和4×H×W大小的特征图,即有H×W个结果,每个结果包含2个分数和4个坐标。

请添加图片描述

这里2个分数是原文RPN是提取候选框,还不要判断类别,所以只要求区分是不是物体就行,那么就有两个分数:

  • 前景(物体)分数
  • 背景分数

一共有H×W个结果,随机取一点,其与原图有一一映射关系,由于原图和特征图大小不同,所以特征图上的一个点对应原图肯定是一个框,那么我们把框的左上角或者框的中心作为锚点,然后想象出一堆框,一共就有k个。H×W个点,每个点对应原图有K个框,那么就有H×W×k个框在原图上,那RPN的结果其实就是判断这些框是不是物体以及他们的偏移。至于框的大小、长宽比,这里是预先设定好的,共有9种组合,所以k=9,最后结果就是针对这9种组合的,所以有H×W×9个结果,也就是18个分数和36个坐标。

9、one-stage和two-stage

目标检测可以理解为是物体识别和物体定位的综合,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置。

类别-位置

目前目标检测分为两类

一类是two-stage,two-stage检测算法将检测问题划分为两个阶段,首先产生候选区域,然后对候选区分类(一般还需要对位置精修),这一类的典型代表是R-CNN,Fast R-CNN,Faster R-CNN,Mask R-CNN家族。识别错误率低,漏识别率也较低,但速度较慢,不能满足实时检测场景。

另一类方式为one-stage检测算法,其不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果,因此有着更快的检测速度,比较典型的算法如YOLO,SSD等。

Region Proposal是一个区域,bounding box就是这个区域的4条边,而这4条边是用一个4维向量来表示的。

Region Proposals 是Region Proposal Network(RPN) 产生的候选簇,最终检测的结果就是从这里挑的。proposal是算法(传统\深度)提取的候选簇。

Two-Stage

先由算法生成一系列作为样本的候选框,再通过卷积神经网络进行样本分类。

对于two-stage的目标检测网络,主要通过一个卷积神经网络来完成目标检测过程,其提取的是CNN卷积的特征,在训练网络时,其主要训练两个部分:

  • 第一步训练RPN网络

    整个流程就是,首先通过一系列卷积得到公共特征图,假设它的大小是N×16×16,然后进入RPN阶段,首先经过一个3×3的卷积,得到一个256×16×16的特征图,经过两次1×1的卷积(全连接层),分别得到一个18×16×16的特征图,和一个36×16×16的特征图,也就是16×16×9给结果,每个结果包含2个分数和4个坐标,再结合预先定义的Anchors,经过后处理,就得到候选框。

  • 第二步是训练目标区域检测的网络

    请添加图片描述

    首先输入一张图片,接着经过卷积神经网络,通过卷积神经网络对图片进行深度特征的提取,提取到的特征图通过RPN网络来进行候选区域产生的操作,同时也会完成区域的分类,即将图片分为背景和目标这样两种的不同的类别,并且也会对目标的位置进行初步的预测。

    接下来是对候选区域中的位置进行精确定位和修正,使用Roi_pooling层,可以将此层理解为抠图操作,接着将抠图所得到的候选目标对应到特征图上相应的特征区域,然后经过一个全连接层fc,得到相应的特征向量,最后通过分类回归两个分支来实现对这个候选目标类别的判定和目标位置的确定

One-stage

直接回归物体的类别概率和位置坐标值。

请添加图片描述

直接通过主干网络给出类别和位置信息,没有使用RPN网络。这样算法速度更快但是精度相对two-stage低。

10、非极大值抑制( Non-max suppression)

请添加图片描述

滑动窗出来的目标检测会产生多个目标检测结果。例如,在检测图像中车辆位置时,将图像划分成19×19的网格,在实践中,可能同一个车辆会出现多个网格认为其是该车辆的中心点(如下图的1、2、3或4、5、6),所以对多个格子同时对同一目标预测时,一个目标可能会被输出多个不同的检测结果。

由此,利用非极大值抑制可以来解决这个问题。

非极大值抑制的方法是:先假设有6个矩形框,根据分类器的类别分类概率做排序,从最大概率的矩形框开始,分别一一做重叠度IOU对比,是否大于某个设定的阈值,假设某矩形框重叠度超过阈值,那么就扔掉该矩形框,一直重复,找到所有被保留下来的矩形框。

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值