浮点数的间隙
浮点数的间隙
有大佬聊深度学习时,突然问了一个问题,如果一个float从0开始,以一个很小的步长比如0.000001不停做累加,最后会发生什么?
当然是一脸懵逼,对问题本身以及背后的问题一无所知。照着他的提示,间断做个实验,结果贴在这里:
第一列是最后停留的数,第二列是累加次数,第三列是步长
stop: 3.05176e-05 total: 24945431 step: 1e-12
stop: 0.000244141 total: 24945431 step: 8e-12
stop: 0.00195312 total: 24945431 step: 6.4e-11
stop: 0.015625 total: 24945431 step: 5.12e-10
stop: 0.125 total: 24945431 step: 4.096e-09
stop: 1 total: 24945431 step: 3.2768e-08
stop: 8 total: 24945431 step: 2.62144e-07
stop: 64 total: 24945431 step: 2.09715e-06
stop: 512 total: 24945431 step: 1.67772e-05
stop: 4096 total: 24945431 step: 0.000134218
stop: 32768 total: 24945431 step: 0.00107374
stop: 262144 total: 24945431 step: 0.00858993
stop: 2.09715e+06 total: 24945431 step: 0.0687195
stop: 1.67772e+07 total: 24945431 step: 0.549756
浮点数之间的间隙远超过我的想象,比如512.0f下一个浮点数的间隔大于0.00001,这意味这什么,
如果神经网络训练过程中,反向传播中梯度过低,根本不会对参数有任何影响,梯度消失