0. 写在前面
今天我们主要介绍关于人工神经网络的相关问题。
1. 三种神经网络单元及其形式
人工神经网络有3种基本的神经元,分别是感知器模型、线性单元和Sigmoid单元。
1.1 感知器模型
感知器模型是神经网络模型提出来的最早的神经单元之一。它比较简单,如果使用公式来表示的话:
其中
这种描述是不是太过于抽象了,但是如果我们换一种描述方式,感知器模型是这样的:
这是感知机模型的图形化表示,而通常的
x0=1,w0是阈值
其他的
xi
才是真正的输入。
这种描述可能还是太高大上了,咱再换一种,但是这种描述并不是太准确。其实就是一个线性拟合。
如果F(X)>0就输出1,否则输出-1。
很显然,这种感知机的表现能力有限,例如异或这种逻辑,它就没办法表示。这也是当时感知机模型跌入低谷的一个很重要的原因。(当时还没找到多个神经元之间的关系如何传递,例如BP算法。)
1.2 线性单元
线性感知单元和感知器模型之间有2个不同,一是取消了结果二值化,二是取消了
x0=1
这个假设,所有的输入都是真正的输入。于是,其公式就变成了这样:
这样输出的结果也是连续的,线性的,因此成为线性单元。结构图如下:
1.3 Sigmoid单元
但是这两种都是有缺陷的,第一种感知器单元是因为结果不连续,没办法进行微分积分,就没法做成多层感知器模型。
而第二种线性单元输入结果虽然连续,但是没有办法进行分类,这就有可能导致最终结果太过离散了。因此,Sigmoid单元就融合了这两个单元的优点。它是这样的:
其中
这是一个非常著名的S模型的简化版,而且它的求导非常方便。这也是它流行的一个原因。
其结构图如下:
2. 训练法则
上面提到了3种神经单元,那么每种神经单元应当对应相应的训练法则,这样才能够让神经单元有用。
2.1 感知器法则
感知器法则是特地为了感知器模型而设计的,它是这样修改所有的参数的:
其中 Δwi=η(t−o)xi
这里, wi 是参数,而t是训练样例的目标输出值,o是模型的输出值,而 η 是学习速率,也就是每步的步长,通常是一个比较小的数。
而整个训练过程就是把样例一个一个输入进去,不断的调整 wi 的值,最终停止的时候,所有的训练样例都会满足这个函数。
事实证明,在有限次的使用感知器训练法则后,上面的训练过程会收敛到一个能正确分类所有训练样例的权向量,但是前提是训练样例线性可分,并且使用了充分小的 η 。
2.2 delta法则
delta法则是为了线性模型而产生的训练法则,它可以发展成多层网络的训练法则(反向传播算法)。
delta法则就是梯度下降法。我们常用的训练误差的表示方式使用的是一个非常容易求导的公式:
这其实是最小误差平方和的表现形式。而我们最终的评价目标就是使得这个E最小,于是我们就需要求偏导。
这就是梯度,梯度的概念我们在高数中讲过了,就不在这讲原理,只是说,梯度就是权空间的一个向量,确定了使E最陡峭上升的方向。因此梯度下降法就被表述成:
其中
但真正计算的时候,不会太麻烦,因为我们刚才的最小误差平方和的式子非常容易求导:
这样我们就得到了最终的结果:
也就是说,它仅仅是跟输入值,输出值,目标值和学习速率有关,而且运算十分简单。于是,就产生出了下面这个线性单元的梯度下降算法:
GRANDIENT-DESCENT(training_examples,
η
)
training_examples 中每一个训练样例形式为序偶<
x→,t
>,其中
x→
是输入值向量,t是目标输出值,
η
是学习速率。
- 初始化每个 wi 为某个小的随机值
- 遇到终止条件之前,做以下操作:
- 初始化每个 Δwi 为0
- 对于训练样例training_examples中的每个<
x→,t
>,做:
- 把实例 x→ 输入到此单元,计算输出o
- 对于线性单元的每个权 wi ,做
- Δwi=Δwi+η(t−o)(xi) (*)
- 对于线性单元的每个权
wi
,做:
- wi=wi+Δwi (**)
这是批量梯度下降夏泽,如果是随机梯度下降,只需要在每次更新权 wi 时候,直接修改权值即可。也就是把公式(*)去掉,然后把公式()改为 wi=wi+η(t−o)(xi)
对于梯度下降的方式和方法,目前有三种方法,一种是批量梯度下降,也就是所有样例的误差总和全部加起来后,再去修改权值。第二种是随机梯度下降,也就是对每一个样例算出误差后,都会及时的把权值修改掉。第三种则是小批量随机梯度下降,它介于第一种和第三种之间,一次只把若干个(一般是5个)样例的误差总和加起来,修改权值。
当然还有其他的优化误差的方法,也不仅仅是随机梯度下降了。这个大家可以自行去查阅。下面是给出三种方法的对比表格:
随机梯度下降 | 小批量态度下降 | 批量梯度下降 |
---|---|---|
每个样例的误差来更新权值 | 几个样例的误差总和来更新权值 | 所有样例的误差总和来更新权值 |
梯度下降幅度小 | 梯度下降幅度大 | 梯度下降幅度最大 |
能以较大概率避免陷入局部最小值 | 能增加陷入局部最小值的概率 | 有可能陷入局部最小值 |
2.3多层神经网络训练法则
前面2种都是单个神经单元的训练法则,下面这个才是真正的多层的神经网络训练法则,正式因为有了它,才让整个人工神经网络又活跃了起来,这就是反向传播算法。
下面这是2层的,不过多层的也是一样的。
BACKPROPAGATION(training_examples,
η,nin,nout,nhidden
)
raining_examples 中每一个训练样例形式为序偶<
x→,t
>,其中
x→
是输入值向量,t是目标输出值,
η
是学习速率。
nin
是网络输入的数量,
nout
是网络输出的数量,
nhidden
是隐藏层单元数。
- 创建具有 nin 个输入, nhidden 个隐藏单元, nout 个输出单元的网络
- 在遇到终止条件前:
- 对于训练样例training_examples中的每个< x→,t >:
- 把输入沿网络向前传播
- 把实例 x→ 输入网络,并计算网络中每个单元u的输出 ou
- 使误差沿网络反向传播
- 对于网络的每个输出单元k,计算它的误差项 δk
- δk←ok(1−ok)(tk−ok)
- 对于网络的每个隐藏单元h,计算它的误差项 δh
- δh←oh(1−oh)∑k∈outputswkhδk
- 更新每个网络权值 wji
- wji←wji+Δwij
- 其中 Δwij=ηδjxji
这样一个随机梯度下降的包含两层sigmoid单元的前馈网络的反向传播算法就完成了。
3. 人工神经网络的归纳偏置
其归纳偏置是:在数据点间平滑插值,如果两边都为正例,则中间的值也为正例。
4. 反向传播算法的终止条件
反向传播算法的终止条件有3种。
- 迭代次数达到了一个固定值。
- 在训练样例的误差降到某个阈值以下时。
- 咋分离的验证样例集合的误差符合某个标准时。
5. 小结
这一章,我们主要针对了人工神经网络的4个问题进行了相关的总结,重点在于梯度下降法的推导和应用。下一节,我们将对评估假设的相关问题进行解答。