Neural Networks: Learning
基础知识回顾:https://blog.youkuaiyun.com/weixin_42395916/article/details/81099945
实际应用回顾:https://blog.youkuaiyun.com/weixin_42395916/article/details/81160314
根据前几周的内容我们知道,应用梯度下降法或者其他高级优化算法求解参数需要写出代码计算
1)
J(Θ)
J
(
Θ
)
2)
∂∂ΘlijJ(Θ)
∂
∂
Θ
i
j
l
J
(
Θ
)
本节介绍神经网络的代价函数及其偏导项的计算。
相关机器学习概念:
反向传播算法(backpropagation algorithm)
一、代价函数 Cost Function
本质上,神经网络是一种通过logistic模型,从旧特征中学习到新特征,经过一定层数的学习后最终输出分类结果的算法。因此,我们可以根据logistic回归的代价函数得到神经网络的代价函数。
逻辑回归的代价函数(含正则项):
神经网络代价函数的表达与之类似,但由于神经网络分类结果是以单位列向量的形式输出的,计算代价函数时不仅需要对所有训练样本的cost求和,还要对每一类的cost求和。此外,正则项需要对每一层的除偏置项外的参数求和。
神经网络的代价函数(含正则项):
其中, (hΘ(x))i ( h Θ ( x ) ) i 表示输出层的第i个输出结果, hΘ(x)∈K h Θ ( x ) ∈ K .
易错点:正则项中并不包含偏置项
(i,j=0)
(
i
,
j
=
0
)
二、计算 ∂∂ΘlijJ(Θ) ∂ ∂ Θ i j l J ( Θ )
神经网络代价函数的偏导计算比较复杂,需要用到反向传播算法(backpropagation algorithm)。偏导的计算分为三步:
1) 前向传播算法计算各层激励值
2) 反向传播算法计算各层激励值的误差
3) 求偏导
(一)前向传播算法
*前向传播算法具体参见:https://blog.youkuaiyun.com/weixin_42395916/article/details/81099945
以一个训练样本为例,令输入层的激励值
a(1)=x
a
(
1
)
=
x
,运用前向传播算法得到每层的激励值
a(l)
a
(
l
)
.
(二)反向传播算法 Backpropagation Algorithm
线性回归和逻辑函数代价函数(不含正则项)求偏导结果形式均为
括号内为计算值和实际值的误差。在神经网络算法中,将误差项记作 δ(l)j δ j ( l ) ,它捕捉了l层第j个神经节点激励值的误差。我们用反向传播算法计算它。反向传播算法先计算输出层的 δ δ ,然后计算上一层的 δ δ ,重复该过程直至第二层。
首先计算输出层的误差,显然,就是激励值减去实际值。用向量形式可写作
接下来计算隐藏层的误差,计算方法见下图。根据sigmoid函数的性质, g′(z(l))=a(l).∗(1−a(l)) g ′ ( z ( l ) ) = a ( l ) . ∗ ( 1 − a ( l ) ) ,所以有
易错点:不用计算输入层的误差,因为这是我们在训练集中观察到的值,所以不存在误差。
(三) ∂∂ΘlijJ(Θ)=D(l)ij ∂ ∂ Θ i j l J ( Θ ) = D i j ( l )
将上述内容整合起来,下图是根据激励值和误差得到
J(Θ)
J
(
Θ
)
对
Θ(l)ij
Θ
i
j
(
l
)
求偏导的值
D(l)ij
D
i
j
(
l
)
的详细流程(m个训练样本).
完整的包含正则项的偏导数形式应为
Step1: 初始化
给定m个训练样本,令
Δ(l)ij=0
Δ
i
j
(
l
)
=
0
, 因此
Δ(l)
Δ
(
l
)
是一个零矩阵。它用于之后偏导数的计算。
Step2: 计算
∑mi=1(error of activation)∗(feature value)
∑
i
=
1
m
(
e
r
r
o
r
o
f
a
c
t
i
v
a
t
i
o
n
)
∗
(
f
e
a
t
u
r
e
v
a
l
u
e
)
对训练样本t=1:m执行以下循环(下图中为i=1:m,但这个i和下面的角标i无关,有歧义,故改成t):
1. 令
a(1):=x(t)
a
(
1
)
:=
x
(
t
)
2. 执行前向传播算法得到每层的激励值
a(l)
a
(
l
)
3. 根据
y(t)
y
(
t
)
,计算
δ(L)=a(L)−y(t)
δ
(
L
)
=
a
(
L
)
−
y
(
t
)
4. 根据
δ(l)=(Θ(l))Tδ(l+1).∗a(l).∗(1−a(l))
δ
(
l
)
=
(
Θ
(
l
)
)
T
δ
(
l
+
1
)
.
∗
a
(
l
)
.
∗
(
1
−
a
(
l
)
)
,计算
δ(L−1),δ(L−2),...δ(2)
δ
(
L
−
1
)
,
δ
(
L
−
2
)
,
.
.
.
δ
(
2
)
5. 累积偏导数项,
Δ(l)ij:=Δ(l)ij+a(l)jδ(l+1)i
Δ
i
j
(
l
)
:=
Δ
i
j
(
l
)
+
a
j
(
l
)
δ
i
(
l
+
1
)
. 向量化表示为
Δ(l):=Δ(l)+δ(l+1)(a(l))T
Δ
(
l
)
:=
Δ
(
l
)
+
δ
(
l
+
1
)
(
a
(
l
)
)
T
,它是偏导数矩阵
Step3: 计算
D(l)ij
D
i
j
(
l
)
写出完整的偏导数表达式
D(l)ij
D
i
j
(
l
)
注:图中有错,
D(l)ij:=1m(Δ(l)ij+λΘ(l)ij)
D
i
j
(
l
)
:=
1
m
(
Δ
i
j
(
l
)
+
λ
Θ
i
j
(
l
)
)
if j ≠0