Forward propagation:
notation:
a(j)i a i ( j ) = “activation” of unit i in layer j
Θ(j) Θ ( j ) = matrix of weights controlling function mapping from layer j to layer j+1
hθ(x(i))k=a(3)k h θ ( x ( i ) ) k = a k ( 3 ) is the activation (output value) of the k-th output unit
y=⎡⎣⎢⎢⎢⎢⎢⎢⎢yk=11yk=20yk=30⋮yk=100⎤⎦⎥⎥⎥⎥⎥⎥⎥,⎡⎣⎢⎢⎢⎢⎢⎢⎢010⋮0⎤⎦⎥⎥⎥⎥⎥⎥⎥,…or⎡⎣⎢⎢⎢⎢⎢⎢⎢100⋮1⎤⎦⎥⎥⎥⎥⎥⎥⎥ y = [ y k = 1 1 y k = 2 0 y k = 3 0 ⋮ y k = 10 0 ] , [ 0 1 0 ⋮ 0 ] , … o r [ 1 0 0 ⋮ 1 ] 是one-hot编码。
【备注:one-hot编码的优点:不同数字如(0,1,….9)之间的欧式距离是相等的。】
y(i)k= y k ( i ) = 第i个样本的的第j个输出单元。the k-th output unit of the i-th example
L= L = 网络层的总数,包括输入层与输出层。the number of the layers,include input layer and output layer
Backpropagation:
Training set { (x(1),y(1)),(x(2),y(2)),…,(x(m),y(m)) ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , … , ( x ( m ) , y ( m ) ) } .m examples.
Set Δ(l)ij=0 Δ i j ( l ) = 0 (for all l,i,j) ,used to comput ∂∂Θ(l)i,jJ(Θ), ∂ ∂ Θ i , j ( l ) J ( Θ ) , Cycle accumulation
For training example t=1 to m:
1. Set a(1):=x(t) a ( 1 ) := x ( t )
2.执行前向传播,分别计算 a(l) a ( l ) for l=2,3,…,L l = 2 , 3 , … , L
3.用 y(i) y ( i ) ,通过 δ(L)=a(L)−y(t) δ ( L ) = a ( L ) − y ( t ) 计算输出层的损失。
4.Compute δ(L−1),δ(L−2),…,δ(2).δ(l)=((Θ(l))Tδ(l+1)).∗a(l).∗(1−a(i)) δ ( L − 1 ) , δ ( L − 2 ) , … , δ ( 2 ) . δ ( l ) = ( ( Θ ( l ) ) T δ ( l + 1 ) ) . ∗ a ( l ) . ∗ ( 1 − a ( i ) ) // g′(z(l))=a(l).∗(1−a(i)) g ′ ( z ( l ) ) = a ( l ) . ∗ ( 1 − a ( i ) )
5. Δ(l)i,j:=Δ(l)i,j+a(l)jδ(l+1)i Δ i , j ( l ) := Δ i , j ( l ) + a j ( l ) δ i ( l + 1 ) or with vectorization, Δ(l):=Δ(l)+δ(l+1)(a(l))T Δ ( l ) := Δ ( l ) + δ ( l + 1 ) ( a ( l ) ) T .
ENDFOR
hense we update our new Δ Δ matrix.
g′(z(l))=a(l).∗(1−a(i)) g ′ ( z ( l ) ) = a ( l ) . ∗ ( 1 − a ( i ) ) 推导过程:
已知: g(z(l))=11+e−z(l)=a(l) g ( z ( l ) ) = 1 1 + e − z ( l ) = a ( l )
g′(z(l))=(sigmoid(z(l)))′ g ′ ( z ( l ) ) = ( s i g m o i d ( z ( l ) ) ) ′
=(11+e−z(l))′ = ( 1 1 + e − z ( l ) ) ′
=−1⋅1(1+e−z(l))2⋅(1+e−z(l))′ = − 1 ⋅ 1 ( 1 + e − z ( l ) ) 2 ⋅ ( 1 + e − z ( l ) ) ′
=−1(1+e−z(l))2⋅(e−z(l))′ = − 1 ( 1 + e − z ( l ) ) 2 ⋅ ( e − z ( l ) ) ′
=−1(1+e−z(l))2⋅e−z(l)⋅(−z(l))′ = − 1 ( 1 + e − z ( l ) ) 2 ⋅ e − z ( l ) ⋅ ( − z ( l ) ) ′
=−1(1+e−z(l))2⋅e−z(l)⋅−1 = − 1 ( 1 + e − z ( l ) ) 2 ⋅ e − z ( l ) ⋅ − 1
=(e−z(l)+1)−1(1+e−z(l))2 = ( e − z ( l ) + 1 ) − 1 ( 1 + e − z ( l ) ) 2
=11+e−z(l)−1(1+e−z(l))2 = 1 1 + e − z ( l ) − 1 ( 1 + e − z ( l ) ) 2
=g(z(l))⋅(1−g(z(l))) = g ( z ( l ) ) ⋅ ( 1 − g ( z ( l ) ) )
=a(l)⋅(1−a(l)) = a ( l ) ⋅ ( 1 − a ( l ) )
反向传播部分的计算比较繁琐,特别作了一张简化了的网络示意图。实际效果与课程中样例是一致的。
a(1)=x(i) a ( 1 ) = x ( i ) 是样本的输入层,图中示意X有两个特征,另外增加一个偏置量 a(1)0 a 0 ( 1 )
a(2) a ( 2 ) 层是隐藏层,有三个节点, a(1)∗θ(1) a ( 1 ) ∗ θ ( 1 ) 后输出 z(2) z ( 2 ) , z(2) z ( 2 ) 再经过激活函数sigmoid输出 a(2) a ( 2 ) 。隐藏层添加一个偏置量 a(2)0 a 0 ( 2 )
a(3) a ( 3 ) 是输出层,也有激活的过程,输出的 a(3)1=y1 a 1 ( 3 ) = y 1 对应公式里的 (hθ(x(i)))k=1,a(3)2=y2 ( h θ ( x ( i ) ) ) k = 1 , a 2 ( 3 ) = y 2 对应公式里的 (hθ(x(i)))k=2 ( h θ ( x ( i ) ) ) k = 2 , hθ(x(i))=[y(i)1,y(i)2] h θ ( x ( i ) ) = [ y 1 ( i ) , y 2 ( i ) ]
回顾一下神经网络的损失函数:
【首先说明一下,课程关于方向传播只给出了一些流程用类似“ 3.用 y(i) y ( i ) ,通过 δ(L)=a(L)−y(t) δ ( L ) = a ( L ) − y ( t ) 计算输出层的损失。 4.Compute δ(L−1),δ(L−2),…,δ(2).δ(l)=((Θ(l))Tδ(l+1)).∗a(l).∗(1−a(i)) δ ( L − 1 ) , δ ( L − 2 ) , … , δ ( 2 ) . δ ( l ) = ( ( Θ ( l ) ) T δ ( l + 1 ) ) . ∗ a ( l ) . ∗ ( 1 − a ( i ) ) 5. Δ(l)i,j:=Δ(l)i,j+a(l)jδ(l+1)i Δ i , j ( l ) := Δ i , j ( l ) + a j ( l ) δ i ( l + 1 ) ” 这样的简化说明,至于为什么这么设定没有阐述。这就导致课程中所说的流程是不明其道理的。而关于神经网络的反向传播想要说清楚,估计得说上一整天(参考我的智商)。我尽力自洽还原吧】
我觉得课程这部分描述的有点凌乱。 a(l).∗(1−a(i)) a ( l ) . ∗ ( 1 − a ( i ) ) 这一项看着很眼熟,是sigmoid(z)的导数。真身是它: ∂a(L)∂z(L) ∂ a ( L ) ∂ z ( L ) 。把定义稍微变一下,感觉就都对上了。 δ(l)=(Θ(l))Tδ(l+1) δ ( l ) = ( Θ ( l ) ) T δ ( l + 1 ) 。这是误差的反向传导过程,参数矩阵的转置可以表达为按参数的(大小)为权重反向计算误差。
∂z(l+1)∂θ(l+1)=a(l) ∂ z ( l + 1 ) ∂ θ ( l + 1 ) = a ( l )
把这三块合并起来看看,是它!: ∂J(Θ)∂θ(L)=∂J(Θ)∂a(L)⋅∂a(L)∂z(L)⋅∂z(L)∂θ(L) ∂ J ( Θ ) ∂ θ ( L ) = ∂ J ( Θ ) ∂ a ( L ) ⋅ ∂ a ( L ) ∂ z ( L ) ⋅ ∂ z ( L ) ∂ θ ( L )
太雷人了,略吧
要完整表述整个反向传播,发现一两句话说不完。最好加上一些辅助的说明图。完整推导过程见另一篇博客《Machine Learning |吴恩达 (2-2)—神经网络,反向传播推导》
课程中列出下图:
1)参数不能都初始化为0。这样做的话,会导致所有的反向传播都是一样的,同一层大量的神经元都是相同的参数(反向更新后),没有存在的意义。
2)参数初始化在[-ϵ,ϵ]之间,而关于ϵ的大小,课程没有说明。
下面我们谈谈如何设定ϵ,或者应该如何对参数进行初始化。参考《Neural Networks and Deep Learning》
参数如果按高斯分布初始化mu=0,sigma=1的情况下。 z=∑mi=0wi⋅xi+b z = ∑ i = 0 m w i ⋅ x i + b
z的分布将很大可能是以下形式:
也就是z值太小,回顾sigmoid’(z)的导数图像,这将导致偏导数非常小,“神经元趋于饱和”,导致学习缓慢的问题。
我们希望z的分布如下:
大部分的z不要太小。那么可以设定参数的随机初始化为高斯分布( mu=0,sigma=1nin√ m u = 0 , s i g m a = 1 n i n ) nin n i n 是指上一层(含输入层)神经元个数.
本文发布于:2024-02-02 14:23:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170685501244392.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |