zoukankan      html  css  js  c++  java
  • 卷积神经网络 CNN 学习笔记


    激活函数Relu


    最近几年卷积神经网络中,激活函数往往不选择sigmoid或tanh函数,而是选择relu函数。Relu函数的定义

    $$f(x)= max(0,x)$$

    Relu函数图像如下图所示:
    此处输入图片的描述


    CNN示例

    此处输入图片的描述

    上图是一个CNN的示意图,一个卷积神经网络由若干卷积层Pooling层全连接层组成。你可以构建各种不同的卷积神经网络,它的常用架构模式为:

    INPUT -> [[CONV]*N -> POOL?]*M -> [FC]*K
    

    也就是N个卷积层叠加,然后(可选)叠加一个Pooling层,重复这个结构M次,最后叠加K个全连接层。

    Convolution Layer 表示卷积层
    Pooling Layer 表示池化


    Convolution Layer


    卷积层的主要是作用是对数据进行卷积操作。

    卷积操作可以理解为,将数据特种进行提取的一个过程。

    比如 一张图片,要检测图片中存在的边缘,也就是边缘检测,那么首先建立两个filter,分别代表横竖边缘,然后拿着filte去跟input的image进行计算,得到卷积后的结果,根据卷积后的结果进行判断是否存在边缘情况。

    另一种情况,一张手写数字的图片,需要进行识别,那么需要对该图片进行特种提取,建立特种提取的方式就是建立filter的过程,然后用filter去对该image进行计算,得到我们想要提取的特种数据。


    卷积层输出值的计算


    我们用一个简单的例子来讲述如何计算卷积,然后,我们抽象出卷积层的一些重要概念和计算方法。

    假设有一个55的图像,使用一个33的filter进行卷积,想得到一个3*3的Feature Map,如下所示:
    此处输入图片的描述

    公式如下:
    $$a_{i,j}=f(sum_{m=0}{2}sum_{n=0}{2}w_{m,n}x_{i+m,j+n}+w_b)qquad(式1)$$

    此处输入图片的描述
    此处输入图片的描述

    此处输入图片的描述

    详细参考:https://www.zybuluo.com/hanbingtao/note/485480


    Pooling Layer

    池化主要的作用是对卷积后的数据进行整合的一个过程,同时对数据进行降维的操作。

    比如在上面的距离过程中,两张图片都会在卷积后形成特征数据,但是这些特征数据中,有很多数据对我们的结果影响可以并不大,那么我们可以对特征数据进行池化后,形成新的特征数据。


    Pooling层输出值的计算


    Pooling层主要的作用是下采样,通过去掉Feature Map中不重要的样本,进一步减少参数数量。Pooling的方法很多,最常用的是Max Pooling。Max Pooling实际上就是在nn的样本中取最大值,作为采样后的样本值。下图是22 max pooling:

    此处输入图片的描述


    卷积神经网络的训练


    卷积层训练


    训练公式:

    $$delta{l-1}=sum_{d=0}Ddelta_dl*W_dlcirc f'(net^{l-1})qquad(式9)$$

    符号$circ$表示element-wise product,即将矩阵中每个对应元素相乘,$d$表示深度$D$的实力,$l$表示层。

    $delta_d^l$表示$d$深度下$l$层的误差项

    $W_d^l$表示$d$深度下$l$层的权重

    $net^{l-1}$表示$d$深度下$l$层的加权输入


    加权输入公式:

    egin{align}
    netl&=conv(Wl, a^{l-1})+w_b
    a{l-1}_{i,j}&=f{l-1}(net^{l-1}_{i,j})
    end{align}


    Pooling层的训练

    无论max pooling还是mean pooling,都没有需要学习的参数。因此,在卷积神经网络的训练中,Pooling层需要做的仅仅是将误差项传递到上一层,而没有梯度的计算。


    Max Pooling误差项的传递

    对于max pooling下一层误差项的值原封不动传递上一层对应区块中的最大值所对应的神经元,而其他神经元的误差项的值都是0。如下图所示(假设$a{l-1}_{1,1}、a{l-1}{1,4}、a{l-1}_{4,1}a{l-1}{4,4}$为所在区块中的最大输出值):

    此处输入图片的描述

    对于mean pooling,下一层的误差项的值会平均分配到上一层对应区块中的所有神经元。如下图所示:

    此处输入图片的描述

    PS:上面两个图示的流向应该是从 layer Llayer L-1 ,传递过程中,Max pooling 采用

    上面这个算法可以表达为高大上的克罗内克积(Kronecker product)的形式,有兴趣的读者可以研究一下。

    $$delta^{l-1} = deltalotimes(frac{1}{n2})_{n imes n}$$

  • 相关阅读:
    jQuery代码优化的9种方法
    关于javascript代码优化的8点建议
    javascript编码标准
    前端学算法之算法复杂度
    前端学算法之算法模式
    前端学算法之搜索算法
    前端学算法之排序算法
    前端学数据结构之图
    前端学数据结构之树
    前端学数据结构之字典和散列表
  • 原文地址:https://www.cnblogs.com/zfcode/p/9144350.html
Copyright © 2011-2022 走看看