认识论的数学表示——梯度下降算法

2026-01-31
认识论的数学表示——梯度下降算法 关注 新手上路 关注 新手上路 关注 新手上路 关注 新手上路 昨天 17:45

这是一篇一位学习者学习梯度下降算法时的一点思考与想法,记录了在此阶段的初步理解和认识。依照马克思主义认识论的观点,认识是一个从感性认识到理性认识不断上升,不断发展的过程。因此,我深知我对梯度下降算法的理解尚处于初级阶段,受限于知识背景和实践水平,文中可能或多或少出现理解上的不准确和局限性。 xxxx

算法从根本上说,还是一个”工具“,工具无论如何”高大上“,都是为了”目的“服务的。那么,梯度下降的算法要解决的是一个什么问题呢? xnxx 爱壹帆 小宝影院在线视频 楼凤信息

在现实生活中,我们知道,它被用于训练机器学习模型。但是这对我们来说有些复杂,我们先来看一个简单的数学问题:二元线性回归。 小宝影院

数学是对现实世界的抽象,用抽象的符号和公式,反应现实世界的某种规律,但是在从现实事物到符号的抽象过程中,不可避免的出现”失真“的情况,换句话说,数学讨论的是一种理想情况。 电影爱壹帆 电影aiyifan xxxxx

文章结构

文章脉络:
├── 问题概述 (二元线性回归、数学抽象与失真、待处理数据)
├── 梯度下降算法核心思想 (损失函数、下山比喻、偏导数与步长、参数迭代更新)
├── 梯度下降算法的四个要素 (初始值、计算梯度、迭代更新参数、停止条件)
├── 回到问题 - 实践篇
│   ├── 初始化参数 (w, lr, num_iterations)
│   └── 梯度下降核心步骤 (数学公式推导与Python代码实现)
│       ├── 计算预测值
│       ├── 计算损失
│       ├── 计算梯度 (w0, w1, w2)
│       └── 更新参数 (w0, w1, w2)
└── 结语

问题概述:二元线性回归

首先什么是”线性回归“?线性回归是一个预测模型,也就是说,它会根据已有的信息总结出一个规律——用数学的语言表达就是:拟合出一条曲线——然后利用这个规律对未来的事情进行预测。所谓”二元“,就是变量有两个,有两个事情会对最终的结果产生影响。现在用数学公式对这个事情进行表达:
 


其中 w0-2 叫做参数,是训练过程中由算法调整的,也就是输入到底经历了什么样的运算才到输出,我们究竟根据已有的经验建构了什么样的规律。 海外华人视频网 寻芳网

我们已有的数据如下: 爱壹帆免费版 寻芳网

$x_{1}$$x_{2}$$y$
10360
20385
253100
282.5120
302140
352.5145
402.5163

我们就是要从这堆数据中找到一个规律,一个从x到y的规律,以便于当我们遇到新的x时,可以预测出一个尽可能接近真实y的y帽。 爱壹帆电影 iyf 免费在线影院 小寶影院电影

梯度下降算法

那么怎么找到这个规律呢?(怎么拟合这个曲线呢?)
利用这个规律得出的结果尽可能贴近现实情况就是一个”好“的规律,也就是 y帽 与 y 之间的差值越小,就越好。描述这个差值的东西数学上叫做:损失函数,公式如下
  爱壹帆影视 xxxvideo 楼凤信息


这个例子中,需要调整的参数有三个,可能不太好理解,我们先考虑只有两个参数的损失函数,理解其精髓,然后类比理解三个参数。 探花

假如说你现在在一座浓雾弥漫的山上,想要尽快下山,奈何看不清远处的路,如何选择最快的下山路径呢?梯度下降的算法就是在当前位置选择最陡峭的一个方向走一步,然后再看哪个方向陡峭,再走一步,直到走到山底。

在随机给定一组参数的情况下(w0,w1),判断哪个方向最陡峭使用的数学工具是偏导(w1,w2),步长则使用导数值的负数乘一个小于1的数——这个小于1的数被称为学习率lr。


  电影小宝影院


经过不断地迭代,就可以下山了,也就是找到$Loss$最小的参数(w0,w1)。 小宝影院电影 外围 会所

以上是两个参数的梯度下降,三个参数,多个参数的也是同理。

梯度下降算法的四个要素

这四个要素是在具体使用这个算法进行计算时,必须要注意的事情: xxx 小宝影院

初始值

每一个参数,都要随机化一个初始值。 爱一帆

计算梯度

梯度就是前文所提到的偏导值,需要计算梯度才能为接下来的迭代更新参数做准备。 爱一帆电影

迭代更新参数

利用梯度值和学习率的乘积更新参数,不断减小Loss值。 爱壹帆在线 小寶影院

停止条件

可以预先设定一个迭代次数,也可以设置若连续更新参数Loss值不改变为停止条件。

回到问题

对梯度下降算法有了一个整体的感性认识后,便可以动手实践检验我们的理论了,回到我们的问题,我们要利用这些数据拟合出来一条曲线,便于遇到新的输入值x时可以预测出来近似的y值。用生活化的语言表达就是:我们要根据已有的经验归纳总结出来一条规律,一个知识,便于我们遇到新情况的时候可以灵活应对,游刃有余。 aiyifan电影

$x_{1}$$x_{2}$$y$
10360
20385
253100
282.5120
302140
352.5145
402.5163

初始化参数

根据前文的分析,在进行拟合之前,我们要对参数进行初始化,并设定一个学习率和迭代的次数。 xxxxxx

# Feature 数据
X = [[10, 3], [20, 3], [25, 3], [28, 2.5], [30, 2], [35, 2.5], [40, 2.5]]
y = [60, 85, 100, 120, 140, 145, 163]  # Label 数据
# 初始化参数
w = [0.0, 0.0, 0.0]  # w0, w1, w2
lr = 0.0001  # 学习率
num_iterations = 10000  # 迭代次数

梯度下降核心步骤

整体上,这是一个不断迭代的过程,用编程的语言表达就是:这是一个循环。 爱壹帆影视

为了实时看到机器学习这个规律的过程,每次迭代我们都计算一下预测值,并利用预测值和实际值计算出来Loss值。 爱一帆

也就是说,这个循环分为四个步骤,先用数学形式表达一下

计算预测值
  小寶影院电影

计算Loss值
 

计算梯度
  爱壹帆国际版

更新参数
  华人影视 aiyifan xxxxxx

然后把数学语言转化成python语言就行了: ifun 爱壹帆

# 梯度下降
for i in range(num_iterations):
    # 计算预测值
    y_pred = [w[0] + w[1] * x[0] + w[2] * x[1] for x in X]
    # 计算损失
    loss = sum((y_pred[j] - y[j]) ** 2 for j in range(len(y))) / len(y)
    # 计算梯度
    grad_w0 = sum(y_pred[j] - y[j] for j in range(len(y))) * 2 / len(y)
    grad_w1 = sum((y_pred[j] - y[j]) * X[j][0] for j in range(len(y))) * 2 / len(y)
    grad_w2 = sum((y_pred[j] - y[j]) * X[j][1] for j in range(len(y))) * 2 / len(y)
    # 更新参数
    w[0] -= lr * grad_w0
    w[1] -= lr * grad_w1
    w[2] -= lr * grad_w2
    # 输出结果
    if i % 1000 == 0:
        print(f'Iteration {i}: Loss = {loss}, w = {w}')
# 输出最终参数
print(f'final parameters: w = {w}')

完整的代码如下:

# Feature 数据
X = [[10, 3], [20, 3], [25, 3], [28, 2.5], [30, 2], [35, 2.5], [40, 2.5]]
y = [60, 85, 100, 120, 140, 145, 163]  # Label 数据
# 初始化参数
w = [0.0, 0.0, 0.0]  # w0, w1, w2
lr = 0.0001  # 学习率
num_iterations = 10000  # 迭代次数
# 梯度下降
for i in range(num_iterations):
    # 计算预测值
    y_pred = [w[0] + w[1] * x[0] + w[2] * x[1] for x in X]
    # 计算损失
    loss = sum((y_pred[j] - y[j]) ** 2 for j in range(len(y))) / len(y)
    # 计算梯度
    grad_w0 = sum(y_pred[j] - y[j] for j in range(len(y))) * 2 / len(y)
    grad_w1 = sum((y_pred[j] - y[j]) * X[j][0] for j in range(len(y))) * 2 / len(y)
    grad_w2 = sum((y_pred[j] - y[j]) * X[j][1] for j in range(len(y))) * 2 / len(y)
    # 更新参数
    w[0] -= lr * grad_w0
    w[1] -= lr * grad_w1
    w[2] -= lr * grad_w2
    # 输出结果
    if i % 1000 == 0:
        print(f'Iteration {i}: Loss = {loss}, w = {w}')
# 输出最终参数
print(f'final parameters: w = {w}')

至此我们用过往经验归纳出来了一条规律,至于这条规律如何,实践是检验真理的唯一标准,我们还需要在不断地实践-认识-实践的循环中加深理解,不断调整,趋近真理。 小宝影院

参考:
[1] https://www.rethink.fun/

00目录 0
    讨论 我来说一句 发布发表评论 发布0等 0 人为本文章充电 还没有介绍自己 关注