天天看点

深度学习-卷积神经网络(CNN)一、CNN

目录

一、CNN

1、卷积

2、什么时候用local-conv、什么时候用全卷积

3、可分离卷积模型压缩?

4、CNN常见问题

5、Batch-Normalization:(加速训练)

6、Pooling作用?max-pooling和mean-pooling

7、dropout

8、L1与L2正则化

7、激活函数

8、ReLU代替 sigmoid 的利弊

9、卷积反向传播过程

10、交叉熵损失、均方误差损失

11、softmax交叉熵损失函数求导

12、logloss和auc的区别

一、CNN

1、卷积

时间复杂度:M2*K2*Cin*Cout

空间复杂度:K2*Cin*Cout

其中,M为输出图特征尺寸,K为卷积核尺寸,Cout输出通道数,Cin输入通道数,

对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。

几个不相关的问题的相关性在于,都存在局部与整体的关系,由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性。

(优点)CNN通过:局部感知、权值共享、池化操作、多层次结构抓住了这个共性。局部感知使网络可以提取数据的局部特征;权值共享大大降低了网络的训练难度;池化操作和多层次结构一起,实现了数据的降维,将低层次的特征组合成高层次的特征。

缺点:需要调参,需要大量样本;

2、什么时候用local-conv、什么时候用全卷积

答案:局部特征之间有较强的相关性,适合用全卷积。在不同的区域有不同的特征分布时,适合用local-Conv。

3、可分离卷积模型压缩?

举个例子,假设有一个3×3大小的卷积层,其输入通道为3、输出通道为16。

那么一般的操作就是用16个3×3的卷积核来分别同输入数据卷积,这样每个卷积核需要3×3×3个参数,得到的输出是只有一个通道的数据。之所以会得到一通道的数据,是因为刚开始3×3×3的卷积核的每个通道会在输入数据的每个对应通道上做卷积,然后叠加每一个通道对应位置的值,使之变成了单通道,那么16个卷积核一共需要(3×3×3)×16 =432个参数。

而应用深度可分离卷积的过程是①用3个3×3大小的卷积核(1通道)分别与输入的3通道的数据做卷积(这里使用了3个1通道的卷积核,输入数据的每个通道用1个3×3的卷积核卷积),得到了3个通道的特征图,我们说该步操作是depthwise(逐层)的,在叠加3个特征图之前,②接着用16个1×1大小的卷积核(3通道)在这3个特征图进行卷积运算,将3个通道的信息进行融合(用1×1的卷积进行不同通道间的信息融合),我们说该步操作是pointwise(逐像素)的。这样我们可以算出整个过程使用了3×3×3+(1×1×3)×16 =75个参数。

4、CNN常见问题

a、梯度消失问题:过多的层数会导致梯度消失,解决手段:减少层数;增大学习率;用Relu代替sigmoid。

b、权重衰减:CNN的权重共享相当于自带某种正则项,所以代价函数里可不加正则

c、学习率的选择问题。

5、Batch-Normalization:(加速训练)

在输入层,输入特征会进行减去均值和除以方差的归一化,以使归一化后的特征是0均值和1方差。

为了克服神经网络层数加深导致难以训练而出现的一个算法。说到底,BN 还是为了解决梯度消失/梯度爆炸问题,特别是梯度消失。

6、Pooling作用?max-pooling和mean-pooling

池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。

1、将小邻域内的特征点整合得到新的特征

特征提取的误差主要来自两个方面:(1)邻域大小受限造成的估计值方差增大;(2)卷积层参数误差造成估计均值的偏移。

2、mean-pooling能减小第一种误差,更多的保留图像的背景信息

3、max-pooling能减小第二种误差,更多的保留纹理信息。

4、stochastic pooling (统计池)

具体:

假设feature map中的pooling区域元素值如下:

深度学习-卷积神经网络(CNN)一、CNN

3*3大小的,元素值和sum=0+1.1+2.5+0.9+2.0+1.0+0+1.5+1.0=10方格中的元素同时除以sum后得到的矩阵元素为:

深度学习-卷积神经网络(CNN)一、CNN

每个元素值表示对应位置处值的概率,现在只需要按照该概率来随机选一个,方法是:将其看作是9个变量的多项式分布,然后对该多项式分布采样即可,theano中有直接的multinomial()来函数完成。当然也可以自己用01均匀分布来采样,将单位长度1按照那9个概率值分成9个区间(概率越大,覆盖的区域越长,每个区间对应一个位置),然随机生成一个数后看它落在哪个区间。比如如果随机采样后的矩阵为:

深度学习-卷积神经网络(CNN)一、CNN

7、dropout

只在训练过程中使用dropout,在测试期间不使用dropout。因为在测试阶段,我们不期望输出结果是随机的,如果测试阶段应用了dropout,预测会受到干扰。

8、L1与L2正则化

L1是拉普拉斯分布,L2是高斯分布

添加 L1 正则化,相当于在 L1范数的约束下求目标函数 J 的最小值,下图展示了二维的情况:

深度学习-卷积神经网络(CNN)一、CNN

L1 在和每个坐标轴相交的地方都会有“角”出现(多维的情况下,这些角会更多),在角的位置就会产生稀疏的解。而 J 与这些“角”相交的机会远大于其他点,因此 L1 正则化会产生稀疏的权值。类似的,可以得到带有 L2正则化的目标函数在二维平面上的图形,如下:

深度学习-卷积神经网络(CNN)一、CNN

相比 L1,L2 不会产生“角”,因此 J 与 L2 相交的点具有稀疏性的概率就会变得非常小。

相同点(为什么可以防止过拟合?)

L1 & L2 正则化会使模型偏好于更小的权值。简单来说,更小的权值意味着更低的模型复杂度,也就是对训练数据的拟合刚刚好(奥卡姆剃刀),不会过分拟合训练数据(比如异常点,噪声),以提高模型的泛化能力。此外,添加正则化相当于为模型添加了某种先验(限制),规定了参数的分布,从而降低了模型的复杂度。模型的复杂度降低,意味着模型对于噪声与异常点的抗干扰性的能力增强,从而提高模型的泛化能力。

不同点

L1 正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择;一定程度上防止过拟合。L2 正则化主要用于防止模型过拟合

L1 适用于特征之间有关联的情况;L2 适用于特征之间没有关联的情况

为什么只对权重做正则惩罚,而不对偏置做权重惩罚?

在神经网络中,参数包括每一层仿射变换的权重和偏置,我们通常只对权重做惩罚而不对偏置做正则惩罚。精确拟合偏置所需的数据通常比拟合权重少得多。每个权重会指定两个变量如何相互作用。我们需要在各种条件下观察这两个变量才能良好地拟合权重。而每个偏置仅控制一个单变量。这意味着,我们不对其进行正则化也不会导致太大的方差。另外,正则化偏置参数可能会导致明显的欠拟合。

7、激活函数

反向求导难易,梯度弥散,网络稀疏性

(为什么引入激活函数?)如果不用非线性激励函数,每一层都是上一层的线性函数,无论神经网络多少层,输出都是输入的线性组合,与只有一个隐藏层效果一样。相当于多层感知机了。所以引入非线性激励函数,深层网络就变得有意义了,可以逼近任意函数。

深度学习-卷积神经网络(CNN)一、CNN

第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法和指数运算,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。

第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),这种现象称为饱和,从而无法完成深层网络的训练。而ReLU就不会有饱和倾向,不会有特别小的梯度出现。

第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

8、ReLU代替 sigmoid 的利弊

当神经网络比较小时,sigmoid 表现更好;

在深度学习早期,人们认为应该避免具有不可导点的激活函数,而 ReLU 不是全程可导/可微的

sigmoid 和 tanh 的输出是有界的,适合作为下一层的输入,以及整个网络的输出。实际上,目前大多数网络的输出层依然使用的 sigmoid(单输出) 或 softmax(多输出)。

为什么 ReLU 不是全程可微也能用于基于梯度的学习?——虽然 ReLU 在 0 点不可导,但是它依然存在左导数和右导数,只是它们不相等(相等的话就可导了),于是在实现时通常会返回左导数或右导数的其中一个,而不是报告一个导数不存在的错误。

一阶函数:可微==可导

对于小数据集,使用整流非线性甚至比学习隐藏层的权重值更加重要

当数据增多时,在深度整流网络中的学习比在激活函数具有曲率或两侧饱和的深度网络中的学习更容易:传统的 sigmoid 函数,由于两端饱和,在传播过程中容易丢弃信息

ReLU 的过程更接近生物神经元的作用过程

饱和(saturate)现象:在函数图像上表现为变得很平,对输入的微小改变会变得不敏感。

ReLU有什么缺点:如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都”dead”了。

9、卷积反向传播过程

深度学习-卷积神经网络(CNN)一、CNN

梯度消失?推导?

许多激活函数将输出值挤压在很小的区间内,在激活函数两端较大范围的定义域内梯度为0,导致权重更新的缓慢训练难度增加,造成学习停止。(前面层上的梯度是来自后面的层上项的乘积,当层数过多时,随着乘积的累积,将越来越小。)

10、交叉熵损失、均方误差损失

交叉熵损失(Cross Entropy Loss):假设误差是二值分布,可以视为预测概率分布和真实概率分布的相似程度。在分类问题中有良好的应用 

深度学习-卷积神经网络(CNN)一、CNN
深度学习-卷积神经网络(CNN)一、CNN

均方损失(Mean Square Loss):假设误差是正态分布,适用于线性的输出,特点是对于与真实结果差别越大,则惩罚力度越大,这并不适用于分类问题。 

深度学习-卷积神经网络(CNN)一、CNN

均方误差(MSE)作为损失函数时,会导致大部分情况下梯度偏小,其结果就是权重的更新很慢,且容易造成“梯度消失”现象。而交叉熵损失克服了这个缺点,当误差大的时候,权重更新就快,当误差小的时候,权重的更新才慢。

11、softmax交叉熵损失函数求导

softmax函数的公式是这种形式:

深度学习-卷积神经网络(CNN)一、CNN

损失函数 loss function

深度学习-卷积神经网络(CNN)一、CNN
深度学习-卷积神经网络(CNN)一、CNN
深度学习-卷积神经网络(CNN)一、CNN

12、logloss和auc的区别

Log loss主要是评估是否准确的,auc是用来评估是把正样本排到前面的能力,评估的方面不一样。

比如 1 1 0 1 预测值 为 0.5 0.5 0.3 0.5

那么 auc 是 1

我们提升预测值到 0.7 0.7 0.4 0.7

那么 auc 依然是1

但是 logloss 有了很大的提升

继续阅读