深度学习的人工神经元
神经⽹络的关键的思想,其中包括
- 两个重要的⼈⼯神经元 (感知器和S型神经元);
- 标准的神经⽹络学习算法,即随机梯度下降算法;
Perceptrons(感知器)
基本概念
⼀个感知器接受⼏个⼆进制输⼊,1 2,并产⽣⼀个⼆进制输出:
![]()
- ⽰例中的感知器有三个输⼊,1 2 3。通常可以有更多或更少输⼊;
- 引⼊权重,1 2,表⽰相应输⼊对于输出重要性的实数。
- 神经元的输出,0或者2,则由分配权重后的总和
⼩于或者⼤于⼀些阈值决定。
- 和权重⼀样, 阈值是⼀个实数,⼀个神经元的参数;
- 这就是⼀个感知器所要做的所有事情,你可以将感知器看作依据权重来作出决定的设备;
多级感知器
- 第一列感知器:我们称其为第⼀层感知器,通过权衡输⼊依据做出三个⾮常简单的决定;
- 第⼆层的感知器: 每⼀个都在权衡第⼀层的决策结果并做出决定;
- 通过这种⽅式,⼀个第⼆层中的感知器可以⽐第⼀层中的做出更复杂和抽象的决策。
- 第三层的感知器: 甚⾄能进⾏更复杂的决策
以这种⽅式,⼀个多层的感知器⽹络可以从事复杂巧妙的决策。
因为越来越多,所以我们简化模型:
,w和x对应权重和输入向量;
- 把阈值移到不等式的另⼀边,并⽤感知器的偏置(bias )b代替-threshold;
- 通过上面的表达式,我们可以把偏置看作⼀种表⽰让感知器输出(或者⽤⽣物学的术语,即激活感知器)有多容易的估算;
- 偏置越大,输出1就越容易;
- 反之,则越困难;
感知器的计算逻辑功能
也就是,感知器能够实现我们通常认为的运算基础,例如“与”,“或”和“与⾮”;
考虑如下的感知器:
- 01,10同理,这样,我们就通过感知器,实现了一个与非门;
- 这说明,我们可以⽤感知器来计算简单的逻辑功能。
- 实际上,我们完全能⽤感知 器⽹络来计算任何逻辑功能;
- 那样,我们能在多个与⾮⻔之上构建出任何运算;
=> 但是用感知器构建电路:
- 与⾮⻔构建的⼀个电路,它把两个⼆进制数1和2相加;
- 为了得到相等的感知器⽹络,我们把所有与⾮⻔替换为感知器,其具有两个输⼊、每个权重 设为-2,整体偏置为3。
- x1和x2这样的输⼊画成感知器⽹络左边浮动的变量,也可以将其抽象成输出层的感知器,来方便对输入进行编码;
- 这样有输出,但是没有输入的感知器,可以表示为:
- 但是,它并不实际表⽰⼀个感知器没有输⼊,因为我们如果用
去计算的化话,其输出值总是0。那样,感知器会简单输出⼀个固定值,⽽不是期望值;
- 倒不如完全不把输⼊ 感知器看作感知器,⽽是简单定义为输出期望值的特殊单元,x1,x2...。
总结
感知器运算的通⽤性既是令⼈⿎舞的,⼜是令⼈失望的。
- 令⼈⿎舞是因为它告诉我们感知器 ⽹络能和其它计算设备⼀样强⼤。
- 但是它也令⼈失望,因为它看上去只不过是⼀种新的与⾮⻔。
- 这简直不算个⼤新闻! 然⽽,实际情况⽐这⼀观点认为的更好。
- 其结果是我们可以设计学习算法,能够⾃动调整⼈⼯神经元的权重和偏置。
- 这种调整可以响应外部的刺激,⽽不需要⼀个程序员的直接⼲预。
- 这些学习算法是我们能够以⼀种根本区别于传统逻辑⻔的⽅式使⽤⼈⼯神经元。
- 有别于显式地设 计与⾮或其它⻔,我们的神经⽹络能简单地学会解决问题,这些问题有时候直接⽤传统的电路 设计是很难解决的。
Sigmoid neurons(s型神经元)
学习算法的问题
学习算法听上去⾮常棒。但是我们怎样给⼀个神经⽹络设计这样的算法呢?
考虑如下一个例子:
例如,⽹络的输⼊可以是⼀幅⼿写数字的扫描图像。我 们想要⽹络能学习权重和偏置,这样⽹络的输出能正确分类这些数字。
假设该网络如下:
如果对权重(或者偏置)的微⼩的改动真的能够仅仅引起输出的微⼩变化,那我们可以利⽤ 这⼀事实来修改权重和偏置,让我们的⽹络能够表现得像我们想要的那样。
- 假设⽹络错 误地把⼀个“9”的图像分类为“8”。我们能够计算出怎么对权重和偏置做些⼩的改动,这样⽹ 络能够接近于把图像分类为“9”。
- 然后我们要重复这个⼯作,反复改动权重和偏置来产⽣更好的输出。这时⽹络就在学习。
要实现这样的机制,问题在哪?----------在于当我们的⽹络包含感知器时这不会发⽣。
- 实际上,⽹络中单个感知器上⼀个权重或 偏置的微⼩改动有时候会引起那个感知器的输出完全翻转,如0变到1。
- 那样的翻转可能接下来 引起其余⽹络的⾏为以极其复杂的⽅式完全改变.
- 在上面的例子中,体现出来的就是,虽然你的“9”可能被正确分类,⽹络在其它图像上的⾏为很可能以⼀些很难控制的⽅式被完全改变;
- 这使得逐步修改权重和偏置来让⽹络接近期望⾏为变得困难。也许有其它聪明的⽅式来解决这个问题。但是这不是显⽽易⻅ 地能让⼀个感知器⽹络去学习
学习算法的解决方式
引⼊⼀种称为S型神经元的新的⼈⼯神经元来克服这个问题。
- S型神经元和感知器 类似,但是被修改为权重和偏置的微⼩改动只引起输出的微⼩变化。
- 这对于让神经元网络学习起来,是很关键的;
什么是S型神经元?
正如⼀个感知器,S型神经元有多个输⼊,x1, x2。但是:
- 这些输⼊可以取0和1中的任意值,⽽不仅仅是0或1。例如,0.638, 是⼀个S型神经元的有效输⼊;
- 同样,S型神经元对每个输⼊有权重,w1, w2,和⼀个总的偏置,b。
- 但是输出不是0或1, 而是
, 称之为S型函数;
- 如果把上述的所有参数,放在一起,可以表示为:
感知器和S型神经元的区别与联系
![]()
- 那么
, 且
![]()
- 进而推出,S型神经元的输出近似为1,正好和感知器⼀样;
- 相反的,
![]()
- 进而推出,S型神经元的⾏为也⾮常近似⼀个感知器;
- 只有在w.x +b取中间值时,和感知器的模型,有较大的偏离;
神经元函数的函数如下:
这个形状是阶跃函数平滑后的版本
神经元函数平滑性的重要性
σ的平滑意味着权重和偏置的微⼩变化,也就是
, 会从神经元产⽣⼀个微⼩的输出变化
。
上述的函数,总结起来的意思就是:
- ∆output是⼀个反映权重和偏置变化——即∆wj和∆b——的线性函数;
- 这⼀线性使得选择权重和偏置的微⼩变化来达到输出的 微⼩变化的运算变得容易;
实际上,在这本书的后⾯我们会碰巧考虑到为其它激活函数输出为 的神 经元,当我们使⽤⼀个不同的激活函数,最⼤的变化是公式(5)中⽤于偏导数的特定值的改变。
如何解释神经元的输出?
- 很明显,感知器和S型神经元之间⼀个很⼤的 不同是S型神经元不仅仅输出或。它可以输出和之间的任何实数;
- 这样,可以很方便的让我们,通过该输出来表示一个平均强度,也就是说,在实践中,我们可以设定⼀个约定来解决这个问题;
- 例如,约定任何⾄少为的输出为表⽰“这是⼀个9”,⽽其它⼩于的输出为表⽰“不是⼀个9”;
- 当我们正在使⽤这样的约定时,我 总会清楚地提出来,这样就不会引起混淆。