通常一个模型占用的显存是两部分:
2占了很大的比例,又包括激活中间变量和优化器部分;
网络训练使用链式法则进行参数更新,如下图:
其中
∂
f
∂
z
\frac{\partial f}{\partial z}
∂z∂f 是激活函数的导数,
假设激活函数是sigmoid,则导数的值为
σ
′
(
x
)
=
σ
(
x
)
(
1
−
σ
′
(
x
)
)
\sigma'(x)=\sigma(x)(1-\sigma'(x))
σ′(x)=σ(x)(1−σ′(x))
如果不暂存
σ
(
x
)
\sigma(x)
σ(x)的话,我们就需要用
x
x
x进行前向运算重新计算一遍;

为了方便参数更新,一般会将
σ
(
x
)
\sigma(x)
σ(x)暂时保存下来,非常占显存,
也可以不保存下来,需要用到的时候再用
x
i
x_i
xi计算一遍,做一遍前向运算,会减少显存的使用,但是会增加耗时。
具体激活函数产出的临时变量会占多大的显存呢?是否比参数占的要多的多呢?