2024.04.02
记录
今天读了斋藤康毅的《深度学习入门》。这本书其中有一段很有意思。
计算机在处理“数”的时候,数值必须在 4 字节或 8 字节的有限数据宽度内。当处理的“数”超过这个数据宽度,该“数”就会无法表示。这个现象称为“溢出”。在进行与指数有关的运算时,指数函数的值就很容易变得非常大。 比如计算机在处理 \(\exp(1000)\) 时就会返回无穷大的 inf 。
但是在计算机计算的时候,我们可以通过一些数学方法,在一些情况下规避这样的“溢出”问题。
\[
\begin{aligned}
y_{k}=\frac{\exp \left(a_{k}\right)}{\displaystyle\sum_{i=1}^{n} \exp \left(a_{i}\right)} & =\frac{\mathrm{C} \exp \left(a_{k}\right)}{\displaystyle\mathrm{C} \sum_{i=1}^{n} \exp \left(a_{i}\right)} \\
& =\frac{\exp \left(a_{k}+\log \mathrm{C}\right)}{\displaystyle\sum_{i=1}^{n} \exp \left(a_{i}+\log \mathrm{C}\right)} \\
& =\frac{\exp \left(a_{k}+\mathrm{C}^{\prime}\right)}{\displaystyle\sum_{i=1}^{n} \exp \left(a_{i}+\mathrm{C}^{\prime}\right)}
\end{aligned}
\]
如果分子分母上都是指数项,我们可以在分子分母上都乘上 \(\mathrm{C}\)。通过图 1 中的数学变化,我们可以将乘上的 \(\mathrm{C}\) 等价的转换成加上 \(\mathrm{C'}\)(可以使用任何值) 。由此我们可以通过 \(\mathrm{C'}\) 来消除上式在计算机运算过程出现的“溢出”现象。
综上,我们可以发现,计算机的运算本质上是“数”的运算,计算机问题其实是数学问题。计算机的性能,我们不仅可以通过硬件来提升,也可以通过数学来化腐朽为神奇。