机器学习数学基础——线性代数
线性代数
标量、向量、矩阵和张量
- 标量:一个单独的数
- 向量:一列数
- 矩阵:二维数组
- 张量:维数超过二维的数组
- 转置:矩阵的行列互换
矩阵与向量相乘
单位矩阵和逆矩阵
- 单位矩阵:主对角线元素都是1
- 逆矩阵:$\boldsymbol{A}^{-1}\boldsymbol{A}=\boldsymbol{I}$
线性相关与生成子空间
- 将 $\boldsymbol{A}$ 的列向量看作是从原点出发的向量,则 $\boldsymbol{A}\boldsymbol{x} = \sum_{i} x_{i}\boldsymbol{A}_{:,i}$(称为线性组合),一组向量的线性组合所能及的点的集合就是这组向量的生成子空间
- 线性相关:向量组某向量能用组内其他向量线性表示
- 线性无关:向量组的每个向量都是组内其他向量无法线性组合表示的
- 列向量线性相关的方阵被称为是 奇异的
范数
- 范数是满足下列性质的函数:
- $f(\boldsymbol{x})=0 \Rightarrow \boldsymbol{x = 0} $
- $f(\boldsymbol{x+y}) \le f(\boldsymbol{x}) + f(\boldsymbol{y}) $
- $\forall \alpha \in \mathbb{R}, f(\alpha \boldsymbol{x})=|\alpha|f(\boldsymbol{x})$
- $L^p$范数:
- $||\boldsymbol{x}||_p=\left(\sum_i|x_i|^p\right)^{\frac{1}{p}}\quad p \in \mathbb{R},p \ge 1$
- $L^0$范数:向量中非零元素的个数
- $L^\infty$范数:向量中最大幅值元素的绝对值
- $||\boldsymbol{x}||_\infty=\text{max}_i|x_i|$
- 矩阵的F范数:
- $ ||\boldsymbol{A}||_{F} = \sqrt{ \sum _{i,j} A ^2 _{i,j} }$
- 两个向量的点积用范数表示:
- $\boldsymbol{x}^T\boldsymbol{y}=||\boldsymbol{x}||_2||\boldsymbol{y}||_2\text{cos}\theta$
特殊类型的矩阵和向量
- 对角矩阵:只有主对角线上含有非零元素
- 对称矩阵:转置和自己相等的矩阵
- 单位向量:具有单位范数的向量
- 正交:$\boldsymbol{x}^T\boldsymbol{y}=0$
- 标准正交:不但正交,且范数都为1
- 正交矩阵:行向量和列向量是分别标准正交的方阵
- $\boldsymbol{A}^{-1}=\boldsymbol{A}^T$
特征分解
- 将矩阵分解成一组特征向量和特征值
- $\boldsymbol{Av}=\lambda\boldsymbol{v}$
- 特征向量:与A相乘后相当于对该向量进行缩放的非零向量$\boldsymbol{v}$
- 特征值:标量$\lambda$
- $\boldsymbol{Av}=\lambda\boldsymbol{v}$
- 矩阵 $\boldsymbol{A}$ 有 $n$ 个线性无关的特征向量 ${\boldsymbol{v^{(1)}, …, v^{(n)}}}$,对应着特征值 ${\lambda_1, …, \lambda_n}$ ,将特征向量连接成一个矩阵,每一列是一个特征向量即 $\boldsymbol{V}=[\boldsymbol{v^{(1)}, …, v^{(n)}}]$ ,则 $\boldsymbol{A}$ 的特征分解可以记作:$\boldsymbol{A}=\boldsymbol{V}\text{diag}(\boldsymbol{\lambda})\boldsymbol{V}^{-1}$
- 所有特征值都是非负数的矩阵被称为半正定
- 保证 $\forall \boldsymbol{x}, \boldsymbol{x}^T\boldsymbol{Ax} \ge 0$
- 所有特征值都是正数的矩阵被称为正定
- 除保证大于等于0,还保证 $\forall \boldsymbol{x}, \boldsymbol{x}^T\boldsymbol{Ax} = 0 \Rightarrow \boldsymbol{x} = \boldsymbol{0}$
- 所有特征值都是非正数的矩阵称为半负定
奇异值分解
- 将矩阵(扩展到非方阵)分解为奇异向量和奇异值
- $\boldsymbol{A}=\boldsymbol{UDV}^T$
- $\boldsymbol{A}$ 是一个 $m \times n$ 的矩阵,$\boldsymbol{U}$是一个 $m \times m$ 的矩阵,$\boldsymbol{V}$ 是一个 $n \times n$ 的矩阵
- $\boldsymbol{U}$ 和 $\boldsymbol{V}$ 都定义为正交矩阵,$\boldsymbol{D}$ 定义为对角矩阵(注意其不一定为方阵)
- $\boldsymbol{D}$ 对角线上的元素被称为矩阵 $\boldsymbol{A}$ 的奇异值,矩阵 $\boldsymbol{U}$ 的列向量称为左奇异向量,矩阵 $\boldsymbol{V}$ 的列向量称为右奇异向量
- SVD 最有用的一个性质可能是拓展矩阵求逆到非方矩阵
Moore-Penrose伪逆
- $\boldsymbol{A}^+=\boldsymbol{V}\boldsymbol{D}^+\boldsymbol{U}^T$
- $\boldsymbol{U\text{, }D\text{ 和 }V}$ 是矩阵 $\boldsymbol{A}$ 奇异值分解得到的矩阵
- $\boldsymbol{D}^+$ 是 $\boldsymbol{D}$ 的非零元素取倒数后转置得到的
迹运算
- 返回的是对角元素的和
- $\text{Tr}(\boldsymbol{A}) = \sum_{i} \boldsymbol{A}_{i,i}$
- 用迹描述F范数
- $||\boldsymbol{A}_F||=\sqrt{\text{Tr}(\boldsymbol{AA}^T)}$
- 迹运算在转置下是不变的
- $\text{Tr}(\boldsymbol{A}) = \text{Tr}(\boldsymbol{A}^T)$
- 多个矩阵相乘得到的方阵的迹
- $\text{Tr}(\boldsymbol{ABC}) = \text{Tr}(\boldsymbol{CAB}) = \text{Tr}(\boldsymbol{BCA})$
- 矩阵相乘后形状变了,迹运算的结果依然不变
- $\text{Tr}(\boldsymbol{AB}) = \text{Tr}(\boldsymbol{BA}) \quad \boldsymbol{A} \in \mathbb{R}^{m \times n}\text{, }\boldsymbol{B} \in \mathbb{R}^{n \times m}$
- 标量的迹是它自己
- 行列式 $\text{det}(\boldsymbol{A})$
- 等于矩阵特征值的乘积
- 衡量矩阵参与矩阵乘法后空间扩大缩小了多少
- 如果是0,说明空间沿某一维完全收缩了,失去了所有体积
- 如果是1,说明转换保持空间体积不变
主成分分析(Principal Components Analysis, PCA)
- 假设在 $\mathbb{R}^n$ 空间中有 $m$ 个点 ${\boldsymbol{x^{(1)}, …, x^{(n)}}}$, 用低维表示编码这些点, 即对每个点 $\boldsymbol{x}^{(i)} \in \mathbb{R}^n$ , 会有一个对应的编码向量 $\boldsymbol{c}^{(i)} \in \mathbb{R}^l$ , 其中 $l < n$ ;
- 找到一个编码函数 $f$ 使得 $f(\boldsymbol{x})=\boldsymbol{c}$ ,也希望找到一个解码函数 $g$ 使得 $\boldsymbol{x} \approx g\left( f(\boldsymbol{x}) \right)$;
- 为了简化解码器,使用矩阵乘法将编码映射回 $\mathbb{R}^n$ ,即 $g(\boldsymbol{c}) = \boldsymbol{Dc}$,其中 $\boldsymbol{D} \in \mathbb{R}^{n \times l}$ 是定义解码的矩阵,其限制列向量具有单位范数且彼此正交;
- 计算最优编码 $ \boldsymbol{c}^{*} $ , 可将问题化为最小化原始输入向量与重构向量之间的距离, 使用$L^2$范数描述问题:
$$\boldsymbol{c}^{*} = \arg \min _c | \boldsymbol{x}-g(\boldsymbol{c}) | _2 $$ - 使用$L^2$范数的平方代替,并化简得到:
$$\boldsymbol{c}^*=\arg \min _c -2\boldsymbol{x}^T\boldsymbol{Dc}+\boldsymbol{c}^T\boldsymbol{c}$$ - 通过向量微积分求解得:
$$\boldsymbol{c}=\boldsymbol{D}^T\boldsymbol{x}$$ - 即编码函数为:
$$f(\boldsymbol{x})=\boldsymbol{D}^T\boldsymbol{x}$$ - 重构操作为:
$$r(\boldsymbol{x})=g\left(f(\boldsymbol{x})\right)=\boldsymbol{DD}^T\boldsymbol{x}$$
推导过程: 最小化投影造成的损失
- 求解编码矩阵$\boldsymbol{D}$
最小化所有维数和所有点上的误差矩阵的 Frobenius 范数,即
$$\boldsymbol{D}^*=\arg \min _c \sqrt{ \sum _{i,j} \left (\boldsymbol{x}_j^{(i)} -r(\boldsymbol{x}^{(i)})_j \right)^2 } \text{ subject to }\boldsymbol{DD}^T=\boldsymbol{I}_l$$ - …
另一种推导过程: 最大化数据投影后的的方差
- 理论依据补充->拉格朗日乘子法
- 假设存在一个函数 $f(x,y)$ , 求该函数在 $g(x, y)=c$ 下的极值
- 则在极值点的时候两个函数必然相切,此时各自的导数成正比,从而
$$\cfrac{\partial f}{\partial x} = \lambda\cfrac{\partial g}{\partial x} \quad;\quad
\cfrac{\partial f}{\partial y} = \lambda\cfrac{\partial g}{\partial y}
\quad;\quad g(x,y)=c$$ - 可假设一个新的函数
$$F(x,y,\lambda)=f(x,y)+\lambda[c-g(x,y)]$$
分解求:
$$ \cfrac{\partial F}{\partial x} = 0 \quad;\quad
\cfrac{\partial F}{\partial y} = 0 \quad;\quad
\cfrac{\partial F}{\partial \lambda} = 0 $$
- 推导过程:
- $\boldsymbol{D}$ 中基向量为 ${\boldsymbol{u}_1, \boldsymbol{u}_2, …, \boldsymbol{u}_l}$ (从 n 维降到 l 维)
- 数据点 $\boldsymbol{x}_i$ 在该基底上的投影为 $\boldsymbol{x}_i^T \cdot \boldsymbol{u}_j$
- 所有数据在该基底上的投影的方差为(m为样本数量)
- $$ \boldsymbol{J}_{j} = \frac{1}{m} \sum_{i=1}^m (x_i^T u_j - x_{center}^T u_j)^2 $$
- 在运算之前对数据x进行0均值初始化,即 $x_{center}=0$,从而有
$$\begin{aligned} \boldsymbol{J}_j & = \frac{1}{m} \sum _{i=1} ^m (x_i^Tu_j)^2 \\
& = \frac{1}{m} \sum _{i=1} ^m (u_j^Tx_i \cdot x_i^Tu_j) \\
& = u_j^T \cdot \frac{1}{m} \sum _{i=1} ^m (x_i x_i^T) \cdot u_j \\
& = u_j^T \cdot \frac{1}{m} (\begin{bmatrix}x_1 \cdots x_m \end{bmatrix} \cdot \begin{bmatrix}x_1 \ \cdots \ x_m \end{bmatrix}) \cdot u_j \\
& == \frac{1}{m} u_j^T \boldsymbol{XX}^T u_j \\
& = u_j^T \boldsymbol{S} u_j \quad u.t. \text{ } u_j^T u_j \end{aligned} $$ - 构造函数
$$F(u_j) = u_j^T \boldsymbol{S} u_j + \lambda_j(1-u_j^T u_j)$$ - 求解$\frac{\partial F}{\partial u_j}=0$,得:
$$2\boldsymbol{S} \cdot u_j - 2\lambda_j \cdot u_j = 0 \Rightarrow \boldsymbol{S} u_j = \lambda_j u_j $$ - 当 $u_j$ 、$\lambda_j$ 分别为 $\boldsymbol{S}$ 矩阵的特征向量、特征值时, $\boldsymbol{J}_j$ 有极值,上述结果回代得
$$u_j^T \boldsymbol{S} u_j = u_j^T \lambda_j u_j = \lambda _j$$ - 所以对于任意满足条件的正交基,对应的数据在上面投影后的方差值为$\boldsymbol{S}$矩阵的特征向量,从而
$$\boldsymbol{J}_{max}=\sum^k_{j=1}\lambda_j, \text{ $\lambda$从大到小排序}$$ - 所以投影正交基为
- $\boldsymbol{S}$的特征向量中的前k个最大特征值对应的特征向量
- 对$\boldsymbol{S}$进行特征分解
$$ \boldsymbol{D} = \boldsymbol{D} \text{ } of \text{ } svd(\boldsymbol{S}) = \boldsymbol{D} \text{ } of \text{ } svd( \frac{1}{m}\boldsymbol{XX}^T ) $$ - 因此
$$ \boldsymbol{X} _{new_{l \times m}} = \begin{bmatrix} u^T_1 \\ u^T_2 \\ \vdots \\ u^T_l \end{bmatrix} _{l \times n} \cdot \boldsymbol{X} _{n \times m} $$
PCA使用过程
- 初始化 $\boldsymbol{X}$ ,使得所有样本之间的特征值均值为0,同时应用feature scaling,缩放到$-0.5 \sim 0.5$
- 计算 $\boldsymbol{X}$ 的协方差矩阵 $\boldsymbol{S}$
- 对 $\boldsymbol{S}$ 进行SVD分解,$\boldsymbol{U}$ 即我们要求的新坐标系集合, $\boldsymbol{D}$ 为特征值集合(计算时特征值都会大于0,且结果会从小到大排列)
- 按照特征值从大到小排序,要降低为 $l$ 维,那么取前 $l$ 个特征值对应的特征向量,就是新的 $l$ 个坐标轴
- 把X映射到新的坐标系中,完整降维操作
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Asphyxia's Blog!
评论
ValineDisqus