用神经网络识别手写数字

人类的视觉系统是是大自然的奇迹。考虑下面手写数字序列:

大多数人能够轻易地是识别出是504192。在我们大脑的每个半球都有一个基础的皮质,这就是我们熟知的V1区,它包含了14亿个神经元,并有着数十亿级的神经元连接。然而人类地视觉不仅包含V1区,同时还有一系列地视觉皮质——V2,V3,V4,V5——它们进行着复杂地图像处理。我们头脑携带着一个超级计算机,经过数百万年的进化,能够很好地适应视觉的世界。识别手写数字并不容易。但是,我们人类惊人地擅长将我们所见之物转化成脑中有意义地东西。当然这些工作都是在无意识地情况下完成的。因此,通常我们不会感受到我们地视觉系统在处理着怎样的难题。

当你尝试写程序去解决上述手写数字识别时,你就会发现这个问题有多难。我们大脑轻易在瞬间完成地事情变得相当困难了。一个简单地例子能描述我们识别形状为何变得不容易用算法表达——“一个9上面时一个环形,下面是一个钩”。当你想表达更加精细时,你会很快陷入特例的沼泽。这个问题看起来相当令人绝望。

神经网络用另一种方式来解决这个问题。思想就是利用大量的手写数字,即我们熟知的训练数据,然后能通过学习这些训练数据来发展一个系统。

换句话说,神经网络能够利用这些例子自动地学习识别手写数字地内在规则。另外,如果增大训练样本,那么神经网络能够学到更多手写数字的信息,因此能够提高它的准确率。尽管我们上面地图只有100个训练样本,但是在实际中可能会用到数以亿计的训练样本。

在这章我将写一个程序来实现一个神经网络能够学习识别这些手写数字。这段代码只有仅仅74行,没有用到任何神经网络的库。但是这段代码在没有人工的干预下达到超过96%的准确率。另外,在稍后地章节我们会用其他的一些想法来把我们的准确率提高到99%以上。实际上,最好的商用神经网络能够很好地用于银行识别支票,邮局识别地址等等。

我们关注手写数字识别是因为它是个很好的一个原型能够帮助我们学习神经网络地通用原理。作为一个模型,它有两点好处:首先它是个有挑战性的项目-识别手写数字是个不小地壮举-但是它也不是需要一个及其复杂地模型或者强大的计算能力。另外,它也能帮助我们学习更高级的技术,例如深度学习,打下良好的基础。因此,在这本书我一直会贯穿手写数字识别问题。在这本书的稍后章节,我将会讨论如何将这些思想应用到计算机视觉,语音识别,自然语言处理等领域。

当然,如果这章地内容仅仅关于如何写一段程序识别手写数字,那么篇幅会大大缩短!但我们将会学习神经网络地一些关键思想,包括两个重要的人工神经元(分类器和sigmoid神经元),神经网络地标准学习算法即我们熟知的梯度下降法(stochastic gradient descent)。我将会关注为何它们能起到这样的作用,用来建立你对神经网络地一些直觉。我不仅会给出基本数学原理,还会花费更长的篇幅来讨论,但我觉得如果你能收获更深层次的理解,这也是值得的。我们将会在本章的最后理解什么是深度学习以及为什么它们如此重要。

(译者注:欢迎大家访问我的小站:http://zhaohuaipeng.com/ 文章会同步更新)

【译】神经网络与深度学习 Ch1-Section0的更多相关文章

  1. (转)神经网络和深度学习简史(第一部分):从感知机到BP算法

    深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...

  2. [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...

  3. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

  4. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】

    [吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [  ]AI为我们的家庭和办公室的个人设备供电 ...

  5. 对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF

    随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中 ...

  6. 如何理解归一化(Normalization)对于神经网络(深度学习)的帮助?

    如何理解归一化(Normalization)对于神经网络(深度学习)的帮助? 作者:知乎用户链接:https://www.zhihu.com/question/326034346/answer/730 ...

  7. 【神经网络与深度学习】卷积神经网络(CNN)

    [神经网络与深度学习]卷积神经网络(CNN) 标签:[神经网络与深度学习] 实际上前面已经发布过一次,但是这次重新复习了一下,决定再发博一次. 说明:以后的总结,还应该以我的认识进行总结,这样比较符合 ...

  8. 【神经网络与深度学习】【CUDA开发】caffe-windows win32下的编译尝试

    [神经网络与深度学习][CUDA开发]caffe-windows win32下的编译尝试 标签:[神经网络与深度学习] [CUDA开发] 主要是在开发Qt的应用程序时,需要的是有一个使用的库文件也只是 ...

  9. 【神经网络与深度学习】【Matlab开发】caffe-windows使能Matlab2015b接口

    [神经网络与深度学习][Matlab开发]caffe-windows使能Matlab2015b接口 标签:[神经网络与深度学习] [Matlab开发] 主要是想全部来一次,所以使能了Matlab的接口 ...

  10. 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程

    [神经网络与深度学习][python开发]caffe-windows使能python接口使用draw_net.py绘制网络结构图过程 标签:[神经网络与深度学习] [python开发] 主要是想用py ...

随机推荐

  1. php 初学笔记

    1.变量定义和使用 php中定义变量名为:$aa 在类中一般定义一个新变量需要添加var字,如var $aaa. 但是过程或函数中是不需要添加var 关键字,如$aaa=$_POST['aaaa'], ...

  2. 转载:css3 box-shadow投影发光效果

    转载网址:http://www.wufangbo.com/css3-box-shadow/ CSS3的box-shadow属性 可以让我们轻松实现图层阴影效果.我们来实战详解一下这个属性. 1. bo ...

  3. Redis VS Memcached 转载

    引子: 在大数据时代,总希望存在一个Key-value存储机制,像HashMap一样在内存中处理大量(千万数量级)的key-value对,以便提高数据查找.修改速度. 所以,我们会想到,Memcach ...

  4. 项目中redis类似MVC的使用

  5. boost dijkstra获得两点间的最短路

    需求是只需要得到两点间的最短路,不需要求得单源对于全图的最短路,使用boost中的dijsktra_shortest_path,当得到目标点的最短路时直接throw exception. #inclu ...

  6. Ant构建与部署Java项目---入门

    原文地址:http://tech.it168.com/j/2007-11-09/200711091344781.shtml Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建 ...

  7. Codeforces 543D Road Improvement

    http://codeforces.com/contest/543/problem/D 题意: 给定n个点的树 问: 一开始全是黑边,对于以i为根时,把树边白染色,使得任意点走到根的路径上不超过一条黑 ...

  8. FJ省队集训DAY4 T3

    #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #inclu ...

  9. android 之 百度地图

    简介 百度地图Android定位SDK为基于移动客户端开发LBS应用提供基础定位能力. 功能介绍 功能介绍: 地图展示:包括2D图.卫星图.3D图地图展示. 地图操作:提供控制平移.缩放.底图旋转.变 ...

  10. C++链接器工具错误:LNK2001, LNK2019(转载)

    这是归属于链接器工具错误 这一类. 无法解析的外部符号“symbol” 代码引用了链接器无法在库和对象文件中找到的内容(如函数.变量或标签). 可能的原因 代码请求的内容不存在(例如,符号拼写错误或使 ...