王琦 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 ,其卷积的数学表述为:
其中, ∗ 表示卷积运算,
由于在CNN中,卷积核往往是通过优化学习得到的,所以一般来讲,卷积和相关性是等价的:
下图为相关性计算的示意图,卷积则只需将Kernel旋转 180∘ 即可:
池化 Pooling
将特征分为若干个相交/不相交的区域,再在每个区域上通过计算其最大值 (max-pooling) /均值 (average-pooling),得到其池化特征。下图为最大池化 (max-pooling)的示意图:
罗杰斯特回归 Logistic Regression
对于一个二分类问题,设有两类 ω0,ω1 ,标签分别为 0,1 ,相应的网络只有一个输出神经元,则:
其中, x 是样本,
由于样本满足独立同分布,所以
通过最大似然原理,使得上述概率密度最大,也就是使得下式取得最小(误差函数):
其中, E(θ)(n) 为交叉熵误差函数 (Cross-entropy Error Function),定义如下:
对于网络的训练阶段,是寻找合适的 θ 最小化上述损失函数;在网络的预测阶段,若 P(t=1∣x)>P(t=0∣x) ,则预测为 ω1 ,否则为 ω0 。
Softmax 回归 Softmax Regression
对于 K 分类问题(
优化目标为:寻找一个合适的 θ ,使得:
- 当 x∈ωk 时, P(tk=1∣x,θ) 尽可能大
- 当 x∉ωk 时, P(tk=1∣x,θ) 尽可能小
Softmax 函数: