机器学习 - 反向传播算法 (BP)

1. Cost Function

首先定义一些需要使用的变量:

L L L = total number of layers in the network;
s l s_l sl = number of units (not counting bias unit) in layer l l l
K K K = number of output units/classes

将神经网络的分类定义为两种情况:二类分类和多类分类,

二类分类: S L = 0 , y = 0   o r   1 S_L=0, y=0\, or\, 1 SL=0,y=0or1表示哪一类;

K K K类分类: S L = k , y i = 1 S_L=k, y_i = 1 SL=k,yi=1表示分到第 i i i类; ( k > 2 ) (k>2) (k>2)

在这里插入图片描述

神经网络代价函数 J ( θ ) J(\theta) J(θ)将是用于逻辑回归的成本函数的推广。
逻辑回归问题中代价函数为:

J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J\left(\theta \right)=-\frac{1}{m}\left[\sum_{i=1}^{m}{y}^{(i)}\log{h_\theta({x}^{(i)})}+\left(1-{y}^{(i)}\right)log\left(1-h_\theta\left({x}^{(i)}\right)\right)\right]+\frac{\lambda}{2m}\sum_{j=1}^{n}{\theta_j}^{2} J(θ)=m1[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]+2mλj=1nθj2

在Logistic Regression中,只有一个输出变量,也只有一个因变量 y y y,但是在Neural Network中,输出层可以有多个变量, h θ ( x ) h_\theta(x) hθ(x)是一个 K ∗ 1 K*1 K1的列向量,故代价函数会比逻辑回归更多元,为: \newcommand{\subk}[1]{ #1_k }
h θ ( x ) ∈ R K h_\theta\left(x\right)\in \mathbb{R}^{K} hθ(x)RK ( h θ ( x ) ) i = i t h output {\left({h_\theta}\left(x\right)\right)}_{i}={i}^{th} \text{output} (hθ(x))i=ithoutput J ( Θ ) = − 1 m [ ∑ i = 1 m ∑ k = 1 k y k ( i ) log ⁡ ( h Θ ( x ( i ) ) ) + ( 1 − y k ( i ) ) log ⁡ ( 1 − ( h Θ ( x ( i ) ) ) ) ] + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( Θ j i ( l ) ) 2 J(\Theta) = -\frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{k=1}^{k} {y_k}^{(i)} \log {(h_\Theta(x^{(i)}))} + \left( 1 - y_k^{(i)} \right) \log \left( 1- {\left( h_\Theta \left( x^{(i)} \right) \right)} \right) \right] + \frac{\lambda}{2m} \sum_{l=1}^{L-1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}} \left( \Theta_{ji}^{(l)} \right)^2 J(Θ)=m1[i=1mk=1kyk(i)log(hΘ(x(i)))+(1yk(i))log(1(hΘ(x(i))))]+2mλl=1L1i=1slj=1sl+1(Θji(l))2

添加一些嵌套求和来说明多个输出节点。 在等式的第一部分,在方括号之前,有一个额外的嵌套求和,它循环遍历输出节点的数量。

在正则化部分,在方括号之后,必须考虑多个 θ \theta θ 矩阵。 当前 θ \theta θ 矩阵中的列数等于当前层中的节点数(包括bias偏置单元)。当前的 θ \theta θ 矩阵中的行数等于下一层的节点数(不包括bias偏置单元)。 与之前的逻辑回归一样,对每一项进行平方。

小结:
double sum 只是将输出层中每个单元格计算的逻辑回归成本相加;
tribal sum 只是将整个网络中所有单个 Θ 的平方相加;其中 j 可看做Θ的列,i 为Θ的行;
三重总和中的 i 不是指训练示例 i。

后续修改: 上述改为"其中 i 可看做Θ的列,j 为Θ的行"

2. BP算法 (Backward Propagation)

“反向传播”是神经网络术语,用于最小化成本函数,就像在逻辑回归和线性回归中使用梯度下降所做的一样。 目标是计算: m i n J ( Θ ) minJ(\Theta) minJ(Θ).

也就是说,希望使用 θ \theta θ 中的一组最佳参数来最小化的成本函数 J J J。为了计算代价函数的偏导数 ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial\Theta^{(l)}_{ij}}J\left(\Theta\right) Θij(l)J(Θ),需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。注, 第一层是输入层, 不计算误差.

在看BP前,先看FP,也就是在计算神经网络预测结果时采用了一种正向传播方法,从第一层开始正向一层一层进行计算,直到最后一层的 h θ ( x ) h_{\theta}\left(x\right) hθ(x)

前向传播算法(Forward Propagation):

在这里插入图片描述

反向传播算法(Back Propagation Algorithm):

在这里插入图片描述

在这里插入图片描述

下面的公式推导之前可先查看:
<https://blog.csdn.net/weixin_45091300/article/details/119956352?spm=1001.2014.3001.5501>

从最后一层的误差开始计算,误差是激活单元的预测( a ( 4 ) {a^{(4)}} a(4))与实际值( y k y^k yk)之间的误差,( k = 1 : k k=1:k k=1:k)。
δ \delta δ来表示误差,则: δ ( 4 ) = a ( 4 ) − y \delta^{(4)}=a^{(4)}-y δ(4)=a(4)y
利用这个误差值来计算前一层的误差:
δ ( 3 ) = ( Θ ( 3 ) ) T δ ( 4 ) ∗ s ′ ( z ( 3 ) ) \delta^{(3)}=\left({\Theta^{(3)}}\right)^{T}\delta^{(4)}\ast s'\left(z^{(3)}\right) δ(3)=(Θ(3))Tδ(4)s(z(3))
其中 s ′ ( z ( 3 ) ) s'(z^{(3)}) s(z(3)) s i g m o i d sigmoid sigmoid 函数的导数, s ′ ( z ( 3 ) ) = a ( 3 ) ∗ ( 1 − a ( 3 ) ) s'(z^{(3)})=a^{(3)}\ast(1-a^{(3)}) s(z(3))=a(3)(1a(3))。而 ( θ ( 3 ) ) T δ ( 4 ) (θ^{(3)})^{T}\delta^{(4)} (θ(3))Tδ(4)则是权重导致的误差的和。下一步是继续计算第二层的误差:
δ ( 2 ) = ( Θ ( 2 ) ) T δ ( 3 ) ∗ s ′ ( z ( 2 ) ) \delta^{(2)}=(\Theta^{(2)})^{T}\delta^{(3)}\ast s'(z^{(2)}) δ(2)=(Θ(2))Tδ(3)s(z(2))
因为第一层是输入变量,不存在误差。有了所有的误差的表达式后,便可以计算代价函数的偏导数了,假设 λ = 0 λ=0 λ=0,即不做任何正则化(Regularization)处理时有:
∂ ∂ Θ i j ( l ) J ( Θ ) = a j ( l ) δ i l + 1 \frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta)=a_{j}^{(l)} \delta_{i}^{l+1} Θij(l)J(Θ)=aj(l)δil+1

其中上下标的含义:

l 代表目前所计算的是第几层;

j 代表目前计算层中的激活单元的下标,也将是下一层的第j个输入变量的下标;

i 代表下一层中误差单元的下标,是受到权重矩阵中第 i 行影响的下一层中的误差单元的下标。

3. BP 理解

前向传播算法:

圈出的部分是偏置单元(bias unit), 在计算时要时刻注意. 即: x 0 = a 0 ( 2 ) = a 0 ( 3 ) = 1 x_0=a^{(2)}_0=a^{(3)}_0=1 x0=a0(2)=a0(3)=1
在这里插入图片描述
在这里插入图片描述
FP是按照设定的参数 θ ( l ) \theta^{(l)} θ(l)与特征值 x ( i ) x^{(i)} x(i)逐层进行计算, 即:
a 1 ( 2 ) = s ( θ 10 ( 1 ) x 0 + θ 11 ( 1 ) x 1 + θ 12 ( 1 ) x 2 ) a 2 ( 2 ) = s ( θ 20 ( 1 ) x 0 + θ 21 ( 1 ) x 1 + θ 22 ( 1 ) x 2 ) \begin{aligned} &a_{1}^{(2)}=s(\theta _{10}^{(1)}{{x}_{0}}+\theta _{11}^{(1)}{{x}_{1}}+\theta _{12}^{(1)}{{x}_{2}}) \\ &a_{2}^{(2)}=s(\theta _{20}^{(1)}{{x}_{0}}+\theta _{21}^{(1)}{{x}_{1}}+\theta _{22}^{(1)}{{x}_{2}}) \\ \end{aligned} a1(2)=s(θ10(1)x0+θ11(1)x1+θ12(1)x2)a2(2)=s(θ20(1)x0+θ21(1)x1+θ22(1)x2) a 1 ( 3 ) = s ( θ 10 ( 2 ) a 0 ( 2 ) + θ 11 ( 2 ) a 1 ( 2 ) + θ 12 ( 2 ) a 2 ( 2 ) ) a 2 ( 3 ) = s ( θ 20 ( 2 ) a 0 ( 2 ) + θ 21 ( 2 ) a 1 ( 2 ) + θ 22 ( 2 ) a 2 ( 2 ) ) \begin{aligned} &a_{1}^{(3)}=s(\theta _{10}^{(2)}{{a}^{(2)}_{0}}+\theta _{11}^{(2)}{{a}^{(2)}_{1}}+\theta _{12}^{(2)}{{a}^{(2)}_{2}}) \\ &a_{2}^{(3)}=s(\theta _{20}^{(2)}{{a}^{(2)}_{0}}+\theta _{21}^{(2)}{{a}^{(2)}_{1}}+\theta _{22}^{(2)}{{a}^{(2)}_{2}}) \\ \end{aligned} a1(3)=s(θ10(2)a0(2)+θ11(2)a1(2)+θ12(2)a2(2))a2(3)=s(θ20(2)a0(2)+θ21(2)a1(2)+θ22(2)a2(2)) a ( 4 ) = h θ ( x ) = s ( θ 10 ( 3 ) a 0 ( 3 ) + θ 11 ( 3 ) a 1 ( 3 ) + θ 12 ( 3 ) a 2 ( 3 ) ) a^{(4)}={{h}_{\theta }}(x)=s(\theta _{10}^{(3)}a_{0}^{(3)}+\theta _{11}^{(3)}a_{1}^{(3)}+\theta _{12}^{(3)}a_{2}^{(3)}) a(4)=hθ(x)=s(θ10(3)a0(3)+θ11(3)a1(3)+θ12(3)a2(3))
反向传播算法做的是:

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xxmoment

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值