
在实际计算中,会遇到数值稳定性(Numerical Stabiltity)的问题,因为我们的 e f k e^{f_{k}} efk 和 ∑ j e f j \sum_{j} e^{f_{j}} ∑jefj 太大了。大数之间相除很容易导致计算结果误差很大。因此这里需要使用下面的小技巧:
e f k ∑ j e f j = C e f k C ∑ j e f j = e f k + log C ∑ j e f j + log c \frac{e^{f_{k}}}{\sum_{j} e^{f_{j}}}=\frac{C e^{f_{k}}}{C \sum_{j} e^{f_{j}}}=\frac{e^{f_{k}+\log ^{C}}}{\sum_{j} e^{f_{j}+\log ^{c}}} ∑jefjefk=C∑jefjCefk=∑jefj+logcefk+logC
在实际使用过程中,经常把C取为
log
C
=
−
max
f
j
\log ^{C}=-\max f_{j}
logC=−maxfj
也就是说,在计算损失值之前,将输出向量里面的每个值都要减去该向量里面的最大值。
2174

被折叠的 条评论
为什么被折叠?



