首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

机器学习的数学基础--微积分

编程知识
2024年08月18日 09:31

微积分运算在机器学习领域扮演着至关重要的角色,
它不仅是许多基础算法和模型的核心,还深刻影响着模型的优化、性能评估以及新算法的开发。

掌握微积分,不仅让我们多会一种计算方式,也有助于理解各种机器学习算法和模型是如何寻找最优参数的。

1. 为什么需要微积分?

也许有些人会觉得微积分很难,这大概是因为我们平时基本都是在计算固定的东西(用加减乘除就够了)。
比如:

  • 点外卖时计算价格和折扣;
  • 去某个地方时根据距离和交通工具计算需要的时间;
  • 以及摆放东西时对面积和体积的估算等等。

而对于不断变化的事物,我们发现用传统的计算方式很难精确的描述,
比如:

  • 计算汽车在一段时间内的行驶距离。实际情况下的汽车速度是不断变化的(而且是无规律的变化,跟路况,载重等多种因素有关),此时如何计算距离和速度的关系。
  • 预测人口的增长。人口增长是一个连续变化的过程,受出生率、死亡率、迁移率等多种因素的影响,根据以往的人口增长数据,预测未来某个时间点人口的数量。
  • 股票交易买卖时机的分析。根据以往的股价变化,预测将来在哪些价格点上更容易上涨或下跌。

微积分本质上就是一种运算方式(类似加减乘除,指数,对数等等运算),
与其他运算方式相比,它的优势在于可以精确的描述事物的变化。

2. 微分

微积分其实包括微分积分两种运算,它们互为逆运算,就像加法与减法,乘法与除法。

微分研究函数在某一点附近的变化率,而积分研究函数在某一区间上的累积效应。
平时我使用较多的是微分,也被称为求导数

2.1. 什么是微分

微积分的诞生还有一段“斗争”,当年,牛顿莱布尼茨都宣称自己先发明了微积分,虽然最终牛顿胜出,但二位都是非常伟大的科学家。
由此也可见当时欧洲的科技已经发展到相当的程度,才会在科研中迫切的需要微积分这种新的运算方式。

下面通过一个速度与时间关系的示例来看看最终微积分如何帮助我们精确计算变化的。
首先,对于两个匀速运动的物体,

时间(\(t\)) 速度(\(v_1\)) 速度(\(v_2\))
0 5 8
1 5 8
3 5 8
5 5 8
10 5 8

image.png
匀速的情况下,速度不变,一眼就能看出谁快谁慢,并不需要微积分。

接下来,看看匀变速的情况:

时间(\(t\)) 速度(\(v_1\)) 速度(\(v_2\))
0 0 0
1 2 3
3 6 9
5 10 15
10 20 30

其中\(v_1=2t\)\(v_2=3t\)
在这种情况下,我们依然可以看出两个物体谁快谁慢,也可以计算出它们的加速度分别为23,不需要微积分。
image.png

最后,看看非匀变速的情况,这也是最接近实际的情况。
如果你有实际驾驶的经验就能理解,行驶过程中几乎不可能保持匀速匀变速,影响车速的因素各种各样,你能控制的油门仅仅是其中之一。
模拟两个非匀变速的情况:

时间(\(t\)) 速度(\(v_1\)) 速度(\(v_2\))
0 0 0
1 10 1
3 90 27
5 250 125

其中\(v_1=10t^2\)\(v_2=t^3\)
这下,没那么容易看出哪个速度增加的快了吧?这两个物体在某一时刻的加速度也不是那么容易计算了吧?
image.png
从图中虽然可以看出,10秒之前,\(v_1\)\(v_2\)快,10秒之后,\(v_2\)\(v_1\)快。
但是\(v_1\)\(v_2\)哪个增长的快?即使从上面的图中也不是那么容易看出。
这时,通过微积分就能看出谁变化的快了。
微分的计算规则下一节介绍,这里先看下微分的结果:\(v_1^{'} = 20t\)\(v_2^{'}=3t^2\)
对速度微分的结果就是速度变化的情况:
image.png
微分之后,就能精确的看出2个速度的变化情况:

  • 紫色交点之前,\(v_1\)增加的比\(v_2\)
  • 紫色交点之后,\(v_2\)增加的比\(v_1\)

2.2. 计算规则

从上例可以看出,对于复杂的变化情况(非均匀变化),
通过微分可以快速找出变化的规律,从而可以精确的计算每个时间点的实际数值。

微分的计算虽然没有加减乘除那么直观,但是也不复杂。
对于多项式,微分的规律如下:其中\(a\)是常数;\(n\)是变量\(x\)的指数。
image.png

其他特殊的函数(比如三角函数,对数函数等等)可以参考维基百科的微分表:
https://en.wikipedia.org/wiki/Differentiation_rules

2.3. 链式法则

微分运算法则中,有一个很有用的特性,称为链式法则
当需要计算嵌套函数的微分时,这个法则非常有用,比如:
image.png
一种方式是将\(y\)的多项式代入\(f\)函数中:
image.png

另一种方式就是链式法则
image.png
函数\(f\)\(x\)求导,可以转换为\(f\)\(y\)求导与\(y\)\(x\)求导的。由此可得:
image.png

两种方式的计算结果是一样的,
不过,如果函数\(f\)\(y\)都非常复杂的话,运用链式法则,可以极大的简化微分运算。

3. 偏微分

在机器学习的算法中,公式中不可能只有一个变量\(f(x)\),基本都是多个变量\(f(x_0,x_1,...,x_n)\)的情况。
在这种情况下,怎么计算函数\(f\)中各个变量的变化趋势呢?

这就用到了偏微分(也称为偏导数),也就是函数\(f\)对其中一个变量求导数。

3.1. 计算规则

了解了微分的计算方法,那么偏微分的计算就很简单了。比如一个含有两个变量的函数:
image.png
那么,对\(x_0\)\(x_1\)分别求导数的结果如下:
image.png
简单来说,对\(x_0\)求导数时,把\(x_1\)当成常数看待;对\(x_1\)求导数时,把\(x_0\)当成常数看待。

通过偏微分计算,我们就能发现哪个变量变化时对函数\(f\)的结果影响最大。
对应的场景就是机器模型(\(f\))中,哪个属性(\(x_0, x_1\))对模型的结果影响最大。

3.2. 偏微分的图形意义

对于偏微分,也可以从图像上来看,不过超过3个维度的图像无法绘制,所以只能绘制带有2个参数的函数。
绘制上面示例中函数:\(f(x_0,x_1)=x_0^{2}+2x_0x_1+3\)
image.png

然后分别对\(x_0,x_1\)求偏微分,对\(x_0\)的偏微分为:\(f^{'}(x_0)=2x_0+2x_1\)
\(x_1\)取不同的值时,偏微分的图像为:
image.png
从图中可以看出,偏微分\(f^{'}(x_0)\)的变化率是线性增长的,\(x_1\)只是影响它的起始值。
如果把\(f(x_0,x_1)=x_0^{2}+2x_0x_1+3\)看成一个机器学习模型,
那么随着属性\(x_0\)的增大,\(x_0\)对模型的影响越来越大。

\(x_1\)的偏微分为:\(f^{'}(x_1)=2x_0\)\(x_0\)取不同的值时,偏微分的图像为:
image.png
从图中可以看出,偏微分\(f^{'}(x_1)\)的变化率是固定的,\(x_0\)决定它的变化率是多少。
如果把\(f(x_0,x_1)=x_0^{2}+2x_0x_1+3\)看成一个机器学习模型,
那么随着属性\(x_1\)对模型影响的大小是稳定的,影响多大取决于\(x_0\)的取值。

4. 总结

我平时接触的机器学习算法中,微分使用的比较多,所以这里只介绍了微分的相关运算,积分是微分的逆运算,这里不再赘述。
对于复杂函数的积分,也有积分表可以查询(https://en.wikipedia.org/wiki/Lists_of_integrals)。

最后,总结下在哪些机器学习算法中会遇到微积分的运算。

  1. 梯度下降算法:用于寻找函数的局部最小值。它通过计算损失函数关于模型参数的梯度(即偏导数),并沿着梯度的反方向更新参数。
  2. 反向传播算法:基于链式法则,从输出层到输入层逐层计算梯度,从而更新网络中的权重和偏置。
  3. 损失函数的设计:均方误差损失函数和交叉熵损失函数都是可导的,并且它们的梯度可以很容易地通过微积分计算出来。
  4. 正则化技术:为了防止模型过拟合,常常使用正则化项通过惩罚模型的复杂度来减少过拟合的风险。此时,正则化项的设计依赖于微积分,因为需要计算它们关于模型参数的梯度,以便在优化过程中考虑它们的影响。
  5. 概率模型与贝叶斯方法:在机器学习的概率模型中,微积分被用于计算概率分布、条件概率、边缘概率以及期望等。
  6. 特征选择与降维:在特征选择和降维技术中,如主成分分析(PCA)和线性判别分析(LDA),微积分被用于计算数据的协方差矩阵、特征值、特征向量等,从而帮助识别出最重要的特征或降低数据的维度。
  7. 其他。。。
From:https://www.cnblogs.com/wang_yb/p/18365344
本文地址: http://shuzixingkong.net/article/1198
0评论
提交 加载更多评论
其他文章 .NET中各种线程同步锁
编程编的久了,总会遇到多线程的情况,有些时候我们要几个线程合作完成某些功能,这时候可以定义一个全局对象,各个线程根据这个对象的状态来协同工作,这就是基本的线程同步。 ​支持多线程编程的语言一般都内置了一些类型和方法用于创建上述所说的全局对象也就是锁对象,它们的作用类似,使用场景有所不同。.Net中这
C#实现国产Linux视频录制生成mp4(附源码,银河麒麟、统信UOS)
随着信创国产化浪潮的来临,在国产操作系统上的应用开发的需求越来越多。最近有个客户需要在银河麒麟和统信UOS上实现录制摄像头视频和麦克风声音,将它们录制成一个mp4文件。那么这样的功能要如何实现了?
C#实现国产Linux视频录制生成mp4(附源码,银河麒麟、统信UOS)
C#模拟键盘输入、键状态和监听键盘消息
模拟键盘输入 模拟键盘输入的功能需要依赖Windows函数实现,这个函数是SendInput,它是专门用来模拟键盘、鼠标等设备输入的函数。 另外和键盘输入相关的函数还有SendKeys,它是System.Windows.Forms. SendKeys,只能在WinFrom项目中使用,并且它的所有功能
二维偏序问题
偏序关系: 大概就是,满足自反性,反对称性,传递性。 将严格偏序关系建图,可以得到一个DAG(有向无环图) 二维偏序问题是:给定 \(n\) 个元素,每个元素有\(2\)个属性,定义某种偏序关系,对于所有 \(x_i\) ,求 \(x_j \prec x_i\) 的数量。 一种基本的操作方法是,某个
FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构
​音视频技术的一个主要用途是直播,包括电视直播、电脑直播、手机直播等等,甚至在线课堂、在线问诊、安防监控等应用都属于直播系统的范畴。由于直播系统不仅涉及到音视频数据的编解码,还涉及到音视频数据的实时传输,因此直播领域采用的网络技术标准比较高,实现起来也比一般的WEB系统复杂。 一、直播系统的概念结构
FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构 FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构
零基础学习人工智能—Python—Pytorch学习(五)
前言 上文有一些文字打错了,已经进行了修正。 本文主要介绍训练模型和使用模型预测数据,本文使用了一些numpy与tensor的转换,忘记的可以第二课的基础一起看。 线性回归模型训练 结合numpy使用 首先使用datasets做一个数据X和y,然后结合之前的内容,求出y_predicted。 # p
零基础学习人工智能—Python—Pytorch学习(五) 零基础学习人工智能—Python—Pytorch学习(五) 零基础学习人工智能—Python—Pytorch学习(五)
.NET 9发布的最后一个预览版Preview 7, 下个月发布RC
微软在2024年8月9日 发布了.NET 9 Preview 7[1],这是它在2024 年 11 月 12 日 RTM 之前进入发布候选阶段之前的最后预览版, 将在.NET Conf 2024 一起发布[3]。该预览版也于也与 Visual Studio 2022 17.12 预览版1一起发布,现
AvaloniaChat—从源码构建指南
AvaloniaChat介绍 一个使用大型语言模型进行翻译的简单应用。 我自己的主要使用场景 在看英文文献的过程中,比较喜欢对照着翻译看,因此希望一边是英文一边是中文,虽然某些软件已经自带了翻译功能,但还是喜欢大语言模型的翻译,但每次都要将英文复制粘贴过去还要自己手动添加prompt,还无法对照着看
AvaloniaChat—从源码构建指南 AvaloniaChat—从源码构建指南 AvaloniaChat—从源码构建指南