Привет! На связи NLP-команда Яндекса. Коллективный разум создал этот канал, чтобы делиться разборами научных статей со всеми, кто жаждет знаний. Не стесняйтесь общаться в комментариях! Мы за обмен опытом и увлекательные дискуссии. Кстати, форточку открывать не собираемся — здесь душно, потому что так нужно.
🔥11😁5
⚗️ Что такое дистилляция и как она применяется в LLM
Чем больше модель, тем сложнее ее инферить и дороже обучать. Решить проблему призвана, в том числе, дистилляция — передача знаний от тяжёлой модели («учителя») более лёгкой («ученика»). Расскажем, какие типы дистилляции существуют и как их используют.
Классический способ предложил Джеффри Хинтон в статье 2015 года. Учёный выдвигает гипотезу, что распределение классов, которые модель предлагает в качестве ответа, само по себе содержит немало знаний. Поэтому имеет смысл тренировать «ученика» не на ответах, а на распределении классов «учителя», используя Softmax с температурой. В качестве лосса использовали кросс-энтропию между двумя распределениями — ответами учителя и ученика.
Одна из первых моделей, которую дистиллировали на претрейне, — DistilBERT. Результат получился впечатляющим: language understanding удалось сохранить на 97%, а скорость по заявлению авторов выросла на 60%. Интересно, что дистиллировали веса, а в архитектуре модели изначально было вдвое меньше энкодер-блоков, чем у базовой BERT — 6 против 12. В основе обучения — перекрестная энтропия ответов «учителя» и «ученика», MLM и L cos — косинусная близость между эмбеддингами на скрытых слоях. Идеи DistilBERT позднее применяли, например, в DistilGPT.
Самый простой из современных методов — имитация модели. Его суть — добиться, чтобы небольшая модель копировала поведение крупной. Для этого «учителя» просят генерировать ответы на разные запросы, а потом на них обучают «ученика».
Маленькие модели отлично подражают большим, но не развивают собственные навыки. Поэтому «ученики» не получают новые знания, зато неплохо справляются с тем, чтобы извлекать имеющиеся. Этот метод подходит, когда нужно натренировать модель под конкретные задачи, например, для суммаризации или разметки данных.
Для дистилляции знаний в «младшую» модель можно использовать метод Chain-of-Thought Prompting. Суть: просить LLM давать не только ответ, но и описывать цепочку рассуждений, которые к нему привели. Как показывают исследования, такой подход существенно увеличивает качество ответов на некоторых датасетах.
К примеру, авторы статьи Distilling Step-by-Step! попросили «ученика» предсказывать не только ответы «учителя», но и обоснования, чередуя запросы. Так маленькая модель тренируется думать как большая LLM, а не просто копирует ответы и поведение — на некоторых датасетах этот подход даёт отличный результат.
Кроме того, можно использовать датасет, составленный по reward-модели. В этом случае «ученик» будет тренироваться не на всех ответах «учителя», а только на тех, которые reward-модель считает хорошими, что тоже может улучшить результаты.
Наконец, можно расширить датасет, на котором учится младшая модель, с помощью генерации с разными параметрами вроде температуры или seed. Набор данных по одному промту получится более разнообразным, а поведение «ученика» в теории должно больше походить на поведение «учителя».
На этом всё. Спасибо, что прочитали! Делитесь опытом и впечатлениями от поста в комментариях! А во второй части текста мы разберём другие методы дистилляции и, конечно, затронем MiniLLM. Оставайтесь на связи!
Разбор помог подготовить❣ Сергей Воробьев
@stuffyNLP
Чем больше модель, тем сложнее ее инферить и дороже обучать. Решить проблему призвана, в том числе, дистилляция — передача знаний от тяжёлой модели («учителя») более лёгкой («ученика»). Расскажем, какие типы дистилляции существуют и как их используют.
Классический способ предложил Джеффри Хинтон в статье 2015 года. Учёный выдвигает гипотезу, что распределение классов, которые модель предлагает в качестве ответа, само по себе содержит немало знаний. Поэтому имеет смысл тренировать «ученика» не на ответах, а на распределении классов «учителя», используя Softmax с температурой. В качестве лосса использовали кросс-энтропию между двумя распределениями — ответами учителя и ученика.
Одна из первых моделей, которую дистиллировали на претрейне, — DistilBERT. Результат получился впечатляющим: language understanding удалось сохранить на 97%, а скорость по заявлению авторов выросла на 60%. Интересно, что дистиллировали веса, а в архитектуре модели изначально было вдвое меньше энкодер-блоков, чем у базовой BERT — 6 против 12. В основе обучения — перекрестная энтропия ответов «учителя» и «ученика», MLM и L cos — косинусная близость между эмбеддингами на скрытых слоях. Идеи DistilBERT позднее применяли, например, в DistilGPT.
Самый простой из современных методов — имитация модели. Его суть — добиться, чтобы небольшая модель копировала поведение крупной. Для этого «учителя» просят генерировать ответы на разные запросы, а потом на них обучают «ученика».
Маленькие модели отлично подражают большим, но не развивают собственные навыки. Поэтому «ученики» не получают новые знания, зато неплохо справляются с тем, чтобы извлекать имеющиеся. Этот метод подходит, когда нужно натренировать модель под конкретные задачи, например, для суммаризации или разметки данных.
Для дистилляции знаний в «младшую» модель можно использовать метод Chain-of-Thought Prompting. Суть: просить LLM давать не только ответ, но и описывать цепочку рассуждений, которые к нему привели. Как показывают исследования, такой подход существенно увеличивает качество ответов на некоторых датасетах.
К примеру, авторы статьи Distilling Step-by-Step! попросили «ученика» предсказывать не только ответы «учителя», но и обоснования, чередуя запросы. Так маленькая модель тренируется думать как большая LLM, а не просто копирует ответы и поведение — на некоторых датасетах этот подход даёт отличный результат.
Кроме того, можно использовать датасет, составленный по reward-модели. В этом случае «ученик» будет тренироваться не на всех ответах «учителя», а только на тех, которые reward-модель считает хорошими, что тоже может улучшить результаты.
Наконец, можно расширить датасет, на котором учится младшая модель, с помощью генерации с разными параметрами вроде температуры или seed. Набор данных по одному промту получится более разнообразным, а поведение «ученика» в теории должно больше походить на поведение «учителя».
На этом всё. Спасибо, что прочитали! Делитесь опытом и впечатлениями от поста в комментариях! А во второй части текста мы разберём другие методы дистилляции и, конечно, затронем MiniLLM. Оставайтесь на связи!
Разбор помог подготовить
@stuffyNLP
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤7👍3😱1
LIMA
Почти все знания и способности модель получает из претрейна, а алаймент лишь определяет, какое подраспределение форматов использовать для общения с пользователем. Эта гипотеза лежит в основе статьи о LIMA — 65B LLaMa-модели, файнтюненной на 1350 примерах. Авторы заверяют: модель показывает отличные результаты благодаря разнообразным и качественным данным на алайменте. Разберемся, как инженеры к этому пришли.
Тексты в датасете должны быть единообразными (как для ИИ-ассистента), но из разных источников. За данными обращались к Stack Exchange, wikiHow и Reddit, а какую-то часть написали сами. Всё отобрали вручную — с Reddit взяли только ответы с сабреддитов AskReddit и WritingPrompts.
На этапе обучения добавили токен End of Turn для распознавания спикеров, а также residual dropout для роста дропаута от слоя к слою. В оценке использовали pairwise-замеры: брали ответы на один промт от двух моделей, предлагая оценщику выбрать лучший по определённым критериям. Оценщиков заменили на GPT-4 без сильной потери качества — решения LLM и людей совпадали на 78-79%.
По результатам pairwise вышло, что LIMA побеждала Alpaca и DaVinci-003 (рис. 1). При проверке GPT-4 показатели LIMA были выше, чем при проверке человеком (рис. 2).
Авторы статьи обучили LLaMa 7B таким же способом. Но вместо 2 принимали по 5 ответов на промт, а датасет для алаймента расширили до 2000 примеров. Тестирование снова доверили ChatGPT — она оценивала ответы двух 7B-моделей, обученных на «грязных» и «отфильтрованных» данных со Stack Exchange. В первом случае результат оказался 3,3 из 6, во втором — 3,83. Для сравнения, обучение на премодерируемом контенте с wikiHow дало оценку 3,49 (рис. 3). Эти результаты кажутся не совсем валидным — слишком уж мало примеров.
Авторы статьи пришли к выводу, что самое главное — качество и разнообразие датасета, а скейлинг по данным почти не влияет на ответы языковой модели.
Спасибо, что прочитали! Расскажите, что думаете о LIMA, в комментариях.
Разбор подготовил❣ Роман Горб
@stuffyNLP
Почти все знания и способности модель получает из претрейна, а алаймент лишь определяет, какое подраспределение форматов использовать для общения с пользователем. Эта гипотеза лежит в основе статьи о LIMA — 65B LLaMa-модели, файнтюненной на 1350 примерах. Авторы заверяют: модель показывает отличные результаты благодаря разнообразным и качественным данным на алайменте. Разберемся, как инженеры к этому пришли.
Тексты в датасете должны быть единообразными (как для ИИ-ассистента), но из разных источников. За данными обращались к Stack Exchange, wikiHow и Reddit, а какую-то часть написали сами. Всё отобрали вручную — с Reddit взяли только ответы с сабреддитов AskReddit и WritingPrompts.
На этапе обучения добавили токен End of Turn для распознавания спикеров, а также residual dropout для роста дропаута от слоя к слою. В оценке использовали pairwise-замеры: брали ответы на один промт от двух моделей, предлагая оценщику выбрать лучший по определённым критериям. Оценщиков заменили на GPT-4 без сильной потери качества — решения LLM и людей совпадали на 78-79%.
По результатам pairwise вышло, что LIMA побеждала Alpaca и DaVinci-003 (рис. 1). При проверке GPT-4 показатели LIMA были выше, чем при проверке человеком (рис. 2).
Авторы статьи обучили LLaMa 7B таким же способом. Но вместо 2 принимали по 5 ответов на промт, а датасет для алаймента расширили до 2000 примеров. Тестирование снова доверили ChatGPT — она оценивала ответы двух 7B-моделей, обученных на «грязных» и «отфильтрованных» данных со Stack Exchange. В первом случае результат оказался 3,3 из 6, во втором — 3,83. Для сравнения, обучение на премодерируемом контенте с wikiHow дало оценку 3,49 (рис. 3). Эти результаты кажутся не совсем валидным — слишком уж мало примеров.
Авторы статьи пришли к выводу, что самое главное — качество и разнообразие датасета, а скейлинг по данным почти не влияет на ответы языковой модели.
Спасибо, что прочитали! Расскажите, что думаете о LIMA, в комментариях.
Разбор подготовил
@stuffyNLP
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤4👍3🤔1
Слияние моделей — часть I
Как можно догадаться из названия, слияние моделей — или мёржинг — это процесс совмещения двух или более LLM в одну. Самый базовый тип методов — усреднение весов. Например, exponential moving average, предполагающий смешивание веса одной модели на нескольких последних итерациях. Но есть и другие способы — о них и расскажем в этом посте.
SLERP (Spherical Linear Interpolation) предполагает, что мы рассматриваем веса модели не как набор чисел, а как вектора. Схему этого метода вы можете увидеть на картинке выше.
Усреднение происходит за счёт изменения угла между векторами в модели — то есть поворотом весов одной модели в сторону другой. Метод схож с усреднением весов потому что это тоже линейное комбинирование.
Более того, если вектора весов сонаправлены, то SLERP сводится к их усреднению. Магнитуда векторов в SLERP сохраняется. Минус метода в том, что его можно использовать только для слияния двух моделей единовременно.
Здесь стоит сказать о таск-векторах — то есть разнице весов предобученной и файнтюненной модели. При мерджинге файнтюнов одного предобучения можно сливать вместе не веса, а соответствующие таск-вектора.
Следующий метод — TIES. Здесь сперва нужно посчитать таск-вектора моделей и в тех параметрах, где вектора меньше некоего порога, занулить их. Далее следует «разрешить конфликты» между таск-векторами двух LLM: то есть избавиться от противоположных векторов и создать единый. Если изменение направлено в одну сторону, то делать ничего не надо, а если в разные — занулить наименьшее. Наконец, происходит сам мёрж любым способом. TIES так же подходит только для слияния двух моделей.
На этом на сегодня всё. А в следующей части мы расскажем ещё о паре классических методов и о самом популярном сейчас способе мержинга. Оставайтесь на связи и делитесь своим опытом в комментариях!
Душный NLP
Как можно догадаться из названия, слияние моделей — или мёржинг — это процесс совмещения двух или более LLM в одну. Самый базовый тип методов — усреднение весов. Например, exponential moving average, предполагающий смешивание веса одной модели на нескольких последних итерациях. Но есть и другие способы — о них и расскажем в этом посте.
SLERP (Spherical Linear Interpolation) предполагает, что мы рассматриваем веса модели не как набор чисел, а как вектора. Схему этого метода вы можете увидеть на картинке выше.
Усреднение происходит за счёт изменения угла между векторами в модели — то есть поворотом весов одной модели в сторону другой. Метод схож с усреднением весов потому что это тоже линейное комбинирование.
Более того, если вектора весов сонаправлены, то SLERP сводится к их усреднению. Магнитуда векторов в SLERP сохраняется. Минус метода в том, что его можно использовать только для слияния двух моделей единовременно.
Здесь стоит сказать о таск-векторах — то есть разнице весов предобученной и файнтюненной модели. При мерджинге файнтюнов одного предобучения можно сливать вместе не веса, а соответствующие таск-вектора.
Следующий метод — TIES. Здесь сперва нужно посчитать таск-вектора моделей и в тех параметрах, где вектора меньше некоего порога, занулить их. Далее следует «разрешить конфликты» между таск-векторами двух LLM: то есть избавиться от противоположных векторов и создать единый. Если изменение направлено в одну сторону, то делать ничего не надо, а если в разные — занулить наименьшее. Наконец, происходит сам мёрж любым способом. TIES так же подходит только для слияния двух моделей.
На этом на сегодня всё. А в следующей части мы расскажем ещё о паре классических методов и о самом популярном сейчас способе мержинга. Оставайтесь на связи и делитесь своим опытом в комментариях!
Душный NLP
🔥9👍7❤5
Слияние моделей — часть II
В прошлый раз мы рассмотрели несколько классических методов мёржинга: усреднение весов, SLERP и TIES. В этом посте завершим обзор ещё двумя не менее интересным способами.
Итак, метод DARE схож с TIES, но избавляются здесь не от слишком маленьких, а от случайных изменений. Можно выкинуть до 90% значений без ущерба для качества. Дальше нужно действовать как в методе SLERP, о котором мы рассказывали в прошлом посте, а затем необходимо скалирование весов, чтобы сохранить их среднюю магнитуду.
К классическим (но извращённым) методам слияния также относится Passthrough. Модели, созданные с его помощью, ещё называют «Франкенштейнами» — и это неудивительно. Passthrough предполагает простую замену слоёв одной модели слоями другой.
Самый популярный метод сейчас — это MoE (Mixture of Experts). Суть его заключается в замене FFN-слоев на «смесь экспертов». В таком случае каждый токен отправляется «эксперту», которому больше всего подходит. Распределением занимается роутер. Его можно инициализировать случайно и дообучить. Схему можно увидеть выше.
Но есть вариант и без дообучения. Скажем, у нас есть несколько моделей. Для каждой из них выберем промты, на которых она лучше всего работает. Для промтов можно предпосчитать среднее скрытое представление, а затем сравнить со скрытым представлением токенов, которые подаются в модель. Если они схожи — эксперты получают соответствующие токены. А чтобы определить похожесть достаточно прибегнуть к простому скалярному произведению.
Мы перечислили далеко не все методы мёржа — эта сфера развивается и эволюционирует как живой организм. К тому же, мы не углублялись в подробности каждого способа, а лишь описали их в общих чертах. Рассказывайте в комментариях, какими вы пользовались сами и какие вам кажутся самыми эффективными?
Душный NLP
В прошлый раз мы рассмотрели несколько классических методов мёржинга: усреднение весов, SLERP и TIES. В этом посте завершим обзор ещё двумя не менее интересным способами.
Итак, метод DARE схож с TIES, но избавляются здесь не от слишком маленьких, а от случайных изменений. Можно выкинуть до 90% значений без ущерба для качества. Дальше нужно действовать как в методе SLERP, о котором мы рассказывали в прошлом посте, а затем необходимо скалирование весов, чтобы сохранить их среднюю магнитуду.
К классическим (но извращённым) методам слияния также относится Passthrough. Модели, созданные с его помощью, ещё называют «Франкенштейнами» — и это неудивительно. Passthrough предполагает простую замену слоёв одной модели слоями другой.
Самый популярный метод сейчас — это MoE (Mixture of Experts). Суть его заключается в замене FFN-слоев на «смесь экспертов». В таком случае каждый токен отправляется «эксперту», которому больше всего подходит. Распределением занимается роутер. Его можно инициализировать случайно и дообучить. Схему можно увидеть выше.
Но есть вариант и без дообучения. Скажем, у нас есть несколько моделей. Для каждой из них выберем промты, на которых она лучше всего работает. Для промтов можно предпосчитать среднее скрытое представление, а затем сравнить со скрытым представлением токенов, которые подаются в модель. Если они схожи — эксперты получают соответствующие токены. А чтобы определить похожесть достаточно прибегнуть к простому скалярному произведению.
Мы перечислили далеко не все методы мёржа — эта сфера развивается и эволюционирует как живой организм. К тому же, мы не углублялись в подробности каждого способа, а лишь описали их в общих чертах. Рассказывайте в комментариях, какими вы пользовались сами и какие вам кажутся самыми эффективными?
Душный NLP
❤8👍5🔥5
Редактирование знаний внутри LLM
В постоянно изменяющихся условиях важно поддерживать актуальность информации, которой обладают LLM. Остро встаёт вопрос редактирования знаний модели — его и рассматривают авторы сегодняшней статьи.
В ней представлено три типа методов редактирования знаний. Первый — обращение к внешним знаниям. В этом случае модель получает новую информацию в виде контекстов, а затем пользуется ими, когда нужно ответить на вопрос.
Вначале собирают набор демонстраций:
+ копирования — показываем модели, что надо уметь повторять факты;
+ обновления — не только повтор факта, но и перефразирование;
+ сохранения — показываем LLM, что при изменении одного факта другие не должны меняться.
Далее эти демонстрации добавляются в текущий промт и отправляются на вход.
Второй тип — внедрение знаний. Это добавление новых параметров, которые позволяют выстроить связи между старыми и новыми знаниями. Суть заключается в создании нового feed forward-слоя, который будет меньше первого. Веса на втором определяются файнтюнингом по текстам с изменёнными знаниями.
Третий вид — собственно, редактирование. Новые параметры при этом не добавляются, но меняются данные, которыми модель уже обладает. Существует два способа сделать это:
+ Meta Learning предполагает обучение гиперсетки, предсказывающей изменения параметров, которые необходимо сделать. Исходя из этого мы обновляем веса и минимизируем loss на новых данных.
+ Location-then-Edit предполагает определение конкретного места в модели, где сосредоточены знания о каком-либо факте. Для этого мы наблюдаем за тем, как меняются градиенты.
Эффективность изменения знаний авторы предлагают измерять с помощью специального бенчмарка. Он состоит из шести датасетов, проверяющих разные аспекты: вставку, добавление, изменение и удаление знаний. Датасет доступен по этой ссылке.
Спасибо за внимание! Делитесь мыслями по теме в комментариях :)
Разбор подготовил❣ Артём Сафин
Душный NLP
В постоянно изменяющихся условиях важно поддерживать актуальность информации, которой обладают LLM. Остро встаёт вопрос редактирования знаний модели — его и рассматривают авторы сегодняшней статьи.
В ней представлено три типа методов редактирования знаний. Первый — обращение к внешним знаниям. В этом случае модель получает новую информацию в виде контекстов, а затем пользуется ими, когда нужно ответить на вопрос.
Вначале собирают набор демонстраций:
+ копирования — показываем модели, что надо уметь повторять факты;
+ обновления — не только повтор факта, но и перефразирование;
+ сохранения — показываем LLM, что при изменении одного факта другие не должны меняться.
Далее эти демонстрации добавляются в текущий промт и отправляются на вход.
Второй тип — внедрение знаний. Это добавление новых параметров, которые позволяют выстроить связи между старыми и новыми знаниями. Суть заключается в создании нового feed forward-слоя, который будет меньше первого. Веса на втором определяются файнтюнингом по текстам с изменёнными знаниями.
Третий вид — собственно, редактирование. Новые параметры при этом не добавляются, но меняются данные, которыми модель уже обладает. Существует два способа сделать это:
+ Meta Learning предполагает обучение гиперсетки, предсказывающей изменения параметров, которые необходимо сделать. Исходя из этого мы обновляем веса и минимизируем loss на новых данных.
+ Location-then-Edit предполагает определение конкретного места в модели, где сосредоточены знания о каком-либо факте. Для этого мы наблюдаем за тем, как меняются градиенты.
Эффективность изменения знаний авторы предлагают измерять с помощью специального бенчмарка. Он состоит из шести датасетов, проверяющих разные аспекты: вставку, добавление, изменение и удаление знаний. Датасет доступен по этой ссылке.
Спасибо за внимание! Делитесь мыслями по теме в комментариях :)
Разбор подготовил
Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍14❤1