深入理解卷积神经网络(CNN)——从原理到实现

本文通过在MNIST数据集上的实验,深入探讨卷积神经网络(CNN)的原理,包括二维卷积、池化、罗杰斯特回归和Softmax回归。同时,详细介绍了CNN的前向传播和反向传播过程,并提供了相关代码实现。实验结果显示,CNN在分类任务上的表现优于MLP,但在CPU上的训练速度较慢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

王琦      QQ:451165431      计算机视觉&深度学习

转载请注明出处 :http://blog.youkuaiyun.com/Rainbow0210/article/details/78562926

本篇通过在MNIST上的实验,引出卷积神经网络相关问题,详细阐释其原理以及常用技巧、调参方法。欢迎讨论相关技术&学术问题,但谢绝拿来主义。

代码是博主自己写的,因为倾向于详细阐述底层原理,所以没有用TensorFlow等主流DL框架。实验结果与TF等框架可能稍有不同,其原因在于权重初始化方式的差异等,但并不影响对于网络的本质的理解。


实验概述

数据集

  • MNIST:0-9共10个数字,其中,60000条训练样本,10000条测试样本,每条样本分辨率为 28×28 。拉伸为 1 维向量,因而为 28×28=784 维。

实验平台

  • Python 2.7

实验内容

通过CNN完成对MNIST数据集的分类。具体有需要实现一下三部分:

  • 卷积层:实现卷积层,包含 Conv2D, Relu, AvgPooled2D,其中,Relu 在作业一中已经实现
  • 可视化:实现 第一个卷积层的可视化(经过 Relu 激活之后)
  • 损失函数:实现 SoftmaxCrossEntropyLoss

实验原理

二维卷积 Conv2D

对于两个二维矩阵 I,K ,其卷积的数学表述为:

S(i,j)=(IK)(i,j)=mnI(m,n)K(im,jn)

其中, 表示卷积运算, 表示点积。卷积运算满足交换律:
S(i,j)=(KI)(i,j)=mnI(im,jn)K(m,n)

由于在CNN中,卷积核往往是通过优化学习得到的,所以一般来讲,卷积和相关性是等价的:
S(i,j)=(KI)(i,j)=mnI(i+m,j+n)K(m,n)

下图为相关性计算的示意图,卷积则只需将Kernel旋转 180 即可:

这里写图片描述

池化 Pooling

将特征分为若干个相交/不相交的区域,再在每个区域上通过计算其最大值 (max-pooling) /均值 (average-pooling),得到其池化特征。下图为最大池化 (max-pooling)的示意图:

这里写图片描述

罗杰斯特回归 Logistic Regression

对于一个二分类问题,设有两类 ω0,ω1 ,标签分别为 0,1 ,相应的网络只有一个输出神经元,则:

  P(t=1x)P(t=0x)=11+exp(θTx)h(x)=1h(x)

其中, x 是样本, t(0,1) 是标签。对于包含 N 个独立同分布样本的数据集,记样本为 x(n) ,对应的标签为 t(n) ,有:

p(t(n)x(n),θ)=h(x(n))t(n)(1h(x(n)))(1t(n))

由于样本满足独立同分布,所以

p(t(1),t(2),...,t(N)x(1),x(2),...,x(N),θ)=n=1Nh(x(n))t(n)(1h(x(n)))(1t(n))

通过最大似然原理,使得上述概率密度最大,也就是使得下式取得最小(误差函数):

E(θ)  ===lnp(t(1),t(2),...,t(N)x(1),x(2),...,x(N),θ)n=1N(t(n)h(x(n))+(1t(n))(1h(x(n))))n=1NE(θ)(n)

其中, E(θ)(n) 为交叉熵误差函数 (Cross-entropy Error Function),定义如下:

E(θ)(n)=t(n)h(x(n))(1t(n))(1h(x(n)))

对于网络的训练阶段,是寻找合适的 θ 最小化上述损失函数;在网络的预测阶段,若 P(t=1x)>P(t=0x) ,则预测为 ω1 ,否则为 ω0

Softmax 回归 Softmax Regression

对于 K 分类问题( K>2 ),标签为 K 位的 01 形式,即属于第 i 类,则第 i 位为 1 ,其他位为 0 。和罗杰斯特回归类似,定义:

hk(x)P(tk=1x,θ)=exp(θTkx)Kj=1exp(θTjx)

优化目标为:寻找一个合适的 θ ,使得:

  • xωk 时, P(tk=1x,θ) 尽可能大
  • xωk 时, P(tk=1x,θ) 尽可能小

Softmax 函数:

ϕ(zi)=ezije
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值