Back Home
bp神经网络
代价函数
- 令:
- m = 样本的数量
- n = 参数的数量
- L = 网络的总层数
- sl = 第l层单元的数量(不包括偏差单元)
- K = sl = 最后一层即输出层的单元个数 = 类的个数 (K>=3)
- hΘ(x)∈RK , 且 (hΘ(x))k = 第k个输出 = x是第k类的概率
- y(i)k = 第i个样本是否为第k类,是为1,不是为0。
- 损失函数:
- 逻辑回归:
J(θ)=−1m[∑mi=1y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]+λ2m∑nj=1θ2j
- 神经网络:
J(Θ)=−1m[∑mi=1∑Kk=1y(i)klog(hΘ(x(i)))k+(1−y(i)l)log(1−hθ(x(i)))]+λ2m∑L−1l=1∑sli=1∑sl+1j=1(Θ(l)ji)2
反向传播算法
图示:

对给定的训练集:{(x(1),y(1)),...,(x(m),y(m))}
δ(l)j 表示样本在第l层的第j个神经元的误差。
δ(l)j=∂∂z(i)jcost(i)
设置 Δ(l)i,j
- 设a(1):=x(t)
- 执行正向传播(forward propagation)来计算 a(l) (l=2,3,…L) :
a(1)=xz(2)=Θ(1)a(1)a(2)=g(z(2))(adda(2)0)z(3)=Θ(2)a(2)a(3)=g(z(3))(adda(3)0)z(3)=Θ(3)a(3)a(4)=hΘ(x)=g(z(4))(忽略正则项)
- 反向传播部分的第一步是计算 δ(L)=a(L)−y(t)
其中L是我们的总层数,a(L) 是最后一层的激励单元的输出向量。所以我们最后一层的“误差值”就是我们最后一层的输出与正确值的差。
δ(L)j=a(L)j−yj=(hθ(x))j−yj
- 为了得到最后一层之前所有层的delta值,我们可以使用一个方程来从右到左求解。
δ(l)=∂∂z(l)jcost(i)=(Θ(l))Tδ(l+1).∗g′(z(l))(l=2,3,...,L−1)g′(z(l))=a(l).∗(1−a(l))
- 更新delta矩阵(将所有样本的偏差累加起来):
∂∂Θ(l)i,jcost(i)=aljδ(l+1)iΔ(l)i,j:=Δ(l)i,j+a(l)jδ(l+1)i
或者向量化:
Δ(l):=Δ(l)+δ(l+1)(a(l))T
由此我们得到我们新的delta矩阵
-
D(l)i,j:=1m(Δ(l)i,j+λΘ(l)i,j), if j≠0
- D(l)i,j:=1mΔ(l)i,j, if j=0
这个大写的delta矩阵D作为累加器随着时间的推移来把我们的值加起来,并且最终计算我们的骗到。由此我们得到:
∂∂Θ(l)i,jJ(Θ)=a(l)jδ(l+1)i
伪代码
Set Δ(l)i,j=0(for all l,i,j)For i=1 to mSet a(1)=x(i)Perform forward propagation to compute a(l) for l=2,3,...,LUsing y(i),compute δ(L−2),...,δ(2)Compute δ(L−1),δ(L−2),...,δ(2)Δ(l)i,j:=Δ(l)i,j+a(l)jδ(l+1)iD(l)i,j:=1mΔ(l)i,j+λΘ(l)i,jif j≠0D(l)i,j:=1mΔ(l)i,jif j=0
其中:
∂∂Θ(l)i,jJ(Θ)=D(l)i,j
推导
图示:

推导过程:

课程链接: