深度学习--手写数字识别

引言

        系列教程第一篇,其中既包括基本原理,又包括复杂细节.MNIST(手写数字分类)和CIFAR-10(飞机,汽车,鸟,猫,鹿,狗,蛙,马,船,卡车十种不同小图片分类)是已制定的机器学习标准,本文会尽量达到这些标准。

深度学习--手写数字识别_第1张图片
图1

        深度学习的快速发展导致了多个方便的框架的出现,这些框架能使我们快速构建模型并建立原型,且方便地进行标准测定.在此,我们使用Keras框架.该框架方便,直观;它具有足够的表现力,能按需对模型细节进行补充

        在本教程结束时,你将能理解并制作一个简单的多层感知器深度学习模型,能在MNIST标准方面达到不错的准确率.在下一个教程我们将探讨处理图片分类(例如:CIFAR-10)。

        尽管术语"深度学习"具有更宽泛的解释,实际上在大多数情况下,它被用于(人工)神经元网络模型.这些受生物学启发的结构,试图模拟大脑神经元处理环境感知和驱动决策的方式.实际上,一个单一的神经元(有时也称一个感知器/感知机)。


深度学习--手写数字识别_第2张图片

一个比较流行的激活函数

注释:上图中,激活函数sigmoid中前者是逻辑斯蒂函数,后者双曲正切函数.ReLU代表修正线性单元


深度学习--手写数字识别_第3张图片

          原始感知器模型(1950s)是完全线性的.例如:他们只使用了identity激活函数.很显然,实际中很多任务都是非线性的,也就导致了其他激活函数的使用.sigmoid函数(由于它的像字符"S"形的绘图),提供了一种编码二值神经元不确定性的方式,将当z接近于零时和当z在不同方向移动时快速饱和联系起来.这儿给出的两个函数很相似,双曲正切函数的输出范围是[-1,1],函数的输出范围是[0,1](因此在表示可能性时特别有用)。

        近年来,在深度学习方面,ReLU函数(它的变种函数)已经无处不在.工程师开始使用它们,作为一个给模型注入非线性误差(如果是负数,就设为零)的简单方式,事实证明比以前流行的sigmoid函数更加成功,并把它们和物理神经元传输电能的方式联系起来.本教程我们将专门讨论ReLU函数。

深度学习--手写数字识别_第4张图片

进入神经网络(深度学习)

        一旦我们能够表示神经元,就能够将神经元的输出和其他神经元的输入连接起来,形成神经网络.通常我们主要关注前馈神经网络,这种网络中神经元以层的方式组织,因此单层中的神经元能处理前一层的输出.这种层次结构最有效地将一层的所有输出和下一层所有的神经元连接起来,如下图:


深度学习--手写数字识别_第5张图片

        通过在一个给定损失函数上,直接应用先前提到的梯度下降算法,可以修正输出神经元的权重,可以修正输出神经元的权重,对于其他神经元,这些损失需要反向传播。

        Cybenko的万能逼近定理:对于任何闭区间内的一个连续函数f,都可以用含有一个隐含层的BP网络来逼近;然而,这个定理的证明并不是建设性的,因此总的来说,没有给学习这种结构提供有效的训练算法.深度学习对这种情况做出回应:不增加宽度,增加深度;按照定义,任何具有一层以上的隐含层的神经网络都是深度的。

        深度的改变,能使我们直接将原始的输入数据加入网络当中.过去,通过精心设计的特征函数从输入提取出特征,单层的神经网络运行其上.这意味着,对于像计算机视觉,语音识别,自然语言处理这些问题,阻碍科学跨领域合作,我们需要明显不同的方法.然而,当一个网络具有多个隐含层的时候,它自身就能够学会最佳的描述原始数据的特征函数,因此可应用于端对端学习,并且可以在多种多样的任务中使用同一个网络,从流程中去除特征函数设计.当我们探索卷积神经网络(CNNs),我将在本教程的第二部分展示图示证据。

对mnist应用深度多层感知器

        本教程的目标:实现一个简单可能的深度神经网络---具有两层隐藏层的多层感知器---并将其用于识别手写数字任务.只需要导入下列库:

你可能感兴趣的:(深度学习--手写数字识别)