笔记(4):卷积神经网络(2)

概述

首先卷积神经网络(CNNs)是由一层或多层卷积层然后再连接一个或多层全连接层组成。通常情况下,卷积层后会跟着一个池化层/下采样层。当然也有很多人将卷积操作与池化操作组合起来看做是一个卷积层,如下图。

layer_terminology

CNNs能够很好的处理二维数据(比如说图片),我们前面已经说过了,使用卷积层而不是全连接层能够使训练更加容易而且整个网络的参数也会减少。

卷积层的正向传播

假设当前层为卷积层,前一层输入的数据为 M×N 。使用一个 m×n 的核 w ,来进行卷积操作,那么卷积层的输出为 (Mm+1)×(Nn+1) 。那么

zlij=a=0m1b=0n1wabyl1(i+a)(j+b)+b

更形象的操作如下图

Convolutions

再经非线性变换后得到: ylij=fl1(zlij) 。这里的非线性变换就是detector stage。

池化层的正向传播

假设池化层的输入为 M×N ,将 m×n 看做是一个池,其中 mMM%m=0 ,同样对于 N,n 也有同样的要求。那么输出为 Mm×Nn
池化操作有很多类型,比如Max-pooling, mean-pooling。 通常情况下,可以将池化操作看做是非重叠的卷积操作,这样可以调用第三方的库进行加速优化,减少工作量。
举个例子,Max-pooling:

zlij=max{yl1(i+0)(j+0),yl1(i+1)(j+0),,yl1(i+m1)(j+n1)}

有些应用,可能会在之后再添加一个非线性变换,这种情况比较少见。

池化层的反向传播

池化层的下一层可能是全连接层也可能是卷积层,对于全连接层来说,与之前讨论的一样。假设当前池化层为第 l 层,则它的 error term为 δl:

δl=δl+1Wl+1

//todo 下一层卷积层时的敏感误差项

卷积层的反向传播

卷积层的下一层一般为池化层,卷积层到池化层其实只做了一个池化操作。假设卷积层一共有 k 个 feature maps。卷积层每一个feature maps做一个池化操作,得到 k 个池,也就是说卷积层与池化层存在一个一一对应的关系。

如果想求第 j 个feature map的误差敏感项 δlj:

δlj=upsample(δl+1j)

上面这个是池化操作后没有经过非线性变换的误差敏感项的求法,但是如果添加一个非线性变换的话,可能会更复杂一些,可以参考Jake Bouvrie的笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值