1 多层神经网络
1.1 神经元
考虑一个有监督学习问题,给定带标签样本
{x(i),y(i)}
,神经网络定义了一个复杂的非线性假设
hW,b(x)
,其中
W,b
为参数。
为了描述神经网络,我们从最简单的神经网络开始,只有一个神经元,如下图
神经元是一个计算单元,输入
x1,x2,x3
和偏置1,输入
hW,b(x)=f(WTx)=f(∑3i=1Wixi+b)
,其中
f:R↦R
为激活函数。常用的
f(⋅)
为Sigmoid函数,形式如下:
单神经元对应于逻辑斯特回归中定义的输入输出映射。
当然,其他形式的
f
也是可以的,如tanh函数
近年来,研究发现一种不同的激活函数ReLU,在实际中可以展现更好的性能。该激活函数不同于Sigmoid和tanh,因为它不是有界的,且不是连续可微的。该函数形式如下:
三种激活函数对比如下图
最后,如果激活函数
f(z)
是Sigmoid函数,则其偏导数为
f′(z)=f(z)(1−f(z))
。如果激活函数
f(z)
是tanh函数,则其偏导数为
f′(z)=1−f(z)2
。ReLU的偏导数为
1.2 神经网络模型
神经网络是有多个简单的神经元组成,一个神经元的输出可以是另一个神经元的输入。例如:
图中,最左端为输入层,蓝色圆圈为输入,其中标“+1”为偏置单元。最右端为输出层。中间层为隐层,其值是无法观测的。该网络有三个输入单元(不算偏置),三个隐单元和一个输出单元。
我们使用
nl
表示网络层数,上图中
nl=3
。层
l
记为
注意,偏置项没有输入。层
l
中节点单元的个数记为
层
l
中单元
定义
z(l)i
表示层
l
中单元
扩展激活函数
f(⋅)
对元素级的向量操作,如
f([z1,z2,z3])=[f(z1),f(z2),f(z3)]
,上式可重写为
上面的操作过程我们称之为前传,更一般地,令
a(1)=x
,则给定层
l
的激活响应
通过向量和矩阵操作,可快速实现上面的过程。
上面逐层传递计算的过程称为前馈神经网络。
当然,神经网络可以有多个输出,如下图网络有2个隐层,输出层有两个输出单元。
这种网络在预测多个输出时是很有用的,如医疗诊断中,输入病人的若干特征,输出不同疾病的存在和不存在。
1.3 反向传播算法
假设给定一个固定的训练集
{(x(1),y(1)),...,(x(m),y(m)))}
,神经网络可采用批量梯度下降算法求解。具体来说,对于单个训练样本
(x,y)
,定义单个样本的代价函数如下:
给定
m
个样本,定义如下总体代价函数
第一项为均方误差,第二项为正则化项,用于降低权值大小,抑制过拟合。参数
λ
用于控制两项的相对比重。
上式的代价函数通常用于分类和回归问题。分类中,
y=0|1
表示两类标签;回归中,尺度缩放输出到
[0,1]
。
最小化目标
J(W,b)
,即训练神经网络,首先初始化参数
W(l)ij
和
b(l)i
为接近0的小的随机值,然后应用优化算法求解。因为
J(W,b)
是非凸函数,梯度下降易陷入局部极值。但是实际中梯度下降通常较好!最后,随机初始化是很重要的!
梯度下降一次迭代更新一次参数
其中,
α
为学习率。其关键就是计算上面的偏导数。下面描述反向传播算法,它可以有效地计算偏导数。
首先,要求计算单个样本
(x,y)
偏导数
∂∂W(l)ijJ(W,b;x,y)
和
∂∂b(l)iJ(W,b;x,y)
,一旦可以得到这两个结果,则整体的代价函数的偏导数可计算如下:
下面重点关注如何计算:单个样本
(x,y)
偏导数
∂∂W(l)ijJ(W,b;x,y)
和
∂∂b(l)iJ(W,b;x,y)
。
首先,直观感受一下反向传播算法。给定一个训练样本
(x,y)
,前传计算所有激活响应,包括假设输出
hW,b(x)
。然后,对于层
l
的节点
步骤1:前传计算每个节点的激活响应
{a(l)i},l=1,...,nl
。
步骤2:对输出层
nl
的每个输出单元
i
,计算
步骤3:对非输出层
l=nl−1,nl−2,...,2
中的每个节点
i
,计算
步骤4:计算参数的偏导数:
上面的算法中“ ⋅ ”表示元素级点乘操作。对 f′(⋅) 同理, f′([z1,z2,z3])=[f′(z1),f′(z2),f′(z3)] 。
矩阵版本的偏导数计算如下:
步骤1:前传计算激活响应
{a(l)},l=1,...,nl
。
步骤2:对输出层
nl
的每个输出单元
i
,计算
步骤3:对非输出层
l=nl−1,nl−2,...,2
中的每个节点
i
,计算
步骤4:计算参数的偏导数:
对于上面中的 f′(z(l)i) ,如 f(z) 采用sigmoid函数,则 f′(z(l)i)=a(l)i(1−a(l)i) 。
神经网络的整体算法如下:
步骤1:初始化
ΔW(l):=0,Δb(l):=0
。
步骤2:对所有样本,计算
步骤2.1:计算
∇W(l)J(W,b;x,y)
和
∇b(l)J(W,b;x,y)
。
步骤2.2:计算
ΔW(l):=ΔW(l)+∇W(l)J(W,b;x,y)
步骤2.2:计算
Δb(l):=Δb(l)+∇b(l)J(W,b;x,y)
步骤3:更新
重复上述过程优化网络。
##############################################################
总结,多层神经网络主要涉及前传和后传两个过程,前传计算目标代价,后传计算梯度。
前传主要的递推公式:
后传主要的递推公式:
其中,
δ(l)
可理解为
∂J∂z(l)=∂J∂z(l+1)∂z(l+1)∂a(l)∂a(l)∂z(l)=((W(l))Tδ(l+1))⋅f′(z(l))
。
##############################################################
1.4 Softmax回归
实验要求采用Softmax回归代价函数。假设最后一个隐层的输出一个
K
维的激活响应为
该代价与1.3节代价函数不同,对应其
其中, P(y(i)=k|x(i))=exp(hW,b(x(i))k)∑Kj=1exp(hW,b(x(i))j) 。
根据 δ(nl) ,采用1.3节反向传播即可求解网络参数。
##############################################################
当目标函数为Softmax损失时,网络训练如下图
实际中,通常最后一层中无激活函数,即
hW,b(x)=a(4)=z(4)
。为了统一表示,这里形式化激活函数为
g(⋅)
,以区分于前层的激活函数,如Sigmoid函数、tanh函数或ReLU函数。
##############################################################