ORPO: Monolithic Preference Optimization without Reference Model
кому в алайменте жить хорошо
как устроен пайплайн сейчас - есть модель, файнтюним ее при помощи supervised objective на домене/таске/вотевер, но потом еще надо и обучать на преференциях чтобы норм результат был? почему нужен последний пункт, если во время обучения с учителем мы и так отдаем предпочтение тому, что называем таргетом?
и действительно интересный вопрос - тк во время SFT и происходит неявное обучение “преференций” - при минимизации кросс энтропии мы выдаем бОльшее предпочтение таргет токенам. да, но при этом занижаются логиты всех остальных токенов из вокабуляра. а потому в результате модель выучит не прям то, что мы хотим (адекватного чат-бота например), а нечто, что способно по грамматике и структуре напоминать что-то, что пытается выдать себя за чат-бота
и авторы дополнительно эмпирически такое показывают, ну оттого и алаймент нужен на уровне легкой теории, а не просто по эмпирическим соображениям + из-за факта, что SFT (reference) модель не очень умеет в преференции, они совмещают этапы супервайзд файнтюнинга с обучением на эти самые преференции и получают ORPO
для этого они на этапе SFT напрямую добавляют preference penalty, который не зависит от референс модели, а только от параметров текущего состояния сетки, и он оптимизирует что-то вроде логарифма отношения отношений вероятностей (звучит сложно но прикольно, в статье так же добавили пункт почему считают так много делений оправданным)
результаты выглядят более-менее сносно, мб и на большом скейле моделек может заработать + выложили код и веса
👀LINK
пока читал статью, понял, что не умею в школьную математику - на последних 2 картинках выводят градиент reference penalty и пишут, что чем меньше P(y|x), тем больше коэффициент для градиента. имхо это не так - чем меньше P(y|x), тем больше выражение в знаменателе и значит коэффициент этот для градиента уменьшается [то есть надо наоборот бОльший P(y|x), но я редко хожу на пары по математике и могу ошибаться]
кому в алайменте жить хорошо
как устроен пайплайн сейчас - есть модель, файнтюним ее при помощи supervised objective на домене/таске/вотевер, но потом еще надо и обучать на преференциях чтобы норм результат был? почему нужен последний пункт, если во время обучения с учителем мы и так отдаем предпочтение тому, что называем таргетом?
и действительно интересный вопрос - тк во время SFT и происходит неявное обучение “преференций” - при минимизации кросс энтропии мы выдаем бОльшее предпочтение таргет токенам. да, но при этом занижаются логиты всех остальных токенов из вокабуляра. а потому в результате модель выучит не прям то, что мы хотим (адекватного чат-бота например), а нечто, что способно по грамматике и структуре напоминать что-то, что пытается выдать себя за чат-бота
и авторы дополнительно эмпирически такое показывают, ну оттого и алаймент нужен на уровне легкой теории, а не просто по эмпирическим соображениям + из-за факта, что SFT (reference) модель не очень умеет в преференции, они совмещают этапы супервайзд файнтюнинга с обучением на эти самые преференции и получают ORPO
для этого они на этапе SFT напрямую добавляют preference penalty, который не зависит от референс модели, а только от параметров текущего состояния сетки, и он оптимизирует что-то вроде логарифма отношения отношений вероятностей (звучит сложно но прикольно, в статье так же добавили пункт почему считают так много делений оправданным)
результаты выглядят более-менее сносно, мб и на большом скейле моделек может заработать + выложили код и веса
👀LINK
RWKV: Reinventing RNNs for the Transformer Era
уже упоминали эту интересную статью, своего рода тоже база
можно ли попробовать пересобрать рнн в контексте трансформера и получить преимущества в виде параллелизации обучения (трансформер) и рекурсивного инференса, где в памяти можно хранить только один объект скрытой репрезентации (рнн)? - да, получится свертка
so, авторы отталкиваются от идеи attention-free трансформеров, где outer product (per-token attention) между запросами и ключами заменяют на сумму между обучаемой матрицей W и ключами K - якобы предполагают, что в этой матрице и так может содержаться вся релевантная инфа, которую просто надо сложить с ключами (что уже не так конечно, ибо произведение в линале куда мощнее сложения)
сначала они добавляют относительное позиционное кодирование в вычислении “attention-free аттеншна” к этой обучаемой матрице W, а затем добавляют новые понятия, аналогичные ключам K и значениям V + receptance вектор R как приемник информации прошлого (не путать с хидден стейтом, тут он комплексный и зависит от всех этих терминов) → метод и назвали по первым буквам этих модулей - RWKV
разделяют на два подэтапа - где time mixing & channel mixing (хотя и там и там миксуют каналы но не суть), не что иное, как FFN, в которые скармливаем токены на данном и предыдущем таймстепах + разные нелинейности применяем. а в качестве хидден стейта работает WKV operator, который очень хитровыделанно оперирует над предыдущими таймстепами и сохраняет идею attention-free трансформеров
что в итоге? получаем, что последовательность обрабатывается в линию относительно ее длины, мы можем это дело параллелизовать во время обучения (time-parallel mode, имеет аналогии со свертками если не полное сходство) и инферить реккурентно (отголосок ссм, которые тоже во время обучения параллелятся сверткой) + реализовали кстати куда кернелы для пущей эффективности
графики перформанса можете посмотреть в статье, вроде бы неплохо, но доля скепсиса у меня всегда остается (хоть я и не нашел как ее применить)
также есть интересные графики в аппендиксе, показывающие насколько значима информация из прошлого для разных слоев модели + есть хитмапа, которая демонстрирует интуитивно “продвижение хидден стейта по последовательности для генерации последнего токена” (в виде упоминания Эйфеля и генерации слова Париж)
👀LINK
уже упоминали эту интересную статью, своего рода тоже база
можно ли попробовать пересобрать рнн в контексте трансформера и получить преимущества в виде параллелизации обучения (трансформер) и рекурсивного инференса, где в памяти можно хранить только один объект скрытой репрезентации (рнн)? - да, получится свертка
so, авторы отталкиваются от идеи attention-free трансформеров, где outer product (per-token attention) между запросами и ключами заменяют на сумму между обучаемой матрицей W и ключами K - якобы предполагают, что в этой матрице и так может содержаться вся релевантная инфа, которую просто надо сложить с ключами (что уже не так конечно, ибо произведение в линале куда мощнее сложения)
сначала они добавляют относительное позиционное кодирование в вычислении “attention-free аттеншна” к этой обучаемой матрице W, а затем добавляют новые понятия, аналогичные ключам K и значениям V + receptance вектор R как приемник информации прошлого (не путать с хидден стейтом, тут он комплексный и зависит от всех этих терминов) → метод и назвали по первым буквам этих модулей - RWKV
разделяют на два подэтапа - где time mixing & channel mixing (хотя и там и там миксуют каналы но не суть), не что иное, как FFN, в которые скармливаем токены на данном и предыдущем таймстепах + разные нелинейности применяем. а в качестве хидден стейта работает WKV operator, который очень хитровыделанно оперирует над предыдущими таймстепами и сохраняет идею attention-free трансформеров
что в итоге? получаем, что последовательность обрабатывается в линию относительно ее длины, мы можем это дело параллелизовать во время обучения (time-parallel mode, имеет аналогии со свертками если не полное сходство) и инферить реккурентно (отголосок ссм, которые тоже во время обучения параллелятся сверткой) + реализовали кстати куда кернелы для пущей эффективности
графики перформанса можете посмотреть в статье, вроде бы неплохо, но доля скепсиса у меня всегда остается (хоть я и не нашел как ее применить)
также есть интересные графики в аппендиксе, показывающие насколько значима информация из прошлого для разных слоев модели + есть хитмапа, которая демонстрирует интуитивно “продвижение хидден стейта по последовательности для генерации последнего токена” (в виде упоминания Эйфеля и генерации слова Париж)
👀LINK
Hallucination-Free? Assessing the Reliability of Leading AI Legal Research Tools
сборная солянка, где можно покритиковать и академиков, которые писали статью, и компании, которые оные прожаривали
идея RAG моделей звучит очень живо, поскольку совмещает достоверные факты (из базы документов) с возможностью ллмок обернуть это все в связный текст. но может ли такая комбинация работать удовлетворительно и без косяков в доменах, где нужна чрезвычайная точность и достоверность высказываний? например, в судебном деле и около того
вот авторы и решили протестировать AI Legal Research Tools - сервисы для профессионалов (адвокатов, судей и всего такого), который поможет, по рекламным заявлениям, получать полную и достоверную информацию по любому проф запросу
но (удивительно) это не так. ух-ты ах-ты, оказывается датабаза из эмбеддинг векторов не может заменить 4 года обучения на юридическом и опыт адвокатской практики (так то это и не могут сделать продвинутые search engines, которые развивались 50 лет, но у нас нейронки гоу бррррр)
можете почитать заявления компаний о продукте, как ловко писать заявления об универсальной аи тулзе
ну а в целом результаты очень насыщенные и авторы интересно определяют недосказанность/неправильность/необоснованность ответа и от этого приходят к выводу о галлюцинировании РАГ моделек (банальный пример - идет вопрос про несуществующего судью, а модель отвечает что-то внятное с реальными ссылками на источники)
но есть доеб к авторам - непонятно недовольство по поводу того, что им не предоставили доступа нормально проевалить их же продукты - а компании и не обязаны такое делать, как мне кажется, даже после того, как вышли первые результаты статьи с явной критикой (потому возможно они и евалили не ту систему - Practical Law больше заявляет о себе как поисковой механизм нежели полноценный ассистент, который преподносит все на блюдечке)
👀LINK
сборная солянка, где можно покритиковать и академиков, которые писали статью, и компании, которые оные прожаривали
идея RAG моделей звучит очень живо, поскольку совмещает достоверные факты (из базы документов) с возможностью ллмок обернуть это все в связный текст. но может ли такая комбинация работать удовлетворительно и без косяков в доменах, где нужна чрезвычайная точность и достоверность высказываний? например, в судебном деле и около того
вот авторы и решили протестировать AI Legal Research Tools - сервисы для профессионалов (адвокатов, судей и всего такого), который поможет, по рекламным заявлениям, получать полную и достоверную информацию по любому проф запросу
но (удивительно) это не так. ух-ты ах-ты, оказывается датабаза из эмбеддинг векторов не может заменить 4 года обучения на юридическом и опыт адвокатской практики (так то это и не могут сделать продвинутые search engines, которые развивались 50 лет, но у нас нейронки гоу бррррр)
можете почитать заявления компаний о продукте, как ловко писать заявления об универсальной аи тулзе
ну а в целом результаты очень насыщенные и авторы интересно определяют недосказанность/неправильность/необоснованность ответа и от этого приходят к выводу о галлюцинировании РАГ моделек (банальный пример - идет вопрос про несуществующего судью, а модель отвечает что-то внятное с реальными ссылками на источники)
но есть доеб к авторам - непонятно недовольство по поводу того, что им не предоставили доступа нормально проевалить их же продукты - а компании и не обязаны такое делать, как мне кажется, даже после того, как вышли первые результаты статьи с явной критикой (потому возможно они и евалили не ту систему - Practical Law больше заявляет о себе как поисковой механизм нежели полноценный ассистент, который преподносит все на блюдечке)
👀LINK
🔥3❤2 1 1 1
Be like a Goldfish, Don't Memorize! Mitigating Memorization in Generative LLMs
помимо проблем с галлюцинированием, у ллм есть противоположная проблема в меморизации длинных последовательностей, что может быть критично в плане копирайта или приватности тренировочных данных (не говоря о том что тренили огромную ллм а получили функцию которая копирует строчки из датабазы, yikes)
авторы смогли добавить лосс, который не влияет на основные способности к генерализации модели (обучали с нуля и сравнивали на валидации) + помогает довольно эффективно справиться с проблемой запоминания ⇒ получился голдфиш лосс
в чем суть? давайте накладывать рандомную маску на последовательность, которая будет с вероятностью 1/k убирать токен из основного лосса (в сетапе естественного языка k = 3, 4 очень даже норм). убирать в том плане, что для этих токенов не будет считаться log-likelihood для предикта следующего токена, но они будут участвовать в лоссе для других токенов, чтобы не нарушалась структура последовательностей и языка. и это работает! просто и со вкусом, так еще и просто интуитивно обосновано, подкрепляя это все эмпирикой
так же есть усложнение с хешированием - мол, порой попадаются в трейне одни и те же последовательности, которые слегка отличаются посимвольно. для этого и резонно применять хеш для h предыдущих токенов, и в зависимости от этого маскировать (h+1)-ый токен (также есть интересные рассуждения по поводу подбора h - не слишком маленьким, чтобы не повредить запоминанию модели н-грамм, но и не слишком большим, чтобы совсем не потерялся замысел → подобрали h = 13)
к тому же меморизация пропадает даже во время адверсариал атак, во время которых есть доступ к трейн семплам или бим серч вариантам декодинга, что вообще нетривиально и мощно
по скейлу моделек - 1В и 7В, неидеально но вполне приемлемо. статья вообще очень классная и руки так и чешутся заимплементить такое самому
еще у статьи очень классный лор - хорошо вписывают другие темы в метафору goldfish loss: sharks in the water (adversarial attack), fish oil vs snake oil (empiricism vs theory) + есть код но там надо черту ногу сломать чтобы разобраться или как в пословице говорится
👀LINK
помимо проблем с галлюцинированием, у ллм есть противоположная проблема в меморизации длинных последовательностей, что может быть критично в плане копирайта или приватности тренировочных данных (не говоря о том что тренили огромную ллм а получили функцию которая копирует строчки из датабазы, yikes)
авторы смогли добавить лосс, который не влияет на основные способности к генерализации модели (обучали с нуля и сравнивали на валидации) + помогает довольно эффективно справиться с проблемой запоминания ⇒ получился голдфиш лосс
в чем суть? давайте накладывать рандомную маску на последовательность, которая будет с вероятностью 1/k убирать токен из основного лосса (в сетапе естественного языка k = 3, 4 очень даже норм). убирать в том плане, что для этих токенов не будет считаться log-likelihood для предикта следующего токена, но они будут участвовать в лоссе для других токенов, чтобы не нарушалась структура последовательностей и языка. и это работает! просто и со вкусом, так еще и просто интуитивно обосновано, подкрепляя это все эмпирикой
так же есть усложнение с хешированием - мол, порой попадаются в трейне одни и те же последовательности, которые слегка отличаются посимвольно. для этого и резонно применять хеш для h предыдущих токенов, и в зависимости от этого маскировать (h+1)-ый токен (также есть интересные рассуждения по поводу подбора h - не слишком маленьким, чтобы не повредить запоминанию модели н-грамм, но и не слишком большим, чтобы совсем не потерялся замысел → подобрали h = 13)
к тому же меморизация пропадает даже во время адверсариал атак, во время которых есть доступ к трейн семплам или бим серч вариантам декодинга, что вообще нетривиально и мощно
по скейлу моделек - 1В и 7В, неидеально но вполне приемлемо. статья вообще очень классная и руки так и чешутся заимплементить такое самому
еще у статьи очень классный лор - хорошо вписывают другие темы в метафору goldfish loss: sharks in the water (adversarial attack), fish oil vs snake oil (empiricism vs theory) + есть код но там надо черту ногу сломать чтобы разобраться или как в пословице говорится
👀LINK
TransformerFAM: Feedback attention is working memory
еще одна попытка заново изобрести рнн в контексте трансформера
как сейчас принято обрабатывать длинные последовательности - через скользящее окно и по блокам (хардвейрный аспект), информация передается по предыдущим токенам для каузального аттна и по предыдущим слоям. однако авторы немножечко знают за нейробиологию, где есть концепция рабочей памяти (working memory)
на уровне биологического нейрона она описывается как что-то вроде импульса, который периодически возвращается к этому самому нейрону, отчего появляется связь, которая постоянно фигурирует в нашей голове по необходимости. как только необходимость уходит, этот сигнал тоже пропадает
авторы почерпнули эту идею и решили воспроизвести это через связь токенов на том же уровне глубины в сетке. сделали это через обучаемые токены, которые вбирают в себя поблочно информацию о предыдущих токенах ⇒ блок компрессится в токены и таким образом контекст предыдущих блоков подается в трансформер в счет нескольких токенов
однако, псевдокод как будто немного противоречит основной концепции воркинг мемори. эти самые токены представляют из себя память с предыдущих блоков, при том последующие воркинг мемори токены могут обращаться к таким же токенам с предыдущих блоков (напоминает рнн с хидден стейтами, не так ли? прям то же самое). отсюда возникает интуиция, что на вход операции внимания мы можем подавать эти мемори токены и токены с данного блока, но в алгоритме к этому добавляются обычные инпут токены с предыдущих блоков. то есть 2х истории подается аттеншну - появляется послевкусие костыльности, but if it works let it work
так же на ощущение костыльности намекает тот факт, что если увеличивать количество мемори токенов (64 → 256), то перформанс ухудшается. связывают с нейробиологией, но это забавно. неужели в 64 токенах может скрываться вся необходимая воркинг мемори, почему не 52, или скорее перформанс ухудшился из-за жесткой нестабильности?
и есть кстати подозрения, что воркинг мемори работает из-за обильного количества резидуал коннекшнов + так же авторы пишут, что не нужны дополнительные веса (кроме как новых обучаемых токенов) для операции аттеншна, что странно, тк по сути эти самые токены проходят дважды через один и тот же слой (хотя тут я могу ошибаться но судя по операциям так оно и есть) ⇒ при бекворде проекция из одного пространства в другое или вотевер ослабевает (что бы это ни значило)
имхо идея вряд ли в долгосрок работает. она лучше block-wise sliding window attention (и в принципе с ним авторы и сравниваются), но есть много других вопросов
кстати есть очень классные пункты в аппендиксе о том, что они пробовали и не сработало + вывод они начали с описания фильма Нолана Мементо. за это прям респект
👀LINK
еще одна попытка заново изобрести рнн в контексте трансформера
как сейчас принято обрабатывать длинные последовательности - через скользящее окно и по блокам (хардвейрный аспект), информация передается по предыдущим токенам для каузального аттна и по предыдущим слоям. однако авторы немножечко знают за нейробиологию, где есть концепция рабочей памяти (working memory)
на уровне биологического нейрона она описывается как что-то вроде импульса, который периодически возвращается к этому самому нейрону, отчего появляется связь, которая постоянно фигурирует в нашей голове по необходимости. как только необходимость уходит, этот сигнал тоже пропадает
авторы почерпнули эту идею и решили воспроизвести это через связь токенов на том же уровне глубины в сетке. сделали это через обучаемые токены, которые вбирают в себя поблочно информацию о предыдущих токенах ⇒ блок компрессится в токены и таким образом контекст предыдущих блоков подается в трансформер в счет нескольких токенов
однако, псевдокод как будто немного противоречит основной концепции воркинг мемори. эти самые токены представляют из себя память с предыдущих блоков, при том последующие воркинг мемори токены могут обращаться к таким же токенам с предыдущих блоков (напоминает рнн с хидден стейтами, не так ли? прям то же самое). отсюда возникает интуиция, что на вход операции внимания мы можем подавать эти мемори токены и токены с данного блока, но в алгоритме к этому добавляются обычные инпут токены с предыдущих блоков. то есть 2х истории подается аттеншну - появляется послевкусие костыльности, but if it works let it work
так же на ощущение костыльности намекает тот факт, что если увеличивать количество мемори токенов (64 → 256), то перформанс ухудшается. связывают с нейробиологией, но это забавно. неужели в 64 токенах может скрываться вся необходимая воркинг мемори, почему не 52, или скорее перформанс ухудшился из-за жесткой нестабильности?
и есть кстати подозрения, что воркинг мемори работает из-за обильного количества резидуал коннекшнов + так же авторы пишут, что не нужны дополнительные веса (кроме как новых обучаемых токенов) для операции аттеншна, что странно, тк по сути эти самые токены проходят дважды через один и тот же слой (хотя тут я могу ошибаться но судя по операциям так оно и есть) ⇒ при бекворде проекция из одного пространства в другое или вотевер ослабевает (что бы это ни значило)
имхо идея вряд ли в долгосрок работает. она лучше block-wise sliding window attention (и в принципе с ним авторы и сравниваются), но есть много других вопросов
кстати есть очень классные пункты в аппендиксе о том, что они пробовали и не сработало + вывод они начали с описания фильма Нолана Мементо. за это прям респект
👀LINK