深度学习入门第四讲

1.4 一个简单的分类手写数字的网络

定义神经网络后,让我们回到手写识别上来。我们可以把识别手写数字的问题分成两个子问 题。首先,我们希望有个方式把包含许多数字的图像分成一系列单独的图像,每个包含单个数 字。例如,我们想要把图像

分成六个单独的图像,

我们人类可以很容易解决这个分割的问题,但是对于计算机程序来说却是个挑战。一旦图像 被分割,那么程序需要把每个单独的数字分类。例如,我们想要我们的程序能识别上面的第一 个数字

是 5。

我们将专注于编程解决第二个问题,分类单独的数字。这样是因为,一旦你有分类单独数字的有效方法,分割问题是不难解决的。有很多途径可以解决分割的问题。一种方法是尝试不同 的分割方式,用数字分类器对每一个切分片段打分。如果数字分类器对每一个片段的置信度都 比较高,那么这个分割方式就能得到较高的分数;如果数字分类器在一或多个片段中出现问题, 那么这种分割方式就会得到较低的分数。这种方法的思想是,如果分类器有问题,那么很可能是 由于图像分割出错导致的。这种思想以及它的变化形式能够比较好地解决分割问题。因此,与 其关心分割问题,我们不如把精力集中在设计一个神经网络来解决更有趣、更困难的问题,即 手写数字的识别。我们将使用一个三层神经网络来识别单个数字:

网络的输入层包含给输入像素的值进行编码的神经元。就像下一节会讨论的,我们给网络的 训练数据会有很多扫描得到的 28 × 28 的手写数字的图像组成,所有输入层包含有 784 = 28 × 28个神经元。为了简化,上图中我已经忽略了 784 中大部分的输入神经元。输入像素是灰度级的, 值为 0.0 表示白色,值为 1.0 表示黑色,中间数值表示逐渐暗淡的灰色。

网络的第二层是一个隐藏层。我们用 n 来表示神经元的数量,我们将给 n 实验不同的数值。 示例中用一个小的隐藏层来说明,仅仅包含 n = 15 个神经元。

网络的输出层包含有 10 个神经元。如果第一个神经元激活,即输出 ≈ 1,那么表明网络认 为数字是一个 0。如果第二个神经元激活,就表明网络认为数字是一个 1。依此类推。更确切地 说,我们把输出神经元的输出赋予编号 0 到 9,并计算出那个神经元有最高的激活值。比如,如 果编号为 6 的神经元激活,那么我们的网络会猜到输入的数字是 6。其它神经元相同。

你可能会好奇为什么我们用 10 个输出神经元。毕竟我们的任务是能让神经网络告诉我们哪 个数字(0, 1, 2, . . . , 9 )能和输入图片匹配。一个看起来更自然的方式就是使用 4 个输出神经元, 把每一个当做一个二进制值,结果取决于它的输出更靠近 0 还是 1 。四个神经元足够编码这个 问题了,因为 24 = 16 大于 10 种可能的输入。为什么我们反而要用 10 个神经元呢?这样做难 道效率不低吗?最终的判断是基于经验主义的:我们可以实验两种不同的网络设计,结果证明 对于这个特定的问题而言,10 个输出神经元的神经网络比 4 个的识别效果更好。但是令我们好 奇的是为什么使用 10 个输出神经元的神经网络更有效呢。有没有什么启发性的方法能提前告诉 我们用 10 个输出编码比使用 4 个输出编码更有好呢?

为了理解为什么我们这么做,我们需要从根本原理上理解神经网络究竟在做些什么。首先考 虑有 10 个神经元的情况。我们首先考虑第一个输出神经元,它告诉我们一个数字是不是 0 能那么做是因为可以权衡从隐藏层来的信息。隐藏层的神经元在做什么呢?假设隐藏层的第一个神经元只是用于检测如下的图像是否存在:

为了达到这个目的,它通过对此图像对应部分的像素赋予较大权重,对其它部分赋予较小 的权重。同理,我们可以假设隐藏层的第二,第三,第四个神经元是为检测下列图片是否存在:

就像你能猜到的,这四幅图像组合在一起构成了前面显示的一行数字图像中的 0:

如果所有隐藏层的这四个神经元被激活那么我们就可以推断出这个数字是 0。当然,这不是 我们推断出 0 的唯一方式 —— 我们能通过很多其他合理的方式得到 0 (举个例子来说,通过上 述图像的转换,或者稍微变形)。但至少在这个例子中我们可以推断出输入的数字是 0。

假设神经网络以上述方式运行,我们可以给出一个貌似合理的理由去解释为什么用 10 个输 出而不是 4 个。如果我们有 4 个输出,那么第一个输出神经元将会尽力去判断数字的最高有效 位是什么。把数字的最高有效位和数字的形状联系起来并不是一个简单的问题。很难想象出有 什么恰当的历史原因,一个数字的形状要素会和一个数字的最高有效位有什么紧密联系。

上面我们说的只是一个启发性的方法。没有什么理由表明这个三层的神经网络必须按照我所 描述的方式运行,即隐藏层是用来探测数字的组成形状。可能一个聪明的学习算法将会找到一 些合适的权重能让我们仅仅用 4 个输出神经元就行。但是这个启发性的方法通常很有效,它会 节省你大量时间去设计一个好的神经网络结构。

练习

1. 通过在上述的三层神经网络加一个额外的一层就可以实现按位表示数字。额外的一层把原 来的输出层转化为一个二进制表示,如下图所示。为新的输出层寻找一些合适的权重和偏 置。假定原先的 3 层神经网络在第三层得到正确输出(即原来的输出层)的激活值至少是0.99,得到错误的输出的激活值至多是 0.01。


原文发布于微信公众号 - UAI人工智能(UniversityAI)

原文发表时间:2017-10-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员Gank

神经网络和深度学习(吴恩达-Andrew-Ng):一二周学习笔记

机器学习: 机器学习研究的是计算机怎样模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构使之不断改善自身。简单的说,就是计算机从数据中学习规律和...

1921
来自专栏算法channel

全面总结机器学习项目和面试中几乎绕不开的决策树

决策树是一种常见的机器学习算法,它的思想十分朴素,类似于我们平时利用选择做决策的过程。

890
来自专栏云时之间

Hoeffding不等式的认识以及泛化误差上界的证明

参考书目和论文:《统计学习方法》 A Tutorial on Support Vector Machine for Pattern Recognition 在...

45210
来自专栏AI科技大本营的专栏

入门 | 零基础入门深度学习系列——递归神经网络

为了帮助编程爱好者,从零开始入门,AI100特别精选了韩炳涛所著《零基础入门深度学习》系列文章,以下Enjoy! 作者 | 韩炳涛 无论即将到来的是大数据时代还...

39210
来自专栏人工智能LeadAI

零基础入门深度学习 | 第四章:卷积神经网络

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习这个超热的技术,会不会感...

4467
来自专栏数据派THU

推导和实现:全面解析高斯过程中的函数最优化(附代码&公式)

2484
来自专栏hadoop学习笔记

非局部神经网络,打造未来神经网络基本组件

将非局部计算作为获取长时记忆的通用模块,提高神经网络性能在深度神经网络中,获取长时记忆(long-range dependency)至关重要。对于序列数据(例如...

1030
来自专栏人工智能LeadAI

零基础入门深度学习 |最终篇:递归神经网络

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learni...

4905
来自专栏互联网大杂烩

K近邻(KNN)

kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样...

563
来自专栏奇点大数据

卷积神经网络对图片分类-上

我们来看看在图像处理领域如何使用卷积神经网络来对图片进行分类。 1 让计算机做图片分类: 图片分类就是输入一张图片,输出该图片对应的类别(狗,猫,船,鸟),或者...

3268

扫码关注云+社区