激活函数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}D\delta_dl*W_dl\circ 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$层的加权输入


加权输入公式:

\begin{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} = \deltal\otimes(\frac{1}{n2})_{n\times n}$$

卷积神经网络 CNN 学习笔记的更多相关文章

  1. 卷积神经网络(CNN)学习笔记1:基础入门

    卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Vie ...

  2. 卷积神经网络CNN学习笔记

    CNN的基本结构包括两层: 特征提取层:每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征.一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来: 特征映射层:网络的每个计算层由多 ...

  3. CNN学习笔记:卷积神经网络

    CNN学习笔记:卷积神经网络 卷积神经网络 基本结构 卷积神经网络是一种层次模型,其输入是原始数据,如RGB图像.音频等.卷积神经网络通过卷积(convolution)操作.汇合(pooling)操作 ...

  4. CNN学习笔记:卷积运算

    CNN学习笔记:卷积运算 边缘检测 卷积 卷积是一种有效提取图片特征的方法.一般用一个正方形卷积核,遍历图片上的每一个像素点.图片与卷积核重合区域内相对应的每一个像素值乘卷积核 .内相对应点的权重,然 ...

  5. 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  6. 深度学习之卷积神经网络(CNN)详解与代码实现(一)

    卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...

  7. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  8. CNN学习笔记:神经网络表示

    CNN学习笔记:神经网络表示 双层神经网络模型 在一个神经网络中,当你使用监督学习训练它的时候,训练集包含了输入x还有目标输出y.隐藏层的含义是,在训练集中,这些中间节点的真正数值,我们是不知道的,即 ...

  9. 深度学习之卷积神经网络CNN

    转自:https://blog.csdn.net/cxmscb/article/details/71023576 一.CNN的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连 ...

随机推荐

  1. 面试时怎样回答:你对原生ajax的理解

    很多人跟我一样用习惯了jq封装好的$.ajax,但是面试时,原生ajax是很多面试官喜欢问的问题,今天再查资料,打算好好整理一下自己理解的原生ajax. 首先,jq的ajax:一般我常用的参数就是这些 ...

  2. User Profile Service服务未能登录,无法登录

    不知你是否遇到这样的问题,某一天你打开PC,开机正常,可当你输入正确的密码回车,却发现Vista或Win7拒绝让你登录,提示"User Profile Service 服务未能登录.无法加载 ...

  3. Hibernate用注解生成表

    User.java实体来 package com.tao.pojo; import javax.persistence.Column; //用注解的方式生成表 import javax.persist ...

  4. PCB泪滴设计

    操作:选择[Tools]-->[Teardrops],快捷键T+E.打开[Teardrop Options]对话框进行设置.如下图所示: 对话框面板介绍 [General] 1.该区域的[Pad ...

  5. mybatis 异常Result Maps collection does not contain value for java.lang.String

    Result Maps collection does not contain value for java.lang.String 以上是我报的错. 只要报Result Maps collectio ...

  6. 开源)嗨,Java,你可以生成金山词霸的二维码分享海报吗?

    As long as you can still grab a breath, you fight.只要一息尚存,就不得不战. 有那么一段时间,我特别迷恋金山词霸的每日一句分享海报.因为不仅海报上的图 ...

  7. .net core 并发下的线程安全问题

    抱歉,其实内容并不如题!!!真正的题目应该为<.net core 并发下由于注入模式引起的线程安全问题> 背景(写测试demo所出现的异常,供大家学习与拍砖): .net core web ...

  8. 阿里云卸载自带的JDK,安装JDK完成相关配置

    0.预备工作 笔者的云服务器购买的是阿里云的轻量应用服务器,相比于云服务器ECS,轻量应用服务器是固定流量但是网络带宽较高,对于服务器来说,网络带宽是非常昂贵的,而带宽也决定了你的应用访问的流畅度,带 ...

  9. 学JAVA第二十天,接触异常处理,自定义异常

    1.java.lang.NullPointerException(经常报)(运行时异常) 属于运行时异常,是编译器无法预知的异常,比如你定义了一个引用变量String a,但是你确没有用new关键字去 ...

  10. 3.JAVA-方法重载,类的封装,构造/析构方法

    1.方法重载 和C++的函数重载一样,主要是实现多个相同的函数名,但是参数表不同. 参数表不同主要有以下几种 1) 参数个数不同 2) 参数类型不同 3) 参数顺序不同 2.类和对象 类class 用 ...