神经网络理论入门
- [第一章 M-P模型](#第一章 M-P模型)
- [第二章 单层感知机模型](#第二章 单层感知机模型)
-
- [2.1 单层感知机学习过程](#2.1 单层感知机学习过程)
- [第三章 多层感知机模型](#第三章 多层感知机模型)
-
- [3.1 多层感知机推导](#3.1 多层感知机推导)
-
- [3.1.1 逻辑电路数据集](#3.1.1 逻辑电路数据集)
- [3.1.2 多层感知机分类案例](#3.1.2 多层感知机分类案例)
- [第四章 BP神经网络](#第四章 BP神经网络)
-
- [4.1 Sigmoid激活函数](#4.1 Sigmoid激活函数)
- [4.2 误差反向传播](#4.2 误差反向传播)
-
- [4.2.1 导数与微分](#4.2.1 导数与微分)
- [4.2.2 方向导数、梯度与链式法则](#4.2.2 方向导数、梯度与链式法则)
- [4.2.3 最速下降法](#4.2.3 最速下降法)
- [4.2.4 误差反向传播推导](#4.2.4 误差反向传播推导)
第一章 M-P模型
1943年,生物学家沃伦.麦克洛克和数学家沃尔特.皮茨提出了模仿生物神经元结构的数学模型,称为 M-P 模型。生物神经元是一种神经细胞,主由多个树突,一个轴突(末端有多个神经末梢),一个胞体组成,如图1-1所示。

在一个典型的生物神经元中,树突接收并输入信息,细胞核处理信息,轴突过滤信息,轴突末梢输出信息,并由下一个生物神经元接受。M-P模型是对生物神经元工作流程的简化和模拟,其结构如图1-2所示。

神经元可以接收多个输入信号, x i x_i xi 表示从第 i i i个神经元传来的信号强度,信号经突触传递给树突,突触的连接强度为 w i w_i wi,则树突传入的信号强度为 w i x i w_ix_i wixi。在细胞体中,对各个树突传入的信号进行汇总和处理:汇总是对输入信号相加,处理则是根据预先设定的阈值 θ \theta θ,如果汇总信号强度大于该阈值,就通过轴突产生冲动,否则不产生冲动。
y = f ( ∑ i = 1 n w i x i − θ ) (1-1) y=f(\sum_{i=1}^{n}w_ix_i-\theta ) \tag{1-1} y=f(i=1∑nwixi−θ)(1-1)
式中,函数 f f f为阶跃函数,当刺激强度 ∑ i = 1 n w i x i \sum_{i=1}^n{w_ix_i} ∑i=1nwixi大于该神经元阈值 θ \theta θ时,则该神经元表现为兴奋状态,输出1;反之,表现为抑制状态,输出0。阶跃函数 f f f表达式如式1-2所示。
f ( x ) = { 1 , x ≥ 0 0 , x < 0 (1-2) f(x)= \begin{cases} 1,x \geq 0 \\ 0,x < 0 \end{cases} \tag{1-2} f(x)={1,x≥00,x<0(1-2)
在M-P模型中,函数 f f f作为激活函数,各个权重 w i w_i wi和阈值 θ \theta θ,都需要人为设定,因此,M-P模型没有学习能力。
第二章 单层感知机模型
在M-P模型中,参数需要人工设定。然而,在实际应用中,必须能够自动选择合适的参数,才能使模型具有实际价值。1958年,康奈尔大学心理学教授弗兰克·罗森布拉特引入了感知机,并在其中加入了"学习"这一概念。首先设置初始参数,然后通过结果数据计算模型输出误差,并根据误差调整权重和阈值。通过不断调整,感知机能够逐步减小误差,最终找到合适的参数,从而实现学习目标。
感知机是一种人工神经网络,其结构与M-P模型相同。由于处理的神经元只有一层,因此也被称为单层感知机。为了简化计算,将阈值进行等价替换:增加一个值为1的输入,对其设置权重为 b b b。这样,阈值便能自动调整,同时激活函数仍采用阶跃函数。感知机模型的数学描述变为式2-1。
y = f ( ∑ i = 1 n w i x i + b ) (2-1) y=f(\sum_{i=1}^{n}w_ix_i+b) \tag{2-1} y=f(i=1∑nwixi+b)(2-1)
2.1 单层感知机学习过程
感知机在开始时并不知道正确的权重参数,通常将其初始化为随机值。然后,将已知结果的数据逐条输入进行计算。由于初始权重是随机设置的,计算结果通常会出现错误。通过计算误差(即实际值与输出值之间的差异),感知机不断调整权重参数,以减少误差。随着调整的进行,计算结果逐渐改进,直到每个输入数据都能得到正确的输出。此时,感知机已完成学习。
在这个过程中,关键的问题是如何通过调整权重参数来有效减少误差。接下来,我们将介绍感知机学习过程中的权重更新规则。
第一步:随机初始化权重 W ( w 0 , w 1 , w 2 , ⋯ , w n ) W(w_0,w_1,w_2,\cdots,w_n) W(w0,w1,w2,⋯,wn),为了描述统一,用 w 0 w_0 w0 替换 b b b。
第二步:输入样本 ( 1 , x 1 , x 2 , ⋯ , x n ) (1,x_1,x_2,\cdots, x_n) (1,x1,x2,⋯,xn)和对应的期望结果 y y y。
第三步:根据公式 2-2,获得感知机输出结果。
y o u t = f ( ∑ i = 0 n w i x i ) (2-2) y_{out}=f(\sum_{i=0}^{n}w_ix_i) \tag{2-2} yout=f(i=0∑nwixi)(2-2)
第四步:若该点被分类错误,则存在误差( ϵ = y − y o u t ≠ 0 \epsilon=y - y_{out}\neq 0 ϵ=y−yout=0),以误差为基础对每个权重 w i w_i wi按如下规则进行调整(称为学习规则):
Δ w i = η ( y − y o u t ) x i w i ← w i + Δ w i \Delta w_i=\eta(y-y_{out})x_i \\ w_i \leftarrow w_i + \Delta w_i Δwi=η(y−yout)xiwi←wi+Δwi
式中, η \eta η称为学习率,一般为0~1,用来控制每次权重的调整力度。
第五步:如果所有样本分类正确,则训练过程结束。只要有任何一个样本输出错误,那么都将导致权重调整,并再次输入所有样本进行训练。
1949年,唐纳德·赫布在《行为组织》一书中提出,神经网络的学习过程发生在神经元之间的突触部分。他指出,突触的连接强度会随着突触前后神经元活动的变化而变化,且变化的幅度与两个神经元之间的活性成正比。
第三章 多层感知机模型
尽管单层感知机具有明确的数学结构和学习规则,但其表达能力非常有限,尤其无法解决异或问题,因为异或数据是非线性可分的,单个线性超平面无法实现分割。
1965年,A.G. 伊娃赫年科提出了多层感知机的设想,这为后来深度学习的发展奠定了基础。多层感知机通过引入隐藏层,能够解决像异或问题这样的非线性可分问题,突破了单层感知机的限制。然而,由于当时缺乏有效的训练算法,多层感知机的潜力未能得到充分发挥。
1969年,马文·明斯基在《感知机》一书中指出,单层感知机在表达能力上的局限性,尤其是无法处理异或问题等复杂模式。该书的批评使得神经网络的研究一度受到冷落,直到多层神经网络的训练算法在后来的发展中取得突破,才重新引起了研究者的广泛关注。
3.1 多层感知机推导
3.1.1 逻辑电路数据集
在数字逻辑电路领域,异或门也被称为逻辑异或电路。其输入、输出关系可通过真值表完整定义(见表3-1)。
| x 1 x_1 x1 | x 2 x_2 x2 | y y y |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
3.1.2 多层感知机分类案例

第一步:设置初始参, 具体形式如下: w 11 = 1 , w 21 = 1 , w 12 = − 1 , w 22 = − 1 , w 3 = 1 , w 4 = 1 , b 1 = − 0.5 , b 2 = 1.5 , b 3 = − 1.5 w_{11}=1, w_{21}=1, w_{12}=-1, w_{22}=-1, w_3=1, w_4=1, b_1=-0.5, b_2=1.5, b_3=-1.5 w11=1,w21=1,w12=−1,w22=−1,w3=1,w4=1,b1=−0.5,b2=1.5,b3=−1.5,激活函数为阶跃函数。
第二步:将样本逐个输入模型进行训练,具体过程如下:
样本1: ( x 1 , x 2 ∣ y ) = ( 0 , 0 ∣ 0 ) (x_1, x_2|y)=(0, 0|0) (x1,x2∣y)=(0,0∣0)
神经元1: a 1 = f ( w 11 x 1 + w 21 x 2 + b 1 ) = 0 a_1 = f(w_{11}x_1 + w_{21}x_2 + b_1)=0 a1=f(w11x1+w21x2+b1)=0
神经元2: a 2 = f ( w 12 x 1 + w 22 x 2 + b 2 ) = 1 a_2 = f(w_{12}x_1 + w_{22}x_2 + b_2)=1 a2=f(w12x1+w22x2+b2)=1
神经元3: y = f ( w 3 a 1 + w 4 a 2 + b 3 ) = 0 y = f(w_{3}a_1 + w_{4}a_2 + b_3)=0 y=f(w3a1+w4a2+b3)=0
样本2: ( x 1 , x 2 ∣ y ) = ( 0 , 1 ∣ 1 ) (x_1, x_2|y)=(0, 1|1) (x1,x2∣y)=(0,1∣1)
神经元1: a 1 = f ( w 11 x 1 + w 21 x 2 + b 1 ) = 1 a_1 = f(w_{11}x_1 + w_{21}x_2 + b_1)=1 a1=f(w11x1+w21x2+b1)=1
神经元2: a 2 = f ( w 12 x 1 + w 22 x 2 + b 2 ) = 1 a_2 = f(w_{12}x_1 + w_{22}x_2 + b_2)=1 a2=f(w12x1+w22x2+b2)=1
神经元3: y = f ( w 3 a 1 + w 4 a 2 + b 3 ) = 1 y = f(w_{3}a_1 + w_{4}a_2 + b_3)=1 y=f(w3a1+w4a2+b3)=1
样本3: ( x 1 , x 2 ∣ y ) = ( 1 , 0 ∣ 1 ) (x_1, x_2|y)=(1, 0|1) (x1,x2∣y)=(1,0∣1)
神经元1: a 1 = f ( w 11 x 1 + w 21 x 2 + b 1 ) = 1 a_1 = f(w_{11}x_1 + w_{21}x_2 + b_1)=1 a1=f(w11x1+w21x2+b1)=1
神经元2: a 2 = f ( w 12 x 1 + w 22 x 2 + b 2 ) = 1 a_2 = f(w_{12}x_1 + w_{22}x_2 + b_2)=1 a2=f(w12x1+w22x2+b2)=1
神经元3: y = f ( w 3 a 1 + w 4 a 2 + b 3 ) = 1 y = f(w_{3}a_1 + w_{4}a_2 + b_3)=1 y=f(w3a1+w4a2+b3)=1
样本4: ( x 1 , x 2 ∣ y ) = ( 1 , 1 ∣ 0 ) (x_1, x_2|y)=(1, 1|0) (x1,x2∣y)=(1,1∣0)
神经元1: a 1 = f ( w 11 x 1 + w 21 x 2 + b 1 ) = 1 a_1 = f(w_{11}x_1 + w_{21}x_2 + b_1)=1 a1=f(w11x1+w21x2+b1)=1
神经元2: a 2 = f ( w 12 x 1 + w 22 x 2 + b 2 ) = 0 a_2 = f(w_{12}x_1 + w_{22}x_2 + b_2)=0 a2=f(w12x1+w22x2+b2)=0
神经元3: y = f ( w 3 a 1 + w 4 a 2 + b 3 ) = y = f(w_{3}a_1 + w_{4}a_2 + b_3)= y=f(w3a1+w4a2+b3)=$
通过上面的计算可以看出,两层感知机(即具有一个隐藏层的感知机)能够成功解决异或问题。然而,传统的感知机训练方法依然存在局限性:它只能训练网络的输出层,而对于隐藏层的权重参数,必须通过人工设定,这限制了网络的表现和训练的有效性。
------来源于《模式识别与机器学习》
第四章 BP神经网络
单层感知机能够根据已知数据来学习参数,并且在处理线性可分问题时表现良好。然而,对于线性不可分的问题,单层感知机的表现较差。相比之下,多层感知机能够处理非线性可分问题,但由于参数训练比较复杂,导致模型实用性有限。
反向传播算法的提出,使得多层神经网络的训练变得简单可行,并证明多层神经网络具有很强的学习能力。从而将神经网络推向高潮。多层神经网络的计算过程和感知机类似,通过输入数据来前向计算各个神经元的输出,并传递到下一层作为输入,最终得到结果。其核心是采用反向传播算法来训练各层神经元的权重。
4.1 Sigmoid激活函数
在多层神经网络中,为了便于采用反向传播算法进行权值参数学习,模型不再使用阶跃函数作为激活函数,而是采用Sigmoid函数。Sigmoid函数的数学描述如下:
f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1
该函数可以将任何输入数值压缩到 ( 0 , 1 ) (0,1) (0,1)范围内。当神经网络进行二分类时,输出层可以只使用一个神经元,用0和1两个数值分别代表两个类别。在进行多分类时,有几个类别,输出层就采用几个神经元,每个神经元的输出就代表输入数据为某一类的概率。
引入Sigmoid激活函数的原因:
(1)函数图像与阶跃函数形状相似;
(2)函数输出值限制到0~1之间;
(3)函数求导形式简单。
4.2 误差反向传播
在人们提及 BP 神经网络时,往往会将其与杰弗里.辛顿联系在一起。但严格来说,辛顿并不是最早提出误差反向传播(Backpropagation, BP)算法的人。最早提出这一思想的是保罗.沃伯斯。早在 1974 年,沃伯斯在哈佛大学的博士论文中就首次系统性地提出了利用误差反向传播来训练多层人工神经网络的思想。这一工作从数学原理上描述了链式求导在多层结构中的传播方式,为神经网络训练提供了可行的梯度计算方法。然而,这项研究在当时并未引起广泛关注。
直到 1986 年,辛顿等人发表了著名论文《Learning representations by back-propagating errors》,才真正推动了 BP 算法在学术界和工程界的广泛传播。他们不仅重新阐述了误差反向传播的原理,还系统展示了其在多层前馈网络中的有效性,使得训练深层模型成为可能。正是这篇工作让 BP 算法真正走出理论层面,成为神经网络学习的核心方法之一。
4.2.1 导数与微分
定义1.1 设函数 y = f ( x ) y=f(x) y=f(x) 在点 x 0 x_0 x0 的某邻域内有定义,若极限
lim x → x 0 f ( x ) − f ( x 0 ) x − x 0 \lim_{x \to x_0}\frac{f(x)-f(x_0)}{x-x_0} x→x0limx−x0f(x)−f(x0)
存在,则称函数 f f f 在点 x 0 x_0 x0 处可导,并称该极限为函数 f f f在点 x 0 x_0 x0 处的导数,记作 f ′ ( x 0 ) f^{'}(x_0) f′(x0)。
令 x = x 0 + Δ x x=x_0 + \Delta{x} x=x0+Δx, Δ y = f ( x 0 + Δ x ) − f ( x 0 ) \Delta y=f(x_0 + \Delta x) - f(x_0) Δy=f(x0+Δx)−f(x0),则上式可改写为
lim Δ x → 0 Δ y Δ x = lim x → x 0 f ( x ) − f ( x 0 ) x − x 0 = f ′ ( x 0 ) \lim_{\Delta x \to 0}\frac{\Delta y}{\Delta x} = \lim_{x \to x_0}\frac{f(x)-f(x_0)}{x-x_0}=f^{'}(x_0) Δx→0limΔxΔy=x→x0limx−x0f(x)−f(x0)=f′(x0)
通过上式可知,导数式函数增量与自变量增量的极限。这个增量比称为函数关于自变量的平均变化率,又称差商。
在上述实现中存在两处问题:
(1)步长选择过小:为了尽可能减小步长h,我们将其设置为一个非常小的固定值。然而,这样的做法引发了数值计算上的问题。当h过小时, f ( x + h ) f(x+h) f(x+h) 与 f ( x ) f(x) f(x) 之间的差值会趋近于计算机浮点数的精度极限,导致差值被舍入为 0,从而使得导数的计算结果产生失真。
(2)割线近似误差:在计算初期,由于采用了割线近似替代真实切线,这引入了固有误差。割线只能通过两个点之间的斜率粗略地模拟切线的斜率,无法精确反映函数在目标点的真实变化趋势,因此这种近似方法在某些情况下会导致较大的计算误差。
为减少这些误差,我们可以采用中心差分法,即通过计算函数在 x + h x+h x+h 和 x − h x−h x−h 之间的差分来改进导数的近似值。与单侧差分法相比,中心差分法能够更精确地估算目标点的导数,从而减少由于步长选择过小和割线近似带来的误差。
4.2.2 方向导数、梯度与链式法则
在许多问题中,不仅要知道函数在坐标轴方向上的变化率(偏导数),而且还要设法求得函数在其他特定方向上的变化率。这就是本节要讨论的方向导数。
定义1.2 设三元函数 f f f 在点 P 0 ( x 0 , y 0 , z 0 ) P_{0}(x_0,y_0,z_0) P0(x0,y0,z0) 的某邻域 U ( P 0 ) ⊂ R 3 U(P_0)\subset R^3 U(P0)⊂R3 有定义, l l l 为从点 P 0 P_{0} P0 出发的射线, P ( x , y , z ) P(x,y,z) P(x,y,z) 为 l l l上且含于 U ( P 0 ) U(P_0) U(P0)内的任一点,以 ρ \rho ρ表示 P 0 P_{0} P0 与 P P P 两点之间的距离。若极限
lim ρ → 0 + f ( P ) − f ( P 0 ) ρ = lim ρ → 0 + Δ l f ρ \lim_{\rho \to 0^{+}}\frac{f(P) - f(P_0)}{\rho}=\lim_{\rho \to 0^{+}}\frac{{\Delta}_l f}{\rho} ρ→0+limρf(P)−f(P0)=ρ→0+limρΔlf
存在,则称此极限为函数 f f f 在 P 0 P_{0} P0 沿方向 l l l的方向导数,记作 f l ( x 0 , y 0 , z 0 ) f_l(x_0,y_0,z_0) fl(x0,y0,z0)。
设一单位向量 h = ( h 1 , h 2 , ⋯ , h n ) T \mathbf{h}=(h_1,h_2,\cdots,h_n)^T h=(h1,h2,⋯,hn)T,则可微函数 f ( x ) f(\mathbf{x}) f(x) 在点 x \mathbf{x} x的方向导数为
∂ f ∂ h = lim α → 0 + f ( x + α h ) − f ( x ) α \frac{\partial{f}}{\partial{\mathbf{h}}}=\lim_{\alpha \to 0^+}\frac{f(\mathbf{x}+\alpha\mathbf{h})-f(\mathbf{x})}{\alpha} ∂h∂f=α→0+limαf(x+αh)−f(x)根据上述定义及多元函数泰勒公式得 ∂ f ∂ h = lim α → 0 + f ( x + α h ) − f ( x ) α = lim α → 0 + α ∇ f ( x ) T h + o ( ∥ α h ∥ ) α = lim α → 0 + [ ∇ f ( x ) T h + o ( ∥ α h ∥ ) α ] = ∇ f ( x ) T h = ∥ ∇ f ( x ) ∥ cos < ∇ f ( x ) , h > \begin{align} \frac{\partial f}{\partial \mathbf{h}} &= \lim_{\alpha \to 0^+} \frac{f(\mathbf{x} + \alpha \mathbf{h}) - f(\mathbf{x})}{\alpha} \notag\\ &= \lim_{\alpha \to 0^+} \frac{\alpha\nabla f(\mathbf{x})^T\mathbf{h} + o(\|\alpha \mathbf{h}\|)}{\alpha} \notag\\ &= \lim_{\alpha \to 0^+} \left[\nabla f(\mathbf{x})^T\mathbf{h} + \frac{o(\|\alpha \mathbf{h}\|)}{\alpha} \right]\notag\\ &=\nabla f(\mathbf{x})^T\mathbf{h} \notag\\ &=\|\nabla f(\mathbf{x})\|\cos<\nabla f(\mathbf{x}),\mathbf{h}>\notag \end{align} ∂h∂f=α→0+limαf(x+αh)−f(x)=α→0+limαα∇f(x)Th+o(∥αh∥)=α→0+lim[∇f(x)Th+αo(∥αh∥)]=∇f(x)Th=∥∇f(x)∥cos<∇f(x),h>
由上式不难看出:
(1)当 ∂ f ∂ h > 0 \frac{\partial f}{\partial\mathbf{h}}>0 ∂h∂f>0 时,方向 h \mathbf{h} h 是 f ( x ) f(\mathbf{x}) f(x) 在点 x \mathbf{x} x处增加的方向。
(2)当 ∂ f ∂ h < 0 \frac{\partial f}{\partial\mathbf{h}}<0 ∂h∂f<0时,方向 h \mathbf{h} h 是 f ( x ) f(\mathbf{x}) f(x) 在点 x \mathbf{x} x处减少的方向。
(3)当 ∇ f ( x ) ≠ 0 \nabla f(\mathbf{x})\neq\mathbf{0} ∇f(x)=0时,沿方向 h = ∇ f ( x ) ∥ ∇ f ( x ) ∥ \mathbf{h}=\frac{\nabla f(\mathbf{x})}{\|\nabla f(\mathbf{x})\|} h=∥∇f(x)∥∇f(x) 的方向导数最大,函数在该点增加的最快;而沿方向 h = − ∇ f ( x ) ∥ ∇ f ( x ) ∥ \mathbf{h}=-\frac{\nabla f(\mathbf{x})}{\|\nabla f(\mathbf{x})\|} h=−∥∇f(x)∥∇f(x) 的方向导数最小,函数在该点增加的最慢。
定义1.3 若 f ( x , y , z ) f(x,y,z) f(x,y,z) 在点 P 0 ( x 0 , y 0 , z 0 ) P_{0}(x_0,y_0,z_0) P0(x0,y0,z0) 存在对所有自变量的偏导数, 则称向量 ( f x ( P 0 ) , f y ( P 0 ) , f z ( P 0 ) ) (f_x(P_0),f_y(P_0),f_z(P_0)) (fx(P0),fy(P0),fz(P0))为函数 f ( x , y , z ) f(x,y,z) f(x,y,z) 在点 P 0 ( x 0 , y 0 , z 0 ) P_{0}(x_0,y_0,z_0) P0(x0,y0,z0) 的梯度,记作
∇ f = ( f x ( P 0 ) , f y ( P 0 ) , f z ( P 0 ) ) \nabla f = (f_x(P_0),f_y(P_0),f_z(P_0)) ∇f=(fx(P0),fy(P0),fz(P0))
定理1.1 若函数 x = φ ( s , t ) x=\varphi(s, t) x=φ(s,t), y = ψ ( s , t ) y=\psi(s, t) y=ψ(s,t)在点 ( s , t ) ∈ D (s,t) \in D (s,t)∈D可微, z = f ( x , y ) z=f(x, y) z=f(x,y)在 ( x , y ) (x,y) (x,y)可微,则复合函数
z = f ( φ ( s , t ) , ψ ( s , t ) ) z=f(\varphi(s, t), \psi(s,t)) z=f(φ(s,t),ψ(s,t))
在点 ( s , t ) ∈ D (s,t) \in D (s,t)∈D 可微,且它关于 s s s 与 t t t 的偏导数分别为:
∂ z ∂ s ∣ ( s , t ) = ∂ z ∂ x ∣ ( x , y ) ∂ x ∂ s ∣ ( s , t ) + ∂ z ∂ y ∣ ( x , y ) ∂ y ∂ s ∣ ( s , t ) ∂ z ∂ t ∣ ( s , t ) = ∂ z ∂ x ∣ ( x , y ) ∂ x ∂ t ∣ ( s , t ) + ∂ z ∂ y ∣ ( x , y ) ∂ y ∂ t ∣ ( s , t ) \frac{\partial z}{\partial s}\vert_{(s,t)}=\frac{\partial z}{\partial x}\vert_{(x,y)}\frac{\partial x}{\partial s}\vert_{(s,t)}+\frac{\partial z}{\partial y}\vert_{(x,y)}\frac{\partial y}{\partial s}\vert_{(s,t)}\\ \frac{\partial z}{\partial t}\vert_{(s,t)}=\frac{\partial z}{\partial x}\vert_{(x,y)}\frac{\partial x}{\partial t}\vert_{(s,t)}+\frac{\partial z}{\partial y}\vert_{(x,y)}\frac{\partial y}{\partial t}\vert_{(s,t)} ∂s∂z∣(s,t)=∂x∂z∣(x,y)∂s∂x∣(s,t)+∂y∂z∣(x,y)∂s∂y∣(s,t)∂t∂z∣(s,t)=∂x∂z∣(x,y)∂t∂x∣(s,t)+∂y∂z∣(x,y)∂t∂y∣(s,t)
多元复合函数求导一般比较复杂,为了便于记忆链式法则,可以按照各变量间的复合关系,画成如下树状图。首先,从因变量 z z z向中间变量 x x x, y y y画两个分支,然后再分别从中间变量 x x x, y y y向自变量 s s s, t t t画分支,并在每个分支旁边写上对应的偏导数。求 ∂ z ∂ s \frac{\partial z}{\partial s} ∂s∂z时,只需要把从 z z z到 s s s的每个路径上的偏导数相乘,然后再将这些乘积相加即得:
∂ z ∂ s = ∂ z ∂ x ∂ x ∂ s + ∂ z ∂ y ∂ y ∂ s \frac{\partial z}{\partial s}=\frac{\partial z}{\partial x}\frac{\partial x}{\partial s}+\frac{\partial z}{\partial y}\frac{\partial y}{\partial s} ∂s∂z=∂x∂z∂s∂x+∂y∂z∂s∂y

4.2.3 最速下降法
求多元函数 f ( x ) f(\mathbf{x}) f(x) 最优解通常采用迭代方法,具体操作方法如下:首先,在可行域内任取一点 x ( 0 ) \mathbf{x}^{(0)} x(0) 作为初始点,从 x ( 0 ) \mathbf{x}^{(0)} x(0)出发,按某种方法产生点列 x ( 0 ) , x ( 1 ) , ⋯ , x ( k ) , ⋯ \mathbf{x}^{(0)},\mathbf{x}^{(1)},\cdots,\mathbf{x}^{(k)},\cdots x(0),x(1),⋯,x(k),⋯,使得某个 x ( k ) \mathbf{x}^{(k)} x(k) 为函数 f ( x ) f(\mathbf{x}) f(x) 最优解。在这个过程中,我们希望 f ( x ( k + 1 ) ) ≤ f ( x ( k ) ) f(\mathbf{x}^{(k+1)}) \leq f(\mathbf{x}^{(k)}) f(x(k+1))≤f(x(k)),即在点列上 f ( x ) f(\mathbf{x}) f(x) 是下降的。为此,我们在每次迭代的时候从 x ( k ) \mathbf{x}^{(k)} x(k) 出发,寻找一个所谓的下降方向 p ( k ) \mathbf{p}^{(k)} p(k),沿该方向搜索也给使得函数更小的点作为新的初始点,然后再选择一个新的下降方向,并以新的初始点为起点,沿着新的下降方向搜索函数值更小的点,如此反复,直到满足事先给定的条件。
定义1.4 f ( x ) f(\mathbf{x}) f(x) 在点 x \mathbf{x} x 处,对于非零向量 p \mathbf{p} p,若存在实数 λ 0 > 0 \lambda_0>0 λ0>0,使得当 λ ∈ ( 0 , λ 0 ) \lambda \in (0, \lambda_0) λ∈(0,λ0)时恒有
f ( x + λ p ) < f ( x ) f(\mathbf{x}+\lambda{\mathbf{p}})<f(\mathbf{x}) f(x+λp)<f(x)
则称 p \mathbf{p} p为 f ( x ) f(\mathbf{x}) f(x) 在 x \mathbf{x} x 的一个下降方向。
根据泰勒公式有
f ( x + λ p ) = f ( x ) + ∇ f ( x ) T λ p + o ( ∣ ∣ λ p ∣ ∣ ) f(\mathbf{x}+\lambda{\mathbf{p}}) = f(\mathbf{x}) + \nabla{f(\mathbf{x})}^T\lambda{\mathbf{p}}+o(||\lambda{\mathbf{p}}||) f(x+λp)=f(x)+∇f(x)Tλp+o(∣∣λp∣∣)
由此可知,当 ∇ f ( x ) T p < 0 \nabla{f(\mathbf{x})}^T\mathbf{p}<0 ∇f(x)Tp<0时,总存在 λ 0 > 0 \lambda_0>0 λ0>0,使得当 λ ∈ ( 0 , λ 0 ) \lambda \in (0, \lambda_0) λ∈(0,λ0)时,恒有 f ( x + λ p ) < f ( x ) f(\mathbf{x}+\lambda{\mathbf{p}})<f(\mathbf{x}) f(x+λp)<f(x)。
由多元函数方向导数的定义可知,函数 f ( x ) f(\mathbf{x}) f(x) 在某点处下降最快的方向是该点的负梯度方向。我们把函数在一点处的负梯度方向称为函数在该点的最速下降方向。基于这一点,法国著名数学家Cauchy早在1847年就提出一种下降算法 --- 最速下降法。
最速下降法的基本思想: 从任意一点 x ( k ) \mathbf{x}^{(k)} x(k) 出发,沿着该点的负梯度方向 p ( k ) = − ∇ f ( x ( k ) ) \mathbf{p}^{(k)}=-\nabla{f(\mathbf{x}^{(k)})} p(k)=−∇f(x(k))进行搜索,设 f ( x ( k ) + λ k p ( k ) ) = min λ 0 f ( x ( k ) + λ p ( k ) ) f(\mathbf{x}^{(k)}+\lambda_k{\mathbf{p}^{(k)}})=\min_{\lambda 0} f(\mathbf{x}^{(k)}+\lambda{\mathbf{p}^{(k)}}) f(x(k)+λkp(k))=minλ0f(x(k)+λp(k)),令 x ( k + 1 ) = x ( k ) + λ k p ( k ) \mathbf{x}^{(k+1)}=\mathbf{x}^{(k)}+\lambda_k{\mathbf{p}^{(k)}} x(k+1)=x(k)+λkp(k)新的近似最优解,在从新点 x ( k + 1 ) \mathbf{x}^{(k+1)} x(k+1) 出发,沿着该点的负梯度方向 p ( k + 1 ) = − ∇ f ( x ( k + 1 ) ) \mathbf{p}^{(k+1)}=-\nabla{f(\mathbf{x}^{(k+1)})} p(k+1)=−∇f(x(k+1))进行搜索,进一步求出新的近似最优解 x ( k + 2 ) \mathbf{x}^{(k+2)} x(k+2) ,如此迭代下去,直到某个点的梯度为零向量或梯度范数小于事先给定的精度为止。
4.2.4 误差反向传播推导
在神经网络中,输入数据首先从输入层传递至中间层,最终到达输出层。误差反向传播算法的核心思想是,通过比较实际输出与期望输出之间的误差,将误差信号从输出层逐层反向传播至各层。这样,经网络能够根据误差信号调整每一层的连接权重,从而最小化总体误差。具体而言,权重的调整通常采用梯度下降法。接下来,我们将通过一个简单的神经网络示例来演示误差方向传播算法。

步骤一 :前向传播
z 1 = σ ( w 1 x 1 + w 3 x 2 ) z 2 = σ ( w 2 x 1 + w 4 x 2 ) y = σ ( w 5 a 1 + w 6 a 2 ) z_1 = \sigma{(w_1x_1+w_3x_2)}\\ z_2 = \sigma{(w_2x_1+w_4x_2)}\\ y = \sigma{(w_5a_1+w_6a_2)} z1=σ(w1x1+w3x2)z2=σ(w2x1+w4x2)y=σ(w5a1+w6a2)
步骤二 :方向传播
令 h 1 = w 5 a 1 + w 6 a 2 h_1=w_5a_1+w_6a_2 h1=w5a1+w6a2,则
∂ E ∂ w 5 = ∂ E ∂ h 1 ∂ h 1 ∂ w 5 , ∂ E ∂ w 6 = ∂ E ∂ h 1 ∂ h 1 ∂ w 6 \frac{\partial{E}}{\partial{w_5}}=\frac{\partial{E}}{\partial{h_1}}\frac{\partial{h_1}}{\partial{w_5}},\frac{\partial{E}}{\partial{w_6}}=\frac{\partial{E}}{\partial{h_1}}\frac{\partial{h_1}}{\partial{w_6}} ∂w5∂E=∂h1∂E∂w5∂h1,∂w6∂E=∂h1∂E∂w6∂h1
令 h 2 = w 1 x 1 + w 3 x 2 h_2=w_1x_1+w_3x_2 h2=w1x1+w3x2,则
∂ E ∂ w 1 = ∂ E ∂ h 1 ∂ h 1 ∂ w 6 ∂ w 6 ∂ h 2 ∂ h 2 ∂ w 1 , ∂ E ∂ w 3 = ∂ E ∂ h 1 ∂ h 1 ∂ w 6 ∂ w 6 ∂ h 2 ∂ h 2 ∂ w 3 \frac{\partial{E}}{\partial{w_1}}=\frac{\partial{E}}{\partial{h_1}}\frac{\partial{h_1}}{\partial{w_6}}\frac{\partial{w_6}}{\partial{h_2}}\frac{\partial{h_2}}{\partial{w_1}},\frac{\partial{E}}{\partial{w_3}}=\frac{\partial{E}}{\partial{h_1}}\frac{\partial{h_1}}{\partial{w_6}}\frac{\partial{w_6}}{\partial{h_2}}\frac{\partial{h_2}}{\partial{w_3}} ∂w1∂E=∂h1∂E∂w6∂h1∂h2∂w6∂w1∂h2,∂w3∂E=∂h1∂E∂w6∂h1∂h2∂w6∂w3∂h2
令 h 3 = w 2 x 1 + w 4 x 2 h_3=w_2x_1+w_4x_2 h3=w2x1+w4x2,则
∂ E ∂ w 2 = ∂ E ∂ h 1 ∂ h 1 ∂ w 6 ∂ w 6 ∂ h 3 ∂ h 3 ∂ w 2 , ∂ E ∂ w 4 = ∂ E ∂ h 1 ∂ h 1 ∂ w 6 ∂ w 6 ∂ h 3 ∂ h 3 ∂ w 4 \frac{\partial{E}}{\partial{w_2}}=\frac{\partial{E}}{\partial{h_1}}\frac{\partial{h_1}}{\partial{w_6}}\frac{\partial{w_6}}{\partial{h_3}}\frac{\partial{h_3}}{\partial{w_2}},\frac{\partial{E}}{\partial{w_4}}=\frac{\partial{E}}{\partial{h_1}}\frac{\partial{h_1}}{\partial{w_6}}\frac{\partial{w_6}}{\partial{h_3}}\frac{\partial{h_3}}{\partial{w_4}} ∂w2∂E=∂h1∂E∂w6∂h1∂h3∂w6∂w2∂h3,∂w4∂E=∂h1∂E∂w6∂h1∂h3∂w6∂w4∂h3
步骤三 :更新权重
w 1 = w 1 − η ∂ E ∂ w 1 , w 2 = w 2 − η ∂ E ∂ w 2 , w 3 = w 3 − η ∂ E ∂ w 3 w 4 = w 4 − η ∂ E ∂ w 4 , w 5 = w 5 − η ∂ E ∂ w 5 , w 6 = w 6 − η ∂ E ∂ w 6 w_1=w_1-\eta\frac{\partial{E}}{\partial{w_1}},w_2=w_2-\eta\frac{\partial{E}}{\partial{w_2}},w_3=w_3-\eta\frac{\partial{E}}{\partial{w_3}}\\ w_4=w_4-\eta\frac{\partial{E}}{\partial{w_4}},w_5=w_5-\eta\frac{\partial{E}}{\partial{w_5}},w_6=w_6-\eta\frac{\partial{E}}{\partial{w_6}} w1=w1−η∂w1∂E,w2=w2−η∂w2∂E,w3=w3−η∂w3∂Ew4=w4−η∂w4∂E,w5=w5−η∂w5∂E,w6=w6−η∂w6∂E