В первом уроке нейросеть была огромной формулой, а во втором текст превратился в номера токенов. Между ними остался вопрос: что можно делать с этими числами? Для начала хватит сложения и умножения. Слова «вектор» и «матрица» звучат страшнее, чем устроены.
Урок за 5 минут: список чисел, таблица весов, взвешенная сумма и вероятность. Всё можно посчитать на бумаге. Программировать пока не нужно.
Одно число и список чисел
Температуру можно записать одним числом: 18. Такое отдельное число математики называют скаляром.
А содержимое корзины одним числом описать неудобно. Пусть там два яблока и три груши. Договоримся: первое место — яблоки, второе — груши. Получится [2, 3].
Такой упорядоченный список чисел называется — вектор. Каждое число в нём, это координата. В векторе может быть сколько угодно координат. В нашем примере их две, то есть два места для чисел. Вектор [3, 2] описывает другую корзину: потому что порядок чисел здесь важен.
В школе вектор часто рисуют стрелкой. Например, [2, 3] можно нарисовать как перемещение на две клетки вправо и три вверх. Так координаты и их порядок выглядят более наглядно.
Но для наших вычислений удобнее список. Вектор из тысячи чисел на бумаге стрелкой не нарисуешь, а сложить или умножить его координаты всё равно можно.
Вес: сколько даёт каждое число
Пусть яблоко стоит 4 монеты, а груша — 2. Цена корзины:
2 × 4 + 3 × 2 = 14
Мы взяли два списка: количество [2, 3] и цены [4, 2]. Умножили числа на одинаковых местах и сложили результаты. Это называется скалярным произведением. Название можно подсмотреть позже; сейчас важен сам способ счёта.
В нейросети похожую работу выполняют веса. Каждый вес показывает, на сколько умножить соответствующее входное число. Веса могут быть дробными и даже отрицательными. Отрицательный вес уменьшает результат, когда входное число растёт. Например:
2 × 4 + 3 × (−2) = 2
Это уже не цена фруктов, а просто другой расчёт по двум входным числам.
Матрица: несколько расчётов сразу
Допустим, нужно посчитать цену корзины в двух магазинах. В первом цены [4, 2], во втором — [1, 3]. Запишем их строками таблицы:
| Магазин | Вес для яблок | Вес для груш | Результат |
|---|---|---|---|
| Первый | 4 | 2 | 2 × 4 + 3 × 2 = 14 |
| Второй | 1 | 3 | 2 × 1 + 3 × 3 = 11 |
Прямоугольная таблица чисел — матрица. Входной вектор [2, 3] прошёл через таблицу весов, и получился новый вектор [14, 11].
Вот что скрывается за выражением «умножить матрицу на вектор»: повторить знакомое действие для каждой строки. В каждой строке должно быть столько весов, сколько чисел на входе. Иначе одному из чисел не найдётся пары.
Как смешать два вектора
В нейросети бывает нужно смешать информацию из нескольких токенов. Начнём с двух простых векторов: [1, 0] и [0, 1].
Возьмём половину первого и половину второго:
0,5 × [1, 0] + 0,5 × [0, 1]
= [0,5 + 0; 0 + 0,5]
= [0,5; 0,5]
Точка с запятой здесь только разделяет координаты, чтобы не спутать её с десятичной запятой. Если взять 80% первого вектора и 20% второго, получится [0,8; 0,2]. Это взвешенная сумма: доли определяют, сколько взять от каждого списка.
Оценка и вероятность — разные вещи
Нейросеть может выдать оценки продолжений: 4, 3 и −1. Это ещё не вероятности: вероятность не бывает отрицательной, а вероятности всех вариантов вместе должны составлять 100%.
Специальная формула softmax превращает оценки в положительные доли с общей суммой 100%. Более высокой оценке соответствует более высокая вероятность. В следующем уроке увидим готовый расчёт. Отрицательная оценка тоже получит маленькую, но положительную вероятность.
Вероятность 70% не обещает, что токен обязательно выпадет. Представьте мешок со 100 билетами: на 70 написано «молоко», на 30 — «спать». При случайном выборе один раз вполне может выпасть «спать».
Что это значит для текста
Номер токена — его адрес (порядковый номер) в словаре. Вектор токена — список чисел, который модель использует при вычислении. Номер 100 не означает «вдвое больше смысла», чем номер 50.
В корзине мы сами назначили координатам понятные значения. У языковой модели числа векторов подбираются при обучении. Обычно нельзя подписать одну координату «доброта», а другую «кошки»: полезная информация распределена между многими числами.
Попробуйте сами
Вход [3, 1], две строки весов: [2, 4] и [0, 5]. Посчитайте новый вектор. Потом смешайте [1, 0] и [0, 1], взяв 75% первого и 25% второго.
Что запомнить
- Вектор — упорядоченный список чисел. Матрица — прямоугольная таблица чисел.
- Одна строка весов: умножить попарно и сложить. Несколько строк дают несколько выходных чисел.
- Номер токена, его вектор и вероятность следующего токена — разные вещи.
Проверьте себя
- Одинаковы ли векторы [2, 3] и [3, 2]?
- Какой вектор получился в задании с входом [3, 1]?
- Может ли вероятность быть равна −1?
В следующем уроке — как нейросеть считает следующий токен. Возьмём маленькую сеть и пройдём её вычисления от входа до выхода.
Для тех, кто хочет глубже: векторы и матрицы в учебнике Dive into Deep Learning (на английском).