Немножко поясню за умолчания в предыдущем посте 🗣
Есть много вещей, которые я считаю очевидными, потому что я живу с ними много лет, и забываю, что когда-то я тоже их не понимал.
Перевод терминов на русский
1) token = токен, прямая калька с английского, потому что даже нет вариантов.
2) gate = вентиль. Это устоявшийся перевод, к нему вопросов нет, он отражает смысл.
3) mixer = смеситель. Есть ещё вариант с "миксером" или "смешивателем", но по-моему "смеситель" звучит лучше, он такая же аналогия, как и "вентиль".
4) embedding = эмбеддинг, прямая калька с английского. Есть вариант с "вложением", но это что-то другое, потому что не слишком очевидно, что куда вкладывается.
Общая современная архитектура нейронных языковых моделей
Для простоты уберём пакетную обработку, на входе только один текст. Также убираем позиционные эмбеддинги и забиваем на обучение (а значит и на маску), рассматриваем только один прямой проход.
Токенизация
Переводим тексты в токены, а токены в последовательность их индексов. То, как именно это происходит, определяется типом токенизатора и словарём.
Входной слой
Проецирует ID токенов в обучаемые эмбеддинги, наборы чисел одной размерности.
Набор основных слоёв
Каждый слой состоит из двух блоков:
1) Смеситель последовательности. Мы каким-то образом смешиваем информацию между эмбеддингами разных токенов в последовательности. Информация из "_Мой" перетекает в информацию в "чит". В трансформерах такую роль играет внимание. В других моделях эту роль играют разного рода рекуррентные сети и свёртки.
Размерность выхода: N x D', где D' очередная произвольная размерность, которая может быть равна D.
2) Смеситель каналов. Мы обрабатываем полученную информацию, смешивая чиселки внутри отдельных эмбеддингов. Это мы делаем с помощью двухслойного перцептрона с нелинейностью посередине. Нелинейность не всегда простая, иногда она с вентилями, как в SwiGLU.
Размерность выхода: N x D
Выход каждого из блоков складывается со входом, чтобы градиенты не затухали. Кроме того, в начале каждого из блоков есть послойная нормализация, но это детали.
Выходной слой
Проецирует эмбеддинг последнего токена в распределение вероятностей по словарю.
Почти все работы про не-трансформеры сохраняют всю эту структуру и заменяют только смеситель последовательностей.
Есть много вещей, которые я считаю очевидными, потому что я живу с ними много лет, и забываю, что когда-то я тоже их не понимал.
Перевод терминов на русский
1) token = токен, прямая калька с английского, потому что даже нет вариантов.
2) gate = вентиль. Это устоявшийся перевод, к нему вопросов нет, он отражает смысл.
3) mixer = смеситель. Есть ещё вариант с "миксером" или "смешивателем", но по-моему "смеситель" звучит лучше, он такая же аналогия, как и "вентиль".
4) embedding = эмбеддинг, прямая калька с английского. Есть вариант с "вложением", но это что-то другое, потому что не слишком очевидно, что куда вкладывается.
Общая современная архитектура нейронных языковых моделей
Для простоты уберём пакетную обработку, на входе только один текст. Также убираем позиционные эмбеддинги и забиваем на обучение (а значит и на маску), рассматриваем только один прямой проход.
Токенизация
Переводим тексты в токены, а токены в последовательность их индексов. То, как именно это происходит, определяется типом токенизатора и словарём.
Вход: Мой кот точитРазмерность выхода: N, где N — длина последовательности.
Токены: [<bos>, _Мой, _ко, т, _то, чит]
Индексы: [1, 1337, 42, 69, 1024, 2084]
Входной слой
Проецирует ID токенов в обучаемые эмбеддинги, наборы чисел одной размерности.
Вход: [1, 1337, 42, 69, 1024, 2084]Размерность выхода: N x D, где D — размерность эмбеддингов, которую мы сами выбираем при проектировании архитектуры.
Выход: [[0.012, ...., -0,134], ..., [0.643, ..., -0.421]]
Набор основных слоёв
Каждый слой состоит из двух блоков:
1) Смеситель последовательности. Мы каким-то образом смешиваем информацию между эмбеддингами разных токенов в последовательности. Информация из "_Мой" перетекает в информацию в "чит". В трансформерах такую роль играет внимание. В других моделях эту роль играют разного рода рекуррентные сети и свёртки.
Размерность выхода: N x D', где D' очередная произвольная размерность, которая может быть равна D.
2) Смеситель каналов. Мы обрабатываем полученную информацию, смешивая чиселки внутри отдельных эмбеддингов. Это мы делаем с помощью двухслойного перцептрона с нелинейностью посередине. Нелинейность не всегда простая, иногда она с вентилями, как в SwiGLU.
Размерность выхода: N x D
Выход каждого из блоков складывается со входом, чтобы градиенты не затухали. Кроме того, в начале каждого из блоков есть послойная нормализация, но это детали.
Выходной слой
Проецирует эмбеддинг последнего токена в распределение вероятностей по словарю.
Вход: [-0.687, ..., 0.412]Размерность выхода: V, размер словаря
Вероятности: [0.0, ..., 0.9, 0.1, ...]
Выход: {"<bos>": 0.0, ..., "_ко": 0.9, "_об": 0.1, ...}
Почти все работы про не-трансформеры сохраняют всю эту структуру и заменяют только смеситель последовательностей.