zoukankan      html  css  js  c++  java
  • 《神经网络和深度学习》系列文章一:使用神经网络识别手写数字

    出处: Michael Nielsen的《Neural Network and Deep Leraning》

    本节译者:哈工大SCIR硕士生 徐梓翔 (https://github.com/endyul)

    声明:我们将不定期连载该书的中文翻译,如需转载请联系wechat_editors@ir.hit.edu.cn,未经授权不得转载。

    “本文转载自【哈工大SCIR】微信公众号,转载已征得同意。”


    1. 使用神经网络识别手写数字

      • 感知机

      • sigmoid神经元

      • 神经网络的结构

      • 用简单的网络结构解决手写数字识别

      • 通过梯度下降法学习参数

      • 实现我们的网络来分类数字

      • 关于深度学习

    2. 反向传播算法是如何工作的

    3. 改进神经网络的学习方法

    4. 神经网络能够计算任意函数的视觉证明

    5. 为什么深度神经网络的训练是困难的

    6. 深度学习

    人类的视觉系统是世上的一个奇迹。考虑以下这串手写的数字:

    大部分人都能轻易地识别出图上的数字是504192。这个看似简单的过程的背后,实际上很复杂。在我们大脑的每个脑半球中,有一个叫做初级视皮层(primary visual cortex)的部分,也被称作V1。它拥有1亿4千万个神经元,包含了上百亿的神经元连接。然而,人类的视觉系统不仅仅依赖于V1,还依赖于整套视皮层——V2、V3、V4和V5的协同工作,来实现复杂的图像处理任务。我们的大脑就像一台超级计算机,经过了上亿年的进化,才得以能够出色地理解视觉的世界。识别手写数字不是一个简单的任务,但是,人类极其擅长理解眼睛所看到的东西,并且几乎所有这些工作都是在无意识的情况下完成的,所以我们通常不会意识到我们的视觉系统解决了的任务有多么困难。

    当你企图实现一个用来识别类似上图数字的计算机程序时,你就会逐渐意识到视觉模式识别的难度。一个本来对于人类看似很简单的事情,突然就变得极其困难。「数字9的上部有一个圆圈,右下部有一笔竖线」这种人类识别形状的直觉,在算法上却很难表示。当你试图定义明确的识别规则时,你会很快地被一大堆特例所困扰。这似乎毫无解决的希望。

    神经网络(Neural Networks)使用一种不同的思路解决这个问题。它的思想是利用大量的手写数字,亦被称为训练样例,

    从这些训练样例学习并建立一个系统。换一种说法,神经网络使用这些样例,从中能够自动地学习到识别手写数字的规则。而且,随着训练样例的增加,神经网络可以从中学习到更多信息,从而提高它的准确度。所以,尽管我上面只给出了100个训练数字,也许我们可以使用上千、上万、上亿的训练样例来构建一个更好的手写识别器。

    在本章中,我们会实现一个神经网络的计算机程序,来学习并识别手写数字。虽然这个程序仅仅只有74行,并且没有使用任何特别的神经网络库,但是它可以在没有任何人工干预的情况下,达到超过百分之96的手写数字识别准确率。在之后的章节中,我们会进一步改善我们的方法,使之达到超过百分之99的准确率。实际上,目前最好的商用神经网络已经足够好到能被银行用来处理支票,以及被邮局用来识别地址。

    我们会专注于手写数字的识别这个问题,因为它基本上是学习神经网络最好的示范问题,之所以这么说是因为它戳中了几个痛点:它具有挑战性,识别手写数字不是一个简单的工程;同时它的难度也不是特别大,并不需要极其复杂的方法,或者大量的计算资源。而且它是实现更高级技术的基础,例如深度学习(deep learning)。所以,手写数字识别问题会贯穿本书。在本书的后部分,我们会讨论如何将这些想法应用到计算视觉的其它问题上,甚至语音处理、自然语言处理以及其它领域。

    当然,本章的主旨如果只是实现一个程序来识别手写数字,那么本章的内容就会少很多!实际上,在这个过程中,我们会产生许多关于神经网络的关键思想,包括两种重要的人工神经元(感知机和sigmoid神经元),以及神经网络的标准学习算法,称为随机梯度下降(stochastic gradient descent)。在本书中,我关注于解释为什么问题能够被这样解决,以及为你建立关于神经网络的直觉。尽管相比于仅仅展示基础理论过程,这需要更长的篇幅来讨论,但是这对于你的深入理解是很有价值的。从中的收货,就是在章节的最后,我们就能够理解深度学习是什么,以及为什么它能够起作用。


      • “哈工大SCIR”公众号

      • 编辑部:郭江,李家琦,徐俊,李忠阳,俞霖霖

      • 本期编辑:徐俊

  • 相关阅读:
    Android Studio开发JNIproject
    POJ 3006 Dirichlet's Theorem on Arithmetic Progressions 快筛质数
    ZooKeeper是什么?
    android学习记录(十三)Task 和 Activity 回退栈操作。
    Java程序员的日常—— IOUtils总结
    sql基础知识:分页+排序
    Elasticsearch推荐插件篇(head,sense,marvel)
    sql基础知识:日期的常用用法
    [大数据之Spark]——Actions算子操作入门实例
    [大数据之Spark]——Transformations转换入门经典实例
  • 原文地址:https://www.cnblogs.com/sdlypyzq/p/4971307.html
Copyright © 2011-2022 走看看