矩阵乘法优化

本文聚焦矩阵乘法在机器学习中的应用,介绍了多种降低矩阵运算复杂度的算法,包括Strassen、Winograd等精确算法,以及低秩、循环、近似等算法,旨在减少数据乘法次数,如Strassen将2*2矩阵乘法运算次数减少,低秩矩阵乘法可降低计算复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录

神经网络优化学习笔记
卷积运算优化学习笔记


书籍链接: 《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+p4p2+p6p3+p4p1+p2p1+p5p3p7](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(fh)=(a+b)h=(c+d)e=d(ge)=(a+d)(e+h)=(bd)(g+h)=(ac)(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=m3m1m2(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=1RurvrT(1)
      秩为R的矩阵的分解表示
    • 此时计算矩阵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=1Rur(vrTx)(2)
    • 此时计算复杂度从N X L 降到 (L + N)X R 。
  • 获取表达式1的分解形式的方法: SVD分解。
    矩阵A的SVD 表示形式

  • 一般应用场景:矩阵 A一般是固定的常数矩阵

五. 循环矩阵乘法

  • 转换为傅里叶变换实现

六. 近似矩阵乘法

  • 基于矩阵低秩近似的矩阵乘法
    基于奇异值分解计算矩阵的近似表示
    放弃的 σ R + 1 \sigma_{R+1} σR+1越小,说明后续特征的影响越小,近似结果越接近准确值;

  • 基于数据统计相关性的近似矩阵乘法
    算法流程

  • 基于向量量化的近似矩阵乘法

总结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值