神经网络

本文介绍了神经网络的反向传导算法,包括代价函数、权重更新和反向传播过程。同时,探讨了自编码算法的作用、特点及稀疏性的原理与实现,展示了如何在训练中引入稀疏性约束来改进神经网络模型。
摘要由CSDN通过智能技术生成

神经网络

反向传导算法

m m m个数据样本 { ( x ( 1 ) , y ( 1 ) ) , ⋯   , ( x ( m ) , y ( m ) ) } \left\{ {\left( {{x^{\left( 1 \right)}},{y^{\left( 1 \right)}}} \right), \cdots ,\left( {{x^{\left( m \right)}},{y^{\left( m \right)}}} \right)} \right\} {(x(1),y(1)),,(x(m),y(m))},可以使用批量梯度下降法求解神经网络。

  • 代价函数

    • 对于单个样本: J ( W , b ; x , y ) = 1 2 ∥ h W , b ( x ) − y ∥ 2 J\left( {W,b;x,y} \right) = \frac{1}{2}{\left\| {{h_{W,b}}\left( x \right) - y} \right\|^2} J(W,b;x,y)=21hW,b(x)y2
    • 对于 m m m个样本: J ( W , b ) = [ 1 m ∑ i = 1 m J ( W , b ; x ( i ) , y ( i ) ) ] + λ 2 ∑ l = 1 n l − 1 ∑ i = 1 s i ∑ j = 1 s i + 1 ( W j i ( i ) ) 2 J\left( {W,b} \right) = \left[ {\frac{1}{m}\sum\limits_{i = 1}^m {J\left( {W,b;{x^{\left( i \right)}},{y^{\left( i \right)}}} \right)} } \right] + \frac{\lambda }{2}\sum\limits_{l = 1}^{{n_l} - 1} {\sum\limits_{i = 1}^{{s_i}} {\sum\limits_{j = 1}^{{s_{i + 1}}} {{{\left( {W_{ji}^{\left( i \right)}} \right)}^2}} } } J(W,b)=[m1i=1mJ(W,b;x(i),y(i))]+2λl=1nl1i=1sij=1si+1(Wji(i))2,其中 n l n_l nl表示网络的层数。
      其中第一项为一个均方差项,第二项为规则化项(减小权重幅度,防止过度拟合)。
      注:通常权重衰减的计算不使用偏执项 b i ( l ) b^{\left( l \right)}_i bi(l),一般来说如果使用只会对最终的神经网络产生很小的影响。
    • 目标:为了使 J ( W , b ) J\left( {W,b} \right) J(W,b)达到最小的效果,参数 W j i ( i ) W_{ji}^{\left( i \right)} Wji(i) b i ( l ) b^{\left( l \right)}_i bi(l)都会初始化为一个很小的接近0的随机值( N o r m a l ( 0 , ε 2 ) Normal \left( 0,\varepsilon^2 \right) Normal(0,ε2),其中 ε = 0.01 \varepsilon=0.01 ε=0.01
      注:由于 J ( W , b ) J\left( {W,b} \right) J(W,b)为非凸函数,可能导致最终收敛到局部最优解。 参数要进行随机初始化,不能设置为全0以及相同的值。
    • W W W b b b的更新: W j i ( i ) = W j i ( i ) − α ∂ ∂ W i j ( l ) J ( W , b ) W_{ji}^{\left( i \right)}=W_{ji}^{\left( i \right)}-\alpha \frac{\partial }{{\partial W_{ij}^{\left( l \right)}}}J\left( {W,b} \right) Wji(i)=Wji(i)αWij(l)J(W,b) b i ( l ) = b i ( l ) − α ∂ ∂ b i ( l ) J ( W , b ) b^{\left( l \right)}_i=b^{\left( l \right)}_i-\alpha \frac{\partial }{{\partial b^{\left( l \right)}_i}}J\left( {W,b} \right) bi(l)=bi(l)αbi(l)J(W,b)其中 α \alpha α为学习速率。
      • 反向传播算法
        1. 进行前馈传导计算,利用向前传导公式,得到 L 2 , L 3 , . . . , L m L_2,L_3,...,L_m L2,L3,...,Lm的激活值
        2. 对于第 n l n_l nl层(输出层)的每个输出单元 i i i,计算残差: δ i ( n l ) = ∂ ∂ z i n l J ( W , b ; x , y ) = ∂ ∂ z i n l 1 2 ∥ y − h W , b ( x ) ∥ 2 = − ( y i − a i n l ) ⋅ f ′ ( z i ( n l ) ) \delta _i^{\left( n_l \right)} = \frac{\partial }{{\partial z_i^{{n_l}}}}J\left( {W,b;x,y} \right) = \frac{\partial }{{\partial z_i^{{n_l}}}}\frac{1}{2}{\left\| {y - {h_{W,b}}\left( x \right)} \right\|^2} = - \left( {{y_i} - a_i^{{n_l}}} \right) \cdot f'\left( {z_i^{\left( {{n_l}} \right)}} \right) δi(nl)=zinlJ(W,b;x,y)=zinl21yhW,b(x)2=(yiainl)f(zi(nl))
        3. l = n l − 1 , n 1 − 2 , . . . , 2 l=n_l-1,n_1-2,...,2 l=nl1,n12,...,2的各层,第 l l l层的第 i i i个结点的残差计算方法: δ i ( l ) = ( ∑ j = 1 s l + 1 W j i ( l ) δ j ( l + 1 ) ) f ′ ( z i ( l ) ) \delta _i^{\left( l \right)} = \left( {\sum\limits_{j = 1}^{{s_{l + 1}}} {W_{ji}^{\left( l \right)}\delta _j^{\left( {l + 1} \right)}} } \right)f'\left( {z_i^{\left( l \right)}} \right) δi(l)=(j=1sl+1Wji(l)δj(l+1))f(zi(l))
        4. 计算需要的偏导数: ∂ ∂ W i j ( l ) J ( W , b ; x , y ) = a j ( l ) δ i ( l + 1 ) \frac{\partial }{{\partial W_{ij}^{\left( l \right)}}}J\left( {W,b;x,y} \right) = a_j^{\left( l \right)}\delta _i^{\left( {l + 1} \right)} Wij(l)J(W,b;x,y)=aj(l)δi(l+1) ∂ ∂ b i ( l ) J ( W , b ; x , y ) = δ i ( l + 1 ) \frac{\partial }{{\partial b_i^{\left( l \right)}}}J\left( {W,b;x,y} \right) = \delta _i^{\left( {l + 1} \right)} bi(l)J(W,b;x,y)=δi(l+1)
      • 一次权重的更新
        1. 对于所有 l l l,令 Δ W ( l ) : = 0 \Delta {W^{\left( l \right)}}: = 0 ΔW(l):=0 Δ b ( l ) : = 0 \Delta {b^{\left( l \right)}}: = 0 Δb(l):=0
        2. 对于 i = 1 , 2 , . . . , m i=1,2,...,m i=1,2,...,m:
          • 使用反向传播算法计算 ∇ W ( l ) J ( W , b ; x , y ) {\nabla _{{W^{\left( l \right)}}}}J\left( {W,b;x,y} \right) W(l)J(W,b;x,y) ∇ b ( l ) J ( W , b ; x , y ) {\nabla _{{b^{\left( l \right)}}}}J\left( {W,b;x,y} \right) b(l)J(W,b;x,y)
          • 计算 Δ W ( l ) : = Δ W ( l ) + ∇ W ( l ) J ( W , b ; x , y ) \Delta {W^{\left( l \right)}}: = \Delta {W^{\left( l \right)}} + {\nabla _{{W^{\left( l \right)}}}}J\left( {W,b;x,y} \right) ΔW(l):=ΔW(l)+W(l)J(W,b;x,y)
          • 计算 Δ b ( l ) : = Δ b ( l ) + ∇ b ( l ) J ( W , b ; x , y ) \Delta {b^{\left( l \right)}}: = \Delta {b^{\left( l \right)}} + {\nabla _{{b^{\left( l \right)}}}}J\left( {W,b;x,y} \right) Δb(l):=Δb(l)+b(l)J(W,b;x,y)
        3. 更新权重: W ( l ) = W ( l ) − α [ ( 1 m Δ W ( l ) ) + λ W ( l ) ] {W^{\left( l \right)}} = {W^{\left( l \right)}} - \alpha \left[ {\left( {\frac{1}{m}\Delta {W^{\left( l \right)}}} \right) + \lambda {W^{\left( l \right)}}} \right] W(l)=W(l)α[(m1ΔW(l))+λW(l)] b ( l ) = b ( l ) − α [ ( 1 m Δ b ( l ) ) ] {b^{\left( l \right)}} = {b^{\left( l \right)}} - \alpha \left[ {\left( {\frac{1}{m}\Delta {b^{\left( l \right)}}} \right)} \right] b(l)=b(l)α[(m1Δb(l))]

自编码算法与稀疏性

  • 自编码算法

    • 作用:进行预训练,为正式训练提供一个好的 W W W值。
    • 特点
      • 此时使用的数据没有标签
      • 输入输出层个数相同,隐藏层个数少
      • 尝试学习一个 h W , b ( x ) ≈ x h_{W,b}\left( x \right) \approx x hW,b(x)x,逼近一个恒等函数使得输出接近输入。
      • 当隐藏层个数较多时,需要使用稀疏性限制。
  • 稀疏性

    • 原理
      • 当神经元的输出接近于1时我们认为它被激活,接近于0则被认为被抑制,那么使得神经元大部分的时间都是被抑制的限制称为稀疏性限制(激活函数为sigmoid)。(激活函数为tanh时输出为-1认为被抑制)
      • a j ( 2 ) ( x ) a^{(2)}_j(x) aj(2)(x)表示在给定输入 x x x X = ( x 1 , x 2 , . . . , x m ) X=(x_1,x_2,...,x_m) X=(x1,x2,...,xm))的情况下,隐藏神经元 j j j的激活的,则神经元 j j j的平均激活度(在训练集上)为: p ^ j = 1 m ∑ i = 1 m [ a j ( 2 ) ( x ( i ) ) ] {\hat p_j} = \frac{1}{m}\sum\limits_{i = 1}^m {\left[ {a_j^{\left( 2 \right)}\left( {{x^{\left( i \right)}}} \right)} \right]} p^j=m1i=1m[aj(2)(x(i))]近似添加限制 p ^ j = ρ {\hat p_j} =\rho p^j=ρ ρ \rho ρ为稀疏性参数,通常接近于 0 0 0 0.05 0.05 0.05),也就是要求 p ^ j {\hat p_j} p^j接近 0.05 0.05 0.05,隐藏神经元的激活度接近 0 0 0
    • 实现
      • 加入惩罚因子
        • 惩罚因子选择很多,以其中一个为例: ∑ j = 1 s 2 log ⁡ ρ p ^ j + ( 1 − ρ ) + ( 1 − ρ ) log ⁡ 1 − ρ 1 − p ^ j \sum\limits_{j = 1}^{{s_2}} {\log \frac{\rho }{{{{\hat p}_j}}} + \left( {1 - \rho } \right) + \left( {1 - \rho } \right)\log \frac{{1 - \rho }}{{1 - {{\hat p}_j}}}} j=1s2logp^jρ+(1ρ)+(1ρ)log1p^j1ρ其中 s 2 s_2 s2为隐藏层中隐藏神经元个数, j j j依次代表隐藏层中每一个神经元。以相对熵的形式也可以写为 ∑ j = 1 s 2 K L ( ρ ∥ p ^ j ) \sum\limits_{j = 1}^{{s_2}} {KL\left( {\rho \left\| {{{\hat p}_j}} \right.} \right)} j=1s2KL(ρp^j)
        • p ^ j = ρ {\hat p_j}=\rho p^j=ρ时, K L ( ρ ∥ p ^ j ) = 0 {KL\left( {\rho \left\| {{{\hat p}_j}} \right.}\right)}=0 KL(ρp^j)=0,且其值随着 p ^ j {\hat p_j} p^j ρ \rho ρ之间差异的增大而单调递增。
        • 最终代价函数为: J s p a r s e ( W , b ) = J ( W , b ) + β ∑ j = 1 s 2 K L ( ρ ∥ p ^ j ) {J_{sparse}}\left( {W,b} \right) = J\left( {W,b} \right) + \beta \sum\limits_{j = 1}^{{s_2}} {KL\left( {\rho \left\| {{{\hat p}_j}} \right.} \right)} Jsparse(W,b)=J(W,b)+βj=1s2KL(ρp^j)其中 β \beta β控制稀疏性惩罚因子的权重。此时须将权重更新过程中的 δ i ( 2 ) = ( ∑ j = 1 s 3 W j i ( 2 ) δ j ( 3 ) ) f ′ ( z i ( 2 ) ) \delta _i^{\left( 2 \right)} = \left( {\sum\limits_{j = 1}^{{s_{3}}} {W_{ji}^{\left( 2 \right)}\delta _j^{\left( {3} \right)}} } \right)f'\left( {z_i^{\left( 2 \right)}} \right) δi(2)=(j=1s3Wji(2)δj(3))f(zi(2))替换为 δ i ( 2 ) = ( ( ∑ j = 1 s 3 W j i ( 2 ) δ j ( 3 ) ) + β ( − ρ p ^ i + 1 − ρ 1 − p ^ i ) ) f ′ ( z i ( 2 ) ) \delta _i^{\left( 2 \right)} = \left( {\left( {\sum\limits_{j = 1}^{{s_{3}}} {W_{ji}^{\left( 2 \right)}\delta _j^{\left( {3} \right)}} } \right) + \beta \left( { - \frac{\rho }{{{{\hat p}_i}}} + \frac{{1 - \rho }}{{1 - {{\hat p}_i}}}} \right)} \right)f'\left( {z_i^{\left( 2 \right)}} \right) δi(2)=((j=1s3Wji(2)δj(3))+β(p^iρ+1p^i1ρ))f(zi(2))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值