Кто там говорил, что алайнмент не вредит моделям?
Пояснение:
- Свой алайнмент я ещё не успел сделать.
- А вот порушить чужой (через abliteration) - успел, и на 8B модели это ничего не меняло, а на 70B вдруг сильный зелёный профит появился.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥9❤4
Пока считается AWQ и GPTQ, задеплоил новый Вихрь в бота (@saiga_igusev_bot).
Можно тыкать после /setmodel. Я потыкал, вполне неплохо.
На этот раз деплой без косяков, я теперь мастер bos токенов.
Можно тыкать после /setmodel. Я потыкал, вполне неплохо.
На этот раз деплой без косяков, я теперь мастер bos токенов.
👍8😁1
Фух! Подключил ЮКассу к боту (@saiga_igusev_bot), можно купить подписку по /subbuy. Перед этим нужно задать e-mail через "/setemail ...".
Пока 500 рублей за 7 дней и x5 лимиты, дальше посмотрим.
Сама интеграция не очень сложная, единственный подводный камень был с почтой: она нужна для чеков налоговой. Плюс само подключение (заявка -> проверка -> договор -> проверка) заняло несколько дней. Подключился как самозанятый.
Если у кого-то возникнут проблемы с оплатой, пишите в личку или в комментарии.
Пока 500 рублей за 7 дней и x5 лимиты, дальше посмотрим.
Сама интеграция не очень сложная, единственный подводный камень был с почтой: она нужна для чеков налоговой. Плюс само подключение (заявка -> проверка -> договор -> проверка) заняло несколько дней. Подключился как самозанятый.
Если у кого-то возникнут проблемы с оплатой, пишите в личку или в комментарии.
👍28🤔7👏5🔥4👎1
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴10🤮1
Forwarded from Сиолошная
Помните вот эту ситуацию? Когда человек утверждал, что LLM не могут решить какую-то задачу, утвердил приз $10'000, и через два дня расстался с деньгами? Я ещё в комментариях шутил, что если хотите на серьёзных щах что-то утверждать про ограничения систем — надо готовиться выкладывать деньги, ибо иначе людям, которые реально могут доказать, что вы не правы, просто не интересно.
А помните я на прошлой неделе писал про бенчмарк ARC от Francois Chollet? Якобы что это визуальная загадка, где нужно уметь на лету идентифицировать новые паттерны, и что текущие LLM в этом вообще не разбираются, и выдают <10% качества?
Как написали в одном из чатов (автор @senior_augur):
— Я думаю ARC никто долго не побивал, потому что он никому нахер не нужен был
На интервью Francois говорил, мол, вот LLM не умеют рассуждать и обобщаться, бенчмарку 4 года, а воз и ныне там стоит. И утвердил конкурс (ну и получил освещение в подкасте) на $1M (правда там пока только $500k доступно, и то со звёздочками, что фронтир-модели, лучшие из лучших, под критерии не попадают).
Прошло 6 дней. Воздуха набрали? Готовы?😏
Знакомый подкастера из Redwood Research написал пост, где показывает, насколько высоки метрики GPT-4. На тренировочной выборке (публично доступной) качество 71% на 100 отложенных автором задачах, в которые он не подглядывал. Качество человека в среднем 85%. Кажется, что разрыв большой, но напомню, что основной тезис разработчика бенчмарка был «ну так LLM и 10% не решают!». На приватной выборке качество 51%, но не удивляйтесь — она сама по себе сложнее (и для неё неизвестен показатель человека, в смысле его просто не померили). До этого лучший метод давал 34% и не опирался на LLM.
Осталось дождаться, что Francois со своими друзьями возьмут метод и запустят на самом ультра-приватном датасете, который ещё никто не видел (специально для соревнований сделали), увидели там 50%+- и сидели вот так:😅 , переосмысливали своё представления об «ограничениях дип лернинга».
Но вам наверное интересно, как работает решение? Примерно так:
— GPT-4o на каждую задачу генерирует примерно 5000 программ на питоне, которые потенциально могут быть решением
— программы фильтруются по их способности повторить 3 примера, которые всегда даются (по условиям задачи, именно по ним нужно установить зависимость и дать ответ)
— топ-программы, дающие максимально похожий результат (если нет правильных) отдаются на правку GPT-4o, типа «вот как нужно, вот как ты сделала, исправляй эту хрень». Тут генерируется ещё 3000 программ (итого 8000)
— выбирается финальный кандидат для решения.
Для того, чтобы это работало хорошо, нужно немного поиграться с входными представлениями (так как, как я и говорил, модель не очень хорошо «видит» картинку, совсем не так, как мы), используя ASCII и написать несколько примеров рассуждений. Обычно в промпт входит примерно 30'000 токенов — если добавлять больше, то модель начинает работать хуже после 32'000 по естественным причинам (это давно замечено).
Автор описал несколько итераций улучшений промпта, но самое главное, как я понял — это подать несколько представлений на вход для одной и той же задачи, просто потому, что GPT не видит так же, как это делает человек. «GPT-4o’s vision is terrible on grids» (потому что все задачи на клеточках). Ей нужно хорошо приготовить текст, разделить всё символами (типа 0 | 3 | 1 | 2, цифры обозначают разные цвета).
И второе — GPT-4o плохо кодит и часто ошибается на +-1 по клеточкам. Обе проблемы решаются с развитием моделей, так что ждём к концу года новых прорывов (хотя кому теперь интересно будет садиться за задачу?).
А помните я на прошлой неделе писал про бенчмарк ARC от Francois Chollet? Якобы что это визуальная загадка, где нужно уметь на лету идентифицировать новые паттерны, и что текущие LLM в этом вообще не разбираются, и выдают <10% качества?
Как написали в одном из чатов (автор @senior_augur):
— Я думаю ARC никто долго не побивал, потому что он никому нахер не нужен был
На интервью Francois говорил, мол, вот LLM не умеют рассуждать и обобщаться, бенчмарку 4 года, а воз и ныне там стоит. И утвердил конкурс (ну и получил освещение в подкасте) на $1M (правда там пока только $500k доступно, и то со звёздочками, что фронтир-модели, лучшие из лучших, под критерии не попадают).
Прошло 6 дней. Воздуха набрали? Готовы?
Знакомый подкастера из Redwood Research написал пост, где показывает, насколько высоки метрики GPT-4. На тренировочной выборке (публично доступной) качество 71% на 100 отложенных автором задачах, в которые он не подглядывал. Качество человека в среднем 85%. Кажется, что разрыв большой, но напомню, что основной тезис разработчика бенчмарка был «ну так LLM и 10% не решают!». На приватной выборке качество 51%, но не удивляйтесь — она сама по себе сложнее (и для неё неизвестен показатель человека, в смысле его просто не померили). До этого лучший метод давал 34% и не опирался на LLM.
Осталось дождаться, что Francois со своими друзьями возьмут метод и запустят на самом ультра-приватном датасете, который ещё никто не видел (специально для соревнований сделали), увидели там 50%+- и сидели вот так:
Но вам наверное интересно, как работает решение? Примерно так:
— GPT-4o на каждую задачу генерирует примерно 5000 программ на питоне, которые потенциально могут быть решением
— программы фильтруются по их способности повторить 3 примера, которые всегда даются (по условиям задачи, именно по ним нужно установить зависимость и дать ответ)
— топ-программы, дающие максимально похожий результат (если нет правильных) отдаются на правку GPT-4o, типа «вот как нужно, вот как ты сделала, исправляй эту хрень». Тут генерируется ещё 3000 программ (итого 8000)
— выбирается финальный кандидат для решения.
Для того, чтобы это работало хорошо, нужно немного поиграться с входными представлениями (так как, как я и говорил, модель не очень хорошо «видит» картинку, совсем не так, как мы), используя ASCII и написать несколько примеров рассуждений. Обычно в промпт входит примерно 30'000 токенов — если добавлять больше, то модель начинает работать хуже после 32'000 по естественным причинам (это давно замечено).
Автор описал несколько итераций улучшений промпта, но самое главное, как я понял — это подать несколько представлений на вход для одной и той же задачи, просто потому, что GPT не видит так же, как это делает человек. «GPT-4o’s vision is terrible on grids» (потому что все задачи на клеточках). Ей нужно хорошо приготовить текст, разделить всё символами (типа 0 | 3 | 1 | 2, цифры обозначают разные цвета).
И второе — GPT-4o плохо кодит и часто ошибается на +-1 по клеточкам. Обе проблемы решаются с развитием моделей, так что ждём к концу года новых прорывов (хотя кому теперь интересно будет садиться за задачу?).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥6🤮3❤2🤔1🤯1
Если вдруг кто-то хочет пожертвовать денег:
Cloudtips (из России): https://pay.cloudtips.ru/p/ea94d893
KoFi (не из России): https://ko-fi.com/ilyagusev
TRC20 usdt: TZ7eFAvmq45585G2Xu6sfaGCKS4WPBMgJT
ERC20 usdt: 0xf877B6DBBaAb35d9302b4AD5A3b7E296d0E18059
Также готов полноценно проконсультировать по языковым моделям за денюжку, с этим в личку.
Cloudtips (из России): https://pay.cloudtips.ru/p/ea94d893
KoFi (не из России): https://ko-fi.com/ilyagusev
TRC20 usdt: TZ7eFAvmq45585G2Xu6sfaGCKS4WPBMgJT
ERC20 usdt: 0xf877B6DBBaAb35d9302b4AD5A3b7E296d0E18059
Также готов полноценно проконсультировать по языковым моделям за денюжку, с этим в личку.
❤49👍13😢9❤🔥4🤣4👏3🔥2🤯1
Позиционная кодировка
Есть одна особенность трансформеров, которой люди обычно уделяют незаслуженно мало внимания — позиционная кодировка.
Если вы вспомните, как работает внимание, то увидите, что там никак не участвуют позиции токенов. Но языковые модели должны как-то их понимать, иначе при предсказании следующего токена контекст превратится в bag-of-tokens, что критично повлияет на качество предсказания. Ведь да?😁
Конкретные задачи, где позиции важны:
- Подсчёт токенов
- Копирование кусков контекста
- Арифметика и код
Мини-квиз для читателя (перед открытием спойлера нужно ответить на все вопросы в голове)
- Может ли BERT хорошо работать на стандартных задачах (классификация текста) без позиционной кодировки?Нет, не может
- Может ли GPT хорошо работать на стандартных задачах (генерация текста) без позиционной кодировки?Да, может
- Может ли декодер с RoPE, обученный на контексте в 1024 токена, хорошо генерировать 2048 токенов?Может только после экстраполяции/интерполяции
Attention Is All You Need
Статья: https://arxiv.org/abs/1706.03762
В оригинальной статье о трансформерах с обычными эмбеддингам токенов перед первым слоем складываются позиционные эмбеддинги. При этом предлагается 2 типа позиционных эмбеддингов: синусоидальные или обучаемые. В случае обучаемых всё понятно и без лишних объяснений, а в случае синусоидальных работает всё так: мы берём пары фичей из эмбеддинга и каждой такой паре сопоставляем определённую частоту колебаний. Первое число пары - синус для данной позиции, второе - косинус. И так для каждой позиции токенов получаем разные чиселки на окружности.
Например, предположим, что у нас 4 чиселки в эмбеддинге, 1 секунда = 1 позиция, у первой пары частота 0.5 Гц, у второй - 0.25 Гц. Тогда на нулевой позиции будет такой эмбеддинг: [0, 1, 0, 1], на первой позиции: [0, -1, 1, 0]. Потому что для первая пара проходит полоборота за шаг, вторая - четверть. Формула, по которой расчитывается частота для разных пар: (10000^(-2i/d)) / 2π, где i - номер пары.
Почему 10000? Во-первых, кодировки любых позиций не повторяются. Во-вторых, так косинусное расстояние между двумя синусоидальным позиционными эмбеддингами монотонно увеличивается по мере наращивания дистанции.
Дополнительный материал: ссылка
RoFormer: Enhanced Transformer with Rotary Position Embedding
Статья: https://arxiv.org/abs/2104.09864
Есть свойство, которое нам хотелось бы получить: расстояние между 5 и 10 токеном должно быть таким же, как если бы мы поставили эти же токены на 10 и 15 позиции вместо 5 и 10. То есть оно не должно зависить от абсолютной позиции. Для синусоидальных эмбеддингов это не выполняется.
Чтобы это выполнялось, делаем так: каждую пару чиселок в уже готовых эмебеддингах токенов вращаем на плоскости матрицей поворота. Углы всё те же, что и были в синусоидальных эмбеддингах. В статье есть доказательство того, что желаемое свойство так действительно выполняется. А ещё мы делаем это в каждом слое.
Дополнительные материалы: раз, два, три
Transformer Language Models without Positional Encodings Still Learn Positional Information
Статья: https://arxiv.org/abs/2203.16634
А нужны ли нам вообще позиционные эмбеддинги?😐
Вот оказывыется нет, для авторегрессионных декодеров никакие эмбеддинги вообще не нужны, модель сама выучивается их считать. Это ещё и легко проверяется: учим языковую модель без позиционных эмбеддингов и учим мини-сетку предсказывать позицию токена из активаций. В первых слоях ничего толкового не предскажется, а вот дальше информация агрегируется. Более того, она не только агрегируется, но и используется - если перемешать контекстные токены, финальный токен предсказывается гораздо хуже. Но для энкодеров это не работает, ключ к выучиванию - декодерная маска внимания.
Это всё подтверждается в нескольких последующих статьях: раз, два.
Так почему все до сих пор используют RoPE? Ну, NoPE (no positional embeddings) принципиально работает, но чуть хуже. Это видно и в этой статье.
Расширения RoPE будут дальше
Есть одна особенность трансформеров, которой люди обычно уделяют незаслуженно мало внимания — позиционная кодировка.
Если вы вспомните, как работает внимание, то увидите, что там никак не участвуют позиции токенов. Но языковые модели должны как-то их понимать, иначе при предсказании следующего токена контекст превратится в bag-of-tokens, что критично повлияет на качество предсказания. Ведь да?
Конкретные задачи, где позиции важны:
- Подсчёт токенов
- Копирование кусков контекста
- Арифметика и код
Мини-квиз для читателя (перед открытием спойлера нужно ответить на все вопросы в голове)
- Может ли BERT хорошо работать на стандартных задачах (классификация текста) без позиционной кодировки?
- Может ли GPT хорошо работать на стандартных задачах (генерация текста) без позиционной кодировки?
- Может ли декодер с RoPE, обученный на контексте в 1024 токена, хорошо генерировать 2048 токенов?
Attention Is All You Need
Статья: https://arxiv.org/abs/1706.03762
В оригинальной статье о трансформерах с обычными эмбеддингам токенов перед первым слоем складываются позиционные эмбеддинги. При этом предлагается 2 типа позиционных эмбеддингов: синусоидальные или обучаемые. В случае обучаемых всё понятно и без лишних объяснений, а в случае синусоидальных работает всё так: мы берём пары фичей из эмбеддинга и каждой такой паре сопоставляем определённую частоту колебаний. Первое число пары - синус для данной позиции, второе - косинус. И так для каждой позиции токенов получаем разные чиселки на окружности.
Например, предположим, что у нас 4 чиселки в эмбеддинге, 1 секунда = 1 позиция, у первой пары частота 0.5 Гц, у второй - 0.25 Гц. Тогда на нулевой позиции будет такой эмбеддинг: [0, 1, 0, 1], на первой позиции: [0, -1, 1, 0]. Потому что для первая пара проходит полоборота за шаг, вторая - четверть. Формула, по которой расчитывается частота для разных пар: (10000^(-2i/d)) / 2π, где i - номер пары.
Почему 10000? Во-первых, кодировки любых позиций не повторяются. Во-вторых, так косинусное расстояние между двумя синусоидальным позиционными эмбеддингами монотонно увеличивается по мере наращивания дистанции.
Дополнительный материал: ссылка
RoFormer: Enhanced Transformer with Rotary Position Embedding
Статья: https://arxiv.org/abs/2104.09864
Есть свойство, которое нам хотелось бы получить: расстояние между 5 и 10 токеном должно быть таким же, как если бы мы поставили эти же токены на 10 и 15 позиции вместо 5 и 10. То есть оно не должно зависить от абсолютной позиции. Для синусоидальных эмбеддингов это не выполняется.
Чтобы это выполнялось, делаем так: каждую пару чиселок в уже готовых эмебеддингах токенов вращаем на плоскости матрицей поворота. Углы всё те же, что и были в синусоидальных эмбеддингах. В статье есть доказательство того, что желаемое свойство так действительно выполняется. А ещё мы делаем это в каждом слое.
Дополнительные материалы: раз, два, три
Transformer Language Models without Positional Encodings Still Learn Positional Information
Статья: https://arxiv.org/abs/2203.16634
А нужны ли нам вообще позиционные эмбеддинги?
Вот оказывыется нет, для авторегрессионных декодеров никакие эмбеддинги вообще не нужны, модель сама выучивается их считать. Это ещё и легко проверяется: учим языковую модель без позиционных эмбеддингов и учим мини-сетку предсказывать позицию токена из активаций. В первых слоях ничего толкового не предскажется, а вот дальше информация агрегируется. Более того, она не только агрегируется, но и используется - если перемешать контекстные токены, финальный токен предсказывается гораздо хуже. Но для энкодеров это не работает, ключ к выучиванию - декодерная маска внимания.
Это всё подтверждается в нескольких последующих статьях: раз, два.
Так почему все до сих пор используют RoPE? Ну, NoPE (no positional embeddings) принципиально работает, но чуть хуже. Это видно и в этой статье.
Расширения RoPE будут дальше
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥13🤔5❤4🤯1🙏1🍾1
Новый Клод и saiga_llama3_70b_sft_m1_d5_abliterated_kto_m1_d2_awq_4bit (ну и название) доступны в боте. Самое приятное - стоит новый Sonnet как старый Sonnet, то есть в 5 раз дешевле Опуса.
❤27🤔3
Опус и последний Соннет - единственные языковые модели общего названия, которые могут писать стихи. GPT-4o не вытягивает, а они - могут. Пример запроса: Пушкин про Warhammer 40k.
В просторах звёздных, где царит война,
Где вечный мрак и пламя битв пылает,
Стоит Империум, как твердая стена,
И Император верных охраняет.
Десант в доспехах, грозен и могуч,
На кораблях несётся сквозь пространство.
В боях, где смерть разит, как черный луч,
Врагам несут лишь гибель и мытарство.
В соборах Марса, где гудят машины,
Свершается под гул молитв таи́нство,
Где люди-киборги среди руин старинных
Куют оружие, даруя нам единство.
Повсюду Хаос сеет смерть и тлен,
Рой ксеносов клубится в бездне чёрной,
Но человечество, восстав с колен,
Бросает вызов участи позорной.
О, сколько павших душ, несчётных жертв войны!
Но долг велит идти вперёд без страха.
И в этом мраке беспросветной тьмы
Лишь вера движет нас из праха.
Пусть дух Владыки нас ведёт на бой,
Пусть враг падёт пред нашею рукой!
Империум стоит, незыблем строй,
И мы верны присяге вековой.
Местами криво, не с первой попытки, но с этим точно можно работать.
В просторах звёздных, где царит война,
Где вечный мрак и пламя битв пылает,
Стоит Империум, как твердая стена,
И Император верных охраняет.
Десант в доспехах, грозен и могуч,
На кораблях несётся сквозь пространство.
В боях, где смерть разит, как черный луч,
Врагам несут лишь гибель и мытарство.
В соборах Марса, где гудят машины,
Свершается под гул молитв таи́нство,
Где люди-киборги среди руин старинных
Куют оружие, даруя нам единство.
Повсюду Хаос сеет смерть и тлен,
Рой ксеносов клубится в бездне чёрной,
Но человечество, восстав с колен,
Бросает вызов участи позорной.
О, сколько павших душ, несчётных жертв войны!
Но долг велит идти вперёд без страха.
И в этом мраке беспросветной тьмы
Лишь вера движет нас из праха.
Пусть дух Владыки нас ведёт на бой,
Пусть враг падёт пред нашею рукой!
Империум стоит, незыблем строй,
И мы верны присяге вековой.
Местами криво, не с первой попытки, но с этим точно можно работать.
👍79🔥29❤3💯2🤔1
Отдал ручки Сайги сюда: https://llmarena.ru/
Отдал v6, saiga_phi3_medium_sft_m1_d2_kto_m5_d7 и saiga_llama3_70b_sft_m1_d5_abliterated_awq_4bit
В боте доступны всё те же модельки.
По поводу бенчмарка я настроен скептично (не будет там много голосов), но пусть.
Отдал v6, saiga_phi3_medium_sft_m1_d2_kto_m5_d7 и saiga_llama3_70b_sft_m1_d5_abliterated_awq_4bit
В боте доступны всё те же модельки.
По поводу бенчмарка я настроен скептично (не будет там много голосов), но пусть.
🔥28🤔6🤣2
Про расширения RoPE
Первая часть: ссылка
Для начала коротко напомню, что вообще делает RoPE: берётся эмбеддинг и каждая пара фичей вращается на определённый угол. Для разных пар — разный угол. Для первого токена происходит один поворот, для второго — два поворота, и так далее. Вращаем и query, и key.
Кроме того, нас прежде всего интересует расширения контекст без дотюнивания.
Раздобыть данные на понимание длинного контекста и компьют на тюн не так уж просто.
Extending Context Window of Large Language Models via Positional Interpolation
Статья: ссылка
Казалось бы, ну и в чём проблема тогда? Пусть мы обучили модель на 4096 позициях. Тогда давайте просто вращать фичи 4097 раз, 4098 раза и так далее. Это называется экстраполяция📊 , и экспериментально подвтерждено, что она не работает с популярными базовыми моделями. Причём подтверждено ещё много где. При этом со стороны теории это несколько загадочно: RoPE не обучается и кодирует относитетельную позицию, так какого чёрта? То есть ожидается, что после экстраполяции модель будет себя вести так, как будто у неё скользящее окно в 4к токенов. А на самом деле её полностью разносит, логиты внимания для некоторых расстояний >4к улетают в небеса. 🤯
Почему? Об этом чуть ниже.
Пока же сосредоточимся на втором семействе методов — интерполяции. Базовая идея такая: представим, что для токена на 4096 позиции мы делаем в 2 раза меньше оборотов, 2048. И так для каждой позиции, вместо одного оборота делаем половину. После этого мы можем кодировать 8192 токенов вместо 4096. Но есть нюанс: модель-то не видела в обучении полуоборотов, соседние токены становятся практически неразличимы💀
Поэтому авторы статьи полируют это всё тюном на расширенном контексте, что делает этот подход не особо практичным.
Scaling Laws of RoPE-based Extrapolation
Статья: ссылка
Суть статьи — обоснование провала экстраполяции. А виновата оказалсь база, θ = 10000😐
Дело в том, что с такой базой не все фичи делают полный оборот за 4к. И в итоге для первых фичей модель видит полный оборот (и видит немонотонность функций), а для других фичей видит куски только до 2π, π или π/2. И как раз из-за наличия неполных кусков экстраполяция не работает как надо.
Авторы дотюнивают модель с разными базами, но в пределах оригинальной длины контекста, 4к. Если сделать базу радикально меньше, например 500, то все фичи совершают по несколько оборотов, и всё ок, экстраполяция будет работать с приемлемым качеством скользящего окна. С увеличением размера контекста становится хуже, но без переломов. Если сделать базу радикально больше, например 1000000, то точка перелома отодвигается на более широкий контекст, но всё ещё существует.
Хоть такой метод и выпадает из нашей изначальной постановки задачи, потому что снова надо тюнить, но тюнить-то надо на маленьком контексте😊 , поэтому проблем со сбором данных тут нет. Работает всё неплохо, особенно с маленькой базой.
NTK-Aware scaling
Пост: ссылка
Меняем интерполяцию с дообучением из первой статьи на масштабирование базы θ без дообучения. Описано в посте на Реддите, хронологически до статьи выше. По идее это всё ещё интерполяция (особенно если задать коэффициент масштабирования с запасом), только мы растягиваем для разных частот по-разному.
Dynamic NTK scaling
Пост: ссылка
Добавляем изменение коэффициента масштабирования в зависимости от текущей длины последовательности. То есть если текущая длины меньше оригинальной — не делаем ничего. А дальше растим коэффициент линейно.
YaRN: Efficient Context Window Extension of Large Language Models
Статья: ссылка
Добавляются две новых штуки: NTK-by-parts и температура в софтмаксе внимания. NTK-by-parts мотивирован фактом выше о том, что какие-то фичи и частоты и так нормально экстраполируются, так что их можно не трогать. Для тех фичей, которые не экстраполируются, мы интерполируем. А температуру меняем, чтобы выравнять распредление скоров внимания (она меньше 1). Да и экспериментально так получается перплексия пониже🧠
И вот YaRN уже работает как без тюна, так и с тюном.
Первая часть: ссылка
Для начала коротко напомню, что вообще делает RoPE: берётся эмбеддинг и каждая пара фичей вращается на определённый угол. Для разных пар — разный угол. Для первого токена происходит один поворот, для второго — два поворота, и так далее. Вращаем и query, и key.
Кроме того, нас прежде всего интересует расширения контекст без дотюнивания.
Раздобыть данные на понимание длинного контекста и компьют на тюн не так уж просто.
Extending Context Window of Large Language Models via Positional Interpolation
Статья: ссылка
Казалось бы, ну и в чём проблема тогда? Пусть мы обучили модель на 4096 позициях. Тогда давайте просто вращать фичи 4097 раз, 4098 раза и так далее. Это называется экстраполяция
Почему? Об этом чуть ниже.
Пока же сосредоточимся на втором семействе методов — интерполяции. Базовая идея такая: представим, что для токена на 4096 позиции мы делаем в 2 раза меньше оборотов, 2048. И так для каждой позиции, вместо одного оборота делаем половину. После этого мы можем кодировать 8192 токенов вместо 4096. Но есть нюанс: модель-то не видела в обучении полуоборотов, соседние токены становятся практически неразличимы
Поэтому авторы статьи полируют это всё тюном на расширенном контексте, что делает этот подход не особо практичным.
Scaling Laws of RoPE-based Extrapolation
Статья: ссылка
Суть статьи — обоснование провала экстраполяции. А виновата оказалсь база, θ = 10000
Дело в том, что с такой базой не все фичи делают полный оборот за 4к. И в итоге для первых фичей модель видит полный оборот (и видит немонотонность функций), а для других фичей видит куски только до 2π, π или π/2. И как раз из-за наличия неполных кусков экстраполяция не работает как надо.
Авторы дотюнивают модель с разными базами, но в пределах оригинальной длины контекста, 4к. Если сделать базу радикально меньше, например 500, то все фичи совершают по несколько оборотов, и всё ок, экстраполяция будет работать с приемлемым качеством скользящего окна. С увеличением размера контекста становится хуже, но без переломов. Если сделать базу радикально больше, например 1000000, то точка перелома отодвигается на более широкий контекст, но всё ещё существует.
Хоть такой метод и выпадает из нашей изначальной постановки задачи, потому что снова надо тюнить, но тюнить-то надо на маленьком контексте
NTK-Aware scaling
Пост: ссылка
Меняем интерполяцию с дообучением из первой статьи на масштабирование базы θ без дообучения. Описано в посте на Реддите, хронологически до статьи выше. По идее это всё ещё интерполяция (особенно если задать коэффициент масштабирования с запасом), только мы растягиваем для разных частот по-разному.
Dynamic NTK scaling
Пост: ссылка
Добавляем изменение коэффициента масштабирования в зависимости от текущей длины последовательности. То есть если текущая длины меньше оригинальной — не делаем ничего. А дальше растим коэффициент линейно.
YaRN: Efficient Context Window Extension of Large Language Models
Статья: ссылка
Добавляются две новых штуки: NTK-by-parts и температура в софтмаксе внимания. NTK-by-parts мотивирован фактом выше о том, что какие-то фичи и частоты и так нормально экстраполируются, так что их можно не трогать. Для тех фичей, которые не экстраполируются, мы интерполируем. А температуру меняем, чтобы выравнять распредление скоров внимания (она меньше 1). Да и экспериментально так получается перплексия пониже
И вот YaRN уже работает как без тюна, так и с тюном.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23🔥16🤯4👍3
Я там долил ещё примеров в saiga_scored и переобучил sft Лламу, получилась m11_d7. Она лучше предыдущей sft по метрикам. Но хуже после abliterate. После этого ещё навернул KTO, и так получилась m11_d7_abliterated_kto_m7_d7. По метрикам 49% против v6, зато обесцензуренная. Была ещё попытка с DPO вместо KTO, но там длина разъехалась. Попробую сначала сделать abliterate, а потом sft, может станет лучше.
А ещё пробую разделённые LR из https://unsloth.ai/blog/contpretraining
А ещё пробую разделённые LR из https://unsloth.ai/blog/contpretraining
🔥21