【问题标题】:Which way has better accuracy to compute the matrix matrix vector product, A B u?哪种方法计算矩阵矩阵向量乘积 A B u 的精度更高?
【发布时间】:2011-09-26 04:23:18
【问题描述】:

我想计算向量,

s = A B u,

其中 s 和 u 是 N 维复数向量,A 是 N×M 复数矩阵,B 是 M×N 复数矩阵。当 A、B 和 u 的元素表示为浮点数时,以下两种方式哪一种精度更高(有效位数更高)?

(1) 先计算 B u。

先做矩阵-向量乘法,

y = B u

然后,另一个矩阵-向量乘法

s = A y

(2) 先计算 A B。

先做矩阵-矩阵乘法,

C = A B

然后,矩阵-向量乘法

s = C u

有没有已知的一般规则?

顺便说一下,我知道方法(1)比方法(2)效率更高。

【问题讨论】:

  • 不同的乘法算法可以有不同的精度。您的问题的答案是否取决于用于进行乘法运算的算法(以及可能ABu 本身)?

标签: floating-point linear-algebra matrix-multiplication numerical-analysis significant-digits


【解决方案1】:

矩阵-向量乘法比矩阵-矩阵乘法具有更好的数值稳定性,所以我希望方法(1)更准确。

更详细地说,矩阵向量乘法具有良好的前向和后向误差界限。如果我们以矩阵向量乘法 y = B u 为例,那么 y 的误差为单位舍入的 2n 倍(使用标准双精度数时为 1e-16)乘以矩阵中的最大数 B 倍向量 u 中的最大数。这是前向错误界限。

后向误差界限是计算出的 y 不是 B 和 u 的乘积,而是一个稍微不同的矩阵 B' 和向量 u 的乘积。 B 和 B' 之间的差值以 2n 倍单位舍入乘以矩阵 B 中的最大数为界。

对于矩阵-矩阵乘法,有一个类似于矩阵-向量乘法的前向误差界,但没有很好的后向误差界。

这是一个一般原则:输出较少的计算(例如矩阵-向量乘法)比输出较多的计算(例如矩阵-矩阵计算)更有可能是向后稳定的。

但是,这是否有任何区别是另一个矩阵。可能是方法(2)恢复了后向稳定性,因为矩阵-向量乘积跟随矩阵-矩阵乘积。也可能是对于您的特定应用,没有太大区别,甚至方法(2)实际上更准确。

但是,鉴于方法 (1) 肯定更快,也可能更准确,我肯定会选择那个选项。

添加于 2011 年 9 月 29 日: 我最喜欢这个主题的来源是 Nicholas J. Higham,《数值算法的准确性和稳定性》,SIAM,2002 年。但是许多数值分析教科书都有关于前向和后向误差分析,尤其是那些专注于线性代数的书籍。

前向错误相当直观。如果您知道 B 和 u 是正确的,那么您感兴趣的是计算得到的乘积 B u 与精确乘积之间的差异;这就是前向错误分析告诉你的。当矩阵 B 不正确时,后向误差就会发挥作用(它可能是早期计算的结果导致了错误,或者它最终来自遭受实验或建模错误的测量)。假设 B 中的误差为 1e-10,并且乘法中的后向误差小于此值,例如 1e-11。这意味着虽然乘法的结果对于您提供给算法的 B 不正确,但对于另一个矩阵 B 是正确的,该矩阵 B 与原始 B 非常接近,以至于它很可能是正确的 B B 你给了算法。所以从某种意义上说,这和你希望的一样好。

前向和后向误差分析具有不同的优势:有时一种适用,有时另一种适用,有时混合使用。理想情况下,算法应该具有良好的前向和后向误差界限,但这并不经常发生。

【讨论】:

  • 感谢 Jitse 的回答。很高兴知道方法(1)可能更准确。我想了解更多关于前向和后向错误界限的信息,如果您能提出一些涵盖该主题的参考资料,我将很高兴。在我看来,前向误差界限与我认为的数值精度直接相关,但我不确定我是否需要后向误差界限。另外,我觉得方法(2)的矩阵-矩阵乘法一旦丢失了一个有效位,在后面的矩阵-向量乘法中就无法恢复了。
  • @norio 我添加了一些关于后向错误的信息,因为这确实不是那么直观。很可能你是对的,一旦丢失的有效数字将无法恢复,但我不能说更确定的东西(这就是数学家的问题!)。
  • Jitse,感谢您对后向错误分析的参考和详细解释。
【解决方案2】:

除非算法是专门设计用来做额外的工作来补偿数值不准确的,一个很好的经验法则是给定两种计算相同事​​物的方法,做更少工作的算法具有更好的准确度(毕竟,进行四舍五入的机会较少)。这并不是普遍正确的,因此它并没有消除考虑这些事情的义务,但它是一个很好的起点。

在你的情况下,它恰好是完全正确的。在不知道任何关于矩阵中特定值的先验的情况下,应该首选方法 (1)。 (可以构建方法(2)更准确的特定情况,但它们通常是高度人为的)。

【讨论】:

  • 斯蒂芬,谢谢你的回答。更少的操作导致更少的错误是可以理解的,意识到这一点是件好事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2017-09-26
相关资源
最近更新 更多