甘肃张掖网站建设,网站开发软件是什么专业,盘锦威旺做网站,中国工程交易中心网引言
梯度是机器学习和优化领域中不可或缺的概念#xff0c;它为我们提供了理解和调整多维空间中函数行为的工具。本文将详细介绍梯度的定义、性质#xff0c;并通过具体的一元和多元函数案例展示如何使用梯度下降算法找到最佳参数。 一、梯度的基础知识
1.1 定义与计算
梯…引言
梯度是机器学习和优化领域中不可或缺的概念它为我们提供了理解和调整多维空间中函数行为的工具。本文将详细介绍梯度的定义、性质并通过具体的一元和多元函数案例展示如何使用梯度下降算法找到最佳参数。 一、梯度的基础知识
1.1 定义与计算
梯度是一个向量表示一个多变量函数在某一点处的最大变化率的方向以及变化率的大小。对于一个可微函数 f ( x 1 , x 2 , . . . , x n ) f(x_1, x_2, ..., x_n) f(x1,x2,...,xn)其梯度 ∇ f \nabla f ∇f 是由各个自变量的偏导数组成的向量 ∇ f ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , . . . , ∂ f ∂ x n ) \nabla f \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, ..., \frac{\partial f}{\partial x_n} \right) ∇f(∂x1∂f,∂x2∂f,...,∂xn∂f)
1.2 梯度的方向
梯度是一个向量它表示一个多变量函数在某一点处的最大变化率的方向以及变化率的大小。梯度指向的是函数值增加最快的方向。因此如果我们希望减小函数值我们应该沿着梯度的反方向移动。这正是梯度下降算法的核心思想。理解梯度的方向对于优化问题至关重要。下面我们将详细展开讨论梯度方向在一元函数、多元函数以及神经网络中的具体表现。
1.2.1 一元函数中的梯度方向
对于一维情况梯度实际上就是一个标量值它告诉我们函数在该点是增加还是减少
梯度为正值如果导数即梯度 d y d x 0 \frac{dy}{dx} 0 dxdy0那么函数值随着 x x x 的增加而增加。这意味着梯度指向正方向即沿着 x x x 轴的正方向移动会使得函数值增大。梯度为负值如果导数即梯度 d y d x 0 \frac{dy}{dx} 0 dxdy0那么函数值随着 x x x 的增加而减小。这意味着梯度指向负方向即沿着 x x x 轴的负方向移动会使得函数值增大。梯度为零如果导数即梯度 d y d x 0 \frac{dy}{dx} 0 dxdy0那么在这一点上函数值既不增加也不减少可能是极值点或平稳点。
例如考虑二次函数 y x 2 y x^2 yx2
在 x 0 x 0 x0 时梯度为正值 2 x 0 2x 0 2x0表明函数在这个区域沿 x x x 正方向增长最快。在 x 0 x 0 x0 时梯度为负值 2 x 0 2x 0 2x0表明函数在这个区域沿 x x x 负方向增长最快。在 x 0 x 0 x0 时梯度为零这是全局最小值点。
为了减小 y y y 的值我们应该沿着梯度的反方向移动
在 x 0 x 0 x0 时梯度为正值所以我们应该向左移动减小 x x x。在 x 0 x 0 x0 时梯度为负值所以我们应该向右移动增加 x x x。在 x 0 x 0 x0 时梯度为零这里已经是最低点了。
1.2.2 多元函数中的梯度方向
对于多变量函数 f ( x 1 , x 2 , . . . , x n ) f(x_1, x_2, ..., x_n) f(x1,x2,...,xn)梯度是一个向量 ∇ f \nabla f ∇f由各个自变量的偏导数组成 ∇ f ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , . . . , ∂ f ∂ x n ) \nabla f \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, ..., \frac{\partial f}{\partial x_n} \right) ∇f(∂x1∂f,∂x2∂f,...,∂xn∂f)
梯度指向的是函数值增加最快的方向。因此如果我们希望减小函数值我们应该沿着梯度的反方向移动。这同样适用于每个参数的更新
梯度为正向量如果某个分量 ∂ f ∂ x i 0 \frac{\partial f}{\partial x_i} 0 ∂xi∂f0那么函数值随着 x i x_i xi 的增加而增加。这意味着梯度在 x i x_i xi 方向上是正的沿着这个方向移动会使得函数值增大。梯度为负向量如果某个分量 ∂ f ∂ x i 0 \frac{\partial f}{\partial x_i} 0 ∂xi∂f0那么函数值随着 x i x_i xi 的增加而减小。这意味着梯度在 x i x_i xi 方向上是负的沿着这个方向移动会使得函数值增大。梯度为零向量如果所有分量均为零那么在这一点上函数值既不增加也不减少可能是极值点或平稳点。
例如考虑二维二次函数 f ( x , y ) x 2 y 2 f(x, y) x^2 y^2 f(x,y)x2y2
在点 ( 1 , 1 ) (1, 1) (1,1)梯度为 ( 2 , 2 ) (2, 2) (2,2)表明从这一点出发沿 ( 2 , 2 ) (2, 2) (2,2) 方向移动会使 f ( x , y ) f(x, y) f(x,y) 值迅速增大。反方向 ( − 2 , − 2 ) (-2, -2) (−2,−2) 则使 f ( x , y ) f(x, y) f(x,y) 值迅速减小。在点 ( − 1 , − 1 ) (-1, -1) (−1,−1)梯度为 ( − 2 , − 2 ) (-2, -2) (−2,−2)表明从这一点出发沿 ( − 2 , − 2 ) (-2, -2) (−2,−2) 方向移动会使 f ( x , y ) f(x, y) f(x,y) 值迅速增大。反方向 ( 2 , 2 ) (2, 2) (2,2) 则使 f ( x , y ) f(x, y) f(x,y) 值迅速减小。在点 ( 0 , 0 ) (0, 0) (0,0)梯度为 ( 0 , 0 ) (0, 0) (0,0)这里是全局最小值点没有明确的增长或减少方向。
1.2.3 神经网络中的梯度方向
在神经网络中梯度方向用于指导参数权重和偏置的更新以最小化损失函数。梯度本身是一个向量它指向了损失函数值增加最快的方向。因此在优化过程中我们沿着梯度的反方向调整参数以减小损失函数值。
梯度方向的具体表现 权重矩阵 W ( l ) W^{(l)} W(l) 的梯度 对于每一层的权重矩阵 W ( l ) W^{(l)} W(l)其梯度 ∇ W ( l ) L \nabla_{W^{(l)}} L ∇W(l)L 表示该层权重对损失函数的影响。如果某个权重的梯度为正意味着增加该权重会使损失增大反之减少该权重会使损失减小。因此为了减小损失我们应沿着梯度的反方向更新权重 W new ( l ) W old ( l ) − α ⋅ ∇ W ( l ) L W^{(l)}_{\text{new}} W^{(l)}_{\text{old}} - \alpha \cdot \nabla_{W^{(l)}} L Wnew(l)Wold(l)−α⋅∇W(l)L 偏置向量 b ( l ) b^{(l)} b(l) 的梯度 类似地对于每一层的偏置向量 b ( l ) b^{(l)} b(l)其梯度 ∇ b ( l ) L \nabla_{b^{(l)}} L ∇b(l)L 表示该层偏置对损失函数的影响。如果某个偏置的梯度为正意味着增加该偏置会使损失增大反之减少该偏置会使损失减小。为了减小损失我们应沿着梯度的反方向更新偏置 b new ( l ) b old ( l ) − α ⋅ ∇ b ( l ) L b^{(l)}_{\text{new}} b^{(l)}_{\text{old}} - \alpha \cdot \nabla_{b^{(l)}} L bnew(l)bold(l)−α⋅∇b(l)L
反向传播与梯度计算
反向传播算法是计算神经网络中梯度的关键步骤。它通过链式法则逐层计算每个参数对损失函数的影响 输出层 计算输出层误差 δ ( L ) \delta^{(L)} δ(L) δ ( L ) a ( L ) − y \delta^{(L)} a^{(L)} - y δ(L)a(L)−y计算输出层权重和偏置的梯度 ∇ W ( L ) L δ ( L ) ⋅ ( a ( L − 1 ) ) T \nabla_{W^{(L)}} L \delta^{(L)} \cdot (a^{(L-1)})^T ∇W(L)Lδ(L)⋅(a(L−1))T ∇ b ( L ) L δ ( L ) \nabla_{b^{(L)}} L \delta^{(L)} ∇b(L)Lδ(L) 隐藏层 计算隐藏层误差 δ ( l ) \delta^{(l)} δ(l) δ ( l ) ( δ ( l 1 ) ⋅ ( W ( l 1 ) ) T ) ⊙ f ′ ( z ( l ) ) \delta^{(l)} (\delta^{(l1)} \cdot (W^{(l1)})^T) \odot f(z^{(l)}) δ(l)(δ(l1)⋅(W(l1))T)⊙f′(z(l)) 其中 f ′ f f′ 是激活函数的导数。计算隐藏层权重和偏置的梯度 ∇ W ( l ) L δ ( l ) ⋅ ( a ( l − 1 ) ) T \nabla_{W^{(l)}} L \delta^{(l)} \cdot (a^{(l-1)})^T ∇W(l)Lδ(l)⋅(a(l−1))T ∇ b ( l ) L δ ( l ) \nabla_{b^{(l)}} L \delta^{(l)} ∇b(l)Lδ(l)
梯度方向的直观理解
权重更新如果某个权重的梯度为正值这意味着增加该权重会使损失增大所以我们应该减小该权重。相反如果梯度为负值则应该增加该权重。偏置更新同样的逻辑适用于偏置根据梯度的符号调整偏置值以减小损失。
通过不断的迭代网络的权重和偏置将逐渐收敛到最优解从而使损失函数最小化预测性能最大化。在神经网络中梯度方向直接指导了参数更新的方向。
总结
无论是处理简单的一元二次函数、复杂的多元函数还是神经网络中的复杂优化问题梯度都为我们提供了一条通向最优解的道路。通过了解梯度的方向和反方向我们可以有效地使用梯度下降算法来找到函数的最低点。每一次迭代中我们根据当前的损失计算梯度并沿着梯度的反方向调整参数最终使模型更好地拟合训练数据。
1.3 梯度下降的一般性公式
梯度下降是一种用于最小化损失函数的迭代优化算法。其核心思想是通过逐步调整参数使损失函数的值不断减小直到收敛到局部或全局最小值。梯度下降的基本步骤如下
初始化参数选择一组初始参数 θ 0 \theta_0 θ0。计算梯度在当前参数 θ n \theta_n θn 处计算损失函数 J ( θ ) J(\theta) J(θ) 的梯度 ∇ θ J ( θ n ) \nabla_\theta J(\theta_n) ∇θJ(θn)。更新参数根据梯度的反方向更新参数 θ n 1 θ n − α ⋅ ∇ θ J ( θ n ) \theta_{n1} \theta_n - \alpha \cdot \nabla_\theta J(\theta_n) θn1θn−α⋅∇θJ(θn) 其中 α \alpha α 是学习率决定了每次更新步长的大小。重复迭代重复上述步骤直到满足某个停止条件如梯度接近零或达到最大迭代次数。
梯度下降的具体形式取决于使用的数据集和模型。以下是几种常见的梯度下降变体
批量梯度下降Batch Gradient Descent每次迭代使用整个训练集来计算梯度。随机梯度下降Stochastic Gradient Descent, SGD每次迭代仅使用一个样本或一个小批次来计算梯度从而加快收敛速度但可能引入更多噪声。小批量梯度下降Mini-batch Gradient Descent每次迭代使用一小批样本通常几十个来计算梯度结合了批量和随机梯度下降的优点。
二、一元二次函数的梯度下降
2.1 函数及其导数
考虑简单的二次函数 y x 2 y x^2 yx2。可以计算其导数即梯度 d y d x 2 x \frac{dy}{dx} 2x dxdy2x
这个导数告诉我们在任意点 x x x 处函数 y y y 的变化率是多少。
2.2 梯度下降的具体过程
假设想找到使 y x 2 y x^2 yx2 最小化的 x x x 值将使用梯度下降算法来进行优化。 初始化选择初始猜测 x 0 3 x_0 3 x03学习率 α 0.1 \alpha 0.1 α0.1。 迭代过程按照以下步骤进行迭代 计算梯度在当前点 x n x_n xn 计算导数: d y d x ( x n ) 2 x n \frac{dy}{dx}(x_n) 2x_n dxdy(xn)2xn更新参数根据梯度的反方向更新 x x x x n 1 x n − α ⋅ d y d x ( x n ) x_{n1} x_n - \alpha \cdot \frac{dy}{dx}(x_n) xn1xn−α⋅dxdy(xn)重复重复上述步骤直到收敛或达到预定的迭代次数。
具体 第一次迭代 当前位置 x 0 3 x_0 3 x03计算梯度 d y d x ( x 0 ) 2 ∗ 3 6 \frac{dy}{dx}(x_0) 2*3 6 dxdy(x0)2∗36更新 x x x x 1 x 0 − 0.1 ∗ 6 3 − 0.6 2.4 x_1 x_0 - 0.1 * 6 3 - 0.6 2.4 x1x0−0.1∗63−0.62.4 第二次迭代 当前位置 x 1 2.4 x_1 2.4 x12.4计算梯度 d y d x ( x 1 ) 2 ∗ 2.4 4.8 \frac{dy}{dx}(x_1) 2*2.4 4.8 dxdy(x1)2∗2.44.8更新 x x x x 2 x 1 − 0.1 ∗ 4.8 2.4 − 0.48 1.92 x_2 x_1 - 0.1 * 4.8 2.4 - 0.48 1.92 x2x1−0.1∗4.82.4−0.481.92 第三次迭代 当前位置 x 2 1.92 x_2 1.92 x21.92计算梯度 d y d x ( x 2 ) 2 ∗ 1.92 3.84 \frac{dy}{dx}(x_2) 2*1.92 3.84 dxdy(x2)2∗1.923.84更新 x x x x 3 x 2 − 0.1 ∗ 3.84 1.92 − 0.384 1.536 x_3 x_2 - 0.1 * 3.84 1.92 - 0.384 1.536 x3x2−0.1∗3.841.92−0.3841.536
随着迭代次数的增加 x x x 将逐渐接近最小值点 x 0 x 0 x0。最终经过足够多次的迭代 x x x 会非常接近 0此时 y x 2 y x^2 yx2 达到最小值。
三、多元函数的梯度下降
3.1 函数及其梯度
考虑一个二维二次函数 f ( x , y ) x 2 y 2 f(x, y) x^2 y^2 f(x,y)x2y2。该函数描述了一个三维空间中的抛物面顶点位于原点 (0, 0)。其梯度向量为 ∇ f ( 2 x , 2 y ) \nabla f (2x, 2y) ∇f(2x,2y)
3.2 梯度下降的具体过程
假设想找到使 f ( x , y ) x 2 y 2 f(x, y) x^2 y^2 f(x,y)x2y2 最小化的 x x x 和 y y y 的值将使用梯度下降算法来进行优化。 初始化选择初始猜测 x 0 1 x_0 1 x01, y 0 1 y_0 1 y01学习率 α 0.1 \alpha 0.1 α0.1。 迭代过程按照以下步骤进行迭代 计算梯度在当前点 ( x n , y n ) (x_n, y_n) (xn,yn) 计算梯度 ∇ f ( x n , y n ) ( 2 x n , 2 y n ) \nabla f(x_n, y_n) (2x_n, 2y_n) ∇f(xn,yn)(2xn,2yn)。更新参数根据梯度的反方向更新 x x x 和 y y y x n 1 x n − α ⋅ ∂ f ∂ x ( x n , y n ) x_{n1} x_n - \alpha \cdot \frac{\partial f}{\partial x}(x_n, y_n) xn1xn−α⋅∂x∂f(xn,yn) y n 1 y n − α ⋅ ∂ f ∂ y ( x n , y n ) y_{n1} y_n - \alpha \cdot \frac{\partial f}{\partial y}(x_n, y_n) yn1yn−α⋅∂y∂f(xn,yn)重复重复上述步骤直到收敛或达到预定的迭代次数。
具体 第一次迭代 当前位置 ( x 0 , y 0 ) ( 1 , 1 ) (x_0, y_0) (1, 1) (x0,y0)(1,1)计算梯度 ∇ f ( x 0 , y 0 ) ( 2 ∗ 1 , 2 ∗ 1 ) ( 2 , 2 ) \nabla f(x_0, y_0) (2*1, 2*1) (2, 2) ∇f(x0,y0)(2∗1,2∗1)(2,2)更新 x x x 和 y y y x 1 x 0 − 0.1 ∗ 2 1 − 0.2 0.8 x_1 x_0 - 0.1 * 2 1 - 0.2 0.8 x1x0−0.1∗21−0.20.8 y 1 y 0 − 0.1 ∗ 2 1 − 0.2 0.8 y_1 y_0 - 0.1 * 2 1 - 0.2 0.8 y1y0−0.1∗21−0.20.8 第二次迭代 当前位置 ( x 1 , y 1 ) ( 0.8 , 0.8 ) (x_1, y_1) (0.8, 0.8) (x1,y1)(0.8,0.8)计算梯度 ∇ f ( x 1 , y 1 ) ( 2 ∗ 0.8 , 2 ∗ 0.8 ) ( 1.6 , 1.6 ) \nabla f(x_1, y_1) (2*0.8, 2*0.8) (1.6, 1.6) ∇f(x1,y1)(2∗0.8,2∗0.8)(1.6,1.6)更新 x x x 和 y y y x 2 x 1 − 0.1 ∗ 1.6 0.8 − 0.16 0.64 x_2 x_1 - 0.1 * 1.6 0.8 - 0.16 0.64 x2x1−0.1∗1.60.8−0.160.64 y 2 y 1 − 0.1 ∗ 1.6 0.8 − 0.16 0.64 y_2 y_1 - 0.1 * 1.6 0.8 - 0.16 0.64 y2y1−0.1∗1.60.8−0.160.64 第三次迭代 当前位置 ( x 2 , y 2 ) ( 0.64 , 0.64 ) (x_2, y_2) (0.64, 0.64) (x2,y2)(0.64,0.64)计算梯度 ∇ f ( x 2 , y 2 ) ( 2 ∗ 0.64 , 2 ∗ 0.64 ) ( 1.28 , 1.28 ) \nabla f(x_2, y_2) (2*0.64, 2*0.64) (1.28, 1.28) ∇f(x2,y2)(2∗0.64,2∗0.64)(1.28,1.28)更新 x x x 和 y y y x 3 x 2 − 0.1 ∗ 1.28 0.64 − 0.128 0.512 x_3 x_2 - 0.1 * 1.28 0.64 - 0.128 0.512 x3x2−0.1∗1.280.64−0.1280.512 y 3 y 2 − 0.1 ∗ 1.28 0.64 − 0.128 0.512 y_3 y_2 - 0.1 * 1.28 0.64 - 0.128 0.512 y3y2−0.1∗1.280.64−0.1280.512
随着迭代次数的增加 x x x 和 y y y 将逐渐接近最小值点 ( 0 , 0 ) (0, 0) (0,0)。最终经过足够多次的迭代 ( x , y ) (x, y) (x,y) 会非常接近 (0, 0)此时 f ( x , y ) x 2 y 2 f(x, y) x^2 y^2 f(x,y)x2y2 达到最小值。
3.3 神经网络中的梯度下降
为了更直观地理解神经网络中梯度下降的过程我们将通过一个具体的二分类问题来展示如何使用梯度下降和反向传播算法优化网络参数。假设有一个简单的两层神经网络用于区分两类样本。下面将详细说明每一步的计算过程并给出具体的数值示例。
模型结构
输入层2 个特征 x 1 x_1 x1 和 x 2 x_2 x2。隐藏层3 个神经元激活函数为 ReLURectified Linear Unit。输出层1 个神经元激活函数为 Sigmoid用于二分类。损失函数交叉熵损失函数。
初始化参数
随机初始化权重和偏置
输入层到隐藏层的权重矩阵 W ( 1 ) W^{(1)} W(1) W ( 1 ) ( 0.5 − 0.2 0.3 0.4 − 0.1 0.6 ) W^{(1)} \begin{pmatrix} 0.5 -0.2 \\ 0.3 0.4 \\ -0.1 0.6 \end{pmatrix} W(1) 0.50.3−0.1−0.20.40.6 隐藏层到输出层的权重矩阵 W ( 2 ) W^{(2)} W(2) W ( 2 ) ( 0.2 − 0.3 0.4 ) W^{(2)} \begin{pmatrix} 0.2 \\ -0.3 \\ 0.4 \end{pmatrix} W(2) 0.2−0.30.4 隐藏层的偏置向量 b ( 1 ) b^{(1)} b(1) b ( 1 ) ( 0.1 − 0.2 0.3 ) b^{(1)} \begin{pmatrix} 0.1 \\ -0.2 \\ 0.3 \end{pmatrix} b(1) 0.1−0.20.3 输出层的偏置 b ( 2 ) b^{(2)} b(2) b ( 2 ) 0.1 b^{(2)} 0.1 b(2)0.1
具体
考虑一个简单的训练样本
输入特征 X ( 1 2 ) X \begin{pmatrix} 1 \\ 2 \end{pmatrix} X(12)对应标签 y 1 y 1 y1
第一次迭代
1. 前向传播 计算隐藏层的线性组合 z ( 1 ) W ( 1 ) ⋅ X b ( 1 ) ( 0.5 − 0.2 0.3 0.4 − 0.1 0.6 ) ⋅ ( 1 2 ) ( 0.1 − 0.2 0.3 ) ( 0.5 ⋅ 1 ( − 0.2 ) ⋅ 2 0.1 0.3 ⋅ 1 0.4 ⋅ 2 − 0.2 − 0.1 ⋅ 1 0.6 ⋅ 2 0.3 ) ( 0.4 0.7 1.4 ) z^{(1)} W^{(1)} \cdot X b^{(1)} \begin{pmatrix} 0.5 -0.2 \\ 0.3 0.4 \\ -0.1 0.6 \end{pmatrix} \cdot \begin{pmatrix} 1 \\ 2 \end{pmatrix} \begin{pmatrix} 0.1 \\ -0.2 \\ 0.3 \end{pmatrix} \begin{pmatrix} 0.5 \cdot 1 (-0.2) \cdot 2 0.1 \\ 0.3 \cdot 1 0.4 \cdot 2 - 0.2 \\ -0.1 \cdot 1 0.6 \cdot 2 0.3 \end{pmatrix} \begin{pmatrix} 0.4 \\ 0.7 \\ 1.4 \end{pmatrix} z(1)W(1)⋅Xb(1) 0.50.3−0.1−0.20.40.6 ⋅(12) 0.1−0.20.3 0.5⋅1(−0.2)⋅20.10.3⋅10.4⋅2−0.2−0.1⋅10.6⋅20.3 0.40.71.4 应用 ReLU 激活函数 a ( 1 ) ReLU ( z ( 1 ) ) ( max ( 0 , 0.4 ) max ( 0 , 0.7 ) max ( 0 , 1.4 ) ) ( 0.4 0.7 1.4 ) a^{(1)} \text{ReLU}(z^{(1)}) \begin{pmatrix} \max(0, 0.4) \\ \max(0, 0.7) \\ \max(0, 1.4) \end{pmatrix} \begin{pmatrix} 0.4 \\ 0.7 \\ 1.4 \end{pmatrix} a(1)ReLU(z(1)) max(0,0.4)max(0,0.7)max(0,1.4) 0.40.71.4 计算输出层的线性组合 z ( 2 ) W ( 2 ) ⋅ a ( 1 ) b ( 2 ) ( 0.2 − 0.3 0.4 ) ⋅ ( 0.4 0.7 1.4 ) 0.1 0.2 ⋅ 0.4 ( − 0.3 ) ⋅ 0.7 0.4 ⋅ 1.4 0.1 0.8 − 0.21 0.56 0.1 1.25 z^{(2)} W^{(2)} \cdot a^{(1)} b^{(2)} \begin{pmatrix} 0.2 \\ -0.3 \\ 0.4 \end{pmatrix} \cdot \begin{pmatrix} 0.4 \\ 0.7 \\ 1.4 \end{pmatrix} 0.1 0.2 \cdot 0.4 (-0.3) \cdot 0.7 0.4 \cdot 1.4 0.1 0.8 - 0.21 0.56 0.1 1.25 z(2)W(2)⋅a(1)b(2) 0.2−0.30.4 ⋅ 0.40.71.4 0.10.2⋅0.4(−0.3)⋅0.70.4⋅1.40.10.8−0.210.560.11.25 应用 Sigmoid 激活函数 a ( 2 ) σ ( z ( 2 ) ) 1 1 e − 1.25 ≈ 0.777 a^{(2)} \sigma(z^{(2)}) \frac{1}{1 e^{-1.25}} \approx 0.777 a(2)σ(z(2))1e−1.251≈0.777
2. 计算损失
使用交叉熵损失函数 L − y log ( a ( 2 ) ) − ( 1 − y ) log ( 1 − a ( 2 ) ) − 1 ⋅ log ( 0.777 ) − 0 ⋅ log ( 1 − 0.777 ) ≈ 0.251 L -y \log(a^{(2)}) - (1 - y) \log(1 - a^{(2)}) -1 \cdot \log(0.777) - 0 \cdot \log(1 - 0.777) \approx 0.251 L−ylog(a(2))−(1−y)log(1−a(2))−1⋅log(0.777)−0⋅log(1−0.777)≈0.251
3. 反向传播 计算输出层的误差 δ ( 2 ) a ( 2 ) − y 0.777 − 1 − 0.223 \delta^{(2)} a^{(2)} - y 0.777 - 1 -0.223 δ(2)a(2)−y0.777−1−0.223 计算输出层的梯度 ∇ W ( 2 ) L δ ( 2 ) ⋅ a ( 1 ) T − 0.223 ⋅ ( 0.4 0.7 1.4 ) ( − 0.0892 − 0.1561 − 0.3122 ) \nabla_{W^{(2)}} L \delta^{(2)} \cdot a^{(1)T} -0.223 \cdot \begin{pmatrix} 0.4 \\ 0.7 \\ 1.4 \end{pmatrix} \begin{pmatrix} -0.0892 \\ -0.1561 \\ -0.3122 \end{pmatrix} ∇W(2)Lδ(2)⋅a(1)T−0.223⋅ 0.40.71.4 −0.0892−0.1561−0.3122 ∇ b ( 2 ) L δ ( 2 ) − 0.223 \nabla_{b^{(2)}} L \delta^{(2)} -0.223 ∇b(2)Lδ(2)−0.223 计算隐藏层的误差 δ ( 1 ) ( δ ( 2 ) ⋅ W ( 2 ) T ) ⊙ f ′ ( z ( 1 ) ) \delta^{(1)} (\delta^{(2)} \cdot W^{(2)T}) \odot f(z^{(1)}) δ(1)(δ(2)⋅W(2)T)⊙f′(z(1)) 其中 f ′ f f′ 是 ReLU 的导数对于正数是 1对于负数是 0所以 δ ( 1 ) ( − 0.223 ⋅ ( 0.2 − 0.3 0.4 ) ) ⊙ ( 1 1 1 ) ( − 0.0446 0.0669 − 0.0892 ) \delta^{(1)} (-0.223 \cdot \begin{pmatrix} 0.2 \\ -0.3 \\ 0.4 \end{pmatrix}) \odot \begin{pmatrix} 1 \\ 1 \\ 1 \end{pmatrix} \begin{pmatrix} -0.0446 \\ 0.0669 \\ -0.0892 \end{pmatrix} δ(1)(−0.223⋅ 0.2−0.30.4 )⊙ 111 −0.04460.0669−0.0892 计算隐藏层的梯度 ∇ W ( 1 ) L δ ( 1 ) ⋅ X T ( − 0.0446 0.0669 − 0.0892 ) ⋅ ( 1 2 ) ( − 0.0446 − 0.0892 0.0669 0.1338 − 0.0892 − 0.1784 ) \nabla_{W^{(1)}} L \delta^{(1)} \cdot X^T \begin{pmatrix} -0.0446 \\ 0.0669 \\ -0.0892 \end{pmatrix} \cdot \begin{pmatrix} 1 \\ 2 \end{pmatrix} \begin{pmatrix} -0.0446 -0.0892 \\ 0.0669 0.1338 \\ -0.0892 -0.1784 \end{pmatrix} ∇W(1)Lδ(1)⋅XT −0.04460.0669−0.0892 ⋅(12) −0.04460.0669−0.0892−0.08920.1338−0.1784 ∇ b ( 1 ) L δ ( 1 ) ( − 0.0446 0.0669 − 0.0892 ) \nabla_{b^{(1)}} L \delta^{(1)} \begin{pmatrix} -0.0446 \\ 0.0669 \\ -0.0892 \end{pmatrix} ∇b(1)Lδ(1) −0.04460.0669−0.0892
4. 更新参数
选择学习率 α 0.1 \alpha 0.1 α0.1 更新输出层的权重和偏置 W new ( 2 ) W ( 2 ) − α ⋅ ∇ W ( 2 ) L ( 0.2 − 0.3 0.4 ) − 0.1 ⋅ ( − 0.0892 − 0.1561 − 0.3122 ) ( 0.20892 − 0.28439 0.43122 ) W^{(2)}_{\text{new}} W^{(2)} - \alpha \cdot \nabla_{W^{(2)}} L \begin{pmatrix} 0.2 \\ -0.3 \\ 0.4 \end{pmatrix} - 0.1 \cdot \begin{pmatrix} -0.0892 \\ -0.1561 \\ -0.3122 \end{pmatrix} \begin{pmatrix} 0.20892 \\ -0.28439 \\ 0.43122 \end{pmatrix} Wnew(2)W(2)−α⋅∇W(2)L 0.2−0.30.4 −0.1⋅ −0.0892−0.1561−0.3122 0.20892−0.284390.43122 b new ( 2 ) b ( 2 ) − α ⋅ ∇ b ( 2 ) L 0.1 − 0.1 ⋅ ( − 0.223 ) 0.1223 b^{(2)}_{\text{new}} b^{(2)} - \alpha \cdot \nabla_{b^{(2)}} L 0.1 - 0.1 \cdot (-0.223) 0.1223 bnew(2)b(2)−α⋅∇b(2)L0.1−0.1⋅(−0.223)0.1223 更新隐藏层的权重和偏置 W new ( 1 ) W ( 1 ) − α ⋅ ∇ W ( 1 ) L ( 0.5 − 0.2 0.3 0.4 − 0.1 0.6 ) − 0.1 ⋅ ( − 0.0446 − 0.0892 0.0669 0.1338 − 0.0892 − 0.1784 ) ( 0.50446 − 0.19108 0.29331 0.38662 − 0.09108 0.61784 ) W^{(1)}_{\text{new}} W^{(1)} - \alpha \cdot \nabla_{W^{(1)}} L \begin{pmatrix} 0.5 -0.2 \\ 0.3 0.4 \\ -0.1 0.6 \end{pmatrix} - 0.1 \cdot \begin{pmatrix} -0.0446 -0.0892 \\ 0.0669 0.1338 \\ -0.0892 -0.1784 \end{pmatrix} \begin{pmatrix} 0.50446 -0.19108 \\ 0.29331 0.38662 \\ -0.09108 0.61784 \end{pmatrix} Wnew(1)W(1)−α⋅∇W(1)L 0.50.3−0.1−0.20.40.6 −0.1⋅ −0.04460.0669−0.0892−0.08920.1338−0.1784 0.504460.29331−0.09108−0.191080.386620.61784 b new ( 1 ) b ( 1 ) − α ⋅ ∇ b ( 1 ) L ( 0.1 − 0.2 0.3 ) − 0.1 ⋅ ( − 0.0446 0.0669 − 0.0892 ) ( 0.10446 − 0.20669 0.30892 ) b^{(1)}_{\text{new}} b^{(1)} - \alpha \cdot \nabla_{b^{(1)}} L \begin{pmatrix} 0.1 \\ -0.2 \\ 0.3 \end{pmatrix} - 0.1 \cdot \begin{pmatrix} -0.0446 \\ 0.0669 \\ -0.0892 \end{pmatrix} \begin{pmatrix} 0.10446 \\ -0.20669 \\ 0.30892 \end{pmatrix} bnew(1)b(1)−α⋅∇b(1)L 0.1−0.20.3 −0.1⋅ −0.04460.0669−0.0892 0.10446−0.206690.30892
后续迭代
重复上述步骤逐步减少损失函数提高预测准确性。随着迭代次数的增加网络的权重和偏置将逐渐收敛到最优解从而使损失函数最小化预测性能最大化。
通过这个具体的数值例子可以更直观地理解神经网络中梯度下降和反向传播的工作原理。每一次迭代中会根据当前的损失计算梯度并沿着梯度的反方向调整参数最终使模型更好地拟合训练数据。
四、结论
梯度不仅是理解多维空间中函数行为的强大工具而且在优化问题中扮演着至关重要的角色。通过了解梯度的方向和反方向我们可以有效地使用梯度下降算法来找到函数的最低点。无论是处理简单的一元二次函数还是更复杂的多元函数梯度都为我们提供了一条通向最优解的道路。通过具体的迭代过程和参数更新方法展示了如何在实际问题中应用梯度下降算法帮助大家更好地掌握这一优化技术。