在计算机中,加法运算比乘法运算快很多,所以在估计计算量的时候我们主要计算要做多少次乘法。

在神经网络中,主要的运算是矩阵乘法。矩阵乘法的计算量是这样计算的:

一个 a\times b 的矩阵乘以一个 b\times c 的矩阵要做 abc 次乘法,所以 abc 就是两个矩阵相乘的计算量了。若 a 为主导变量,则其复杂度为 O(a) ;同理, 若 b 为主导变量,则其复杂度为 O(b) 。

这就是我们计算神经网络复杂度的依据。

【举个例子】

计算某两层网络 h(x)=max(0,xW_1+b_1)W_2+b_2 的复杂度?

假设矩阵 x 是 n\times d 的,W_1 是 d\times 4d 的,W_2 是 4d\times d 的。

所以第一层是 n\times d 的矩阵乘以 d\times 4d 的矩阵,得到一个 n\times 4d 的矩阵,计算量为 n\times d\times 4d ;第二层就是 n\times 4d 的矩阵乘以 4d\times d 的矩阵,得到一个 n\times d 的矩阵,计算量为 n\times 4d\times d 。(其中激活函数和加法运算的计算量忽略不计)

所以总的计算量是:

n\times d\times 4d+n\times 4d\times d=8nd^{2}

若n足够大,其复杂度为O(n),若d足够大,则复杂度为O(d^{2}) 。


【参考文章】

《如何计算算法的复杂度》

《线性Transformer应该不是你要等的那个模型》中的“评估计算量”(强烈建议对Transformer感兴趣的同学读一下这篇文章)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐