模型优化-低秩近似
一、低秩近似
神经网络的基本运算卷积,实则就是 矩阵运算 ,低秩近似的技术是通过一系列 小规模矩阵将权重矩阵重构出来 ,以此降低 运算量和存储开销 。
目前有两种常用的方法实现低秩近似:
- Toeplitz矩阵 【托普利兹】直接重构权重矩阵,简称为T型矩阵,它是由Bryc、Dembo、Jiang于2006年提出的。托普利兹矩阵的主对角线上的元素相等,平行于主对角线的线上的元素也相等;
- 奇异值分解(SVD) ,将权重矩阵分解为若干个小矩阵。
下面以奇异值分解为例,从运算开销和计算开销方面展示低秩近似在模型压缩中作用.
前提:假设原始矩阵为m*n,其中m=n=100,如果使用奇异值分解,并保留前k
个奇异值,那么近似矩阵可以通过三个更小的矩阵表示:U_k(m * k)、S_k(k * k)、Vt_k(k * n),令k=10。
存储开销
- 原始近似矩阵的存储需求为10000个元素(100*100)
- 低秩近似的存储开销为2100个元素(100 * 10+10 * 10+10 * 100计算得出)
- 在这个例子中,使用低秩近似降低了约79%的存储需求。
计算开销
- 原始矩阵的乘法计算开销为1000000次乘法(100 * 100 * 100)
- 每个元素需要n=100次乘法
- 乘积矩阵有m*n=100 * 100个元素
- 所以总的乘法次数是100×100×100=1,000,000 次
- 低秩近似矩阵的乘法开销为110000次乘法(m * k * k + m *k * n)
-
计算U_k * S_k的乘法开销
- U_k的大小是m * k,S_k的大小是k * k,每个元素的计算需要k次乘法。
- 所以U_k * S_k的计算开销是k * (m * k)=m *k * k=100 * 10 * 10 = 10000
-
计算 (U_k * S_k) * Vt_k 的乘法开销
- U_k * S_k 的结果是一个 m x k 矩阵, Vt_k 的大小是 k x n,
- 每个元素的计算需要 k 次乘法,
- 所以(U_k * S_k) * Vt_k的乘法开销是k * (m * n) = 10 * 100 * 100=100000
- 所以低秩近似的开销等于110000
- 在这个例子中,使用低秩近似降低了约89%的计算开销
为什么只考虑乘法开销不考虑加法开销
- 计算成本:乘法开销的计算成本远远高于加法
- 算法的分析常规:在算法复杂度分析中,通过关注的是主导操作,即最影响总体性能的操作
- 实际应用中的重视:在实际场景中,尤其大规模计算中,乘法操作的优化通常比加法更能显著提升性能。