精品视频课程第三课 | PaddlePaddle深度学习实战之识别数字
本次课程从 NMIST 手写图片识别的例子开始,从而引出了三个神经网络模型的分类器。从数学的角度进行了讲解后,本次课程对 PaddlePaddle 的实现代码也进行了讲解。最后,课程中还对代码效果进行演示,对训练的结果进行了展示。
背景介绍
数字识别究竟有什么用?
IC 、 IP 、 IQ 卡,都能“扫扫扫”了
在深度学习领域,我们从一个简单的手写数据识别开始。网上有一个开源手写数字数据库,叫做:
MNIST
MNIST 形象的比喻就是,你写了一堆1/2/3/4/5/6/7,然后存到了数据库,就形成了 MNIST (据说 MNIST 最早的版本就是美国的几个中学生一起写的)。那么有人或许要问了:我手写的数字(可能还很丑,可能还很个性),机器如何识别呢?
机器得练,而且得多练!
所以让机器练,需要两个条件:
1.需要一个函数;
2.需要“多多益善”的数据。
第二个条件还好, MNIST 数据库的数据很多,有60000份训练数据,这些“喂”给机器,应该就能得到不错的识别能力,然后再利用剩余的10000份数据进行验证;
但是第一个条件,函数怎么构建呢?程序怎么实现呢?
别急,我们往下看!
模型中的四块“积木”
介绍模型之前,有必要对在模型中起到重要作用的四块“积木”进行解释说明。
积木一:全连接( fully connected )
简单来说,全连接就是所有的子神经元与上一级所有神经元进行连接,即任意父子神经元之间,都会进行连接。
全连接对节点较多的输入负荷较大,造成参数成倍数的增长;同时,对于图像数字的识别,全连接没有考虑到像素位置信息的因素,造成所有的输入像素同等权重,这与现实情况其实是不相符的。
积木二:激活函数( activation function )
其实,每个人的人生都不是一帆风顺的;
那么,每个模型也不可能是单纯线性的;
激活函数,就是为了更自由的构建模型而生,有了它就可以不用线性发展,可以使得模型逼近任意的非线性函数,更加贴近现实世界的真实情况。
所以,我们原来的: y=Wx ,就变成了: y=f(Wx) 。
第一类激活函数: softmax
其实这乍一看有些云山雾罩的公式,只需稍稍具象化一点,就和“1+1”一样简单。
上边这三个式子,就是 softmax 公式的简化版!
那么 softmax 激活函数的三大特点就出来啦:
softmax(xi) 的区间范围是【0,1】;
softmax(xi) 所有的输入相加等于1;
softmax(xi) 对于较大值输入,则函数值较大,即概率较大。
其他类激活函数:
Sigmoid
Tanh
ReLU
因为基于 softmax 函数的回归模型,只采用了最简单的两层神经网络,所以拟合能力有限,这时候需要在中间加入若干隐藏层,而上边提到的三个激活函数,就会在这样的隐层神经元中发挥它们至关重要的作用了。
可以看到, Sigmoid 函数区间在[0,1], Tanh 把 Sigmoid 扩大了2倍,又下移了一位,就变成了[-1,1];
而最为简单的当属 ReLU,从来不会小于0,导数要么是0,要么是1。
积木都搭完了,给大家留个自学作业:把多层感知器模型搞懂,并用程序运行。
积木三:卷积( convolution )
我们在学习数学的过程中,一般情况下是通过方程,求结果;但在深度学习的领域,我们是知道结果,求方程,从而应用在更广阔的领域。
那举个例子:你爸打你一巴掌,你脸鼓一个包;你爸不断地打你巴掌,你不断地鼓包。那么在这个过程当中,巴掌就是输入,随着时间的推移,越早的巴掌贡献越小(因为鼓的那个包已经快消掉了),某个时间点上包的大小就是输出……
这个时候可以看到,如果打巴掌频率越来越高,那么你鼓包的大小,就应该是巴掌函数乘以鼓包衰减函数,然后从开始到这个时间点的和。由于频率无限高,那么就是积分了。
这,就是卷积!
积木四:池化( pooling )
池化,一般是在卷积操作后边,为什么要进行池化操作呢?
通过上图可以看到,在卷积核作用下的卷积操作后,我们依然得到较多的结果,考虑到图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计。
模型
softmax 回归模型
多层感知器模型
卷积神经网络模型
以上三种模型就是本次课程的重中之重,在了解完上方的四块重要的“积木”后,相信大家会在课程观看方面不会存在太大问题了。
点击文末“阅读原文”可以观看完整课程视频哟~
本文转自:百度开发者中心。