(二)有监督神经网络(最后两张图浓缩精华)

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:RR 为激活函数。常用的 f() 为Sigmoid函数,形式如下:

f(z)=11+exp(z)

单神经元对应于逻辑斯特回归中定义的输入输出映射。
当然,其他形式的 f 也是可以的,如tanh函数

f(z)=tanh(z)=ezezez+ez

近年来,研究发现一种不同的激活函数ReLU,在实际中可以展现更好的性能。该激活函数不同于Sigmoid和tanh,因为它不是有界的,且不是连续可微的。该函数形式如下:

f(z)=max(0,z)

三种激活函数对比如下图
激活函数
最后,如果激活函数 f(z) 是Sigmoid函数,则其偏导数为 f(z)=f(z)(1f(z)) 。如果激活函数 f(z) 是tanh函数,则其偏导数为 f(z)=1f(z)2 。ReLU的偏导数为

f(z)={0,   if z01,   if z>0

1.2 神经网络模型

神经网络是有多个简单的神经元组成,一个神经元的输出可以是另一个神经元的输入。例如:
神经网络
图中,最左端为输入层,蓝色圆圈为输入,其中标“+1”为偏置单元。最右端为输出层。中间层为隐层,其值是无法观测的。该网络有三个输入单元(不算偏置),三个隐单元和一个输出单元。
我们使用 nl 表示网络层数,上图中 nl=3 。层 l 记为Ll,故层 L1 为输入层,层 Lnl 为输出层。网络参数 (W,b)=(W(1),b(1),W(2),b(2)) ,其中记 W(l)ij 为层 l 中单元j与层 l+1 中单元 i 的连接权重关系。同样,b(l)i表示层 l+1 中单元 i 的相关偏置。因此,本例中,W(1)R3×3 W(2)R1×3
注意,偏置项没有输入。层 l 中节点单元的个数记为sl(不算偏置)。
l 中单元i的激活响应(输出值)记为 ali 。例如 l=1 a1i=xi 表示第 i 个输入。给定一个固定的参数W,b,神经网络定义一个假设 hW,b(x) ,输出一个实数。神经网络的计算表示如下:

a(2)1a(2)2a(2)3hW,b(x)=f(W(1)11x1+W(1)12x3+W(1)13x3+b(1)1)=f(W(1)21x1+W(1)22x3+W(1)23x3+b(1)2)=f(W(1)31x1+W(1)33x3+W(1)33x3+b(1)3)=a(3)1=f(W(2)11a(2)1+W(2)12a(2)1+W(2)13a(2)1+b(2)1)

定义 z(l)i 表示层 l 中单元i的输入加权和(包括偏置),例如 z(2)i=nj=1W(1)ijxj+b(1)i ,故 a(l)i=f(z(l)i)
扩展激活函数 f() 对元素级的向量操作,如 f([z1,z2,z3])=[f(z1),f(z2),f(z3)] ,上式可重写为

z(2)a(2)z(3)hW,b(x)=W(1)Tx+b(1)=f(z(2))=W(2)Ta(2)+b(2)=a(3)=f(z(3))

上面的操作过程我们称之为前传,更一般地,令 a(1)=x ,则给定层 l 的激活响应a(l),可计算层 l+1 的激活响应 a(l+1) 如下:

z(l+1)a(l+1)=W(l)Ta(l)+b(l)=f(z(l+1))

通过向量和矩阵操作,可快速实现上面的过程。
上面逐层传递计算的过程称为前馈神经网络。
当然,神经网络可以有多个输出,如下图网络有2个隐层,输出层有两个输出单元。
多个输出神经网络
这种网络在预测多个输出时是很有用的,如医疗诊断中,输入病人的若干特征,输出不同疾病的存在和不存在。

1.3 反向传播算法

假设给定一个固定的训练集 {(x(1),y(1)),...,(x(m),y(m)))} ,神经网络可采用批量梯度下降算法求解。具体来说,对于单个训练样本 (x,y) ,定义单个样本的代价函数如下:

J(W,b;x,y)=12||hW,b(x)y||2

给定 m 个样本,定义如下总体代价函数

J(W,b)=1mi=1mJ(W,b;x(i),y(i))+λ2l=1nl1i=1slj=1sl+1(W(l)ji)2=1mi=1m12||hW,b(x(i))y(i)||2+λ2l=1nl1i=1slj=1sl+1(W(l)ji)2

第一项为均方误差,第二项为正则化项,用于降低权值大小,抑制过拟合。参数 λ 用于控制两项的相对比重。
上式的代价函数通常用于分类和回归问题。分类中, y=0|1 表示两类标签;回归中,尺度缩放输出到 [0,1]
最小化目标 J(W,b) ,即训练神经网络,首先初始化参数 W(l)ij b(l)i 为接近0的小的随机值,然后应用优化算法求解。因为 J(W,b) 是非凸函数,梯度下降易陷入局部极值。但是实际中梯度下降通常较好!最后,随机初始化是很重要的!
梯度下降一次迭代更新一次参数

W(l)ij=W(l)ijαW(l)ijJ(W,b)

b(l)i=b(l)iαb(l)iJ(W,b)

其中, α 为学习率。其关键就是计算上面的偏导数。下面描述反向传播算法,它可以有效地计算偏导数。
首先,要求计算单个样本 (x,y) 偏导数 W(l)ijJ(W,b;x,y) b(l)iJ(W,b;x,y) ,一旦可以得到这两个结果,则整体的代价函数的偏导数可计算如下:

W(l)ijJ(W,b;x,y)=1mi=1mW(l)ijJ(W,b;x(i),y(i))+λW(l)ij

b(l)iJ(W,b;x,y)=1mi=1mb(l)iJ(W,b;x(i),y(i))

下面重点关注如何计算:单个样本 (x,y) 偏导数 W(l)ijJ(W,b;x,y) b(l)iJ(W,b;x,y)
首先,直观感受一下反向传播算法。给定一个训练样本 (x,y) ,前传计算所有激活响应,包括假设输出 hW,b(x) 。然后,对于层 l 的节点i,计算误差项 δ(l)i ,该项度量了阶段在数据中误差的贡献。对输出节点,我们可以直接计算激活响应和目标值得差异,以此定义 δ(nl)i (层 nl 为输出层)。对于隐层单元,基于各节点激活输入 a(l)i 的误差项加权平均来计算 δ(l)i
步骤1:前传计算每个节点的激活响应 {a(l)i},l=1,...,nl
步骤2:对输出层 nl 的每个输出单元 i ,计算

δ(nl)i=z(nl)i12||yhW,b(x)||2=(yia(nl)i)f(z(nl)i)

步骤3:对非输出层 l=nl1,nl2,...,2 中的每个节点 i ,计算

δ(l)i=(sl+1j=1W(l)jiδ(l+1)i)f(z(l)i)

步骤4:计算参数的偏导数:

W(l)ijJ(W,b;x,y)=a(l)jδ(l+1)i

b(l)iJ(W,b;x,y)=δ(l+1)i

上面的算法中“ ”表示元素级点乘操作。对 f() 同理, f([z1,z2,z3])=[f(z1),f(z2),f(z3)]

矩阵版本的偏导数计算如下:
步骤1:前传计算激活响应 {a(l)},l=1,...,nl
步骤2:对输出层 nl 的每个输出单元 i ,计算

δ(nl)=(yia(nl))f(z(nl))

步骤3:对非输出层 l=nl1,nl2,...,2 中的每个节点 i ,计算
δ(l)=((W(l))Tδ(l+1))f(z(l))
步骤4:计算参数的偏导数:

W(l)J(W,b;x,y)=δ(l+1)(a(l))T

b(l)J(W,b;x,y)=δ(l+1)

对于上面中的 f(z(l)i) ,如 f(z) 采用sigmoid函数,则 f(z(l)i)=a(l)i(1a(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:更新

W(l)=W(l)α[1mΔW(l)+λW(l)]

b(l)=b(l)α[1mΔb(l)]

重复上述过程优化网络。
##############################################################
总结,多层神经网络主要涉及前传和后传两个过程,前传计算目标代价,后传计算梯度。
MSENN
前传主要的递推公式:

z(l+1)=(W(l))Ta(l)+b(l)a(l+1)=f(z(l+1))

后传主要的递推公式:

δ(l)=(yia(l))f(z(l)),       l=nlδ(l)=((W(l))Tδ(l+1))f(z(l)),    l<nlW(l)J=δ(l+1)(a(l))Tb(l)J=δ(l+1)

其中, δ(l) 可理解为 Jz(l)=Jz(l+1)z(l+1)a(l)a(l)z(l)=((W(l))Tδ(l+1))f(z(l))
##############################################################

1.4 Softmax回归

实验要求采用Softmax回归代价函数。假设最后一个隐层的输出一个 K 维的激活响应为hW,b(x)=[hW,b(x)1,...,hW,b(x)K]T,则损失函数为:

J(W,b)=i=1mk=1K1{y(i)=k}logexp(hW,b(x(i))k)Kj=1exp(hW,b(x(i))j)

该代价与1.3节代价函数不同,对应其

δ(nl)=[i=1m(1{y(i)=k}P(y(i)=k|x(i)))]

其中, P(y(i)=k|x(i))=exp(hW,b(x(i))k)Kj=1exp(hW,b(x(i))j)
根据 δ(nl) ,采用1.3节反向传播即可求解网络参数。

##############################################################
当目标函数为Softmax损失时,网络训练如下图
SoftmaxNN
实际中,通常最后一层中无激活函数,即 hW,b(x)=a(4)=z(4) 。为了统一表示,这里形式化激活函数为 g() ,以区分于前层的激活函数,如Sigmoid函数、tanh函数或ReLU函数。
##############################################################

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值