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

本文深入解析神经网络的基本概念,包括层的概念、激活函数、权重表示、前向传播和反向传播算法,以及代价函数的计算。通过实例展示了神经网络如何进行训练和优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

层数表示

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

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

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

激活函数

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

表示方法denote

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

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

隐藏层的节点通常表示为aija_i^jaij,表示第j层的第i个结点。

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

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

L :网络的总层数.

sls_lsl: 第lll层的总结点数

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

如上图所示,隐藏层的各个节点可表示为:
a12=g(θ111x1+θ121x2+θ131x3) a^2_1=g(\theta^1_{11} x_1 + \theta^1_{12}x_2 + \theta^1_{13}x_3) a12=g(θ111x1+θ121x2+θ131x3)
a22=g(θ211x1+θ221x2+θ231x3) a^2_2=g(\theta^1_{21} x_1 + \theta^1_{22}x_2 + \theta^1_{23}x_3) a22=g(θ211x1+θ221x2+θ231x3)
a32=g(θ311x1+θ321x2+θ331x3) a^2_3=g(\theta^1_{31} x_1 + \theta^1_{32}x_2 + \theta^1_{33}x_3) a32=g(θ311x1+θ321x2+θ331x3)
a42=g(θ411x1+θ421x2+θ431x3) 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)=a13=g(θ112a12+θ122a22+θ132a32) 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)
其中
a12=g(θ111x1+θ121x2+θ131x3) 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个结点是由输入层的三个结点以及它们的权重通过激活函数激活的。θ121\theta^1_{12}θ121表示第1层的第1个节点a1a_1a1和上一层的第2个输入节点x2x_2x2的边的权重,记住这个权重的下标一共有两个符号,第一个是下一层的节点序号,第二个是上一层的节点序号,即θ[next  layer  node]  [last  layer  node][layer]\theta^{[layer]}_{[next \; layer \; node]\; [last \; layer \; node]}θ[nextlayernode][lastlayernode][layer]

第一层(输入层)到第二层的向量是(4×3)的矩阵,如下图:
Θ1=[θ111θ121θ131θ211θ221θ231θ311θ321θ331θ411θ421θ431] \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
输入层xxx是(1×3)的,a2a^2a2是(1×4)的,则a2a^2a2可以用矢量化表示为a2=x∗(Θ1)Ta^2=x*(\Theta^1)^Ta2=x(Θ1)T.




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

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

代价函数 costfunction

神经网络的代价函数跟逻辑回归的代价函数十分相似。
J(θ)=−1m∑i=1m∑k=1K[ykilog((hθ(xi))k)−(1−yki)log(1−(hθ(xi)k)]+λ2m∑l=1L∑i=1sl∑j=1sl+1(θi,jl)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 过程

如图,除了输入层以外的节点和偏差结点,每个节点的值的计算方式为
ail=g(θi,0l−1a0l−1+θi,1l−1a1l−1+⋯+θi,sl−1l−1)oral=g(al−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θ是每条线上的权重

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

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

反向传播算法 Back Propagation

算法流程为:

  1. 设置Δl=0\Delta^l=0Δl=0
  2. for i = 1 to m :(每次处理一个样例)
    1. 给输入节点赋值:a1=xia^1 = x^ia1=xi (将每一个样本赋值给输入层的节点,这里a1,xia^1,x^ia1,xi是一个(d×1)向量而不是一个实数)
    2. 通过前向传播算法,得到输出:al  for  (l=1,2,3,…L)(sl,1)a^l \; for \;(l=1,2,3,\dots L)\quad (s^l,1)alfor(l=1,2,3,L)(sl,1)
    3. 获得输出层的每个节点误差:δL=yi−aL\delta^L = y^i - a^LδL=yiaL, (这里yi,aL,δLy^i,a^L,\delta^Lyi,aL,δL都是(sL×1)s_L×1)sL×1) 向量)
    4. 反向传播:计算δl  ,  for  l=(L−1,L−2,…,2)δl  is  (sl,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.∗al.∗(1−al) \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)Tal \Delta^l := \Delta^l + (\delta^{l+1})^Ta^l Δl:=Δl+(δl+1)Tal
      (Δl\Delta^lΔl的维数跟Θl\Theta^lΘl是一样的,都是(sl+1,sl+1s_{l+1},s_l+1sl+1,sl+1)),需要注意的是,这里需要去掉δl+1\delta^{l+1}δl+1的第0个元素,即偏差结点,而ala^lal是包含了偏差结点的。
  3. 加入正则化项,正则化项不应当包含偏差节点,所以将Θ\ThetaΘ的第一列(表示偏差节点权重那一列)设置为0,最终得到每层lll 的梯度:
    Dl:=1mΔl+λmΘlfor  non−bias  node D^l := \frac{1}{m} \Delta^l +\frac{ \lambda}{m} \Theta^l \quad for \; non-bias \; node Dl:=m1Δl+mλΘlfornonbiasnode
    Dl:=1mΔlfor  bias  node D^l := \frac{1}{m} \Delta^l \quad for \; bias \; node Dl:=m1Δlforbiasnode
    因此,神经网络的梯度为:
    ∂∂θlJ(Θ)=Dl \frac{\partial}{\partial \theta ^l}J(\Theta)=D^l θlJ(Θ)=Dl
    手写图 标注了每个中间数据的维度,m是样本数据数,S2S_2S2表示第二层节点数量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值