摘抄自ULFDL
图1 神经网络图
nl :网络的层数,如上图为 3
Li :网络的第 i 层
bli :第 l+1 层第 i 单元的偏置项
Si :第 i 层有多少节点(偏置项除外)
z(l)i :第 l 层第 i 单元加权和(包括偏置单元)
f(∗) :激活函数,有sigmoid函数、tant函数等
a(l)i :第 l 层第 i 单元的激活值(输出值), a(l)i=f(z(l)i)
W(l)ij :权重,表示第 l 层第 j 单元与第 l+1 层第 i 单元之间的联接参数
hW,b(x) :假设函数,代表输出值
前向传播算法(以图1为例),
z(2)=W(1)x+b(1)
a(2)=f(z(2))
z(3)=W(2)+b(1)
hW,b(x)=a(3)=f(z(3))
反向传播算法
- 进行前馈传导计算,利用前向传导公式,得到 L2,L3,...,Lnl 的激活值
- 对输出层(第 nl 层),计算: δ(nl)=−(y−a(nl))∙f′(znl) , ∙ 代表Octave中的 .* 运算。
- 对于 l=nl−1,nl−2,nl−3,...,2 的各层,计算: δ(l)=((W(l))Tδ(l+1))∙f′(z(l))
- 计算最终需要的偏导数值:
∇W(l)J(W,b;x,y)=δ(l+1)(a(l))T ,
∇b(l)J(W,b;x,y)=δ(l+1)
批量梯度一次迭代
- 对于所有 l ,令 ΔW(l):=0,Δb(l):=0 (设置为全零矩阵或零向量)
- 对于 i=1 到 m ,
a. 使用反向传播算法计算: ∇W(l)J(W,b;x,y) 和 : ∇b(l)J(W,b;x,y)
b. 计算: ΔW(l):=ΔW(l)+∇W(l)J(W,b;x,y)
c. 计算: Δb(l):=Δb(l)+∇b(l)J(W,b;x,y) - 更新权重参数:
W(l)=W(l)−α[(1mΔW(l))+λW(l)]
b(l)=b(l)−α[1mΔb(l)]