Цілі числа, числа з рухомою комою і точність

Модуль 1Урок 3 з 56Безкоштовний модуль

У моделі живуть два «племені» чисел. Цілі (int) — для підрахунку й позицій: «5-й token у реченні», «batch з 64 прикладів», «512 нейронів у шарі». Вони точні: 2 завжди 2. Дробові (float) — для ваг, ймовірностей і gradient: «цей token на 0.73 важливий», «confidence 0.12». Мова нечітка — і моделі потрібна мʼякість float, щоб говорити «трохи більше», а не лише «так/ні».

Int: структура й лічильники

Position token у реченні — integer. Розмір vocabulary — integer. Кількість шарів — integer. Якщо ви бачите «token #47», це індекс, не ймовірність. Integers тримають скелет: хто де стоїть, скільки елементів у масиві. Без них модель не знала б порядку слів у prompt.

Float: вага, ймовірність, навчання

Кожен parameter у нейромережі — float. Softmax перетворює logits на ймовірності на кшталт 0.08, 0.71, 0.21. Gradient показує «куди зрушити вагу на 0.0003». Саме дроби дозволяють плавно вчитися: не стрибком 0→1, а поступовим підкручуванням.

Python
count = 7          # int: скільки разів зустріли token
prob = 0.75        # float: «доволі ймовірно»
weight = 0.03125   # float: типова мала вага

print("Tokens:", count)
print("Confidence:", prob)
print("2 + 3 =", 2 + 3)           # 5 — точно
print("0.1 + 0.2 =", 0.1 + 0.2)   # 0.30000000000000004 — сюрприз!
Вивід

Натисніть «Запустити» — вивід зʼявиться тут

Підказка

Спробуйте 0.1 + 0.2 == 0.3, а потім round(0.1 + 0.2, 10) == 0.3 — і ви побачите, чому дроби порівнюють з допуском.

Увага

Float у компʼютері — наближення. Додавання 0.1 + 0.2 дає 0.30000000000000004. Це floating-point precision. Моделі з мільярдами операцій накопичують крихітні похибки — і все одно навчаються, бо алгоритми (і mixed precision) враховують це.

0.1+0.20.1 + 0.2 на числовій осі дає не рівно 0.30.3, а 0.300000000000000040.30000000000000004 — на збільшеному фрагменті видно, що float лише наближає дроби.
p(token)∈[0,1],∑ipi≈1p(\text{token}) \in [0, 1], \quad \sum_i p_i \approx 1

Приклад

Слово «привіт» зустріли 12 400 разів (int). Ймовірність наступного token після «привіт» для «світ» — 0.62 (float). Змініть 0.62 на 0.05 — і модель «відчує», що «світ» рідко йде далі; на 0.95 — майже завжди.

На практиці GPU часто рахує у float32 або float16 (mixed precision): це швидше й дешевше, але й привід тим більше памʼятати про наближення. Індекс позиції лишається int, матриця ваг — float. Цей поділ не випадковий: структура тексту дискретна, а навчання плавне.

Logits перед softmax — теж float: необмежені числа, з яких роблять ймовірності. Якщо logit для token «світ» дорівнює 3.2, а для «банан» — мінус 1.5, softmax перетворить їх у частки близько 0.81 і 0.02. Int тут не підійде: між «ніколи» і «завжди» потрібна плавна шкала впевненості.

Що запамʼятати

Int відповідає за структуру: індекси, розміри, лічильники. Float відповідає за відтінки навчання: ваги, ймовірності, gradient. Разом вони тримають жорсткий каркас і мʼяке значення. І похибка float — не баг, а властивість: з нею живуть щодня, а не виправляють.

Перевірка

3 питання

Кілька питань за матеріалом уроку. Спроб — скільки завгодно.

1.Для чого в LLM найчастіше використовують int?
2.Чому ймовірності token — float, а не int?
3.Що показує приклад 0.1 + 0.2 у Python?