Forwarded from Градиентное погружение (cene655)
Мы в Sber AI скоро представим новую диффузионную модель, которая генерирует картинки.
Что она может:
1) Генерировать картинки по тексту
2) Смешивать картинки
3) Смешивать картинки и тексты
Ждите релиз на следующей неделе, будет полный опенсурс всех весов и кода обучения)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥4
Полуночное такси чтиво.
Улучшение устойчивости модели NLP.
Сегодня затрону на мой взгляд важную в текущем контексте событий в мире DL + NLP тему - адверсариальные атаки на текст. Тем более, что вместе с выходом GPT-4 OpenAI выложили в доступ библиотеку evals, которая преследует цель автоматизации тестирования решений OpenAI. За инфо спасибо @seeyouall.
Ну дык вот. Вспомнил своё решение по атакам на тексты. Правда, атакуем мы так энкодеры, но никто не мешает атаковать и промты таким же образом. Как раз этим алгоритмом с Вами и поделюсь.
Идея:
Мы используем два способа атак. Первый, внося опечатки и ошибки разной природы. Второй-мы будем менять слова на их синонимы, но выбирать такие слова, которые наносят максимальный урон при замене. Урон мы замеряем в зависимости от цели. Например, для задачи поиска по эмбедам, мы замеряем урон по self distance между векторами до и после аугментации. В итоге задача стоит в том, чтобы улучшить устойчивость языковых моделей к таким атакам.
Тк с аугментациями опечатками всё понятно, расскажу про ауги на уровне замен слов.
Алгоритм:
1. Проходим по атакуемой фразе пословно. Удаляем с возвратом слово.
2. Для задачи атаки энкодера замеряем расстояние между векторами фразы до и после удаления слова. Естественно, используем для этого атакуемый энкодер. Записываем в лист скор. Если мы решаем supervised задачу, замеряем скор до и после, вычитаем их из друг друга. Разницу кладём в лист.
3. Сортируем лист и берём слова из топК по величине урона. Обычно берём К как 20\30% от длины фразы в словах.
4. Для каждого выбранного атакуемого слова выбираем кандидата на замену. Для этого используем словарь синонимов. Ключ это нормальная форма слова, значения это лист его синонимов. Так же нормальных форм. Естественно все атакуемые слова нормализуются.
5. Поиск по синонимам идёт при помощи другой нежели атакуемый энкодер модели. Например, это может быть MUSE, tiny-BERT (для скорости), sbert и тп. Задача векторизовать слова синонимы и атакуемое слово, подобрать топ1 слово по векторной близости, но допускается также случайный выбор из топК (так же 20/30%).
6. После выбора синонимов, они возвращаются вместо атакуемых слов в фразу. Обязательно с возвращением согласования, напомним, слова были нормализованы.
Теперь у нас есть несколько комбинаций слов на замену, можно менять по одному слову за раз можно сразу несколько во фразе. В любом случае, нам нужно выбрать один кандидат парафразы в итоге. Как это сделать? Всё также, берём все кандидаты парафраз. Далее внешний энкодер, и с помощью него векторизуем парафразы, считаем расстояния до изначальной фразы. После расчитываем урон на расстояние/скор между этой парафразой и изначальной фразой от атакуемой модели. Итого скоры от внешнего энкодера и атакуемой модели мы учитываем для выбора лучшей парафразы: нам нужно взять относительно близкую фразу по внешнему энкодеру, но дающую при этом высокий урон на атакуемую модель. Можно сделать свою формулу такого ранжирования, например отношение урона/(1+расстояние) . Up to you.
Зачем мы используем внешний энкодер для поиска синонимов и парафраз? Всё просто. Нам нужен внешний критик-модель, по мнению которой мы выбираем такие замены, что она не может отличить исходную фразу/слово от аугментированной. При этом, слова и фразу на замену мы выбрали с условием урона на изначальный энкодер, который атакуем.
Теперь вернемся к началу. В век промт инжиниринга когда от исходного текста зависит итоговая генерация, данный алгоритм может быть полезен для тестирования, и, что важно, улучшения устойчивости ваших декодер моделей. Во время обучения вашего декодера вы можете атаковать промты, при этом ожидая устойчивости, к примеру, переплексии или следить за KL- дивергенцией в качестве цели атаки. В случае декодера мы выбираем такие парафразы промтов, которые наносят максимально удар по какой-то из этих мер.
Улучшение устойчивости модели NLP.
Сегодня затрону на мой взгляд важную в текущем контексте событий в мире DL + NLP тему - адверсариальные атаки на текст. Тем более, что вместе с выходом GPT-4 OpenAI выложили в доступ библиотеку evals, которая преследует цель автоматизации тестирования решений OpenAI. За инфо спасибо @seeyouall.
Ну дык вот. Вспомнил своё решение по атакам на тексты. Правда, атакуем мы так энкодеры, но никто не мешает атаковать и промты таким же образом. Как раз этим алгоритмом с Вами и поделюсь.
Идея:
Мы используем два способа атак. Первый, внося опечатки и ошибки разной природы. Второй-мы будем менять слова на их синонимы, но выбирать такие слова, которые наносят максимальный урон при замене. Урон мы замеряем в зависимости от цели. Например, для задачи поиска по эмбедам, мы замеряем урон по self distance между векторами до и после аугментации. В итоге задача стоит в том, чтобы улучшить устойчивость языковых моделей к таким атакам.
Тк с аугментациями опечатками всё понятно, расскажу про ауги на уровне замен слов.
Алгоритм:
1. Проходим по атакуемой фразе пословно. Удаляем с возвратом слово.
2. Для задачи атаки энкодера замеряем расстояние между векторами фразы до и после удаления слова. Естественно, используем для этого атакуемый энкодер. Записываем в лист скор. Если мы решаем supervised задачу, замеряем скор до и после, вычитаем их из друг друга. Разницу кладём в лист.
3. Сортируем лист и берём слова из топК по величине урона. Обычно берём К как 20\30% от длины фразы в словах.
4. Для каждого выбранного атакуемого слова выбираем кандидата на замену. Для этого используем словарь синонимов. Ключ это нормальная форма слова, значения это лист его синонимов. Так же нормальных форм. Естественно все атакуемые слова нормализуются.
5. Поиск по синонимам идёт при помощи другой нежели атакуемый энкодер модели. Например, это может быть MUSE, tiny-BERT (для скорости), sbert и тп. Задача векторизовать слова синонимы и атакуемое слово, подобрать топ1 слово по векторной близости, но допускается также случайный выбор из топК (так же 20/30%).
6. После выбора синонимов, они возвращаются вместо атакуемых слов в фразу. Обязательно с возвращением согласования, напомним, слова были нормализованы.
Теперь у нас есть несколько комбинаций слов на замену, можно менять по одному слову за раз можно сразу несколько во фразе. В любом случае, нам нужно выбрать один кандидат парафразы в итоге. Как это сделать? Всё также, берём все кандидаты парафраз. Далее внешний энкодер, и с помощью него векторизуем парафразы, считаем расстояния до изначальной фразы. После расчитываем урон на расстояние/скор между этой парафразой и изначальной фразой от атакуемой модели. Итого скоры от внешнего энкодера и атакуемой модели мы учитываем для выбора лучшей парафразы: нам нужно взять относительно близкую фразу по внешнему энкодеру, но дающую при этом высокий урон на атакуемую модель. Можно сделать свою формулу такого ранжирования, например отношение урона/(1+расстояние) . Up to you.
Зачем мы используем внешний энкодер для поиска синонимов и парафраз? Всё просто. Нам нужен внешний критик-модель, по мнению которой мы выбираем такие замены, что она не может отличить исходную фразу/слово от аугментированной. При этом, слова и фразу на замену мы выбрали с условием урона на изначальный энкодер, который атакуем.
Теперь вернемся к началу. В век промт инжиниринга когда от исходного текста зависит итоговая генерация, данный алгоритм может быть полезен для тестирования, и, что важно, улучшения устойчивости ваших декодер моделей. Во время обучения вашего декодера вы можете атаковать промты, при этом ожидая устойчивости, к примеру, переплексии или следить за KL- дивергенцией в качестве цели атаки. В случае декодера мы выбираем такие парафразы промтов, которые наносят максимально удар по какой-то из этих мер.
GitHub
GitHub - openai/evals: Evals is a framework for evaluating LLMs and LLM systems, and an open-source registry of benchmarks.
Evals is a framework for evaluating LLMs and LLM systems, and an open-source registry of benchmarks. - openai/evals
❤10🔥2
Фух. Вроде закончили) Мой совет. Для внешнего энкодера использовать быструю маленькую модель small/medium/tiny. В качестве дикта синонимов скачать то, до чего можете дотянуться или в крайнем случае, использовать синсеты из wiki-wordnet.
Ниже прикреплю скрины схем наших атак.
Ниже прикреплю скрины схем наших атак.
❤9
"GPT -4 успехи и провалы" 🤔
Есть мнение:
https://m-cacm.acm.org/blogs/blog-cacm/270970-gpt-4s-successes-and-gpt-4s-failures/fulltext
Есть мнение:
Эрай Озкурал Успехи GPT-4 и неудачи GPT-4 (Гэри Маркус, блог ACM, 2023 г.) «GPT действительно великолепен. Он может видеть (хотя у нас пока нет подробностей об этом); он удивительно хорошо справляется с целой кучей стандартизированных тестов, таких как LSAT, GRE и SAT. принят во многих коммерческих системах (например, Khan Academy). Но это тоже провал, потому что На самом деле это не решает ни одной из основных проблем правдивости и надежности, которые я изложил в своем печально известном эссе от марта 2022 года «Глубокое обучение упирается в стену». Выравнивание все еще шаткое; вы все равно не сможете надежно использовать его для управления роботами или научных открытий, таких вещей, которые в первую очередь заставили меня в восторге от A(G)I. Выбросы также остаются проблемой. Раздел лимитов в некотором роде читается как повторение той статьи за март 2022 года. И статья не предлагает авторитетных решений ни одной из этих более ранних проблем».https://m-cacm.acm.org/blogs/blog-cacm/270970-gpt-4s-successes-and-gpt-4s-failures/fulltext
👍5
Forwarded from Love. Death. Transformers.
Поддержим опенсурс, тут делается важная штука - открытая русскоязычная инструктивная модель, ребята нагенерили через gpt инструкцй и теперь просят вашей помощи в фильтрации!
Вот небольшая инструкцич по использованию:
Когда задание можно считать плохим:
- Из него непонятно, что нужно делать.
- Оно невыполнимо языковой моделью. Например, описание несуществующей картинки.
- Задание и вход не согласуются. Например, задание предполагает предложение на русском, а подаётся предложение на английском.
Если задание написано просто неграмотным русским языком, но из него ясно, что нужно делать - это ок.
Когда ответ можно считать плохим:
- Когда ответ некорректный или неполный.
- Когда модель в ответ на личные вопросы притворяется человеком. Например, говорит, что она вчера была в Париже.
- Когда ответ написан неграмотно.
Бот где размечать: @InstructAnnotBot
Уже готовый грязный сет:
https://huggingface.co/datasets/IlyaGusev/ru_turbo_alpaca
Вот небольшая инструкцич по использованию:
Когда задание можно считать плохим:
- Из него непонятно, что нужно делать.
- Оно невыполнимо языковой моделью. Например, описание несуществующей картинки.
- Задание и вход не согласуются. Например, задание предполагает предложение на русском, а подаётся предложение на английском.
Если задание написано просто неграмотным русским языком, но из него ясно, что нужно делать - это ок.
Когда ответ можно считать плохим:
- Когда ответ некорректный или неполный.
- Когда модель в ответ на личные вопросы притворяется человеком. Например, говорит, что она вчера была в Париже.
- Когда ответ написан неграмотно.
Бот где размечать: @InstructAnnotBot
Уже готовый грязный сет:
https://huggingface.co/datasets/IlyaGusev/ru_turbo_alpaca
🔥7
SSA для диалоговых моделей и проблема релевантности и специфичности.
Рассуждения...
Часто в своей рутине приходится производить оценку качества работы диалоговых систем е2е. Для этого мы используем SSA.
Основная идея такого подхода:
1. Собираем диалоги: качеству, содержанию и репрезентации, по отношению к целевому домену, которой мы доверяем.
2. Обстреливаем этими диалогами нашу систему по принципу: мы вам контекст, вы нам ответ.
3. Отправляем результаты работы контекст+ответ в разметку.
4. Для каждого примера оцениваем насколько релевантный и специфичный ответ.
Ответ релевантный, если он разумен/логичен и соответствует контексту/теме диалога. Ответ специфичный, если он не только конгруентен теме общения, но ещё является конкретным, полным, содержательным. Не полными и содержательными являются, к примеру, общие фразы да/нет/не знаю и тп.
При этом, ответ может быть релевантным, но неспецифичным, далее показательный пример:
- Сегодня отличная погода! Самое-то погулять.
- Полностью с Вами согласен.
Или попроще:
- Сегодня отличная погода! Время совершить прогулку.
- Ага.
В обоих случаях, фразы ответы универсальны. Так можно ответить почти на любой пассаж. Поэтому обладают слабой специфичностью или во все не специфичны, но при этом релевантны. Естественно если ответ нерелевантный, то и неспецифичный .
Пример релевантного и специфичного ответа:
- Сегодня отличная погода! Время прогуляться.
- Прекрасная идея, одеваюсь, жду тебя у фонтана через час.
А теперь о проблемах насущных. Сегодня хочу рассказать об паре. Первая, для моделей generative/decoder like, - это проблема потолка релевантности. Известен факт, что генеративные модели имеют трудности с фактологией, галюцинациями и токсичной генерацией. При этом, такие модели зачастую оригинальны в своих ответах, их генерации сложно чаще всего назвать неспецифичными. Это благодаря, конечно, такой штуке как перплексия. Именно она как мера качества генерации, даёт консенсус между длиной и оригинальностью генерации. Кстати я сам делал замеры корреляции специфичности ответа и его длины. Как вы думаете отлична ли она от 0.5?) у меня было 0.66+ ...
Но вернёмся к нашим баранам. Как ранее интересно решали проблемы с релевантностью? Да всё при помощи тех же самых: incontext augmentation, RETRO, RAG и тп и тд. Цель всего одна: помимо промта, разными способами (подмешиванием текста или векторов) из внешних больших источников знаний дать подсказку LLM. Тем самым, модели, как было показано во всех выше перечисленных статьях улучшали показатели SSA. В первую очередь, за счёт решения проблем с фактологией и галюцинациями.
Казалось бы на этом всё. Но...
Пришёл RLHF, о котором уже слышно из каждого котелка. И если задуматься, этот подход тюнинга на малом, но более надёжном датасете с оценками от кожанных мешков, так же способствует разом:
1) улучшению фактологии
2) аккуратному, не токсичному общению
3) снижению галлюцинаций
4) большому разнообразию, ака специфичности.
И для этого, пусть и не просто, но возможно, путём настройки инструкций + RL моделек оценки , решать сразу проблемы улучшения пользовательского опыта и ведения диалога в принципе.
И как было уже отмечено, это не золотая пуля. Естественно грамотный претрейн важен, он решает задачу генерализации знаний. Но RLHF, получается, на дотюне после, не про генерализацию (генерализацию мы как раз пытаемся в процессе не потерять путём KL divergence регуляризации к базовой модели), он, на мой взгляд про улучшение именно решения конечных задач для юзера.
Рассуждения...
Часто в своей рутине приходится производить оценку качества работы диалоговых систем е2е. Для этого мы используем SSA.
Основная идея такого подхода:
1. Собираем диалоги: качеству, содержанию и репрезентации, по отношению к целевому домену, которой мы доверяем.
2. Обстреливаем этими диалогами нашу систему по принципу: мы вам контекст, вы нам ответ.
3. Отправляем результаты работы контекст+ответ в разметку.
4. Для каждого примера оцениваем насколько релевантный и специфичный ответ.
Ответ релевантный, если он разумен/логичен и соответствует контексту/теме диалога. Ответ специфичный, если он не только конгруентен теме общения, но ещё является конкретным, полным, содержательным. Не полными и содержательными являются, к примеру, общие фразы да/нет/не знаю и тп.
При этом, ответ может быть релевантным, но неспецифичным, далее показательный пример:
- Сегодня отличная погода! Самое-то погулять.
- Полностью с Вами согласен.
Или попроще:
- Сегодня отличная погода! Время совершить прогулку.
- Ага.
В обоих случаях, фразы ответы универсальны. Так можно ответить почти на любой пассаж. Поэтому обладают слабой специфичностью или во все не специфичны, но при этом релевантны. Естественно если ответ нерелевантный, то и неспецифичный .
Пример релевантного и специфичного ответа:
- Сегодня отличная погода! Время прогуляться.
- Прекрасная идея, одеваюсь, жду тебя у фонтана через час.
А теперь о проблемах насущных. Сегодня хочу рассказать об паре. Первая, для моделей generative/decoder like, - это проблема потолка релевантности. Известен факт, что генеративные модели имеют трудности с фактологией, галюцинациями и токсичной генерацией. При этом, такие модели зачастую оригинальны в своих ответах, их генерации сложно чаще всего назвать неспецифичными. Это благодаря, конечно, такой штуке как перплексия. Именно она как мера качества генерации, даёт консенсус между длиной и оригинальностью генерации. Кстати я сам делал замеры корреляции специфичности ответа и его длины. Как вы думаете отлична ли она от 0.5?) у меня было 0.66+ ...
Но вернёмся к нашим баранам. Как ранее интересно решали проблемы с релевантностью? Да всё при помощи тех же самых: incontext augmentation, RETRO, RAG и тп и тд. Цель всего одна: помимо промта, разными способами (подмешиванием текста или векторов) из внешних больших источников знаний дать подсказку LLM. Тем самым, модели, как было показано во всех выше перечисленных статьях улучшали показатели SSA. В первую очередь, за счёт решения проблем с фактологией и галюцинациями.
Казалось бы на этом всё. Но...
Пришёл RLHF, о котором уже слышно из каждого котелка. И если задуматься, этот подход тюнинга на малом, но более надёжном датасете с оценками от кожанных мешков, так же способствует разом:
1) улучшению фактологии
2) аккуратному, не токсичному общению
3) снижению галлюцинаций
4) большому разнообразию, ака специфичности.
И для этого, пусть и не просто, но возможно, путём настройки инструкций + RL моделек оценки , решать сразу проблемы улучшения пользовательского опыта и ведения диалога в принципе.
И как было уже отмечено, это не золотая пуля. Естественно грамотный претрейн важен, он решает задачу генерализации знаний. Но RLHF, получается, на дотюне после, не про генерализацию (генерализацию мы как раз пытаемся в процессе не потерять путём KL divergence регуляризации к базовой модели), он, на мой взгляд про улучшение именно решения конечных задач для юзера.
research.google
Towards a Conversational Agent that Can Chat About…Anything
Posted by Daniel Adiwardana, Senior Research Engineer, and Thang Luong, Senior Research Scientist, Google Research, Brain Team Modern conversatio...
👍4❤3
SSA для диалоговых моделей и проблема релевантности и специфичности. Продолжение.
Проблема вторая. Моя любимая, тк часто работаю с такой системой.
Проблема специфичности в retrieval based диалоговой системе. Вообще зачем оно нам надо? Эта ретривал based система, когда уже есть классные GPT. Ретривал модели, зачастую более безопасны, тк ответы черпают из "мешка фраз", а их пишут или вычитывают с логов эксперты/редакторы. Поэтому всякие модели общения с мошенниками, лучше, строить на таких подходах. Но возникает проблема, что "мешок фраз" конечен и не смотря на высокую релевантность таких фраз, они обладают низкой специфичностью. Конечно, можно заставлять писать редакторов интересные ответы, обладающие нужными свойствами, но так бесконечно продолжаться не может. Поэтому, нам нужно улучшить качество retrieval свойств нашей системы так, чтобы она поднимала в топ специфичные, полные, интересные ответы из того что есть. Как это сделать с учётом опыта от генеративок выше:
Способ первый и дорогой - блендер схема. Раз у нас decoder like специфичны, а ретривал релевантны. Давайте возьмём и скрестим эти два опыта. Будем брать кандидатов с обеих моделей, а дальше накинем сверху ещё один алгоритм, который выберет из этого микст пула лучший ответ. Например бустинг. Добавим ему ещё мета информации из моделек аннотаторов и тп.
Вариант второй - применим снова RL. Допустим, у нас нет своей генеративки, нет денег на внешнее АПИ к ChatGPT и тп. Живём только с того, что можно взять в HF и своей retrieval системой. Тогда мы не робеем. Берём, на ваш взгляд, самый лучший decoder-like чекпоинт с обнимашек. Естественно, в рамках того языка, который у вас. Далее с помощью этой модели для каждого ответа в вашей базе получаете perplexity score. Далее или юзаете as is на правилах или учите свой прокси encoder reward на вход фраза на выход перплексия, который будет легче условной GPT на RL PPO. Если вы выбрали proxy reward , то кидаем это в алгоритм, который писал ранее в качестве RL-critic и тюните в тч на оценку интересности фразы ответа, как 1-perplexity.
На этом все. Сумасшедших экспериментов вам.
Проблема вторая. Моя любимая, тк часто работаю с такой системой.
Проблема специфичности в retrieval based диалоговой системе. Вообще зачем оно нам надо? Эта ретривал based система, когда уже есть классные GPT. Ретривал модели, зачастую более безопасны, тк ответы черпают из "мешка фраз", а их пишут или вычитывают с логов эксперты/редакторы. Поэтому всякие модели общения с мошенниками, лучше, строить на таких подходах. Но возникает проблема, что "мешок фраз" конечен и не смотря на высокую релевантность таких фраз, они обладают низкой специфичностью. Конечно, можно заставлять писать редакторов интересные ответы, обладающие нужными свойствами, но так бесконечно продолжаться не может. Поэтому, нам нужно улучшить качество retrieval свойств нашей системы так, чтобы она поднимала в топ специфичные, полные, интересные ответы из того что есть. Как это сделать с учётом опыта от генеративок выше:
Способ первый и дорогой - блендер схема. Раз у нас decoder like специфичны, а ретривал релевантны. Давайте возьмём и скрестим эти два опыта. Будем брать кандидатов с обеих моделей, а дальше накинем сверху ещё один алгоритм, который выберет из этого микст пула лучший ответ. Например бустинг. Добавим ему ещё мета информации из моделек аннотаторов и тп.
Вариант второй - применим снова RL. Допустим, у нас нет своей генеративки, нет денег на внешнее АПИ к ChatGPT и тп. Живём только с того, что можно взять в HF и своей retrieval системой. Тогда мы не робеем. Берём, на ваш взгляд, самый лучший decoder-like чекпоинт с обнимашек. Естественно, в рамках того языка, который у вас. Далее с помощью этой модели для каждого ответа в вашей базе получаете perplexity score. Далее или юзаете as is на правилах или учите свой прокси encoder reward на вход фраза на выход перплексия, который будет легче условной GPT на RL PPO. Если вы выбрали proxy reward , то кидаем это в алгоритм, который писал ранее в качестве RL-critic и тюните в тч на оценку интересности фразы ответа, как 1-perplexity.
На этом все. Сумасшедших экспериментов вам.
huggingface.co
Perplexity of fixed-length models
We’re on a journey to advance and democratize artificial intelligence through open source and open science.
❤5🔥3🤯1
Соседи говорят, что на PS5 кластер для топчеков.
TF-monkeys тем временем....
Юзают steamdeck
https://www.reddit.com/r/SteamDeck/comments/t6ve8b/tensorflow_deep_learning_on_the_steam_deck/
TF-monkeys тем временем....
Юзают steamdeck
https://www.reddit.com/r/SteamDeck/comments/t6ve8b/tensorflow_deep_learning_on_the_steam_deck/
Reddit
From the SteamDeck community on Reddit: Tensorflow (Deep Learning) on the steam deck!!
Explore this post and more from the SteamDeck community