BP(BackPropagation)误差逆传播算法

上篇文章介绍了多层前馈神经网络,那么这种网络是怎样训练生成的呢,BP算法就是其中一种生成多层神经网络的算法 ,又称为反向传播算法,下面来了解一下BP算法。
举例:
下图中是根据一个手写数字辨识的神经网络简单结构,假设输入是一个图片,将图片读入转变成一个多维向量,即左边的多个输入值,根据多层神经网络,计算权重,并不断调整权值,使其更精确,最终通过 s o f t m a x softmax softmax函数一作用,将神经元值就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,转变成十个数字类别中的一个输出(分类问题,比较是哪一个数字的概率最大)。(在神经网络中经常用到 s o f t m a x softmax softmax函数。)
在这里插入图片描述
首先了解一下数学中的链式求导法则,后续将会用到:
y = g ( x ) z = h ( y ) Δ x → Δ y → Δ z d z d x = d z d y d y d x y=g(x) \quad z=h(y)\\ \quad \Delta x \rightarrow \Delta y \rightarrow \Delta z \quad \frac{d z}{d x}=\frac{d z}{d y} \frac{d y}{d x} y=g(x)z=h(y)ΔxΔyΔzdxdz=dydzdxdy
在这里插入图片描述
x = g ( s ) y = h ( s ) z = k ( x , y ) d z d s = ∂ z ∂ x d x d s + ∂ z ∂ y d y d s x=g(s) \quad y=h(s) \quad z=k(x, y)\\ \frac{d z}{d s}=\frac{\partial z}{\partial x} \frac{d x}{d s}+\frac{\partial z}{\partial y} \frac{d y}{d s} x=g(s)y=h(s)z=k(x,y)dsdz=xzdsdx+yzdsdy

神经网络一般有三个部分构成,输入层,隐层,输出层
下图可看出输入层 x \bm x x是一个样本数据的多个属性,输出层是输出输入的数据时属于哪个类别
输出层和输入层之间的部分称之为隐层,有多层和多个神经元构成。

在这里插入图片描述
构建神经网络的过程是一个不断迭代的过程,
如下图,我们可以看到最终的输出结果 y y y,可以通过不断的迭代,推到输入层 x \bm x x,其中这里的 σ \bm \sigma σ表示激活函数,由神经网络的特点可以知道,隐层中每个神经元都有激活函数,每一层的输入都是前一层的输出。(详细了解神经网络的特点可参考前面初识神经网络初识神经网络的文章)。
在这里插入图片描述
一个简单的神经网络运算如下,可以写成矩阵形式,进行矩阵操作。
在这里插入图片描述
由于神经网络的构成是前一层和后一层两两相连,前一层输出(各值之和)是后一层的输入。在某一个神经元上,我们就可以用梯度下降法来调整参数 w i 以 及 偏 置 b ( 又 称 阙 值 θ ) w_i以及偏置b(又称阙值\theta) wib(θ)梯度下降法要知道各个点的梯度,来确定调整参数的方向,因问题转变为我们需要求解各点的偏导数。
假设, l n ( θ ) l^n(\theta) ln(θ)表示第n个样本值训练的损失函数, L ( θ ) L(\theta) L(θ)是所有样本值的损失函数之和,反向传播算法是训练每一个样本值的属性对应的权重和阙值,一个训练集有N个训练样本。(这里的 θ \theta θ代表损失函数中的多个未知数)
L ( θ ) = ∑ n = 1 N l n ( θ ) ⟶ ∂ L ( θ ) ∂ w = ∑ n = 1 N ∂ l n ( θ ) ∂ w L(\theta)=\sum_{n=1}^{N} l^{n}(\theta) \quad \longrightarrow \frac{\partial L(\theta)}{\partial w}=\sum_{n=1}^{N} \frac{\partial l^{n}(\theta)}{\partial w} L(θ)=n=1Nln(θ)wL(θ)=n=1Nwln(θ)

注:一般 l l l可设为 1 2 ∑ i = 1 n ( y ^ i − y ) \frac{1}{2}\sum_{i=1}^{n}(\hat y_i-y) 21i=1n(y^iy),即误差函数, l = 1 2 ∑ i = 1 n ( y ^ i − y ) l=\frac{1}{2}\sum_{i=1}^{n}(\hat y_i-y) l=21i=1n(y^iy), 1 2 \frac{1}{2} 21是为了求导方便。
即求得每一个训练样本的损失函数,将其相加就是训练集的损失函数(误差函数)。因此我们要计算 ∂ L ( θ ) ∂ w = ∑ n = 1 N ∂ l n ( θ ) ∂ w \frac{\partial L(\theta)}{\partial w}=\sum_{n=1}^{N} \frac{\partial l^{n}(\theta)}{\partial w} wL(θ)=n=1Nwln(θ)
那我们应该思考怎样计算 ∂ l ∂ w \frac{\partial l}{\partial w} wl
首先来看输入层:
假设某数据有两个属性,取样本点 x \bm{x} x有属性值 ( x 1 , x 2 ) , 输 出 ( y 1 , y 2 ) (x_1,x_2),输出(y_1,y_2) x1,x2(y1,y2)
一个样本输入神经元和隐层连接如下图:
在这里插入图片描述
则: ∂ l ∂ w = ∂ l ∂ z ∂ z ∂ w \frac{\partial l}{\partial w}=\frac{\partial l}{\partial z}\frac{\partial z}{\partial w} wl=zlwz
其中由 z = x 1 w 1 + x 2 w 2 + b z=x_{1} w_{1}+x_{2} w_{2}+b z=x1w1+x2w2+b可以看出: ∂ z ∂ w 1 = x 1 , ∂ z ∂ w 2 = x 2 \frac{\partial z}{\partial w_1}=x_1,\frac{\partial z}{\partial w_2}=x_2 w1z=x1,w2z=x2即偏导数等于前向传播中的输出值 x x x,在这里相当于参数,很容易得到,因为样本值 x x x已知,由输入向输出计算即可推得。
如图(注; z ⟶ s i g m o i d 激 活 函 数 ⟶ 0.12 , z \longrightarrow sigmoid激活函数 \longrightarrow 0.12,\quad zsigmoid0.12,每个神经元都有激活函数):
在这里插入图片描述

接下来就是求 ∂ l ∂ z \bm {\frac{\partial l}{\partial z}} zl,

在这里插入图片描述
首先应该确定 z \bm z z l \bm l l的决定关系,因为:
在这里插入图片描述
由链式求导法则得:
∂ l ∂ z = ∂ l ∂ a ∂ a ∂ z \frac{\partial l}{\partial z}=\frac{\partial l}{\partial a}\frac{\partial a}{\partial z} zl=alza 因 为 a = σ ( z ) ( 激 活 函 数 已 知 ) , 所 以 ∂ a ∂ z = σ ′ ( z ) ; \\ 因为a=\sigma(z)(激活函数已知),所以\frac{\partial a}{\partial z} =\sigma^{\prime}(z); a=σ(z)(),za=σ(z);
即现在要求 ∂ l ∂ a \quad \frac{\partial l}{\partial a} al ∂ l ∂ a = ∂ l ∂ z ′ ∂ z ′ ∂ a + ∂ l ∂ z ′ ′ ∂ z ′ ′ ∂ a \quad \frac{\partial l}{\partial a}= \frac{\partial l}{{\partial} z^{\prime}}\frac{\partial z^{\prime}}{\partial a}+ \frac{\partial l}{\partial z^{\prime \prime}}\frac{\partial z^{\prime \prime}}{\partial a} al=zlaz+zlaz
由图中可以容易看出 a ⟶ z ′ , a ⟶ z ′ ′ , ( 前 一 个 a 是 后 一 个 z 的 输 入 ) a \longrightarrow z\prime ,a \longrightarrow z\prime\prime,(前一个a是后一个z的输入) az,az,(az)
所以: ∂ z ′ ∂ a = w 3 \frac{\partial z^{\prime}}{\partial a}=w_3 az=w3 ∂ z ′ ′ ∂ a = w 4 \frac{\partial z^{\prime\prime}}{\partial a}=w_4 az=w4
所以; ∂ l ∂ z = σ ′ ( z ) [ w 3 ∂ l ∂ z ′ + w 4 ∂ l ∂ z ′ ′ ] \bm{\frac{\partial l}{\partial z}=\sigma^{\prime}(z)\left[w_{3} \frac{\partial l}{\partial z^{\prime}}+w_{4} \frac{\partial l}{\partial z^{\prime \prime}}\right]} zl=σ(z)[w3zl+w4zl]
上面的式子可以看出下面的形式(反向传播):
在这里插入图片描述

要求 ∂ l ∂ z \frac{\partial l}{\partial z} zl,现在问题转变成求 ∂ l ∂ z ′ , ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z^{\prime}},\frac{\partial l}{\partial z^{\prime\prime}} zlzl
在这里可以看出求 ∂ l ∂ z ′ , ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z^{\prime}},\frac{\partial l}{\partial z^{\prime\prime}} zlzl的过程和求 ∂ l ∂ z \frac{\partial l}{\partial z} zl的过程很相似,需要继续求得 z ′ , z ′ ′ z\prime,z\prime\prime z,z后面的关于 l l l的偏导数。

  1. 假设是 z ′ , z ′ ′ z\prime,z\prime\prime z,z在输出层:
    在这里插入图片描述
    ∂ l ∂ z ′ = ∂ l ∂ y 1 ∂ y 1 ∂ z ′ ∂ l ∂ z ′ ′ = ∂ l ∂ y 2 ∂ y 2 ∂ z ′ ′ \frac{\partial l}{\partial z^{\prime}}= \frac{\partial l}{\partial y_{1}} \frac{\partial y_{1}}{\partial z^{\prime}}\quad \frac{\partial l}{\partial z^{\prime \prime}}= \frac{\partial l}{\partial y_{2}}\frac{\partial y_{2}}{\partial z^{\prime \prime}} zl=y1lzy1zl=y2lzy2
  2. z ′ , z ′ ′ z\prime,z\prime\prime z,z在隐层中,我们需要继续先求后面的 ∂ l ∂ z a \frac{\partial l}{\partial z_{a}} zal, ∂ l ∂ z b \frac{\partial l}{\partial z_{b}} zbl,然后再求 ∂ l ∂ z ′ \frac{\partial l}{\partial z^{\prime}} zl, ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z^{\prime\prime}} zl
    在这里插入图片描述
    上面的前向传播的过程是递归的过程即每算一个偏导数需要先求得下一个偏导数,直到递归到输出层偏导数已知,然后回溯计算当前偏导数,计算较为繁琐;由于已知输出值,现在我们从输出层开始,从后往前求得偏导数即反向传播
    在这里插入图片描述

    先算出: ∂ l ∂ z 5 \frac{\partial l}{\partial z_{5}} z5l, ∂ l ∂ z 6 \frac{\partial l}{\partial z_{6}} z6l,再计算 ∂ l ∂ z 3 \frac{\partial l}{\partial z_{3}} z3l,

    根据前面的公式可得:
    ∂ l ∂ z 3 = σ ′ ( z 3 ) [ w 3 ∂ l ∂ z 5 + w 4 ∂ l ∂ z 6 ] {\frac{\partial l}{\partial z_3}=\sigma^{\prime}(z_3)\left[w_{3} \frac{\partial l}{\partial z_5}+w_{4} \frac{\partial l}{\partial z_6}\right]} z3l=σ(z3)[w3z5l+w4z6l]以此类推。这是一个不断迭代的过程。
    在这里插入图片描述
    现在回到最初我们要求的是某个神经元 ∂ l ∂ w \bm{ \frac{\partial l}{\partial w}} wl,然后根据偏导数求得梯度,进行梯度下降求使得损失函数最小的 w w w,第k+1次更新:
    w k + 1 ⟵ w k − η ∗ g k w^{k+1}\longleftarrow w^k-\eta*g^k wk+1wkηgk
    由前向和后向传播可得到 ∂ l ∂ w , ( g k ) \bm{ \frac{\partial l}{\partial w}},(g^k) wlgk
    在这里插入图片描述
    因此,神经网络求参的过程就迎刃而解了。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值