一、人工神经元
1. 感知器
感知器是一种人工神经元,在 20 世纪五、六⼗年代由科学家Frank Rosenblatt发明。⼀个感知器接受⼏个二进制输⼊
,并产⽣⼀个二进制输出:
⽰例中的感知器有三个输⼊:
,引入权重
表⽰相应输⼊对于输出重要性的实数。输出值0或者1,则由分配权重后的总和
小于或者大于一些阈值决定。和权重⼀样,阈值是⼀个实数,⼀个感知器的参数。⽤更精确的代数形式:
把阈值移到不等式的另⼀边,并⽤感知器的偏置
代替。⽤偏置⽽不是阈值,那么感知器的规则可以重写为:
2. S型神经元
S 型神经元和感知器类似,但是被修改为权重和偏置的微⼩改动只引起输出的微⼩变化。正如⼀个感知器,S 型神经元有多个输⼊
,但是这些输⼊可以取0和1中的任意值,如0.618…是⼀个 S 型神经元的有效输⼊,⽽不仅仅是二进制输入0或1。同样,S 型神经元对每个输⼊有权重
和⼀个总的偏置
,但输出不再是0或1,而是
,这⾥
被称为S型函数,定义为:
把它们放在⼀起来更清楚地说明,⼀个具有输⼊ ,权重 和偏置 的S型神经元的输出是:
3. 神经元
函数的定义为:
4. 修正线性神经元(rectified linear neuron)或者修正线性单元(rectified linear unit),简记为 ReLU
输⼊为
,权重向量为
,偏置为
的
神经元的输出是:
二、神经网络
本文我们讨论的神经⽹络,都是以上⼀层的输出作为下⼀层的输⼊。这种⽹络被称为前馈神经⽹络。这意味着⽹络中是没有回路的,信息总是向前传播,从不反向回馈。
1. 神经网络的架构
上图⽹络中最左边的称为输⼊层,其中的神经元称为输⼊神经元。最右边的称为输出层,其中的神经元称为输出神经元,在本例中,输出层只有⼀个神经元。中间层既不是输⼊也不是输出,被称为隐藏层。
2. 神经网络的代数形式
我们⾸先给出⽹络中权重的清晰定义。我们使⽤
表⽰从
层的
个神经元到
层的
个神经元的链接上的权重。例如,下图给出了⽹络中第⼆层的第四个神经元到第三层的第⼆个神经元的链接上的权重:
我们对⽹络的偏置和激活值也会使⽤类似的表⽰。显式地,我们使⽤
表⽰在
层第
个神经元的偏置,使⽤
表⽰
层第
个神经元的激活值(即神经元的输出)。下⾯的图清楚地解释了这样表⽰的含义:
有了这些表⽰,
层的第
个神经元的激活值
就和
层的激活值通过⽅程关联起来了(其中
称为激活函数,本文选用S型神经元进行讨论,即选择激活函数为S型函数)
三、反向传播算法(backpropagation)
1. Hadamard 乘积
特别地,假设
和
是两个同样维度的向量。那么我们使⽤
来表⽰按元素的乘积。所以
的元素就是
。给个例⼦,
这种类型的按元素乘法有时候被称为 Hadamard 乘积,或者 Schur 乘积。我们这⾥取前者。好的矩阵库通常会提供 Hadamard 乘积的快速实现,在实现反向传播的时候⽤起来很⽅便。
2. 代价函数
在神经网络的代数形式中,我们希望有⼀个算法,能让我们找到权重和偏置,以⾄于⽹络的输出
能够拟合所有的训练输⼊ x。为了量化我们如何实现这个⽬标,在使用神经网络做项目的时候,我们往往需要定义一个代价函数。
为了便于接下来的讨论,本文定义一个二次代价函数。
3. 梯度下降算法
在线性模型一文已经详细介绍过梯度下降算法,这里只做简单描述。
梯度下降算法是一种迭代算法,选取适当的初值w和b,不断迭代,更新w和b的值,进行目标函数的极小化,直到收敛。由于负梯度方向是使函数值下降最快的方向,在迭代的每一步,以负梯度方向更新w和b的值,从而达到减少函数值的目的。即每一次迭代,新的w和b都会由旧的w和b减去梯度乘以步长(或称速率eta)得到,代数形式为:
4. 关于代价函数的两个假设
反向传播的⽬标是计算代价函数
分别关于
和
的偏导数
和
。为了让反向传播可⾏,我们需要做出关于代价函数的两个主要假设。
第一个假设是代价函数可以被写成⼀个在每个训练样本
上的代价函数
的均值
。以⼆次代价函数为例,其中对每个独⽴的训练样本其代价是
。
第二个假设是代价可以写成神经⽹络输出的函数。例如对于一个单独的训练样本x,可以写作:
5. 误差
反向传播其实是对权重和偏置变化影响代价函数过程的理解。最终极的含义其实就是计算偏导数
和
。但是为了计算这些值,我们⾸先引⼊⼀个中间量,
,这个我们称为在
层第
个神经元上的误差。
为了理解误差是如何定义的,假设在神经⽹络上有⼀个调⽪⻤:
这个调⽪⻤在
层的第
个神经元上。当输⼊进来时,调⽪⻤对神经元的操作进⾏搅局。他会增加很⼩的变化
在神经元的带权输⼊上,使得神经元输出由
变成
。这个变化会向⽹络后⾯的层进⾏传播,最终导致整个代价产⽣
的改变。
现在,这个调⽪⻤变好了,试着帮助你来优化代价,它试着找到可以让代价更⼩的
。假设
有⼀个很⼤的值(或正或负)。那么这个调⽪⻤可以通过选择与
相反符号的
来降低代价。相反,如果
接近 0,那么调⽪⻤并不能通过扰动带权输⼊
来改善太多代价。在调⽪⻤看来,这时候神经元已经很接近最优了。所以这⾥有⼀种启发式的认识,
是神经元的误差的度量。
按照上⾯的描述,我们定义
层的第
个神经元上的误差
为:
证明:
代价函数C是关于z的函数,此处不妨假设 ,函数图像如下图。 为函数的斜率,则 带来的微小变化 ,会如图中所示,导致整个C产生 的变化。
6. 反向传播的四个方程式
① 输出层误差
的⽅程
固输出层 层每个元素定义如下:
② 使⽤下⼀层的误差 来表⽰当前层的误差
③ 代价函数关于⽹络中任意偏置的改变率
代入 ,得:
④ 代价函数关于任何⼀个权重的改变率
7. 反向传播算法
算法1 (反向传播算法)
输入:输入层向量
输出:代价函数的梯度
和
① 计算各层对应的激活值
② 前向传播:对每个
计算相应的
和
③ 输出层误差
:计算向量
④ 反向误差传播:对每一个
,计算
⑤ 根据
和
计算可得代价函数的梯度
四、过度拟合和规范化
增加训练样本的数量是⼀种减轻过度拟合的⽅法。另外的,本文要介绍的减轻过度拟合的方法为L1规范化和L2规范化。
1. L2规范化
L2规范化也叫权重衰减(weight decay)。L2 规范化的想法是增加⼀个额外的项到代价函数上,这个项叫做规范化项。下⾯是规范化的代价函数,其中 是原始代价函数:
越小,偏向于最小化原始代价函数,反之,倾向于小的权重。
2. L1规范化
L1规范化是在未规范化的代价函数上加上⼀个权重绝对值的和:
以上全部内容参考书籍如下:
Michael Nielsen《Neural Networks and Deep Learning》