优化算法之梯度下降
优化算法-梯度下降
文章目录
- 优化算法-梯度下降
- 函数
- 函数的概念
- 线性模型概述
- 初始化
- 权重
- 偏置
- 损失函数
- MSE
- 优化算法
- 导数
- 常用导数公式
- 多元函数
- 多元函数的概念
- 偏导数
- 梯度
- 链式法则
- 导数
- 实战
- 自动求导
- 梯度下降推导
- 函数
文章概要
本文围绕优化算法中的梯度下降展开,系统介绍了相关的基础概念与核心知识。首先阐释了函数的基本概念,即函数是输入到输出的映射,每个输入对应唯一输出。接着概述了线性模型,包括其基本形式(如y=wx+by = wx + by=wx+b)、高维数据集下的表示方法,以及线性模型的优缺点。随后讲解了模型初始化,指出权重通常随机猜测,偏置一般初始化为0。对于损失函数,文章介绍了其作用(衡量预测值与真实值差异)、常见类型,并重点阐述了回归问题中常用的均方误差(MSE)的定义、几何意义、优缺点及应用。最后,在优化算法部分,依次讲解了导数(描述函数变化快慢、定义及常用公式)、多元函数(概念及涉及的偏导数、梯度)以及链式法则(用于复合函数求导),这些内容为理解梯度下降算法奠定了重要基础。
函数
函数的概念
函数是一个映射,将输入映射到输出。
每个输入都对应一个唯一的输出。
也就是每个x都有唯一的一个y与之对应。
函数的定义:
y=f(x)=x2+1y = f(x)=x^2 + 1y=f(x)=x2+1
线性模型概述
线性模型是最简单的深度学习模型之一,它的基本形式是一个线性变换
线性模型的基本形式如下:
y=wx+by = wx + by=wx+b
其中,www 是权重,bbb 是偏置,xxx 是输入,yyy 是输出。
线性模型的优点是简单易用,计算效率高,适用于线性可分的数据。
线性模型的缺点是无法拟合非线性数据,需要使用非线性模型来解决非线性问题。
在机器学习领域,我们通常使用的是高维数据集,建模时采用线性代数表示法会比较方便。 当我们的输入包含ddd个特征时,我们将预测结果y^\hat{y}y^ (通常使用“尖角”符号表示
的估计值)表示为:
y^=w1x1+w2x2+...+wdxd+b\hat{y} = w_1x_1 + w_2x_2 + ... + w_dx_d + by^=w1x1+w2x2+...+wdxd+b
将所有特征放到向量中, 并将所有权重放到向量中, 我们可以简洁地表达模型
y^=wTx+b\hat{y} = w^Tx + by^=wTx+b
其中,www 和 xxx 是列向量,bbb 是标量。
整个数据集的n个样本可以表示为:
Y^=XW+b\hat{Y} = XW + bY^=XW+b
初始化
权重
模型最开始的权重我们一般就是随机猜测
偏置
偏置一般初始化为0,初始化为 0 通常能提供稳定的训练起点,尤其在浅层模型中。
损失函数
损失函数是用来衡量模型预测值与真实值之间的差异的函数。
损失函数的作用是指导模型的学习过程,使得模型的预测值逐渐接近真实值。
损失函数的选择取决于具体的问题和模型。
常见的损失函数包括:
- 均方误差(MSE):用于回归问题
- 交叉熵损失(Cross Entropy Loss):用于分类问题
- 对数损失(Log Loss):用于二分类问题
- 多分类交叉熵损失(Multi-Class Cross Entropy Loss):用于多分类问题
- 自定义损失函数:根据具体问题进行定义
损失函数的选择对模型的性能和收敛速度有很大影响。需要根据具体问题和模型进行选择。
MSE
均方误差(Mean Squared Error,MSE)是一种常用的损失函数,用于回归问题。
均方差有非常好的几何意义,它对应了常用的欧几里得距离或简称欧式距离
MSE的定义如下:
MSE=1n∑i=1n(yi−yi^)2MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y_i})^2MSE=n1i=1∑n(yi−yi^)2
其中,yiy_iyi 是真实值,yi^\hat{y_i}yi^ 是预测值,nnn 是样本数量。
MSE的优点是简单易用,计算效率高,适用于线性可分的数据。
MSE的缺点是对异常值敏感,容易受到异常值的影响。
MSE的主要应用包括:
- 回归:预测连续值
而我们的任务目标其实就是最小化MSE,也就是找到一个模型,使得模型的预测值与真实值之间的差异最小。
优化算法
导数
导数是微积分中描述 函数变化快慢 的核心概念,简单来说就是 瞬间变化率。它能帮我们解决 “速度、斜率、极值” 等实际问题
x0−>x0+Δxx_0 -> x_0+\Delta{x}x0−>x0+Δx x发生了改变,y也发生了变化 f(x0)−>f(x0+Δx)f(x_0) -> f(x_0+\Delta{x})f(x0)−>f(x0+Δx)
变化率:就是他们之间的比值,我们可以用下面的公式表示:
f(x0+Δx)−f(x0)Δx\frac{f(x_0+\Delta{x})-f(x_0)}{\Delta{x}}Δxf(x0+Δx)−f(x0)
它想描述的是因变量的变化比上自变量的变化。
速度=距离时间速度=\frac{距离}{时间}速度=时间距离
开车时,速度表显示的 “当前时速 60 公里” 是怎么来的?
就是他在某个时间点的瞬时速度
所以就是对它求极限:
导数的定义:
f′(x)=limΔx→0f(x+Δx)−f(x)Δxf'(x) = \lim_{\Delta{x} \to 0} \frac{f(x+\Delta{x}) - f(x)}{\Delta{x}}f′(x)=Δx→0limΔxf(x+Δx)−f(x)
如果f’(a)存在,则称fff在aaa处是可微(differentiable)的。 如果fff在一个区间内的每个数上都是可微的,则此函数在此区间中是可微的。 我们可以将中的导数f′(x)f'(x)f′(x)解释为f(x)f(x)f(x)相对于xxx的瞬时(instantaneous)变化率。 所谓的瞬时变化率是基于xxx中的变化Δx\Delta{x}Δx,且Δx\Delta{x}Δx接近0
让我们熟悉一下导数的几个等价符号:
f′(x)=y′=dydx=dfdx=ddxf(x)=Df(x)=Dxf(x)f'(x) = y' = \frac{dy}{dx} = \frac{df}{dx} = \frac{d}{dx} f(x) = Df(x) = D_x f(x)f′(x)=y′=dxdy=dxdf=dxdf(x)=Df(x)=Dxf(x)
在数学图像上,导数表示 函数曲线在某一点的切线斜率。
常用导数公式
通过定义推导后,数学家总结了一套 “导数公式表”,避免每次都算极限
函数 | 导数 |
---|---|
常数C | 0 |
f(x)=xnf(x) = x^nf(x)=xn | f′(x)=nxn−1f'(x) = nx^{n-1}f′(x)=nxn−1 |
f(x)=sinxf(x) = \sin xf(x)=sinx | f′(x)=cosxf'(x) = \cos xf′(x)=cosx |
f(x)=cosxf(x) = \cos xf(x)=cosx | f′(x)=−sinxf'(x) = -\sin xf′(x)=−sinx |
f(x)=tanxf(x) = \tan xf(x)=tanx | f′(x)=sec2xf'(x) = \sec^2 xf′(x)=sec2x |
f(x)=lnxf(x) = \ln xf(x)=lnx | f′(x)=1xf'(x) = \frac{1}{x}f′(x)=x1 |
f(x)=exf(x) = e^xf(x)=ex | f′(x)=exf'(x) = e^xf′(x)=ex |
f(x)=axf(x) = a^xf(x)=ax | f′(x)=axlnaf'(x) = a^x \ln af′(x)=axlna |
f(x)=1x2f(x) = \frac{1}{x^2}f(x)=x21 | f′(x)=−2x3f'(x) = -\frac{2}{x^3}f′(x)=−x32 |
多元函数
多元函数的概念
在深度学习中,函数通常依赖于许多变量。 因此,我们需要将微分的思想推广到多元函数(multivariate function)上
多元函数是指包含 两个或多个自变量 的函数,它描述了因变量与多个因素之间的关系。现实中,大多数问题都涉及多个变量,例如:
气温(与时间、纬度、海拔、风速等有关)
房价(与面积、地段、楼层、房龄等有关)
神经网络的输出(与大量权重和偏置有关)
多元函数是指将多个变量作为输入,得到一个单一的输出的函数。
例如,一个二元函数 f(x,y)f(x, y)f(x,y) 可以表示为:
f(x,y)=x2+y2f(x, y) = x^2 + y^2f(x,y)=x2+y2
偏导数
在单变量函数中,我们用 导数 描述函数随一个变量的变化率(如直线斜率)。但现实中很多问题涉及多个变量,比如气温受时间、海拔、风速等影响,此时需要用 偏导数 来分析函数在 某个变量方向上的变化规律。
固定其他变量,只看一个变量的变化,核心思维就是化繁为简:将多变量问题拆解为单变量问题,逐个分析。
假设我们有一个二元函数 f(x,y)f(x, y)f(x,y),其中 xxx 和 yyy 是两个变量。
先设y不变,x进行变化,则是对x求偏导
∂f∂x=limΔx→0f(x+Δx,y)−f(x,y)Δx\frac{\partial f}{\partial x} = \lim_{\Delta{x} \to 0} \frac{f(x+\Delta{x}, y) - f(x, y)}{\Delta{x}}∂x∂f=Δx→0limΔxf(x+Δx,y)−f(x,y)
再设x不变,y进行变化,则是对y求偏导
∂f∂y=limΔx→0f(x,y+Δx)−f(x,y)Δx\frac{\partial f}{\partial y} = \lim_{\Delta{x} \to 0} \frac{f(x, y+\Delta{x}) - f(x, y)}{\Delta{x}}∂y∂f=Δx→0limΔxf(x,y+Δx)−f(x,y)
所以在求偏导的时候,就是对求导的其他变量看作是常数,对求导的变量进行求导。
例如,对二元函数 f(x,y)=x2+y2f(x, y) = x^2 + y^2f(x,y)=x2+y2 求偏导:
∂f∂x=limh→0(x+h)2+y2−(x2+y2)h\frac{\partial f}{\partial x} = \lim_{h \to 0} \frac{(x+h)^2 + y^2 - (x^2 + y^2)}{h}∂x∂f=h→0limh(x+h)2+y2−(x2+y2)
∂f∂y=limh→0x2+(y+h)2−(x2+y2)h\frac{\partial f}{\partial y} = \lim_{h \to 0} \frac{x^2 + (y+h)^2 - (x^2 + y^2)}{h}∂y∂f=h→0limhx2+(y+h)2−(x2+y2)
∂f∂x=2x\frac{\partial f}{\partial x} = 2x∂x∂f=2x
∂f∂y=2y\frac{\partial f}{\partial y} = 2y∂y∂f=2y
所以,
∇f=[∂f∂x∂f∂y]\nabla f = \begin{bmatrix} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \end{bmatrix}∇f=[∂x∂f∂y∂f]
∇f=[2x2y]\nabla f = \begin{bmatrix} 2x \\ 2y \end{bmatrix}∇f=[2x2y]
梯度
我们可以连结一个多元函数对其所有变量的偏导数,以得到该函数的梯度(gradient)向量。
链式法则
在深度学习中,多元函数通常是复合(composite)的
通过链式法则,将复合函数对自变量的导数分解为对中间变量的偏导数与中间变量对自变量的导数的乘积之和。
假设我们有一个复合函数 z=f(u,v)u=g(x,y)v=h(x,y)z=f(u,v) u=g(x,y) v=h(x,y)z=f(u,v)u=g(x,y)v=h(x,y),其中 xxx 和 yyy 是两个变量,uuu 和 vvv 是两个中间变量,fff 和 ggg 和 hhh 是三个函数。
则复合函数 zzz 的导数可以表示为:
∂z∂x=∂z∂u∂u∂x+∂z∂v∂v∂x\frac{\partial z}{\partial x} = \frac{\partial z}{\partial u} \frac{\partial u}{\partial x} + \frac{\partial z}{\partial v} \frac{\partial v}{\partial x}∂x∂z=∂u∂z∂x∂u+∂v∂z∂x∂v
∂z∂y=∂z∂u∂u∂y+∂z∂v∂v∂y\frac{\partial z}{\partial y} = \frac{\partial z}{\partial u} \frac{\partial u}{\partial y} + \frac{\partial z}{\partial v} \frac{\partial v}{\partial y}∂y∂z=∂u∂z∂y∂u+∂v∂z∂y∂v
其中,
∂z∂u=∂f(u,v)∂u\frac{\partial z}{\partial u} = \frac{\partial f(u,v)}{\partial u}∂u∂z=∂u∂f(u,v)
∂z∂v=∂f(u,v)∂v\frac{\partial z}{\partial v} = \frac{\partial f(u,v)}{\partial v}∂v∂z=∂v∂f(u,v)
∂u∂x=∂g(x,y)∂x\frac{\partial u}{\partial x} = \frac{\partial g(x,y)}{\partial x}∂x∂u=∂x∂g(x,y)
∂u∂y=∂g(x,y)∂y\frac{\partial u}{\partial y} = \frac{\partial g(x,y)}{\partial y}∂y∂u=∂y∂g(x,y)
实战
自动求导
求导是几乎所有深度学习优化算法的关键步骤。 虽然求导的计算很简单,只需要一些基本的微积分。 但对于复杂的模型,手工进行更新是一件很痛苦的事情(而且经常容易出错)。
深度学习框架通过自动计算导数,即自动微分(automatic differentiation)来加快求导。 实际中,根据设计好的模型,系统会构建一个计算图(computational graph), 来跟踪计算是哪些数据通过哪些操作组合起来产生输出。 自动微分使系统能够随后反向传播梯度。 这里,反向传播(backpropagate)意味着跟踪整个计算图,填充关于每个参数的偏导数。
首先, 我们先初始化权重, 参数。
import torch# 线性回归模型 一元 只考虑一个特征
# y = wx
x = torch.tensor([2.])
w = torch.tensor([3.]) # 初始化权重 参数
y = torch.tensor([4.])
x, w, y
结果:
(tensor([2.]), tensor([3.]), tensor([4.]))
接下来我们就要开启梯度计算:
w.requires_grad_() # 开启梯度计算,告诉pytorch 需要跟踪w的所有操作
w
结果:
w.requires_grad_() # 开启梯度计算,告诉pytorch 需要跟踪w的所有操作
w
接下来我们需要构建一个模型:
# 模型
def model(x):return x * wy_hat = model(x) # 让模型进行推理预测
y_hat
结果:
tensor([6.], grad_fn=<MulBackward0>)
然后我们用mse_loss函数来计算预测值和真实值之间的差距, 利用mse均方误差的方法:
import torch.nn.functional as Fmse = F.mse_loss(y, y_hat) # (4-6)**2 = 4 # (4 - (2 * 3)) ** 2 = 4
mse
结果:
tensor(4., grad_fn=<MseLossBackward0>)
这里说明一下: torch.nn 是 PyTorch 中用于构建神经网络的模块。它提供了各种层(如线性层、卷积层、池化层等)和激活函数(如 ReLU、Sigmoid 等),使得构建和训练神经网络变得更加简单和高效。
接下来我们需要反向传播并计算梯度:
mse.backward() # 反向传播 计算梯度 计算mse关于w的梯度
print(w.grad) # 存储了mse关于w的梯度值
结果:
tensor([8.])
我们不难看出, 权重参数w增大时,损失函数以速率8进行增大, 所以我们需要损失函数计算的损失值越来越低,求模型的最优损失解,朝梯度的反方向进行更新。
梯度下降推导
那w如何变化能够让损失函数逐步降低?
解决方案:权重w增大,损失函数以速率8增大,权重w减小的时候,损失函数以8减小
梯度的方向上坡方向,损失函数增大的方向,我们要求的是损失最小,我们要找的方向是下坡,负的梯度
所以我们是需要沿着负梯度的方向移动
优化算法-梯度下降算法
w新=w旧−η∂L∂ww_新 = w_旧-\eta\frac{\partial L}{\partial w}w新=w旧−η∂w∂L
我们可以计算一下训练三轮后, 权重会有什么变化:
y^\hat{y}y^ = w∗xw * xw∗x
L=(y−y^)2=(y−w∗x)2L = (y - \hat{y})^2 = (y - w * x)^2L=(y−y^)2=(y−w∗x)2
∂L∂w=2x(wx−y)\frac{\partial L}{\partial w} = 2x(wx - y)∂w∂L=2x(wx−y)
=================================
x = 2, w = 3, y = 4
y^\hat{y}y^ = 6
L=(4−6)2=(−2)2=4L = (4 - 6)^2 = (-2)^2 = 4L=(4−6)2=(−2)2=4
∂L∂w=2∗2∗(3∗2−4)=8\frac{\partial L}{\partial w} = 2 * 2 * (3 * 2 - 4) = 8∂w∂L=2∗2∗(3∗2−4)=8
w新=w旧−η∂L∂ww_新 = w_旧 - \eta\frac{\partial L}{\partial w}w新=w旧−η∂w∂L
假设η=0.1\eta = 0.1η=0.1
w新=3−0.1∗8=2.2w_新 = 3 - 0.1 * 8 = 2.2w新=3−0.1∗8=2.2
=========================
x = 2, w = 2.2, y = 4
y^\hat{y}y^ = 4.4
L=(4−4.4)2=(−0.4)2=0.16L = (4 - 4.4)^2 = (-0.4)^2 = 0.16L=(4−4.4)2=(−0.4)2=0.16
∂L∂w=2∗2∗(2.2∗2−4)=1.6\frac{\partial L}{\partial w} = 2 * 2 * (2.2 * 2 - 4) = 1.6∂w∂L=2∗2∗(2.2∗2−4)=1.6
w新=w旧−η∂L∂ww_新 = w_旧 - \eta\frac{\partial L}{\partial w}w新=w旧−η∂w∂L
假设η=0.1\eta = 0.1η=0.1
w新=2.2−0.1∗1.6=2.2−0.16=2.04w_新 = 2.2 - 0.1 * 1.6 = 2.2 - 0.16 = 2.04w新=2.2−0.1∗1.6=2.2−0.16=2.04
================================
x = 2, w = 2.04, y = 4
y^\hat{y}y^ = 4.08
L=(4−4.08)2=(−0.08)2=0.0064L = (4 - 4.08)^2 = (-0.08)^2 = 0.0064L=(4−4.08)2=(−0.08)2=0.0064
∂L∂w=2∗2∗(2.04∗2−4)=0.32\frac{\partial L}{\partial w} = 2 * 2 * (2.04 * 2 - 4) = 0.32∂w∂L=2∗2∗(2.04∗2−4)=0.32
w新=w旧−η∂L∂ww_新 = w_旧 - \eta\frac{\partial L}{\partial w}w新=w旧−η∂w∂L
假设η=0.1\eta = 0.1η=0.1
w新=2.04−0.1∗0.32=2.04−0.032=2.008w_新 = 2.04 - 0.1 * 0.32 = 2.04 - 0.032 = 2.008w新=2.04−0.1∗0.32=2.04−0.032=2.008
我们可以很直观的看到, 通过三轮训练后, 权重越来越接近正确的权重了, 从3 -> 2.2 -> 2.04 -> 2.008
那我们如何知道学习率(超参数)在多少范围内算是合适呢?
在这一个样本、模型 y = w x 的场景下,最优解就是 w* = y/x = 2。用学习率 0.1 做梯度下降时,w 会快速逼近 2。
收敛公式(单样本)
更新:wt+1=wt−η⋅2x(wx−y)w_{t+1} = w_t - η·2x(wx - y)wt+1=wt−η⋅2x(wx−y)
误差:et=wt−w∗,有et+1=(1−2ηx2)⋅ete_t = w_t - w^*,有 e_{t+1} = (1 - 2ηx^2)·e_tet=wt−w∗,有et+1=(1−2ηx2)⋅et
因此 et=(1−2ηx2)t⋅e0e_t = (1 - 2ηx^2)^t · e_0et=(1−2ηx2)t⋅e0
代入你当前数值 x=2, η=0.1
收敛因子 r=1−2⋅0.1⋅(22)=0.2r = 1 - 2·0.1·(2^2) = 0.2r=1−2⋅0.1⋅(22)=0.2
初始误差 e0=3−2=1e_0 = 3 - 2 = 1e0=3−2=1
所以 et=0.2t,即wt=2+0.2te_t = 0.2^t,即 w_t = 2 + 0.2^tet=0.2t,即wt=2+0.2t
前几步:3 → 2.2 → 2.04 → 2.008 → 2.0016 → 2.00032 …(与你算的一致)
“多少轮能到正确的 w?”
理论上无限步才“恰好等于”2;但数值上可用精度阈值 ε 判断足够接近:
需要步数 t≥log(ε/∣e0∣)/log(∣r∣)t ≥ log(ε/|e0|) / log(|r|)t≥log(ε/∣e0∣)/log(∣r∣)
例如 ε=1e−3:t≥log(1e−3/1)/log(0.2)≈4.29ε=1e-3:t ≥ log(1e-3/1)/log(0.2) ≈ 4.29ε=1e−3:t≥log(1e−3/1)/log(0.2)≈4.29 → 5 步内
ε=1e-6:t ≈ 8 步
收敛条件:0<η<1/x20 < η < 1/x^20<η<1/x2。本例 η=0.1 < 0.25,所以稳定收敛。
如何推导学习率的范围?
-
推导
- 记最优解 w∗=y/xw^* = y/xw∗=y/x,误差 et=wt−w∗e_t = w_t - w^*et=wt−w∗。
- 一步更新:wt+1=wt−η⋅2x(wx−y)w_{t+1} = w_t - \eta \cdot 2x(wx - y)wt+1=wt−η⋅2x(wx−y)。
- 化成误差形式:et+1=(1−2ηx2) ete_{t+1} = (1 - 2\eta x^2)\, e_tet+1=(1−2ηx2)et。
- 要收敛,需要误差因子绝对值小于 1:∣1−2ηx2∣<1|1 - 2\eta x^2| < 1∣1−2ηx2∣<1。
- 解得:−1<1−2ηx2<1⇒0<ηx2<1⇒0<η<1/x2-1 < 1 - 2\eta x^2 < 1 \Rightarrow 0 < \eta x^2 < 1 \Rightarrow 0 < \eta < 1/x^2−1<1−2ηx2<1⇒0<ηx2<1⇒0<η<1/x2。
-
边界与现象
- η=0\eta = 0η=0:不更新,不收敛。
- η=1/x2\eta = 1/x^2η=1/x2:因子为 −1-1−1,误差大小不变、符号来回跳,震荡不收敛。
- 0<η<1/(2x2)0 < \eta < 1/(2x^2)0<η<1/(2x2):因子在 (0,1),单调收敛(不震荡)。
- 1/(2x2)<η<1/x21/(2x^2) < \eta < 1/x^21/(2x2)<η<1/x2:因子在 (-1,0),交替震荡但幅度递减,收敛。
- η>1/x2\eta > 1/x^2η>1/x2:∣1−2ηx2∣>1|1 - 2\eta x^2| > 1∣1−2ηx2∣>1,发散或震荡放大。
-
本例 x=2x=2x=2
- 上界 1/x2=1/4=0.251/x^2 = 1/4 = 0.251/x2=1/4=0.25。取 η=0.1\eta=0.1η=0.1 满足条件,因子 1−2ηx2=1−0.8=0.21 - 2\eta x^2 = 1 - 0.8 = 0.21−2ηx2=1−0.8=0.2,因此快速、单调收敛。
求证: 将wt+1=wt−η⋅2x(wx−y)w_{t+1} = w_t - \eta \cdot 2x(wx - y)wt+1=wt−η⋅2x(wx−y)化成误差形式et+1=(1−2ηx2) ete_{t+1} = (1 - 2\eta x^2)\, e_tet+1=(1−2ηx2)et。
答:
- 定义最优解与误差
- 最优解:w∗=yxw^* = \frac{y}{x}w∗=xy(使 L(w)=(y−wx)2L(w)=(y-wx)^2L(w)=(y−wx)2 最小)
- 误差:et=wt−w∗e_t = w_t - w^*et=wt−w∗
- 用最优解改写残差
- 残差:wx−y=x(w−w∗)=xetwx - y = x(w - w^*) = x e_twx−y=x(w−w∗)=xet
- 代入更新公式并减去最优解
- 原更新:wt+1=wt−η⋅2x(wx−y)w_{t+1} = w_t - \eta \cdot 2x(wx - y)wt+1=wt−η⋅2x(wx−y)
- 用第2步替换:wt+1=wt−η⋅2x⋅(xet)=wt−2ηx2etw_{t+1} = w_t - \eta \cdot 2x \cdot (x e_t) = w_t - 2\eta x^2 e_twt+1=wt−η⋅2x⋅(xet)=wt−2ηx2et
- 两边同时减去 w∗w^*w∗:wt+1−w∗=(wt−w∗)−2ηx2etw_{t+1} - w^* = (w_t - w^*) - 2\eta x^2 e_twt+1−w∗=(wt−w∗)−2ηx2et
- 得到误差递推
- 即:et+1=(1−2ηx2) ete_{t+1} = (1 - 2\eta x^2)\, e_tet+1=(1−2ηx2)et
关键就在于把残差 wx−ywx-ywx−y 用相对最优解的误差 ete_tet 表示:wx−y=xetwx-y = x e_twx−y=xet。
好了, 这篇文章关于优化算法-梯度下降的内容就到此结束了!!!
以上就是优化算法-梯度下降的所有内容了, 如果有哪里不懂的地方,可以把问题打在评论区, 欢迎大家在评论区交流!!!
如果我有写错的地方, 望大家指正, 也可以联系我, 让我们一起努力, 继续不断的进步.
学习是个漫长的过程, 需要我们不断的去学习并掌握消化知识点, 有不懂或概念模糊不理解的情况下,一定要赶紧的解决问题, 否则问题只会越来越多, 漏洞也就越老越大.
人生路漫漫, 白鹭常相伴!!!