Минутка удивительных 🤩 (или не очень) фактов.
Интуитивно кажется, что fp16/bf16 должны быть если не строго математически, то практически близки к некоему непрерывному описанию множества действительных чисел. Во всяком случае, в окрестности нуля. Поэтому вероятность принять конкретное значение должна быть малой. Что-то порядка 1 / мощность множества.
Однако, если сгенерировать x ~N(0, 1) оказывается, что для bfloat16 вероятность, что число окажется в точности нулем не так уж мала - примерно 0.6%. Для float16 и float32, к сравнению, она 0.07%.
И какова мораль 🤔, спрашивается?
Если в коде с bfloat16 (не говоря уже о типах более низкой точности), есть деление на нечто случайное, или граничный случай, стоит внимательнее обрабатывать их. Ибо они не такая уж редкость.
[Ноутбук на колабе]
Post #528
2.75K
- ❤ 21
- 🤔 15
- 👍 5
- 😁 1
- 🤯 1