神经网络与深度学习(1):神经元和神经网络

本文总结自《Neural Networks and Deep Learning》第1章的部分内容。 

目录 

  1. 感知器

  2. S型神经元

  3. 神经网络的架构

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

  5. 迈向深度学习

 

感知器(Perceptrons)

1. 基本原理

感知器是一种人工神经元。

一个感知器接受几个二进制输入:x1,x2,...,并产一个二进制输出:

数学模型如下:

可以将感知器看作依据权重来作出决定的设备。

 

2. 感知器和与非门

 
可以通过上述简单的权重和偏置实现一个与非门。
输入00, (−2)∗0+(−2)∗0+3=3,   输出1
输入11, (−2)∗1+(−2)∗1+3=−1, 输出0
 
由于与非门是通用运算,所以我们完全能用感知器网络来计算任何逻辑功能。
 

3. 感知器特点深度

输入:取值为0或者1。
输出:取值为0或者1。

 

S型神经元、Sigmoid 神经元(Sigmoid neurons)

1.引入S型神经元的原因

S型神经元和感知器类似,但S型神经元中有一个很好的特性:对权重和偏置的微小改动只引起输出的微小变化。这个特性对于神经网络的自我学习过程很重要。

因为对于一个由多个感知器构成的网络而言,存在如下问题:

这个网络中单个感知器上一个权重或偏置的微小改动有时会引起那个感知器的输出完全翻转,如0变到1。那样的翻转可能接下来引起其余网络络的行为以极其复杂的方式完全改变。

而S型神经元可以克服上述问题。

 

2. 与感知器的异同

输入:可以取0到1之间的任意值,而不同于感知器中只能取0或者1。
输出:输出不是0或1,而是0到1之间的任意值,该输出由σ(wx+b)决定,σ被称为S型函数。

 

神经网络的架构(The architecture of neural networks)

1. 术语

输入层、输出层、隐藏层

由于历史的原因,尽管是由S 型神经元而不是感知器构成,这种多层网络有时被称为多层感知器或者MLP。

2. 网络的设计

输入层和输出层根据具体的问题比较好设计,隐藏层的设计则需要一定的经验、法则。

例如,假设我们尝试确定一张手写数字的图像上是否写的是“9”。很自然地,我们可以将图像像素的强度进行编码作为输入神经元来设计网络。
如果图像是一个64  64 的灰度图像,那么我们会需要4096 = 64*64 个输入神经元,每个强度取0 和1 之间合适的值。输出层只需要包含1个神经元,当输出值小于0.5 时表示“输入图像不是一个9”,大于0.5 的值表示“输入图像是一个9”。

 

用神经网络识别手写数字

1. 网络架构

用以下神经网络识别:

输入层: 28x28 = 784个神经元。每个神经元代表一个像素的值:0.0全白,1.0全黑。
隐藏层:一层,n个神经元,例子中 n=15
输出层: 10个神经元,分别代表手写数字识别可能的0~9十个数字。例如: 第一个神经元(代表0)的输出值=1, 其他的<1, 数字被识别为0。

2. 隐藏层在干嘛?

一种可能的解释:假设隐藏层的第1个神经元只是用于检测如下的图像是否存在:

隐藏层各个神经元学习到不同的部分:
 
决定:
 
 

迈向深度学习(Toward deep learning)

1. 深度神经网络

包含多层结构—— 两层或更多隐藏层—— 的网络被称为深度神经网络。

对于一个非常复杂的问题(比如这张图像是否有一张脸),深度神经网络可以通过一系列多层结构来解决,将原始问题分解为各个子问题,最终分解成在单像素层面上就可回答的非常简单的问题。

在前面的网络层,它回答关于输入图像非常简单明确的问题,在后面的网络层,它建立了一个更加复杂和抽象的层级结构。

2.深度神经网络与浅层网络的对比

深度神经网络有点像传统编程语言使用模块化的设计和抽象的思想来创建复杂的计算机程序。

深度神经网络与浅层网络的对比有点像将一个能够进行函数调用的程序语言与一个不能进行函数调用的精简语言进行对比。

 

 

作者:tsianlgeo
本文版权归作者和博客园共有,欢迎转载,未经同意须保留此段声明,且在文章页面明显位置给出原文链接。欢迎指正与交流。

 

posted @ 2016-12-09 21:55  凝静志远  阅读(1321)  评论(0编辑  收藏  举报