《神经网络和深度学习》系列文章一:使用神经网络识别手写数字

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

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

声明:我们将不定期连载该书的中文翻译,如需转载请联系[email protected],未经授权不得转载。

“本文转载自【哈工大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”公众号
    • 编辑部:郭江,李家琦,徐俊,李忠阳,俞霖霖
    • 本期编辑:徐俊
时间: 2024-12-28 16:10:27

《神经网络和深度学习》系列文章一:使用神经网络识别手写数字的相关文章

BP神经网络识别手写数字项目解析及代码

这两天在学习人工神经网络,用传统神经网络结构做了一个识别手写数字的小项目作为练手.点滴收获与思考,想跟大家分享一下,欢迎指教,共同进步. 平常说的BP神经网络指传统的人工神经网络,相比于卷积神经网络(CNN)来说要简单些. 人工神经网络具有复杂模式和进行联想.推理记忆的功能, 它是解决某些传统方法所无法解决的问题的有力工具.目前, 它日益受到重视, 同时其他学科的发展, 为其提供了更大的机会.1986 年, Romelhart 和Mcclelland提出了误差反向传播算法(Error Back

一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)

笔记整理者:王小草 笔记整理时间2017年2月24日 原文地址 http://blog.csdn.net/sinat_33761963/article/details/56837466?fps=1&locationNum=5 Tensorflow官方英文文档地址:https://www.tensorflow.org/get_started/mnist/beginners 本文整理时官方文档最近更新时间:2017年2月15日 1.案例背景 本文是跟着Tensorflow官方文档的第二篇教程–识别手

用BP人工神经网络识别手写数字

http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULezDb50ZcKor41PEikwv5TfTqwrsQ4-9wmH06L7bYD04u 用BP人工神经网络识别手写数字 yzw20091201上传于2013-01-31|暂无评价|356人阅读|13次下载|暂无简介|举报文档 在手机打开 赖勇浩( http://laiyonghao.com ) 这是我读工

学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字

TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology database),简单机器视觉数据集,28X28像素手写数字,只有灰度值信息,空白部分为0,笔迹根据颜色深浅取[0, 1], 784维,丢弃二维空间信息,目标分0~9共10类.数据加载,data.read_data_sets, 55000个样本,测试集10000样本,验证集5000样本.样本标注信

12 使用卷积神经网络识别手写数字

看代码: 1 import tensorflow as tf 2 from tensorflow.examples.tutorials.mnist import input_data 3 4 # 下载训练和测试数据 5 mnist = input_data.read_data_sets('MNIST_data/', one_hot = True) 6 7 # 创建session 8 sess = tf.Session() 9 10 # 占位符 11 x = tf.placeholder(tf.f

卷积神经网络识别手写数字实例

卷积神经网络识别手写数字实例: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 定义一个初始化权重的函数 def weight_variables(shape): w = tf.Variable(tf.random_normal(shape=shape,mean=0.0,stddev=1.0)) return w # 定义一个初始化偏置的函数 def bias_variabl

使用神经网络来识别手写数字【译(三)- 用Python代码实现

实现我们分类数字的网络 好,让我们使用随机梯度下降和 MNIST训练数据来写一个程序来学习怎样失败手写数字. 我们也难怪Python (2.7) 来实现.只有 74 行代码!我们需要的第一个东西是 MNIST数据.如果有 github 账号,你可以将这些代码库克隆下来, git clone https://github.com/mnielsen/neural-networks-and-deep-learning.git 或者你可以到这里 下载. Incidentally, 当我先前说到 MNIS

使用神经网络来识别手写数字【转译】(二)

A simple network to classify handwritten digits Having defined neural networks, let's return to handwriting recognition. We can split the problem of recognizing handwritten digits into two sub-problems. First, we'd like a way of breaking an image con

图片训练:使用卷积神经网络(CNN)识别手写数字

这篇文章中,我们将使用CNN构建一个Tensorflow.js模型来分辨手写的数字.首先,我们通过使之“查看”数以千计的数字图片以及他们对应的标识来训练分辨器.然后我们再通过此模型从未“见到”过的测试数据评估这个分辨器的精确度. 一.运行代码 这篇文章的全部代码可以在仓库TensorFlow.js examples中的tfjs-examples/mnist 下找到,你可以通过下面的方式clone下来然后运行这个demo: $ git clone https://github.com/tensor