神经网络数学原理(6)梯度下降

本篇我们将深入探讨梯度下降算法在神经网络中的应用。首先,我们会从数学中的梯度概念入手,介绍梯度的定义、大小和方向,随后我们会讨论复合函数求导的技巧,最后将这些数学原理应用于神经网络中的梯度下降过程。

1. 数学中梯度的定义、大小和方向

1.1 梯度的定义

梯度是一个多变量函数的导数,它是一个向量,指示了函数在每个自变量方向上的变化速率。对于一个函数 f(x1,x2,…,xn) ,其梯度表示为:

梯度向量的每个分量是该函数关于一个变量的偏导数,描述了函数在该方向上的变化速率。

1.2 梯度的方向

梯度向量的方向指向函数值增长最快的方向,也就是函数值变大越快得方向,意味着在该方向上,函数值的变化速率最大。换句话说,梯度的方向就是最速上升的方向,这是由梯度向量中的每个分量决定的,表示函数在不同方向上的变化趋势。每个分量都代表超平面中函数值在该分量方向上的变化率,比如z=f(x,y)三维函数。梯度(z/∂x,∂z/∂y)表示(z在x轴方向的变化率,z在y轴方向的变化率)。

  • 梯度某个分量的方向就是它的符号,如果梯度的某个分量为正,表示该分量对应得自变量在正方向上移动函数值增大, ∇x(自变量增量)为正数∇y(因变量增量)变大;如果为负,则表示自变量朝负方向移动函数值会增大,∇x 为负数 ∇y变大。
  • 在最优化问题中,我们通常会沿着梯度的反方向(负梯度方向(这里负梯度方向代表梯度的反方向,也就是(-1)×梯度,而不是梯度是负数的意思))前进,以便最小化损失函数。对于每个分量(偏导数)来说,如果偏导数是正数,可以理解为它的方向是正方向(正数),如果是负数则认为方向为负方向, 正数得反方向是负方向,负数对应得反方向是正方向。

1.3 梯度的大小

梯度的大小表示函数在该方向上的变化速率,通常由梯度向量的模(即欧几里得范数)表示:

梯度的大小越大,表示在该方向上,函数变化越剧烈;大小越小,则变化越缓慢。

1.4 梯度方向的应用

在神经网络的训练中,梯度下降法是最常用的优化算法,它通过计算损失函数的梯度,沿着梯度的反方向调整网络的权重,直到达到损失函数的最小值。

2. 复合函数求导方法

复合函数是指一个函数由另一个函数作为输入构成的函数。举个例子,如果我们有两个函数 h=f(u)  和 u=g(x) ,那么复合函数 h(x)  可以表示为:

h(x)=f(g(x)) 

其中,u=g(x)   是内部函数,f(u)  是外部函数。

2.1 链式法则

在求复合函数的导数时,我们使用 链式法则。链式法则帮助我们将复合函数的导数分解为多个简单函数的导数的乘积。

具体来说,链式法则的基本形式如下:

这里:

  • df(u)/du 是外部函数 f(u) 对 u 的导数;
  • du/dx 是内部函数 u=g(x)  对 的导数

这种方法在神经网络的反向传播过程中非常重要,因为神经网络通常是由多个层级的神经元组成的,每一层的输出都依赖于前一层的输出。链式法则帮助我们计算每一层的梯度,并将它们传递到上一层。

3. 神经网络中的梯度下降

3.1 神经网络的前向传播过程

神经网络多层感知机(MLP)中的前向传播过程,本质上是由多个复合函数组成的。每一层神经网络都可以看作是一个函数,接受上一层的输出作为输入,通过权重和偏置的线性变换,再通过激活函数得到下一层的输出。整个网络的输出是由多层函数复合而成的。

假设我们有一个简单的三层神经网络,包含输入层、一个隐藏层和输出层。对于每一层,前向传播的过程可以表示为复合函数的组合。

  • 输入层:接受原始数据 x,并将其传递给下一层。
  • 隐藏层:将输入 x 通过权重矩阵 W1 和偏置 b1 进行线性变换,并通过激活函数 σ 生成隐藏层输出 h1。即:

  • 输出层:将隐藏层输出 h1作为本层输入 进行线性变换,并通过输出层的激活函数得到最终输出 

整个网络的输出 y^  可以看作是复合函数的组合,表示为:

3.2 复合函数的求导:链式法则

在神经网络的训练过程中,我们需要计算损失函数对每个参数(如权重和偏置)的偏导数。这个过程就是利用复合函数的求导规则——链式法则

假设我们的损失函数为 L,并且我们希望计算损失函数关于隐藏层权重 W1 的偏导数。我们需要使用链式法则来将偏导数分解为各层的导数:

  1. 损失函数对输出层权重 W2  的偏导数

    其中, ∂L/∂y^是损失函数对输出的偏导数,∂L/∂W2 是输出层对权重的偏导数。

  2. 损失函数对隐藏层权重 W1  的偏导数: 由于 h1=σ(W1x+b1,我们还需要对 W1  使用链式法则:

通过这种方式,我们可以一步步地将损失函数的导数传播回网络的每一层,得到每个权重和偏置的梯度。

3.3 反向传播和权重更新

反向传播算法的核心就是利用链式法则计算每层的梯度,然后利用梯度下降方法调整权重和偏置。具体过程如下:

  1. 计算每层的梯度:通过链式法则,我们计算每一层的梯度,并将它们反向传播到网络的每一层。

  2. 更新权重:根据计算出的梯度,利用梯度下降法更新每个权重和偏置:

    其中,η 是学习率,决定了每次更新的步长。

通过反向传播和梯度下降的迭代过程,网络的权重会逐步调整,使得损失函数 最小化,从而使网络能够学习到更好的模型。

posted @   Hi同学  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示