本节中,我们先来介绍一些深度学习中必备的数学知识,有些是大学课堂讲过的,还有些可能没有,对于第一次见到的知识,可以先不用深究,了解概念即可,再后面应用的时候可以翻过头再看。
1.1 线性代数
深度学习中有4种核心数据结构:标量、向量、矩阵和张量。都对应大学课堂中线性代数中的知识。
向量
向量的点乘(注意点乘结果是个标量);对应项相乘;矩阵乘法;都可用python的numpy库完成。
范数
范数是一种距离的表示,或者说向量的长度。常见的范数有 L0 范数、L1 范数和 L2 范数,我们通过一个向量来看:
x =(x,x2,x3.… xn)
L0 范数:指这个向量中非 0 元素的个数。我们可以通过 L0 范数减少非 0 元素的个数,从而减少参与决策的特征,减少参数。这样一来,自然模型就运算得更快,模型的体积也更小了。
L1 范数:指的是向量中所有元素的绝对值之和,它是一种距离的表示(曼哈顿距离),也被称为稀疏规则算子,L0 范数和 L1 范数都能实现权值稀疏。但 L1 范数是 L0 范数的最优凸近似,它比 L0 范数有着更好的优化求解的特性,所以被更广泛地使用。
权值稀疏:模型中可能有大量特征,有一部分特征对于最后结果的贡献非常小,甚至近乎零。这些用处不大的特征,我们希望能够将其舍弃,以更方便模型做出决策
L2 范数:是向量中所有元素的平方和的平方根,L2范数对应欧氏距离,它的作用就是防止过拟合。因为L2 实际上就是让向量中所有元素的平方和再开方。那么,如果我们要避免模型过拟合,就要使 L2 最小,这意味着向量中的每一个元素的平方都 要尽量小,且接近于 0。和 L0 和 L1 不一样,L2 不会让元素等于 0。
L1 和 L2 范数的区别:L1 会趋向于产生少量的特征,而其他的特征都是 0,用于特征选择和稀疏;L2 会选择更多的特征,但这些特征都会接近于 0,用于减少过拟合。
1.2 微积分
导数
实际上就是平时说的斜率。一个函数在某一点的导数描述了这个函数在这一点附近的变化率。
偏导数
它实际上是函数在不同方向(坐标轴)上的变化率。就好比爬山,任意一个位置,都会有东西方向和南北方向的坡度(斜率)。
梯度
函数的所有偏导数构成的向量就叫作梯度。梯度是一个向量。同时,梯度向量的方向即为函数值增长最快的方向。
1.3 信息论
KL 散度
也称为相对熵,它衡量了两个分布之间的差异。
因此该公式字面上的含义就是真实事件的信息熵,同理论拟合的事件的信息量与真实事件的概率的乘积的差的累加。
拆开来看,真实事件的信息熵就是 p(xi) log p(xi)
,理论拟合的事件的信息量就是 log q(xi)
,真实事件的概率就是 p(xi)
。
在模型优化、数据分析和统计等场合下,我们就可以使用 KL 散度衡量我们选择的近似分布与数据原分布有多大差异。当拟合事件和真实事件一致的时候 KL 散度就成了 0,不一样的时候就大于 0。
交叉熵
衡量了两个分布之间的差异,但是与 KL 散度的区别在于,交叉熵代表用拟合分布来表示实际分布的困难程度