深度学习中的基本数据结构,基本上都是用向量或矩阵表示的,因此:
深度学习的基础学科之一:就是线性代数。
深度学习中的线性代数知识主要包括以下部分:
1、标量、向量、矩阵和张量:
这4个变量很好理解: 分别表示 一个数、 一维空间(一条线)、 二维(一个平面)、多于二维(立体或超立体等);
2、矩阵的乘法和内积:
这个在深度学习的基础, 必须了解矩阵的乘法和矩阵的内积。
公式就不列举了, 很简单。
注意一点, 内积也叫点积, 对应元素相乘求和。 这个在 SVM(支持向量机)有特殊重要性, 还牵扯到核函数, 感兴趣的可自行科普, 或关注我的另一篇SVM的文章。
3、转置、逆矩阵、线性相关等了解即可;
4、范数:
这个在深度学习中 至关重要:
范数的根本作用: 衡量一个向量的大小;
范数的几种不同表示:
最常用的是l2范数,即: 欧几里得范数, 表示从原点出发到向量x确定点的欧几里得距离, 就是你最熟悉的各元素 平方和 取根号;
l1范数: 向量中每个点的绝对值之和。它有一个很重要的性质: 在各个位置(包括零点)的斜率相同。
l0范数: 向量中非零元素的个数;
还有个不常用的无穷范数。
注重注意一点:
范数就是表示向量的大小, 深度学习中最常用的就是l2范数 的平方, 为什么要用l2范数的平方(个元素的平方和),而不用l2范数呢? 个人感觉原因有以下两点
1) l2范数对某个点xi的导数,不止与xi 有关,而且还有整个向量有关; 而l2范数的平方 对xi的导数, 则只与xi本身有关;
2) l2范数的平方 可以方便的通过点积xT ×x (x的转置与x的内积)来表示;
因此l2范数广泛用于,比如 正则化(防止过拟合)等;
但l2范数的平方有一个缺点: 那就是在0附近, 他的增速非常缓慢(小数的平方 变得更小了), 但在机器学子中, 区分非零元素和零元素有很重要。 因此才有了l1范数的发挥余地, l1范数 通常用于 稀疏 算法。
5、 特征分解:
类似与一个数 24=2*3*4 , 将一个24分解维三个数的乘积。
一个矩阵可以分解成三个矩阵的乘积:
1) 特征值分解:
A=Q×B×Qt
Q是有A的特征向量组成的正交矩阵; B是A的特征值组成的对角矩阵; Qt表示Q的转置(单位正交矩阵 的转置和 逆 是相同的)
具体细节可自行取查阅,
含义就是: 一个矩阵A 可以分解成有特征值和特征向量组成的三个矩阵的乘积。
但这有一个条件, 那就是A是实对称矩阵。 因此这也大大限制了它的应用。
2)奇异值分解:
A=U×D×Vt
U和V向量分别是 被称为 左奇异向量和右奇异向量, D为A的奇异值, 它其实是At×A的特征值的平方根。
具体细节自行科普;
对于任何矩阵,都可以奇异值分解, 它在PCA算法 降维中广泛应用。
目前matlab或者opencv中都有 直接的函数调用, 可以讲一个矩阵 奇异值分解。
6、 迹运算 了解即可
迹: 对角元素之和。
个人感觉比较重要的三部分是: 矩阵的运算, 范数和 矩阵分解。