Lesson 3.1: 基于深度学习的数字识别 (LeNet) 理论部分

如果有做过机器学习的人,近几年来大家一定听说过深度学习Deep Learning。。。

新闻也有很多, 譬如 DeepMind 下围棋, 谷歌基于神经网络的机器翻译等等。。

其实个人还是有点反感。。。有点好像娱乐圈,大家都在蹭热度,不约而同加一个Deep在自己的系统前面。。

不过在这里我还是介绍这种技术的应用,而且确实比传统的SVM识别器要好,而且不需要定义特征,譬如有些算法需要提取SIFT特征点等。

这篇文章开始实现 卷积神经网络 LeNet,Convolutional Neural Network (CNN) LeNet。

我们由这篇文章开始研究LeNet,如果没有找错的话,下面是LeNet第一篇文章:

Y. Lecun, L. Bottou, Y. Bengio, P. Haffner, Gradient-Based Learning Applied to Document Recognition, 1998

screenshot-from-2016-10-02-01-11-36

由上图可以看出,主要重复 卷积层 和 subsampling层(笔者然后不知道为什么subsampling现在一般现在叫做pooling。反正是两个相同的概念)。

卷积层

卷积层的意思就是有一个小的filter(或者叫kernel, 或者feature detector,都是相同的概念),对图片进行卷积, 接着送进去subsampling层。

convolution_schematic图片来源

不同的filter可以产生不同的特征图片,举个例子:

下图的filter是一个模糊操作:

convolution-blur

generic-taj-convmatrix-blur

下图的filter是一个边缘检测:

convolution-edge-detect1

generic-taj-convmatrix-edge-detect

每个卷积层可以有不同的filter,因此会产生不同的特征。。这个根据不同的应用而定,譬如可以第一个卷积层采用提取不同的边缘(edge)信息,接着第二个卷积曾采用人面的信息等等。

卷积层也可以定义多个filter,可以提取多个特征层。

抽样层(subsampling或者pooling)

尽管发明的人叫subsampling,但是我这里还是叫pooling。pooling一般放在卷积层后面,下面是max pooling,就是取最大值

pool

maxpool

图片来源

为什么需要max pooling?理由有两个
1:规范化输出结果的维度
2:为什么取max呢?因为需要最有意义的输出。

FC层

Full Connection 层就是把之前的层全部1:1对应连接在一起。

Gaussian Connection

这个只是一个简单的求和输出

screenshot-from-2016-10-02-21-57-37

训练

至于如何训练,小编也忘记了,很久以前曾经看懂过~~就是利用反向反馈传输来训练所有系数(weights)。。但是这里不介绍了,因为太难理解了。。

如何训练的文章

最后

大家可以见到输出的结果抗噪性还是非常好的,可以用于做验证码识别。

screenshot-from-2016-10-02-22-31-32

本文结束,下次再介绍如何用caffe构造LeNet

微信公众号 changdata

wechat: changdata
wechat: changdata

发表评论

电子邮件地址不会被公开。 必填项已用*标注