激活函数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. Windows Ubuntu Bash申请免费通配符证书(Let's Encrypt)并绑定IIS

    什么是 Let’s Encrypt? 部署 HTTPS 网站的时候需要证书,证书由 CA 机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用. Let’s En ...

  2. 张高兴的 Windows 10 IoT 开发笔记:串口红外编解码模块 YS-IRTM

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub: https://github.c ...

  3. ASP.NET Core的实时库: SignalR简介及使用

    大纲 本系列会分为2-3篇文章. 第一篇介绍了SignalR的预备知识和原理 本文介绍SignalR以及ASP.NET Core里使用SignalR. 本文的内容: 介绍SignalR 在ASP.NE ...

  4. 记录Ocelot + SignalR 多服务端测试

    前言 分两个项目,一个Gatway,一个SignalR 贴代码 1.Gatway 1.引用Ocelot 2.添加一点点代码 Startup.cs 3.简单配置ocelot ocelot.json { ...

  5. re模块的方法总结

    re模块的方法总结 一,查找 1:match 匹配string 开头,成功返回Match object, 失败返回None,只匹配一个. 示例: s="abc221kelvin4774&qu ...

  6. flutter初体验

    flutter初体验 和flutter斗争了两个周末,基本弄清楚了这个玩意的布局和一些常用组件了. 在flutter里面,所有东西都是组件Widget.我们像拼接积木一样拼接Widget,拼接的关键词 ...

  7. 微信小程序之滑动日历展示

    滑动日历效果 效果预览 实现要求:顶部固定悬浮的是获取未来一周的日期,分为上下两部分,上面部分显示星期,下面则显示具体日期.今天则显示今天,可点击头部具体日期,可向左向右滑动. 实现代码 顶部日历 页 ...

  8. [翻译 EF Core in Action 1.9] 掀开EF Core的引擎盖看看EF Core内部是如何工作的

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  9. Cenots7下安装运行.NET Core、MicroSoft SQL Server 2019 preview 的基础实践

    一:概要 适应人群:.Net初学者.想了解.Net Core在Linux系统中的运行环境搭建者.初次且想在linux上应用.Net Core开发应用程序者: 基础技能:了解.NET基础开发技能者.有一 ...

  10. Dynamics Business Central-如何配置VS Code连接BC环境

    最近在研究Business Central,也就是以前的Dynamics NAV,需要配置Visual Studio Code连接BC环境,以下是配置的具体步骤. 1. VS Code下载,这个不多说 ...