神经网络
反向传导算法
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)=21∥hW,b(x)−y∥2
- 对于
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=1∑mJ(W,b;x(i),y(i))]+2λl=1∑nl−1i=1∑sij=1∑si+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
α为学习速率。
- 反向传播算法
- 进行前馈传导计算,利用向前传导公式,得到 L 2 , L 3 , . . . , L m L_2,L_3,...,L_m L2,L3,...,Lm的激活值
- 对于第 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)=∂zinl∂J(W,b;x,y)=∂zinl∂21∥y−hW,b(x)∥2=−(yi−ainl)⋅f′(zi(nl))
- 对 l = n l − 1 , n 1 − 2 , . . . , 2 l=n_l-1,n_1-2,...,2 l=nl−1,n1−2,...,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=1∑sl+1Wji(l)δj(l+1))f′(zi(l))
- 计算需要的偏导数: ∂ ∂ 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)
- 一次权重的更新
- 对于所有 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
- 对于
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)
- 更新权重: 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=1∑m[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=1∑s2logp^jρ+(1−ρ)+(1−ρ)log1−p^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=1∑s2KL(ρ∥∥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=1∑s2KL(ρ∥∥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=1∑s3Wji(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=1∑s3Wji(2)δj(3))+β(−p^iρ+1−p^i1−ρ))f′(zi(2))。
- 加入惩罚因子
- 原理