用神经网络识别手写数字

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

大多数人能够轻易地是识别出是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. 3步学会用gulp

    1.安装gulp 安装gulp到全局:npm install -g gulp 安装gulp到某个项目:npm install --save gulp 注意:请先安装nodejs(自带npm) 2.创建 ...

  2. python修改txt文件内容

    ①以r模式打开文件并用readlines方法读入列表l中 ②修改相关行,直接用l[n]形式即可 ③关闭文件 ④以w方式打开文件,用writelines方法写入文件(覆盖文件内容) ⑤关闭文件 需要注意 ...

  3. 使用PyQt4写界面后台程序方法总结

    使用PyQt4编写界面后台程序的方法总结 一.怎么建立多线程 界面程序如果有稍微耗时一点的任务如果不使用多线程就会界面卡死,所以大多数情况会使用到多线程.PyQt4自己有多线程的机制,可以派生多线程类 ...

  4. python爬虫抓取豆瓣电影

    抓取电影名称以及评分,并排序(代码丑炸) import urllib import re from bs4 import BeautifulSoup def get(p): t=0 k=1 n=1 b ...

  5. HTML5面试题-备

    万不可投机取巧.只求当时过关,非长久之计也!(感谢大神分享) 面试有几点需要注意: 面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑.深度↑.方向↑. 题目类型: 技术视野.项目细节.理论知 ...

  6. ulimit -t 引起的kill血案

    http://my.oschina.net/leejun2005/blog/80975 http://www.cnblogs.com/hazir/p/systemtap_introduction.ht ...

  7. HDU 4116 Fruit Ninja

    http://acm.hdu.edu.cn/showproblem.php?pid=4116 题意:给N个圆,求一条直线最多能经过几个圆?(相切也算) 思路:枚举中心圆,将其他圆的切线按照极角排序,并 ...

  8. Codeforces 219D Choosing Capital for Treeland

    http://codeforces.com/problemset/problem/219/D 题目大意: 给出一棵树,但是它的边是有向边,选择一个城市,问最少调整多少条边的方向能使一个选中城市可以到达 ...

  9. 数据结构&&算法基础知识

    写本篇主要是为了将基础知识梳理一遍,天天加一些基本东西,以后复习时可以返回来看看. 数据结构&&基础算法: 基本算法: 二分查找 二叉树: 二叉树的各种遍历 位操作: 排序: 排序算法 ...

  10. 玩Linux桌面发现一个最佳的组合配置

    其实前段时间玩Arch,其实不难,主要是太浪费时间配置折腾了,学到有用的东西太少,不能让我快速进入编程工作的状态,(真不知道有些人用Gentoo和Arch都能用出优越感了,就因为难安装和配置??)但是 ...