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
Reinforced Self-Training (ReST) for Language Modeling
как устроен рлхф сейчас - есть ревард модель, которая выдает ревард под каждый аутпут ллм, а процесс улучшения выглядит через дообучение со связкой на эту награду. то есть цикл выглядит так ллм → ревард модель → ллм (условно). что тут может быть непрактичного? пожалуй, одни из больших таких пунктов - скорость и сложность сборки датасета, поскольку обновление модели идет в онлайн стиле
но можно ли обновлять модель в более оффлайновой манере? по аналогии с оффлайн рл и онлайн рл, авторы интересно реформулируют процесс рлхф на задаче перевода. есть изначальный “оффлайн” датасет с супервайзд разметкой, так и почему бы не использовать разметку совместно с генерацией модели?
и это работает! если фильтровать аутпуты модели в соответствии с функцией награды (которую авторы кстати так и не обозначили, просто показали, что она есть) ⇒ итеративно обновляем датасет, который лучше и лучше по награде, и сами аутпуты улучшаются
а как именно фильтровать? да просто авторы отсекают по трешхолду и уже это дает буста
основная идея понятна - проста и практична, но во время чтения появились вопросики
- есть ощущение, что подбирать ревард функцию надо оочень качественно - будь то эвристика или своя модель, а то интуитивно может случиться закон Гудхарта
- выглядят немного костыльно эмпирические выводы, что таких итераций надо делать не более 3 - потому что размер датасета остается фиксированным, а семплы в нем периодически фильтруются ⇒ в какой-то момент можем попасть в ситуацию, где вся изначальная разметка пропадет и обучение будет только на своих аутпутах (distributional shift, который в совокупности с неоптимальным ревардом будет ухудшать генерацию). то есть надо жестко подгонять ревард функцию под имеющийся датасет либо вставлять какие-то коллбеки для нивелирования такого
- в Fig. 3 & Table 1 есть интересный эксперимент под обозначением “G = 1, I = 0”, i.e. Grow step = 1, Improve step = 0. то есть 0 раз файнтюнили на отфильтрованных генерациях и 1 раз расширили датасет (добавили к супервайзд датасету свои генерации). и по графикам результат улучшился. еще раз повторю - авторы натренировали с нуля модель, какое-то время пообучали, часть супервайзд разметки заменили на аутпуты модели (которые скорее всего хуже) и получили прирост. ват? звучит супер неинтуитивно (но я могу ошибаться и возможно это супер открытие, на которое не делают акцент авторы, а могли бы)
помимо последнего пункта, где по сути ухудшили датасет и улучшился результат, в целом папира норм. я бы попробовал применить или дальше потыкаться в этом направлении
👀LINK
как устроен рлхф сейчас - есть ревард модель, которая выдает ревард под каждый аутпут ллм, а процесс улучшения выглядит через дообучение со связкой на эту награду. то есть цикл выглядит так ллм → ревард модель → ллм (условно). что тут может быть непрактичного? пожалуй, одни из больших таких пунктов - скорость и сложность сборки датасета, поскольку обновление модели идет в онлайн стиле
но можно ли обновлять модель в более оффлайновой манере? по аналогии с оффлайн рл и онлайн рл, авторы интересно реформулируют процесс рлхф на задаче перевода. есть изначальный “оффлайн” датасет с супервайзд разметкой, так и почему бы не использовать разметку совместно с генерацией модели?
и это работает! если фильтровать аутпуты модели в соответствии с функцией награды (которую авторы кстати так и не обозначили, просто показали, что она есть) ⇒ итеративно обновляем датасет, который лучше и лучше по награде, и сами аутпуты улучшаются
а как именно фильтровать? да просто авторы отсекают по трешхолду и уже это дает буста
основная идея понятна - проста и практична, но во время чтения появились вопросики
- есть ощущение, что подбирать ревард функцию надо оочень качественно - будь то эвристика или своя модель, а то интуитивно может случиться закон Гудхарта
- выглядят немного костыльно эмпирические выводы, что таких итераций надо делать не более 3 - потому что размер датасета остается фиксированным, а семплы в нем периодически фильтруются ⇒ в какой-то момент можем попасть в ситуацию, где вся изначальная разметка пропадет и обучение будет только на своих аутпутах (distributional shift, который в совокупности с неоптимальным ревардом будет ухудшать генерацию). то есть надо жестко подгонять ревард функцию под имеющийся датасет либо вставлять какие-то коллбеки для нивелирования такого
- в Fig. 3 & Table 1 есть интересный эксперимент под обозначением “G = 1, I = 0”, i.e. Grow step = 1, Improve step = 0. то есть 0 раз файнтюнили на отфильтрованных генерациях и 1 раз расширили датасет (добавили к супервайзд датасету свои генерации). и по графикам результат улучшился. еще раз повторю - авторы натренировали с нуля модель, какое-то время пообучали, часть супервайзд разметки заменили на аутпуты модели (которые скорее всего хуже) и получили прирост. ват? звучит супер неинтуитивно (но я могу ошибаться и возможно это супер открытие, на которое не делают акцент авторы, а могли бы)
помимо последнего пункта, где по сути ухудшили датасет и улучшился результат, в целом папира норм. я бы попробовал применить или дальше потыкаться в этом направлении
👀LINK