Штучний інтелект отримав свою власну систему числення

Feb 21 7:00 2020 Друк цієї статті

Це забезпечує високу точність обчислень і кінцевого результату, але потребує використання великих обсягів пам'яті і високопродуктивних процесорів, які споживають значну кількість енергії. У системах же з високими вимогами до швидкодії та з обмеженими обчислювальними ресурсами використовуються 8-розрядні цілі числа зі знаком INT8. Це дозволяє одержати високу продуктивність систем штучного інтелекту, принісши в жертву точність обчислень і кінцевого результату.

Для вирішення проблеми, пов'язаної з компромісом між продуктивністю систем штучного інтелекту і розрядністю чисел використовуються, фахівці Google Brain у свій час розробили спеціальний формат чисел з плаваючою комою, оптимізований для глибинного самонавчання і дозволяє отримувати результат з мінімально можливими втратами точності. Цей формат, BF16 (BFloat16, Brain Float 16) вже знайшов широке застосування в спеціальних апаратних прискорювачах, розроблених компаніями Google, Intel, ARM і ін.

У чому ж різниця між форматами FP32 і BF16? Число з плаваючою комою в стандартному форматі FP32 складається з 1 знакового біта, що визначає знак числа ( або -), після нього слід 8-бітна експонента (ступінь числа), після якої йде 23-бітна мантиса (саме число). І в сумі набирають повні 32 розряду.

Для формату BF16 фахівці Google Brain запропонували обрізати мантиссу до 7 біт. Такий вибір був зроблений не випадково, проведені експерименти показали, що якість роботи нейронних мереж набагато більш чутливо до розміру експоненти, ніж мантиси. І варіант BF16 є найбільш прийнятним компромісом.

Таким чином, число BF16 складається з одного знакового біта, 8-бітної експоненти і 7-бітної мантиси, що в сумі складає повні 16 біт. Для проведення тензорних операцій з числами в форматі BF16 потрібні набагато менші обчислювальні потужності, обсяги пам'яті та енергетичні витрати. Нагадаємо нашим читачам, що тензор - це тривимірна матриця чисел, множення тензорів - це ключова операція, на якій стоять всі обчислення в системах штучного інтелекту.

Можна поставити запитання, а чому б не використовувати в системах штучного інтелекту стандартний усічений формат чисел з плаваючою комою IEEE FP16? Адже цей формат досить успішно використовується в багатьох додатках, пов'язаних з комп'ютерною графікою і комп'ютерними іграми. Число у форматі FP16 виглядає наступним чином - один знаковий біт, 5-бітна експонента і 10-бітна мантиса, що в сумі складає повні 16 біт.

Відразу можна відзначити, що усічена експонента визначає набагато менший динамічний діапазон чисел, ніж діапазон формату BF16, який майже дорівнює діапазону FP32. По-друге, для перетворення числа FP32 у формат FP16 потрібно досить складна процедура, ніж найпростіша операція по усічення розрядів мантиси, необхідна для перетворення FP32 в BF16. І, по-третє, усічена мантиса формату BF16 дозволяє зробити шину блоків апаратних умножителей менше, ніж необхідно для формату FP16. В результаті цього самі блоки умножителей для формату BF16 у вісім разів менше по займаній на кристалі чіпа площі, ніж помножувачі для FP32, і в два рази менше, ніж помножувачі для FP16.

І насамкінець слід зауважити, що формат BF16 є не єдиним форматом, розробленим для систем штучного інтелекту. У 2017 році компанія Nervana запропонувала формат під назвою Flexpoint, який повинен був об'єднати всі переваги цілих чисел з числами з плаваючою комою. По суті, цей формат являє собою модифікацію чисел з фіксованою комою, які складаються з двох цілих чисел. Перше число являє собою цілу частину числа до коми, друге - дробову частину числа (після коми). Фахівці компанії Nervana доповнили формат числа з фіксованою комою ще й експонентою, однак, для прискорення операцій експонента була одна для всіх чисел, з яких складається тензор. При такому підході множення тензорів могло бути здійснене за допомогою математики на основі дуже швидких цілочисельних операцій.

Але тут же виникла і проблема, пов'язана з вузьким динамічним діапазоном чисел, що мають одну і тугіше експоненту. Ця проблема зробила неможливим "зліт" формату Flexpoint і навіть в перших прискорювачах компанії Nervana вже використовувався формат BF16.