本文总结自《Neural Networks and Deep Learning》第1章的部份内容。 编程
感知器是一种人工神经元。网络
一个感知器接受几个二进制输入:x1,x2,...,并产一个二进制输出:架构
数学模型以下:编程语言
能够将感知器看做依据权重来做出决定的设备。模块化
输入:取值为0或者1。
输出:取值为0或者1。函数
S型神经元和感知器相似,但S型神经元中有一个很好的特性:对权重和偏置的微小改动只引发输出的微小变化。这个特性对于神经网络的自我学习过程很重要。学习
由于对于一个由多个感知器构成的网络而言,存在以下问题:编码
这个网络中单个感知器上一个权重或偏置的微小改动有时会引发那个感知器的输出彻底翻转,如0变到1。那样的翻转可能接下来引发其他网络络的行为以极其复杂的方式彻底改变。spa
而S型神经元能够克服上述问题。设计
输入:能够取0到1之间的任意值,而不一样于感知器中只能取0或者1。
输出:输出不是0或1,而是0到1之间的任意值,该输出由σ(wx+b)决定,σ被称为S型函数。
输入层、输出层、隐藏层
因为历史的缘由,尽管是由S 型神经元而不是感知器构成,这种多层网络有时被称为多层感知器或者MLP。
例如,假设咱们尝试肯定一张手写数字的图像上是否写的是“9”。很天然地,咱们能够将图像像素的强度进行编码做为输入神经元来设计网络。
若是图像是一个64 64 的灰度图像,那么咱们会须要4096 = 64*64 个输入神经元,每一个强度取0 和1 之间合适的值。输出层只须要包含1个神经元,当输出值小于0.5 时表示“输入图像不是一个9”,大于0.5 的值表示“输入图像是一个9”。
用如下神经网络识别:
输入层: 28x28 = 784个神经元。每一个神经元表明一个像素的值:0.0全白,1.0全黑。
隐藏层:一层,n个神经元,例子中 n=15
输出层: 10个神经元,分别表明手写数字识别可能的0~9十个数字。例如: 第一个神经元(表明0)的输出值=1, 其余的<1, 数字被识别为0。
一种可能的解释:假设隐藏层的第1个神经元只是用于检测以下的图像是否存在:
包含多层结构—— 两层或更多隐藏层—— 的网络被称为深度神经网络。
对于一个很是复杂的问题(好比这张图像是否有一张脸),深度神经网络能够经过一系列多层结构来解决,将原始问题分解为各个子问题,最终分解成在单像素层面上就可回答的很是简单的问题。
在前面的网络层,它回答关于输入图像很是简单明确的问题,在后面的网络层,它创建了一个更加复杂和抽象的层级结构。
深度神经网络有点像传统编程语言使用模块化的设计和抽象的思想来建立复杂的计算机程序。
深度神经网络与浅层网络的对比有点像将一个可以进行函数调用的程序语言与一个不能进行函数调用的精简语言进行对比。