机器学习—BP神经网络

BP神经网络

往期内容

1. 单变量线性回归
2. 多变量线性回归
3. 逻辑回归
4. 正则化

神经网络的基本概念

  神经网络模型是由许多逻辑单元按照不同层级组织起来的网络。如下图所示,神经网络通常分为输入层(layer1)隐藏层(layer2)输出层(layer3) 三类。每一层的输出变量都是下一层的输入变量。

  其中, a i ( j ) a_i^{(j)} ai(j) 表示第 j j j层的第 i i i激活单元(activation unit)。用 θ ( j ) \theta^{(j)} θ(j)代表从第 j j j层影射到第 j + 1 j+1 j+1层时的权重矩阵,给每一层添加一个偏置单元(bias unit),可以得到激活单元的输出表达式如下:
a 1 ( 2 ) = g ( Θ 10 ( 1 ) x 0 + Θ 11 ( 1 ) x 1 + Θ 12 ( 1 ) x 2 + Θ 13 ( 1 ) x 3 ) a_1^{(2)}=g(\Theta^{(1)}_{10}x_0+\Theta^{(1)}_{11}x_1+\Theta^{(1)}_{12}x_2+\Theta^{(1)}_{13}x_3) a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3) a 2 ( 2 ) = g ( Θ 20 ( 1 ) x 0 + Θ 21 ( 1 ) x 1 + Θ 22 ( 1 ) x 2 + Θ 23 ( 1 ) x 3 ) a_2^{(2)}=g(\Theta^{(1)}_{20}x_0+\Theta^{(1)}_{21}x_1+\Theta^{(1)}_{22}x_2+\Theta^{(1)}_{23}x_3) a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3) a 3 ( 2 ) = g ( Θ 30 ( 1 ) x 0 + Θ 31 ( 1 ) x 1 + Θ 32 ( 1 ) x 2 + Θ 33 ( 1 ) x 3 ) a_3^{(2)}=g(\Theta^{(1)}_{30}x_0+\Theta^{(1)}_{31}x_1+\Theta^{(1)}_{32}x_2+\Theta^{(1)}_{33}x_3) a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
h Θ ( x ) = g ( Θ 10 ( 2 ) a 0 ( 2 ) + Θ 11 ( 2 ) a 1 ( 2 ) + Θ 12 ( 2 ) a 2 ( 2 ) + Θ 13 ( 2 ) a 3 ( 2 ) ) h_{\Theta}(x)=g(\Theta^{(2)}_{10}a_0^{(2)}+\Theta^{(2)}_{11}a_1^{(2)}+\Theta^{(2)}_{12}a_2^{(2)}+\Theta^{(2)}_{13}a_3^{(2)}) hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
  像这样从左到右的算法称为前向传播算法(forword propagation)。我们可以把 a i ( j ) a_i^{(j)} ai(j)看成更高级的特征值,也就是 x i x_i xi的进化体。

神经网络的代价函数

神经网络结构如下图所示:

  其中,m — 训练样本数;
     L — 神经网络层数;
      S I S_I SI — 每层的神经元个数, S L S_L SL即为最后一层中的输出单元个数;
类似于逻辑回归的代价函数,神经网络的代价函数可以表示如下:
J ( Θ ) = − 1 m [ ∑ i = 1 m ∑ k = 1 k y k ( i ) l o g ( h Θ ( x ( i ) ) ) k + ( 1 − y k ( i ) ) l o g ( 1 − ( h Θ ( x ( i ) ) ) k ) ] + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( Θ j i ( l ) ) 2 J(\Theta)=-\frac1m[\sum^m_{i=1}\sum^k_{k=1}y_k^{(i)}log(h_{\Theta}(x^{(i)}))_k+(1-y_k^{(i)})log(1-(h_{\Theta}(x^{(i)}))_k)]+\frac{\lambda}{2m}\sum^{L-1}_{l=1}\sum^{s_l}_{i=1}\sum^{s_{l+1}}_{j=1}(\Theta^{(l)}_{ji})^2 J(Θ)=m1[i=1mk=1kyk(i)log(hΘ(x(i)))k+(1yk(i))log(1(hΘ(x(i)))k)]+2mλl=1L1i=1slj=1sl+1(Θji(l))2  这个代价函数虽然看起来复杂,但其背后的思想还是不变的。前面一部分累加是对每一组特征的K种预测结果与真实情况y进行比较;正则化那一项只是排除了每一行的 θ 0 \theta_0 θ0,最里层的循环 j j j循环的是权重矩阵的所有行;循环 i i i循环的是权重矩阵的所有列。

反向传播(back propagation)

  在用神经网络进行预测的时候,我们采用的是正向传播算法,现在为了计算代价函数的偏导数 ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial\Theta^{(l)}_{ij}}J(\Theta) Θij(l)J(Θ)需要采用反向传播算法
  如上图4层的神经网络, K = 4 K=4 K=4 S L = 4 S_L=4 SL=4 L = 4 L=4 L=4。前向传播过程如下:
a ( 1 ) = x a^{(1)}=x a(1)=x z ( 2 ) = Θ ( 1 ) a ( 1 ) z^{(2)}=\Theta^{(1)}a^{(1)} z(2)=Θ(1)a(1) a ( 2 ) = g ( z ( 2 ) ) a^{(2)}=g(z^{(2)}) a(2)=g(z(2)) z ( 3 ) = Θ ( 2 ) a ( 2 ) z^{(3)}=\Theta^{(2)}a^{(2)} z(3)=Θ(2)a(2) a ( 3 ) = g ( z ( 3 ) ) a^{(3)}=g(z^{(3)}) a(3)=g(z(3)) z ( 4 ) = Θ ( 3 ) a ( 3 ) z^{(4)}=\Theta^{(3)}a^{(3)} z(4)=Θ(3)a(3) a ( 4 ) = g ( z ( 4 ) ) a^{(4)}=g(z^{(4)}) a(4)=g(z(4))
在计算误差时,需要从最后一层的误差开始计算,即:
δ ( 4 ) = a ( 4 ) − y \delta^{(4)}=a^{(4)}-y δ(4)=a(4)y δ ( 3 ) = ( Θ ( 3 ) ) T δ ( 4 ) ∗ g ′ ( z ( 3 ) ) \delta^{(3)}=(\Theta^{(3)})^T\delta^{(4)}*g'(z^{(3)}) δ(3)=(Θ(3))Tδ(4)g(z(3)) δ ( 2 ) = ( Θ ( 2 ) ) T δ ( 3 ) ∗ g ′ ( z ( 2 ) ) \delta^{(2)}=(\Theta^{(2)})^T\delta^{(3)}*g'(z^{(2)}) δ(2)=(Θ(2))Tδ(3)g(z(2))
现在用 Δ i j ( l ) \Delta_{ij}^{(l)} Δij(l)来表示误差矩阵,那么最后可由以下两式计算代价函数的偏导数:
D i j ( l ) : = 1 m Δ i j ( l ) + λ Θ i j ( l )        i f    j ≠ 0 D_{ij}^{(l)}:=\frac1m\Delta_{ij}^{(l)}+\lambda\Theta_{ij}^{(l)}\ \ \ \ \ \ if\ \ j\neq0 Dij(l):=m1Δij(l)+λΘij(l)      if  j=0 D i j ( l ) : = 1 m Δ i j ( l )                    i f    j = 0 D_{ij}^{(l)}:=\frac1m\Delta_{ij}^{(l)}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \ j=0 Dij(l):=m1Δij(l)                  if  j=0

梯度检验

  对较复杂的模型使用梯度下降时,为了防止一些不易察觉的错误的发生,通常使用梯度数值检验(Numerical Gradient Checking) 对其梯度下降算法进行验算。当 θ \theta θ是一个向量时,需要使用偏导数进行计算,下面以 θ 1 \theta_1 θ1为例:
∂ ∂ θ 1 = J ( θ 1 + ϵ 1 , θ 2 , θ 3 . . . θ n ) − J ( θ 1 , θ 2 , θ 3 . . . θ n ) 2 ϵ \frac{\partial}{\partial\theta_1}=\frac{J(\theta_1+\epsilon_1,\theta_2,\theta_3...\theta_n)-J(\theta_1,\theta_2,\theta_3...\theta_n)}{2\epsilon} θ1=2ϵJ(θ1+ϵ1,θ2,θ3...θn)J(θ1,θ2,θ3...θn)根据上面的方法,对每一个 θ \theta θ都计算出一个近似的梯度值,并将其储存在近似梯度矩阵中,最终将得到的这个矩阵同 D i j ( l ) D_{ij}^{(l)} Dij(l)进行比较。

小结

  训练神经网络的步骤可以大致总结如下:

  1. 选择网络结构(决定隐藏层的层数和中间单元的神经元数量)
  2. 参数随机初始化
  3. 利用正向传播计算所有的 h θ ( x ) h_\theta(x) hθ(x)
  4. 利用反向传播计算所有的偏导数
  5. 进行梯度检验(检验一次,梯度下降函数检查无误后即可关闭)
  6. 利用算法最小化代价函数
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值