系列文章目录
书籍链接: 《AI嵌入式系统:算法优化与实现》
前言
本文介绍矩阵乘法在机器学习中的应用并给出几种实际降低矩阵运算复杂度的算法,其中包括精确矩阵乘法算法和近似矩阵乘法算法。主要目的是降低数据乘法次数。
一.机器学习算法中的矩阵乘法
- 高维数据与降维矩阵相乘获取低纬度的特征向量。
- 神经网络的计算(全连接层 && 卷积层Im2col后转换后的矩阵相乘)。
二. Strassen矩阵相乘算法
- 基本思想:
- 对于2*2的矩阵乘法的优化: 将8次乘法运算减少为7次乘法运算,但加法运算增加到18次。
- 具体实现:
[ a b c d ] [ e f g h ] = [ a e + b g a f + b h c e + d g c f + d h ] (1) \left[\begin{array}{c}a & b \\ c & d \end{array}\right] \left[\begin{array}{c}e & f \\ g & h \end{array}\right] =\left[\begin{array}{c}ae+bg & af+bh \\ ce+dg & cf+dh \end{array}\right]\tag{1} [acbd][egfh]=[ae+bgce+dgaf+bhcf+dh](1)
[ a b c d ] [ e f g h ] = [ p 5 + p 4 − p 2 + p 6 p 1 + p 2 p 3 + p 4 p 1 + p 5 − p 3 − p 7 ] (2) \left[\begin{array}{c}a & b \\ c & d \end{array}\right] \left[\begin{array}{c}e & f \\ g & h \end{array}\right] =\left[\begin{array}{c}p_5+p_4-p_2+p_6 & p_1+p_2 \\ p_3+p_4 & p_1+p_5-p_3-p_7 \end{array}\right]\tag{2} [acbd][egfh]=[p5+p4−p2+p6p3+p4p1+p2p1+p5−p3−p7](2)
{ p 1 = a ( f − h ) p 2 = ( a + b ) h p 3 = ( c + d ) e p 4 = d ( g − e ) p 5 = ( a + d ) ( e + h ) p 6 = ( b − d ) ( g + h ) p 7 = ( a − c ) ( e + f ) (3) \left\{ \begin{aligned}\tag{3} p_1 &= a(f-h) \\ p_2 &= (a+b)h \\ p_3 &= (c+d)e \\ p_4 &= d(g-e) \\ p_5 &= (a+d)(e+h) \\ p_6 &= (b-d)(g+h) \\ p_7 &= (a-c)(e+f) \end{aligned} \right. ⎩ ⎨ ⎧p1p2p3p4p5p6p7=a(f−h)=(a+b)h=(c+d)e=d(g−e)=(a+d)(e+h)=(b−d)(g+h)=(a−c)(e+f)(3)
- 实际应用:
- 放在矩阵乘法中,分块进行相应操作。
三. Winograd矩阵相乘算法
- 基本思想
- 优化思路:
c = a 1 b 1 + a 2 b 2 (4) c = a_1b_1 +a_2b_2\tag{4} c=a1b1+a2b2(4)
c = m 3 − m 1 − m 2 (5) c = m_3 -m_1-m_2 \tag{5} c=m3−m1−m2(5)
{ m 1 = a 1 a 2 m 2 = b 1 b 2 m 3 = ( a 1 + b 2 ) ( a 2 + b 1 ) (6) \left\{ \begin{aligned}\tag{6} m_1 &= a_1a_2 \\ m_2 &= b_1b_2 \\ m_3 &= (a_1+b_2)(a_2+b_1) \end{aligned}\right. ⎩ ⎨ ⎧m1m2m3=a1a2=b1b2=(a1+b2)(a2+b1)(6) - 应用到矩阵乘法上,将第一个矩阵的列数折半,…
- 优化思路:
- 优化效果: 可以减小一半的乘法运算。
四. 低秩矩阵乘法
-
基本思想:
- 对于秩为R,尺寸为 N X L的矩阵A,可以表示为 R个向量乘积表示:
A = ∑ r = 1 R u r v r T (1) A = \sum_{r=1}^R u_rv_r^T \tag{1} A=r=1∑RurvrT(1)
- 此时计算矩阵A与 L X 1的列向量 x 的乘积时,利用上面的分解式:
A x = ∑ r = 1 R u r ( v r T x ) (2) Ax = \sum_{r = 1}^R u_r(v_r^Tx)\tag{2} Ax=r=1∑Rur(vrTx)(2) - 此时计算复杂度从N X L 降到 (L + N)X R 。
- 对于秩为R,尺寸为 N X L的矩阵A,可以表示为 R个向量乘积表示:
-
获取表达式1的分解形式的方法: SVD分解。
-
一般应用场景:矩阵 A一般是固定的常数矩阵
五. 循环矩阵乘法
- 转换为傅里叶变换实现
六. 近似矩阵乘法
-
基于矩阵低秩近似的矩阵乘法
放弃的 σ R + 1 \sigma_{R+1} σR+1越小,说明后续特征的影响越小,近似结果越接近准确值; -
基于数据统计相关性的近似矩阵乘法
-
基于向量量化的近似矩阵乘法