Diversifying Deep Ensembles: A Saliency Map Approach for Enhanced OOD Detection, Calibration, and Accuracy
Ансамбли показывают отличные результаты при оценке неопределенности и детекции OOD семплов. Но как еще больше повысить их производительность?🤔
Ранее, метод DICE ввел условную избыточную состязательную оценку, чтобы сбалансировать разнообразие и точность отдельных моделей. В новой статье про диверфисикацию ансамблей через карты внимания авторы продолжают это направление работы с помощью своего подхода
Метод называется Saliency-Diversified Deep Ensemble (SDDE). Минимизируя сходство между картами внимания📹 разных моделей в ансамбле, мы заставляем модели использовать для предсказаний разные признаки. Все супер просто и с минимальным оверхедом на тренировку
SDDE устанавливает SOTA🔥 в OOD детекции, сохраняя высокую точность и калибровку на ImageNet и CIFAR10/100. Точность зачастую даже лучше чем у обычных ансамблей, что дает право использовать метод в обычной классификации. Вообще хайп
Дополнительно, в сочетании с OOD данными на тренировке как в Outlier Exposure, производительность SDDE становится еще лучше
Код есть, что всегда круто
👀 LINK
🌟 CODE
Ансамбли показывают отличные результаты при оценке неопределенности и детекции OOD семплов. Но как еще больше повысить их производительность?
Ранее, метод DICE ввел условную избыточную состязательную оценку, чтобы сбалансировать разнообразие и точность отдельных моделей. В новой статье про диверфисикацию ансамблей через карты внимания авторы продолжают это направление работы с помощью своего подхода
Метод называется Saliency-Diversified Deep Ensemble (SDDE). Минимизируя сходство между картами внимания
SDDE устанавливает SOTA
Дополнительно, в сочетании с OOD данными на тренировке как в Outlier Exposure, производительность SDDE становится еще лучше
Код есть, что всегда круто
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👏3❤🔥2
Efficient Streaming Language Models with Attention Sinks
как оказывается, есть интересны phenomenon в механизме внимания - предположим, у нас есть некоторое количество баланса/бюджета/энергии, которое в аттеншне распределяется по токенам (и после софтмакса этот бюджет суммируется в 1).
и в идеальном мире мы представляем, что у нас все распределяется адекватно, иначе можно перефразировать Священное Писание и выразиться так: каждому токену воздастся за релевантный контекст его🤔
но на практике наблюдаем немного другое - на более глубоких слоях тот “фиксированный бюджет” оказывается избыточным, а его надо куда-то сливать в системе, ну и в нейронке это сливается в первые токены (в основном в первый)
и вот авторы предлагают стабилизировать ситуацию:
- не меняя первый токен из всей длиннющей последовательности, по которой мы привыкли пробегаться трансформером при помощи скользящего окна
- менять первый токен в инпуте, который мы скармливаем модели, вообще на что угодно (например на \n)
- сделать обучаемый фиктивный токен, который будет принимать в себя всю вот эту избыточную энергию аттеншна и ставить его всегда на первое место (в обратном случае работает хуже)
все пункты выше можно назвать attention sinks ⇒ стабилизирует инференс, да и в скорости нехилый прирост дает на стриминговом сетапе
есть только момент, который я не могу понять в папире -на последней картинке параграф, где идет пояснение про поз энкодинг в кв кэше. там подаются в общем относительные позиции внутри кеша.
оттого и встает вопрос - а есть ли смысл в принципе создавать вот эти якоря для аттеншна, если можно сразу вот так нативно исправить позицию в позиционной кодировке для кв кеша?
по идее тогда свойства сохранятся, ведь, как сами показали авторы, в аттеншн синке больше влияет позиция, чем сам токен (оттого и вместо этого токена можно вставить что угодно). могу быть не прав, но хз-хз
👀LINK
как оказывается, есть интересны phenomenon в механизме внимания - предположим, у нас есть некоторое количество баланса/бюджета/энергии, которое в аттеншне распределяется по токенам (и после софтмакса этот бюджет суммируется в 1).
и в идеальном мире мы представляем, что у нас все распределяется адекватно, иначе можно перефразировать Священное Писание и выразиться так: каждому токену воздастся за релевантный контекст его
но на практике наблюдаем немного другое - на более глубоких слоях тот “фиксированный бюджет” оказывается избыточным, а его надо куда-то сливать в системе, ну и в нейронке это сливается в первые токены (в основном в первый)
и вот авторы предлагают стабилизировать ситуацию:
- не меняя первый токен из всей длиннющей последовательности, по которой мы привыкли пробегаться трансформером при помощи скользящего окна
- менять первый токен в инпуте, который мы скармливаем модели, вообще на что угодно (например на \n)
- сделать обучаемый фиктивный токен, который будет принимать в себя всю вот эту избыточную энергию аттеншна и ставить его всегда на первое место (в обратном случае работает хуже)
все пункты выше можно назвать attention sinks ⇒ стабилизирует инференс, да и в скорости нехилый прирост дает на стриминговом сетапе
есть только момент, который я не могу понять в папире -
оттого и встает вопрос - а есть ли смысл в принципе создавать вот эти якоря для аттеншна, если можно сразу вот так нативно исправить позицию в позиционной кодировке для кв кеша?
по идее тогда свойства сохранятся, ведь, как сами показали авторы, в аттеншн синке больше влияет позиция, чем сам токен (оттого и вместо этого токена можно вставить что угодно). могу быть не прав, но хз-хз
👀LINK
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍2🐳2❤1🍌1
Дайджест по всем махинациям с аттеншном в трансформере
1. In-Context Language Learning: Architectures and Algorithms - механизм внимания точнее всех моделирует индуктивные (и н-грамм) головы, оттого и присутствует in-context phenomenon (интересно в тему и это прочитать)
2. The Hedgehog & the Porcupine: Expressive Linear Attentions with Softmax Mimicry - дистиллируем классический аттеншн в линейный наиболее прямым образом, получаем профит
3. Linear Transformers with Learnable Kernel Functions are Better In-Context Models - не отвергаем базу, а выстраиваем от нее результаты лучше
4. Leave No Context Behind: Efficient Infinite Context Transformers with Infini-attention - интересная и практичная попытка снять ограничения длины контекста (надеюсь что работает)
5. Think before you speak: Training Language Models With Pause Tokens - ллмкам на загадку жака фреско тоже требуются размышления
6. Efficient Streaming Language Models with Attention Sinks - сливаем “ненужный аттеншн” в фиктивные токены и радуемся результатам
7. Contextual Position Encoding: Learning to Count What's Important - заставляем позиционное кодирование зависеть от близости запросов и ключей, получем прямую связь позиции с контекстом
8. TransformerFAM: Feedback attention is working memory - привносим в аттеншн понятие рабочей памяти на том же уровне глубины модели (и пытаемся так аппроксимировать хидден стейт рнн)
Feel free to enjoy the papers with us!
1. In-Context Language Learning: Architectures and Algorithms - механизм внимания точнее всех моделирует индуктивные (и н-грамм) головы, оттого и присутствует in-context phenomenon (интересно в тему и это прочитать)
2. The Hedgehog & the Porcupine: Expressive Linear Attentions with Softmax Mimicry - дистиллируем классический аттеншн в линейный наиболее прямым образом, получаем профит
3. Linear Transformers with Learnable Kernel Functions are Better In-Context Models - не отвергаем базу, а выстраиваем от нее результаты лучше
4. Leave No Context Behind: Efficient Infinite Context Transformers with Infini-attention - интересная и практичная попытка снять ограничения длины контекста (надеюсь что работает)
5. Think before you speak: Training Language Models With Pause Tokens - ллмкам на загадку жака фреско тоже требуются размышления
6. Efficient Streaming Language Models with Attention Sinks - сливаем “ненужный аттеншн” в фиктивные токены и радуемся результатам
7. Contextual Position Encoding: Learning to Count What's Important - заставляем позиционное кодирование зависеть от близости запросов и ключей, получем прямую связь позиции с контекстом
8. TransformerFAM: Feedback attention is working memory - привносим в аттеншн понятие рабочей памяти на том же уровне глубины модели (и пытаемся так аппроксимировать хидден стейт рнн)
Feel free to enjoy the papers with us!
❤13👍3 2
Same Task, More Tokens: the Impact of Input Length on the Reasoning Performance of Large Language Models
100500M tokens context for LLM - супер круто, не правда ли? только прикол в том, что нам тяжеловато подобрать такой промпт, а если и подобрать, то как оценить его качество относительно коротких промптов? сохраняются ли способности ллмок независимо от длины инпута? интуитивно вроде да, но авторы решили это проверить
для этого они создали датасет QA датасет (назвали FlenQA), где есть промпты произвольной длины, но
- во всех инпутах не меняется длина той части, откуда можно достать ответ на вопрос
- добавленный текст (”паддинг” чтобы соответствовать максимальной длине) не должен никак вмешивать новый смысл в неизменную часть, откуда берется ответ на вопроос
- место, куда вставляется релевантный промежуток текста, контролируется
таким образом, авторы изолируют фактор длины инпута и теперь могут измерить максимально честно ее влияние на перформанс
и как оказывается - размер имеет значение
с удлинением инпута показывается такое нехилое снижение в результате. к тому же независимо от того, как распределить семплы относительно друг друга, тенденция не меняется. подкрепляется это все смещением на нерелевантную инфу, что ожидаемо
и даже Chain of Thought не спасает
стоит учесть, задача только QA (хоть и разные подтаски), а как ведет себя на других тасках - неизвестно
👀LINK
100500M tokens context for LLM - супер круто, не правда ли? только прикол в том, что нам тяжеловато подобрать такой промпт, а если и подобрать, то как оценить его качество относительно коротких промптов? сохраняются ли способности ллмок независимо от длины инпута? интуитивно вроде да, но авторы решили это проверить
для этого они создали датасет QA датасет (назвали FlenQA), где есть промпты произвольной длины, но
- во всех инпутах не меняется длина той части, откуда можно достать ответ на вопрос
- добавленный текст (”паддинг” чтобы соответствовать максимальной длине) не должен никак вмешивать новый смысл в неизменную часть, откуда берется ответ на вопроос
- место, куда вставляется релевантный промежуток текста, контролируется
таким образом, авторы изолируют фактор длины инпута и теперь могут измерить максимально честно ее влияние на перформанс
и как оказывается - размер имеет значение
с удлинением инпута показывается такое нехилое снижение в результате. к тому же независимо от того, как распределить семплы относительно друг друга, тенденция не меняется. подкрепляется это все смещением на нерелевантную инфу, что ожидаемо
и даже Chain of Thought не спасает
стоит учесть, задача только QA (хоть и разные подтаски), а как ведет себя на других тасках - неизвестно
👀LINK
🤨2🍓1🫡1
Contextual Position Encoding: Learning to Count What's Important
все, думаю, пользовались разными позиционными кодировщиками - абсолютными, относительными, обучаемыми, кто-то даже сильно знаком с RoPE, а кто-то с алиби. цель всех этих вариантов была добавить релевантную информацию относительно позиции токена.
а для чего? ну, далее механизму внимания было легче проводить всякие риуталы с токеном *в контексте с другими токенами.* так а почему бы не попробовать сразу сделать поз энкодинг с опорой на контекст?
авторы предложили именно такое (СoPE), объединили детали из относительного и обучаемых энкодингов - позиции кодируются как сумма сигмоид между дот продактом запросов и ключей (queries & values). таким образом получается опора на предыдущий контекст исключительно, так еще и через сигмоиду определяем степень влияния этого контекста
к тому же такой позиционный скаляр может принимать и дробные значения. поэтому составляют обучаемый эмбеддинг для каждой целочисленной позиции (вплоть до максимальной длины трансформера), а под получившуюся позицию (которая может быть дробной) интерполируют соседние эмбеддинги под целочисленные позиции (да, немного душновато, зато круто как по мне!)
с CoPE ллмки начинают лучше считать объекты (даже если считать на инференсе приходится оод значения по сравнению с трейном) и в выборочном копировании, да и не отстает в классичном языковом моделировании
смущает только Figure 3 (и далее в рассуждениях я могу ошибаться) -как я пон, они говорят, что может CoPE обобщаться на более длинный контекст, что отчасти так, у него меньше перплексия, но ввиду грамотной интерполяции (а не экстраполяции) дробных позиций - если мы удлиняем контекст с 512 до 1024 например на евале, то все равно будем видеть токены от 0 до 512, пушто на трейне мы их и не видели. то есть этот метод действительно выглядит лучше, но кмк по другим причинам (если вы нашли ошибку в моем рассуждении - напишите, мне интересно почитать)
энивей, это новый крутой метод делать поз энкодинг - авторы имхо достаточно показали преимущество над RoPE и абсолютным и относительным позиционным кодированием + код есть (и комплексити побольше, но несильно), осталось посмотреть, что происходит на больших моделях вместе с этим
👀LINK
все, думаю, пользовались разными позиционными кодировщиками - абсолютными, относительными, обучаемыми, кто-то даже сильно знаком с RoPE, а кто-то с алиби. цель всех этих вариантов была добавить релевантную информацию относительно позиции токена.
а для чего? ну, далее механизму внимания было легче проводить всякие риуталы с токеном *в контексте с другими токенами.* так а почему бы не попробовать сразу сделать поз энкодинг с опорой на контекст?
авторы предложили именно такое (СoPE), объединили детали из относительного и обучаемых энкодингов - позиции кодируются как сумма сигмоид между дот продактом запросов и ключей (queries & values). таким образом получается опора на предыдущий контекст исключительно, так еще и через сигмоиду определяем степень влияния этого контекста
к тому же такой позиционный скаляр может принимать и дробные значения. поэтому составляют обучаемый эмбеддинг для каждой целочисленной позиции (вплоть до максимальной длины трансформера), а под получившуюся позицию (которая может быть дробной) интерполируют соседние эмбеддинги под целочисленные позиции (да, немного душновато, зато круто как по мне!)
с CoPE ллмки начинают лучше считать объекты (даже если считать на инференсе приходится оод значения по сравнению с трейном) и в выборочном копировании, да и не отстает в классичном языковом моделировании
смущает только Figure 3 (и далее в рассуждениях я могу ошибаться) -
энивей, это новый крутой метод делать поз энкодинг - авторы имхо достаточно показали преимущество над RoPE и абсолютным и относительным позиционным кодированием + код есть (и комплексити побольше, но несильно), осталось посмотреть, что происходит на больших моделях вместе с этим
👀LINK
🔥7👍4❤2🤔1
Retentive Network: A Successor to Transformer for Large Language Models
тоже уже база, но хочу про нее рассказать
стейт спейс модели показали возможность параллелизации обучения при константной стоимости инференса и меньшим количеством памяти, вот и авторы из майкрософта и Tsinghua не отстают, сделали RetNet (кстати мы его уже упоминали здесь)
по канонам джордана белфорта, продают абсолютно уникальную идею, которая делает “невозможный треугольник” возможным (сомнительно ну окэй) 😎 😎 😎 😎
ну а идея на самом деле неплохая - оставляют трансформерные понятия Q K V (на матрицы комплексных эйгенвекторов или чего-то там можно забить потому что они все равно уходят при перемножении), обрабатывают их как в линейном аттеншне с наложением каузальной маски, которая в себя включает еще и позиционное кодирование которое работает backwards с гипером гамма
еще расширяют эту идею на MSR (Multi-Scale Retention, a.k.a Multi-Head Attention) и подают разным головам разные гаммы ⇒ головы теперь не только по-разному могут производить ретеншн (аттеншн) в плане обработки контекста, но еще и по-разному обрабатывать временную составляющую
все это спокойно параллелится на трейне как и обычный трансформер, а на инференсе легко можно перейти в рекурсивную форму. также авторы добавили имплементацию в chunkwise форме как трейдофф между реккурентностью и параллельностью
да и ко всему есть код, что приятно
но есть непонятка в табличке - у RWKV пишут, что нет параллелизации во время трейна, когда она есть + забавно выглядит как они галочками расставили перформанс но это оки
👀LINK
тоже уже база, но хочу про нее рассказать
стейт спейс модели показали возможность параллелизации обучения при константной стоимости инференса и меньшим количеством памяти, вот и авторы из майкрософта и Tsinghua не отстают, сделали RetNet (кстати мы его уже упоминали здесь)
по канонам джордана белфорта, продают абсолютно уникальную идею, которая делает “невозможный треугольник” возможным (сомнительно ну окэй) 😎 😎 😎 😎
ну а идея на самом деле неплохая - оставляют трансформерные понятия Q K V (на матрицы комплексных эйгенвекторов или чего-то там можно забить потому что они все равно уходят при перемножении), обрабатывают их как в линейном аттеншне с наложением каузальной маски, которая в себя включает еще и позиционное кодирование которое работает backwards с гипером гамма
еще расширяют эту идею на MSR (Multi-Scale Retention, a.k.a Multi-Head Attention) и подают разным головам разные гаммы ⇒ головы теперь не только по-разному могут производить ретеншн (аттеншн) в плане обработки контекста, но еще и по-разному обрабатывать временную составляющую
все это спокойно параллелится на трейне как и обычный трансформер, а на инференсе легко можно перейти в рекурсивную форму. также авторы добавили имплементацию в chunkwise форме как трейдофф между реккурентностью и параллельностью
да и ко всему есть код, что приятно
но есть непонятка в табличке - у RWKV пишут, что нет параллелизации во время трейна, когда она есть + забавно выглядит как они галочками расставили перформанс но это оки
👀LINK
🔥3👀2❤1👍1🤩1