CNN计算原理

CNN计算原理_第1张图片
CNN

1.卷积conv

CNN编码器与解码器:
神经网络为线性变换,当输入向量维度高于输出向量维度时,神经网络相当于一个编码器,实现高维特征的低维特征提取.反之,输入向量维度小于输出维度,神经网络相当于一个解码器,实现低维特征的高维重建.
在数学中,(f*g)(n)f,g的卷积,在连续空间定义为:

离散定义为:

将图像看成三维矩阵,卷积操作如下:

卷积示意图

卷积层计算:
输入图像矩阵格式 n1*c*M*M(图片数,通道数,图像大小).
输出矩阵根据输入及卷积核变化 n3*c3*N*N.
权重矩阵( 卷积核):与属于匹配, n2*c*F*F(个数,通道数,卷积核大小,bias偏置).

  • 输入矩阵通道数决定卷积核通道数.
  • 卷积核个数决定输出矩阵通道数.
  • padding处理边界,P
  • stride补偿 s
  • 输出矩阵尺度计算方法(长宽计算类似):

    特殊的卷积操作:
  • Half(same) padding:输出size等于输入size
  • Full padding: 输出size大于输入size
  • 反卷积: 将低维特征映射到高维特征,与卷积作用相反
    卷积矩阵操作过程,假设现有图像矩阵为4*4,即:

    展开为16*1的向量

    设计3*3的卷积核:

    表示成(4,16)的形式:
    \left[\begin{matrix}w_{00}&x_{01}&w_{02}&0&w_{10}&w_{11}&w_{12}&0&w_{20}&w_{21}&w_{22}&0&0&0&0&0\\0&w_{00}&x_{01}&w_{02}&0&w_{10}&w_{11}&w_{12}&0&w_{20}&w_{21}&w_{22}&0&0&0&0\\0&0&0&0&w_{00}&x_{01}&w_{02}&0&w_{10}&w_{11}&w_{12}&0&w_{20}&w_{21}&w_{22}&0\\0&0&0&0&0&w_{00}&x_{01}&w_{02}&0&w_{10}&w_{11}&w_{12}&0&w_{20}&w_{21}&w_{22}\end{matrix}\right]\tag7
    卷积运算:(7)*(5)得到4*1的向量,reshape成2*2即为输出矩阵.
    反卷积(转置卷积upsample conv)相当于卷积在神经网络的正向和反向传播中做相反运算
    实现类似于线性插值和最近邻插值,但是卷积核带有权重.
    CNN计算原理_第2张图片
    deconvolution

Batch Normalization

BN是为了克服神经网络难以训练而提出的,在较深的网络结构中反向传播防止梯度弥散,在遇到train收敛速度很慢或者梯度爆炸等状况可以使用BN,提高模型精度.
CNN正向传播:

训练过程通过反向传播更新权重,主要采用chain rule(链式求导法则):

零均值归一化/Z-score标准化

处理后数据变为均值为0,标准差为1的正态分布.通常神经网络和机器学习中很多问题都是基于正态分布的假设.这种参数变化不会改变分布自身形状
数据非标准化的原因可查看这篇文章here
正态分布Box-Cox变换
将一个非正态分布转换为正态分布,使得分布具有对称性.


直方图均衡化
通过图像的灰度值分布,对图像对比度进行调整,可以增强局部对比度.

  • 计算图像灰度概率密度和累计概率密度
  • 创建累积概率密度到灰度分布范围的单调线性映射.
  • 根据单调线性映射进行原始灰度到新的灰度值的映射.
    BN实现方法假设某个layer的输入为X=[x1,x2,...,xn],首先求均值:

    方差:

    对每个元素进行归一化:

    最后进行尺度缩放和偏移,变换回原始分布,实现恒等变换,可以补偿网络的非线性表达能力,最终输出:

    BN的缺点是很依赖batch,对于RNN这种动态网络并不友好,BN的改进方法,
    加仿射变换:

    r,d通过滑动平均的方法进行更新.
    BN变体
    BN将所有batch各个通道单独进行归一化.
    Layer Normalization: 抛弃对batch依赖,对单独一个样本所有通道一起进行归一化
    instance Normalization:对每一个特征层进行归一化.

3. Pooling Layer

缩小features尺寸,实现upsample,减少计算量,防止网络过拟合
Avg Pooling
均值池化: 取卷积核平均值作为输出
Max Pooling
最大值池化操作: 取卷积核中最大值作为输出
一般情况池化区域不重叠4*42*2,对于max pooling正向计算需要记录最大值所在位置,方向传播将参差传到最大值位置,其余位置补0.Avg pooling反向时将参差均分,传递到每个位置.

4.activate layer

模拟人的神经元,只对部分神经元的输入做出反应.加入非线性因子,弥补神经网络的线性映射的不足.增强模型的表达能力.

CNN计算原理_第3张图片
activate layer

sigmoid

f(x)值域为(0,1)
CNN计算原理_第4张图片
image

也叫logistic函数,用来做二分类,在特征相差比较复杂或是相差不是特别大时效果比较好。
缺点:激活函数计算量大,反向传播求误差梯度时,求导涉及除法.反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练
Tanh函数


成为双正切函数,取值范围(-1,1),在特征相差明显时效果很好,在循环过程中会不断扩大特征效果.0均值.
ReLU
Rectified linear Unit

[图片上传失败...(image-63ac85-1575257510351)]
ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多.
ReLU 的缺点:
训练的时候很”脆弱”,很容易就”die”了,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。
softmax
用于多分类神经网络输出

k为类别数,对k维的向量进行映射,输出之和为1 .对最大的一个映射越接近1,其他的趋于0.
平均绝对误差L1loss
input x,target y

均方误差MSELoss

交叉熵损失CrossEntropyLoss
用于分类问题

二分类

焦点损失focal loss
引入参数调整正负样本,难易分样本不均衡

N类别数,input x ,target y,a 正负样本调整,b难易样本调整。

引用

https://www.zhihu.com/question/22298352
https://blog.csdn.net/panglinzhuo/article/details/75207855

你可能感兴趣的:(CNN计算原理)