神经网络初步与反向传播算法

层数表示

输入数据的层叫输入层(input layer)

输出结果的层叫输出层(output layer)

除了这两层之外的层都叫隐藏层(hidden layer)

激活函数

每个结点的激活函数,通常都是sigmoid函数
g ( x ) = 1 1 + e − x g(x)=\frac{1}{1+e^{-x}} g(x)=1+ex1

表示方法denote

通常,上标表示层数,下标表示该层的第几个。

在输入层,输入结点标注为 x i x_i xi,表示输入层的第i个输入.

隐藏层的节点通常表示为 a i j a_i^j aij,表示第j层的第i个结点。

激活函数通常表示为 g ( x ) g(x) g(x).

θ \theta θ表示影响该节点的权重,每层的权重向量都是一个矩阵 Θ \Theta Θ,其维度为( s l + 1 , s l + 1 s_{l+1},s_l+1 sl+1,sl+1),意思是行数等于下一层的节点数,列数等于当前层的节点数,这里+1是因为当前层有偏差结点,而它并不连接下一层的偏差结点。

L :网络的总层数.

s l s_l sl: 第 l l l层的总结点数

K:输出层的结点数(分类数)

如上图所示,隐藏层的各个节点可表示为:
a 1 2 = g ( θ 11 1 x 1 + θ 12 1 x 2 + θ 13 1 x 3 ) a^2_1=g(\theta^1_{11} x_1 + \theta^1_{12}x_2 + \theta^1_{13}x_3) a12=g(θ111x1+θ121x2+θ131x3)
a 2 2 = g ( θ 21 1 x 1 + θ 22 1 x 2 + θ 23 1 x 3 ) a^2_2=g(\theta^1_{21} x_1 + \theta^1_{22}x_2 + \theta^1_{23}x_3) a22=g(θ211x1+θ221x2+θ231x3)
a 3 2 = g ( θ 31 1 x 1 + θ 32 1 x 2 + θ 33 1 x 3 ) a^2_3=g(\theta^1_{31} x_1 + \theta^1_{32}x_2 + \theta^1_{33}x_3) a32=g(θ311x1+θ321x2+θ331x3)
a 4 2 = g ( θ 41 1 x 1 + θ 42 1 x 2 + θ 43 1 x 3 ) a^2_4=g(\theta^1_{41} x_1 + \theta^1_{42}x_2 + \theta^1_{43}x_3) a42=g(θ411x1+θ421x2+θ431x3)
h θ ( x ) = a 1 3 = g ( θ 11 2 a 1 2 + θ 12 2 a 2 2 + θ 13 2 a 3 2 ) h_\theta(x)=a^3_1=g(\theta^2_{11} a^2_1 + \theta^2_{12}a^2_2 + \theta^2_{13}a^2_3) hθ(x)=a13=g(θ112a12+θ122a22+θ132a32)
其中
a 1 2 = g ( θ 11 1 x 1 + θ 12 1 x 2 + θ 13 1 x 3 ) a^2_1=g(\theta^1_{11} x_1 + \theta^1_{12}x_2 + \theta^1_{13}x_3) a12=g(θ111x1+θ121x2+θ131x3)
表示第2层第1个结点是由输入层的三个结点以及它们的权重通过激活函数激活的。 θ 12 1 \theta^1_{12} θ121表示第1层的第1个节点 a 1 a_1 a1和上一层的第2个输入节点 x 2 x_2 x2的边的权重,记住这个权重的下标一共有两个符号,第一个是下一层的节点序号,第二个是上一层的节点序号,即 θ [ n e x t    l a y e r    n o d e ]    [ l a s t    l a y e r    n o d e ] [ l a y e r ] \theta^{[layer]}_{[next \; layer \; node]\; [last \; layer \; node]} θ[nextlayernode][lastlayernode][layer]

第一层(输入层)到第二层的向量是(4×3)的矩阵,如下图:
Θ 1 = [ θ 11 1 θ 12 1 θ 13 1 θ 21 1 θ 22 1 θ 23 1 θ 31 1 θ 32 1 θ 33 1 θ 41 1 θ 42 1 θ 43 1 ] \Theta ^1= \begin{bmatrix} \theta^1_{11} & \theta^1_{12} & \theta^1_{13} \\ \\ \theta^1_{21} & \theta^1_{22} & \theta^1_{23} \\ \\ \theta^1_{31} & \theta^1_{32} & \theta^1_{33} \\ \\ \theta^1_{41} & \theta^1_{42} & \theta^1_{43} \end{bmatrix} Θ1=θ111θ211θ311θ411θ121θ221θ321θ421θ131θ231θ331θ431
输入层 x x x是(1×3)的, a 2 a^2 a2是(1×4)的,则 a 2 a^2 a2可以用矢量化表示为 a 2 = x ∗ ( Θ 1 ) T a^2=x*(\Theta^1)^T a2=x(Θ1)T.




如图所示,输入层有10个节点(加上偏差结点共11个),隐藏层有10个节点(加上偏差结点共11个),输出层有1个节点,则每一层的权重矩阵维度如图所示。

(不过通常,在输入层和隐藏层会加入一个额外节点 x 0 , a 0 x_0,a_0 x0,a0,称为偏差结点,这里没有画出。)

代价函数 costfunction

神经网络的代价函数跟逻辑回归的代价函数十分相似。
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 ∑ i = 1 s l ∑ j = 1 s l + 1 ( θ i , j l ) 2 J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\sum_{k=1}^{K}[y_k^ilog((h_\theta (x^i))_k)-(1-y_k^i)log(1-(h_\theta (x^i)_k)] + \frac{\lambda}{2m}\sum_{l=1}^{L} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}} (\theta_{i,j}^l)^2 J(θ)=m1i=1mk=1K[ykilog((hθ(xi))k)(1yki)log(1(hθ(xi)k)]+2mλl=1Li=1slj=1sl+1(θi,jl)2
虽然看上去有点长,但是结合逻辑回归的代价函数非常好理解,对K个输出节点的输出进行累加,然后再对m个训练集数据的误差进行累加,后面的部分是正则化,对K层中每两层的权重两两进行累加,求平方。

前向传播 forward propagation 过程

如图,除了输入层以外的节点和偏差结点,每个节点的值的计算方式为
a i l = g ( θ i , 0 l − 1 a 0 l − 1 + θ i , 1 l − 1 a 1 l − 1 + ⋯ + θ i , s l − 1 l − 1 ) o r a l = g ( a l − 1 ∗ ( Θ l − 1 ) T ) a^l_{i}=g(\theta^{l-1}_{i,0}a^{l-1}_0 + \theta ^{l-1}_{i,1} a^{l-1}_1 + \dots + \theta^{l-1}_{i,s_{l-1}}) \\ or \\ a^l=g( a^{l-1} * (\Theta^{l-1} )^T) ail=g(θi,0l1a0l1+θi,1l1a1l1++θi,sl1l1)oral=g(al1(Θl1)T)
其中,g(x)为激活函数, θ \theta θ是每条线上的权重

以图中红色标注的节点 a 1 2 a^2_1 a12为例,它由第一层的三个节点分别乘上红线上各自的权重求和,再经过激活函数得到

其他的除了偏差结点之外的节点,都通过一样的公式得到节点的值。

反向传播算法 Back Propagation

算法流程为:

  1. 设置 Δ l = 0 \Delta^l=0 Δl=0
  2. for i = 1 to m :(每次处理一个样例)
    1. 给输入节点赋值: a 1 = x i a^1 = x^i a1=xi (将每一个样本赋值给输入层的节点,这里 a 1 , x i a^1,x^i a1,xi是一个(d×1)向量而不是一个实数)
    2. 通过前向传播算法,得到输出: a l    f o r    ( l = 1 , 2 , 3 , … L ) ( s l , 1 ) a^l \; for \;(l=1,2,3,\dots L)\quad (s^l,1) alfor(l=1,2,3,L)(sl,1)
    3. 获得输出层的每个节点误差: δ L = y i − a L \delta^L = y^i - a^L δL=yiaL, (这里 y i , a L , δ L y^i,a^L,\delta^L yi,aL,δL都是( s L × 1 ) s_L×1) sL×1) 向量)
    4. 反向传播:计算 δ l    ,    f o r    l = ( L − 1 , L − 2 , … , 2 ) δ l    i s    ( s l , 1 ) \delta^l \; ,\; for \; l =(L-1,L-2,\dots,2) \quad \delta^l \; is\;(s^l,1) δl,forl=(L1,L2,,2)δlis(sl,1) 注意:这里没有 δ 1 \delta^1 δ1,因为这一层是输入节点,计算输入节点的误差没有意义。

      反向传播计算公式为:
      δ l = ( Θ l ) T δ l + 1 . ∗ a l . ∗ ( 1 − a l ) \delta^l = (\Theta^l)^T\delta^{l+1} .* a^l .*(1-a^l) δl=(Θl)Tδl+1.al.(1al)
      . ∗ .* .的意思是对每个元素乘以该数,这是因为激活函数为Sigmoid函数的导数为 ∂ f ( x ) = f ( x ) ( 1 − f ( x ) ) \partial f(x) = f(x)(1-f(x)) f(x)=f(x)(1f(x))
    5. 更新 Δ : \Delta: Δ:
      Δ l : = Δ l + ( δ l + 1 ) T a l \Delta^l := \Delta^l + (\delta^{l+1})^Ta^l Δl:=Δl+(δl+1)Tal
      ( Δ l \Delta^l Δl的维数跟 Θ l \Theta^l Θl是一样的,都是( s l + 1 , s l + 1 s_{l+1},s_l+1 sl+1,sl+1)),需要注意的是,这里需要去掉 δ l + 1 \delta^{l+1} δl+1的第0个元素,即偏差结点,而 a l a^l al是包含了偏差结点的。
  3. 加入正则化项,正则化项不应当包含偏差节点,所以将 Θ \Theta Θ的第一列(表示偏差节点权重那一列)设置为0,最终得到每层 l l l 的梯度:
    D l : = 1 m Δ l + λ m Θ l f o r    n o n − b i a s    n o d e D^l := \frac{1}{m} \Delta^l +\frac{ \lambda}{m} \Theta^l \quad for \; non-bias \; node Dl:=m1Δl+mλΘlfornonbiasnode
    D l : = 1 m Δ l f o r    b i a s    n o d e D^l := \frac{1}{m} \Delta^l \quad for \; bias \; node Dl:=m1Δlforbiasnode
    因此,神经网络的梯度为:
    ∂ ∂ θ l J ( Θ ) = D l \frac{\partial}{\partial \theta ^l}J(\Theta)=D^l θlJ(Θ)=Dl
    手写图 标注了每个中间数据的维度,m是样本数据数, S 2 S_2 S2表示第二层节点数量
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值