За сегодня:
Why are Sensitive Functions Hard for Transformers?
Ссылка: тык
Почти продолжение вчерашнего туториала, но на этот раз про обучаемость трансформеров. Parity — задача подсчёта, чётно ли количество 1 в бинарной строке. Задача, которая вообще-то выразима трансформерами. Но на практике трансформеры её не выучивают. Почему?🤔
Есть такая характеристика функции, средняя чувствительность (average sensitivity). Она показывает, сколько в среднем битов входа этой функции влияет на ответ. В случае Parity на ответ влияет каждый бит, поэтому это функция с высокой чувствительностью, as_n(f) = n. А вот Majority (задача про определение, чего в строке больше: 1 или 0), например, обладает меньшей средней чувствительностью, as_n(f) = θ(sqrt(n)).
Первый результат статьи: чувствительность = сложность, и эта сложность "оседает" либо увеличивая норму параметров, либо произведение обратных знаменателей LayerNorm. Что именно растёт — зависит от длины входа.
А в свою очередь взрыв нормализации делает трансформеры нестабильными по отношению к небольшим изменениям в параметрах. Для обычных задач добавление шума к весам особо их не ломает. Но для функций с высокой чувствительностью к изменению входов проявляется и высокая чувствительность к изменению параметров. Что делает лосс крайне сложным в оптимизации, из-за чего задача и не выучивается😱
Всё это сопровождается подтверждающими теорию экспериментами. Статья в целом наполнена не самой простой математикой, но основные утверждения и выводы понятны на пальцах. Сам результат крутой, потому что объясняет, почему не все выразимые функции достижимы.А ещё её автор подписался на этот канал.
MYTE: Morphology-Driven Byte Encoding for Better and Fairer Multilingual Language Modeling
Статья: тык
Ребята докопались до святого — до Юникода, а конкретно до UTF-8😱
Как известно, в UTF-8 символы представляются 1-4 байтами. Кириллические символы (то есть те, которыми написан этот пост) обычно занимают 2 байта. Тут же решили сделать морфемную кодировку. Помните, как на уроках русского языка выделяли приставку, корень, суффиксы, окончание? Так вот это оно.
Морфемы выделяются известным (в узких кругах людей, которые когда-либо работали с выделением морфем) Morfessor'ом. Для каждого языка составляется отранжированный список морфем с точки зрения лосса Morfessor'а. Морфемы же кодируются аналогично UTF-8: первый байт кодирует общее количество байт в символе и письменность/язык, второй байт — 64 лучших морфемы, третий — 4096 лучших морфем, четвёртый — остальные морфемы.
Удивительный результат в том, что итоговая кодировка лучше во всех языках. Да, включая английский. На русском нужно примерно в 2 раза меньше байтов для тех же текстов🤔
На этом учат ByT5 и показывают, что он лучше, чем обученный на UTF-8.
Evaluating the Elementary Multilingual Capabilities of Large Language Models with MultiQ
Статья: тык
Помните, как Ллама на вопросы на русском отвечала на английском? Так статья про это!
Собрали многоязычный бенчмарк на базе lmsys запросов, синтетики и переводов. Для части языков вопросы вручную отсмотрели, переводы в среднем на 91% правильные, для некоторых кейсов пользоваться можно.
А когда есть такой бенчмарк, всё становится очень просто. Отдельно оцениваем точность ответов (через GPT-4), и совпадает ли язык ответа с языком вопроса (GlotLID'ом). Для Мистраля и Квена в большинстве случаев совпадает, для второй Лламы — почти всегда не совпадает, она отвечает на английском.
Другой интересный вывод: на срезе ответов на том же языке точность выше, чем если ответ на английском или левом языке. То есть если модель отвечает на том же языке, на каком задан вопрос, этот ответ с большей вероятностью правильный. Это для меня было удивительно: всю жизнь думал, что ответы на английском должны были быть лучше👏
Достойные упоминания статьи:
- AFLoRA (тык)
- Данные в предобучении для few-shot (тык)
- GAN-like автопромптинг (тык)
- LOMO (тык)
- QDPO (тык)
- Улучшение ризонинга через формулирование задач в коде (тык)
- ASCII джейлбрейк (тык)
- Убирание околодубликатных токенов из словаря (тык)
Why are Sensitive Functions Hard for Transformers?
Ссылка: тык
Почти продолжение вчерашнего туториала, но на этот раз про обучаемость трансформеров. Parity — задача подсчёта, чётно ли количество 1 в бинарной строке. Задача, которая вообще-то выразима трансформерами. Но на практике трансформеры её не выучивают. Почему?
Есть такая характеристика функции, средняя чувствительность (average sensitivity). Она показывает, сколько в среднем битов входа этой функции влияет на ответ. В случае Parity на ответ влияет каждый бит, поэтому это функция с высокой чувствительностью, as_n(f) = n. А вот Majority (задача про определение, чего в строке больше: 1 или 0), например, обладает меньшей средней чувствительностью, as_n(f) = θ(sqrt(n)).
Первый результат статьи: чувствительность = сложность, и эта сложность "оседает" либо увеличивая норму параметров, либо произведение обратных знаменателей LayerNorm. Что именно растёт — зависит от длины входа.
А в свою очередь взрыв нормализации делает трансформеры нестабильными по отношению к небольшим изменениям в параметрах. Для обычных задач добавление шума к весам особо их не ломает. Но для функций с высокой чувствительностью к изменению входов проявляется и высокая чувствительность к изменению параметров. Что делает лосс крайне сложным в оптимизации, из-за чего задача и не выучивается
Всё это сопровождается подтверждающими теорию экспериментами. Статья в целом наполнена не самой простой математикой, но основные утверждения и выводы понятны на пальцах. Сам результат крутой, потому что объясняет, почему не все выразимые функции достижимы.
MYTE: Morphology-Driven Byte Encoding for Better and Fairer Multilingual Language Modeling
Статья: тык
Ребята докопались до святого — до Юникода, а конкретно до UTF-8
Как известно, в UTF-8 символы представляются 1-4 байтами. Кириллические символы (то есть те, которыми написан этот пост) обычно занимают 2 байта. Тут же решили сделать морфемную кодировку. Помните, как на уроках русского языка выделяли приставку, корень, суффиксы, окончание? Так вот это оно.
Морфемы выделяются известным (в узких кругах людей, которые когда-либо работали с выделением морфем) Morfessor'ом. Для каждого языка составляется отранжированный список морфем с точки зрения лосса Morfessor'а. Морфемы же кодируются аналогично UTF-8: первый байт кодирует общее количество байт в символе и письменность/язык, второй байт — 64 лучших морфемы, третий — 4096 лучших морфем, четвёртый — остальные морфемы.
Удивительный результат в том, что итоговая кодировка лучше во всех языках. Да, включая английский. На русском нужно примерно в 2 раза меньше байтов для тех же текстов
На этом учат ByT5 и показывают, что он лучше, чем обученный на UTF-8.
Evaluating the Elementary Multilingual Capabilities of Large Language Models with MultiQ
Статья: тык
Помните, как Ллама на вопросы на русском отвечала на английском? Так статья про это!
Собрали многоязычный бенчмарк на базе lmsys запросов, синтетики и переводов. Для части языков вопросы вручную отсмотрели, переводы в среднем на 91% правильные, для некоторых кейсов пользоваться можно.
А когда есть такой бенчмарк, всё становится очень просто. Отдельно оцениваем точность ответов (через GPT-4), и совпадает ли язык ответа с языком вопроса (GlotLID'ом). Для Мистраля и Квена в большинстве случаев совпадает, для второй Лламы — почти всегда не совпадает, она отвечает на английском.
Другой интересный вывод: на срезе ответов на том же языке точность выше, чем если ответ на английском или левом языке. То есть если модель отвечает на том же языке, на каком задан вопрос, этот ответ с большей вероятностью правильный. Это для меня было удивительно: всю жизнь думал, что ответы на английском должны были быть лучше
Достойные упоминания статьи:
- AFLoRA (тык)
- Данные в предобучении для few-shot (тык)
- GAN-like автопромптинг (тык)
- LOMO (тык)
- QDPO (тык)
- Улучшение ризонинга через формулирование задач в коде (тык)
- ASCII джейлбрейк (тык)
- Убирание околодубликатных токенов из словаря (тык)