Day 47:机器学习必备的数学知识:导数、偏导数、损失函数和梯度下降算法详解
发布日期:2022年3月14日 14:53 阅读: 297 访问: 297
数学知识应用于各个领域。在机器学习中,我们也需要具备一些基本的数学知识,像前面一章介绍的概率论与数理统计。除此之外,我们还需要知道一些最基本的高等数学,线性代数方面的知识。不用太担心,都是最基本的,也都很容易理解。 很多高等数学的知识点被广泛应用在机器学习中,比如,导数、偏导数、方向梯度、偏微分方程、拉普拉斯算子等等。机器学习中到处都可以见到线性代数知识的应用。比如,主成分分析
数学知识应用于各个领域。在机器学习中,我们也需要具备一些基本的数学知识,像前面一章介绍的概率论与数理统计。除此之外,我们还需要知道一些最基本的高等数学,线性代数方面的知识。不用太担心,都是最基本的,也都很容易理解。
很多高等数学的知识点被广泛应用在机器学习中,比如,导数、偏导数、方向梯度、偏微分方程、拉普拉斯算子等等。机器学习中到处都可以见到线性代数知识的应用。比如,主成分分析(PCA)、奇异值分解、特征值特征向量、向量空间和范数等等。
今天我们主要介绍最经常用到的知识,那就是求导数和偏导数,以及线性代数中的矩阵特征值和特征向量以及矩阵的分解。
导数以及偏导数
首先我们回想一下,什么是导数?简单地讲,导数就是一种数学上对于改变率的一种连续的描述。
导数就是对于一个或者多个自变量发生小的变化的时候,函数值是怎么变化的这种规律的一个连续描述。
如果我们想把上面的话用数学式子表示出来,应该怎么做呢?也就是说你怎么描述自变量改变很小,函数值变化,连续呢?
这就是数学语言的魅力所在,它可以精确的把这些描述性的语言,准确的用方程式给我们量化出来。如果我们以一元函数 f(x) 为例,那么导数的定义式就是:
而对于多元函数,由于有多个变量,这时候对于某一个变量的导数就改称为偏导数了。偏导数的定义也是一样的, 以二元函数 f(x,y) 为例,偏导数的可以定义为:
通过这些方程式,我们就可以回到上面的问题,比如什么是自变量改变很小,我们用的是 h->0 来定义,自变量从 x 变到 x+h 就是变化很小。当然,这些概念是建立在极限的概念之上。如果不知道极限的话,需要先学习极限的概念。
我们现在列出一些经常用到的求导公式。
求导公式在机器学习的梯度下降中经常使用,因为梯度就意味着要求导,所以将使用频率最高的几个公式罗列在下面,方便查阅。
其中,第三个公式是第二个求导公式的特列。
我们都知道在高等数学中,导数的一个很重要的应用就是求极值和判断函数的单调性。这也是考试中经常或者必考的题目。这种题目,相信大家都知道,就是求一阶或者二阶导数,然后解方程求解,等等。
那么,在机器学习中,导数的应用在哪里呢?
在机器学习中,我们用导数来寻求极值,也就是最优解。下面我们会以线性回归为例子来仔细理解导数的应用。
线性回归(linear regression)是我们经常用到的模型,线性回归模型是描述的是自变量和因变量之间是一种线性关系。这个咱们在中学就知道的线性关系:如果我们用 X 表示自变量,用 Y 表示因变量,那么两者之间的线性关系就可以定义为下面的方程:
Y = kX + b
在这个方程中,X——自变量,Y——因变量,k——斜率,b——截距。这些都是咱们早就知道的。而在线性回归模型中,就是 X 和 Y 已经给定了,我们要做的是我们要训练一个线性模型。那么也就是我么要决定在上面的方程中的系数:k 和 b 的值。而且我们要使得我们训练的模型和真实的值之间拥有最小的误差。
那么怎么做到让我们的误差最小,也就是说咱们建立一个最好的线性回归模型呢?为了达到这个目的,我们用一个叫做所示函数的东西来量化这个误差,从而找到最小误差,也就是找到最好模型。
链式求导法则
求导比较重要的一条性质便是链式求导法则,求导数意味着由外及内,一层一层地将变化传递到最里头。
例如,对 J 函数求导,自变量为 $\theta$,$(x^i,y^i)$ 为已知参数:
对 J 函数,先设定如下 g 函数:
先对 $g(\theta)$ 函数的平方求导数,
然后再对 $g(\theta)$ 求导数,结果为:
由链式求导法则,再联立以上式子得到:
将 g 函数带入得到最终求导公式:
手推特征值和特征向量
求下面矩阵 A 的特征值和特征向量:
下面我们手动推导求出特征值,特征值满足如下等式:
带入矩阵 A 到上式,求得两个特征值 2 或 0.4:
当特征值等于 2 时,计算对应的特征向量为 (1,1):
当特征值等于 0.4 时,计算对应的特征向量为 (1,-1):
特征值对于矩阵是重要的,能够反映矩阵的重要取值特性,后面的矩阵特征值分解,都会用到求矩阵的特征值和特征向量。
损失函数(loss function)
损失函数描述了你建立的模型的预测值和真实值之间的差别。在我们这个线性回归的例子中,就是我们预测的 k 和 b 的预测值给我们带来的误差,自然我们的目标是要让这个误差最小。
首先怎么定义这个误差?
其实有很多的误差定义方式,我们这里将会使用一个最常用的标准:均方误差(mean square error or MSE)。得到这个均方误差我们可以想成有两步:
- 找出真实值和预测值之间的差别:也就是真实的 y 和预测得到的 y;
- 然后把这个差别值先取平方,再对每一个自变量值 X 取均值。
这样我们就得到了均方误差的公式如下,其中 yi 是真实值,而 $\overline{y}_i$ 是预测值。
我们有了这个均方误差方程之后,我们还记得咱们的目标是要使得这个误差最小,也就是咱们要找出这个误差最小情况下的系数们:k 和 b 的值。
那么怎么来找这个误差的最小值呢?我们将会使用梯度下降算法来找出误差的最小值,这就是为什么我们还使用了优化算法在们建立的线性回归模型中。当然,别的回归模型也是一样的道理。
梯度下降算法
梯度下降法是一种经常使用的找最小值的优化算法。在这里,我们使用梯度下降法来找均方误差的最小值。下面我们会一步一步的很简单的展现我们是怎么使用这个梯度下降法找到这个误差最小值,也就是最优的预测值 k 和 b 的值的。
于是问题就变成了怎么求最小值的问题,也就是求导数或者求偏导数问题。所以我们下面就对上面的损失函数求偏导数。
Step 1:求偏导数
先求对 k 的偏导数:
同样地,下面我们再求对 b 的偏导数:
上面就完成了求偏导数的部分。那么这个偏导数有什么用呢?我们知道在迭代过程中,我们需要知道两个部分:一个是前进方向,一个就是步长。而我们上面求的偏导数就是迭代的前进方向。而迭代的步长,我们可以假设步长是固定的,比如我们取 0.01。
Step 2:初始化
我们假设初始化的 k 和 b 的值都为 0:k=0,b=0。
Step 3:使用下面的方程式来更新当前的 k 和 b
重复上面的迭代过程,知道我们的损失函数很小,或者足够小于我们事先设置的预知(比如 <0.00001),我们就可以停止。
这样我们就得到了最优的 k、b 的值,也就是说我们建立了我们的线性回归模型。我们就可以使用我们所建立好的模型进行预测了。
通过上面线性回归的例子我们就理解了导数的应用,导数或者偏导数确实是应用在机器学习中的。
小结
今天总结了机器学习中最常用的知识:
- 导数及偏导数
- 最常用的求导公式
- 手推特征值和特征向量
- 机器学习重要的一个函数:损失函数
- 学习参数最重要的一个算法:梯度下降算法