Новинки искусственного интеллекта и нейронных сетей. Разборы статей. Ну а вообще, посчу, что захочу :) Сотрудничество/предложения: @atmyre Поддержать: https://t.me/dl_stories/521
Наткнулась на статью в Nature, которую выпустили ряд ученых-нейробиологов. Называется она "Catalyzing next-generation Artificial Intelligence through NeuroAI". Ее авторы выражают мнение, что для достижения следующего уровня AGI важно изучать нейробиологию живых организмов и применять эти знания к разработке AI. А также предлагают новый вариант теста Тьюринга, основанный на сравнении поведения реальных животных и AI-агентов.
Вот о чем этот новый тест:
Вспомним стандартный тест Тьюринга ("игра в имитацию"). Крутость AI ппроверяется так: берем живого человека (назовем его Васей) и заставляем его общаться с агентом. Агент — другой человек или AI. Общение происходит в текстовом виде. Если Вася при общении с AI не в состоянии определить, что он общается не с человеком, то тест пройден — этот AI считается достаточно сильным.
Этот тест далеко не идеален. Во-первых, результат зависит от конкретного Васи, который общается с AI. Во-вторых, проблема в возможности только текстового взаимодействия. Из-за этого сложно проверить у агента наличие многих скиллов, свойственных живым орагнизмам (и, соответственно, скиллов, которые мы хотели бы видеть у AGI). Например, таких:
- Эффективное взаимодействие с окружающей средой и контроль собственного тела. Существующие RL-агенты и роботы все еще плохо учатся управлять даже собственными конечностями, не говоря уж о том, чтобы взаимодействовать с другими объектами;
- Приспособляемость к меняющимся обстоятельствам. Это стандартная проблема AI-моделей, у которой много названий: отсутствие робастности, out-of-domain и т.д. Смысл в том, что AI-модели начинают плохо работать при малейшем изменении характеристик среды. Животные же умеют к этому быстро приспасабливаться. От AGI хочется, чтобы подобной проблемы у него не было, и это хочется уметь проверять;
- Наличие внутренней карты физического мира (или "общее понимание мира", "physical common-sense") и вытекающая из этого способность создавать причинно-следственные связи. С этим у AI тоже не очень хорошо, проблема causation vs correlation — одна из основных в AI.
Ко всему этому авторы замечают, что современные нейросети потребляют довольно много энергии для обучения и работы (привет GPT). Цифры приводят такие: для обучения GPT-3 потребовалось около 1000 мегаватт-часов, когда как человеческому мозгу нужно всего около 20 ватт (правда, я не поняла, для чего нужно. Чтобы научиться языковому моделированию?)). Если мы хотим получить эффективный AGI, мало заставить его пройти тест Тьюринга: нужно подумать о том, как увеличить его вычислительную эффективность.
Возможно, конечно, это все можно проверять и с помощью обычного теста Тьюринга, где человек и AI общаются текстом. Но придумать такой протокол будет как минимум сложно. Поэтому авторы статьи предлагают другой вариант теста, основанный на прямом сравнении поведения животных и AI-агентов. Назвали такой тест Embodied Turing test ("воплощенный тест Тьюринга"). Вот в чем его суть:
У биологов уже накопилось много данных о поведении животных. А также создаются биомеханические модели тел животных. На основе этого всего с помощью симуляторов можно создать реалистичные модели этих животных, и с их поведением сравнивать поведение AI-агентов.
Это позволяет сделать несколько уровней теста, в зависимости от того, насколько сложное животное хочется моделировать. По сути, симуляция каждого отдельного вида представляет собой отдельный тест Тьюринга. Это должно способствовать постепенному развитию AI-агентов: сначала они научатся моделировать червей, потом рыб, потом вашу кошку Мурку, а затем и вас самого =)
А еще так можно проверять отдельные способности AI-агентов: например, отдельно тестировать его умение управлять конечностями или приспосабливаться к среде. И даже проверять, сколько энергии AI-агент тратит на каждую конкретную задачу (и сколько тратит на эту же задачу Мурка)
Конечно, протоколы сравнения AI-агентов и Мурки надо еще придумать и стандартизовать. Но звучит интересно.
Вот так мы только-только подошли к решению старого теста Тьюринга (GPT-4), так уже неймется ехать куда-то дальше)
📄Статья
Может, кому-то будет интересно:
Мне тут скинули ссылку на хакатон по генеративному AI. Смысл такой: вы приходите со своей идеей проекта на основе generative AI (Stable Diffusion, ChatGPT и т.п.) и питчите идею экспертам. Взамен получаете обратную связь по проекту и, возможно, призы (если попали в топ-3).
Если у вас есть идея сервиса/стартапа на основе недавних технологий (в последнее время вижу много таких), и вы хотите получить мнение экспертов бесплатно — кажется, это хорошая возможность. Ну и возможность послушать идеи других)
Среди жюри — действительно шарящие люди. Например, Татьяна Шаврина — руководитель рисерч проектов в AIRI и человек, который запускал ruDALL-E, ruGPT3 и вообще хорошо шарит за генеративный NLP. Кроме технических и рисерч спецов есть и специалист по продукту и продвижениям.
Правда, отбор на ивент закрывается уже скоро: подача заявок доступна до 21 марта в 23:59. Как-то не очень подгадали под выход GPT-4, хехе.
Сайт хакатона с подачей заявки
P.S. На своем канале Татьяна тоже тестирует GPT-4
💬 Вступайте в сообщество MLOps-инженеров в Telegram. Там публикуем дайджесты, обсуждаем новые инструменты и технологии.
#промо
В сообществе вы найдете:
▫️ Новости индустрии production ML;
▫️ Полезные статьи, инструменты и технологии;
▫️ Опыт коллег и лучшие практики.
Присоединяйтесь, чтобы получать новые знания от практиков MLOps и дата-аналитики: /channel/+WNtmeTCsq0VjMjNi
Реклама ООО «Селектел», Pb3XmBtztAXpLT3m7AJbuAwefAQJaXLiwLGZpqU
Ладно, я успокоилась, почитала комментарии. И понимаю, что резон в том, чтобы не выкладывать все детали мощной модели вроде GPT-4, все же есть. Ниже — мои мысли вокруг этой темы.
Как мы видели на примере ChatGPT, подобные модели действительно могут иметь сильный эффект на общество — что стоит хотя бы то, что ChatGPT успешно справляется со многими университетскими экзаменами. Это довольно большой удар и серьезный челлендж для системы образования. К тому же, в последнее время я ооочень часто замечаю, как об ИИ говорят люди/паблики, которые от этой сферы были вообще далеки. Вот пример. Этот канал, вообще, о маркетинге, я на него подписана давно (мне просто интересно). Если прокрутить ленту выше, там будет просто огромное количество упоминаний ИИ за последнее время. Короче, на общество ChatGPT возымел серьезный эффект, и обществу нужно время, чтобы осознать, переварить, приспособиться, и выработать механизмы регулирования.
(правда, тогда не очень понятно, почему API к GPT-4 уже раздают и будут раздавать далее. Типа, повторить нашу модель нельзя, но пользоваться и решать экзамены можно?)
Но все же с этой тенденцией к "закрытому AI" у меня назревает беспокойство, которое и вылилось в раздражение в прошлом посте. Мысли тут такие:
то, что делает OpenAI — это уже явно не наука, не рисерч. И OpenAI тогда уж пора перестать называться open, а также сформулировать четкую политику: что открываем, что нет, откроем ли в будущем, как и кому. А также: с кем сотрудничаем, кому даем доступы, насколько это все прозрачно. Иначе подобные анонсы с закрытыми деталями ощущаются как хайп, желание заработать, или даже желание власти (у нас есть такая штука, и только у нас). Еще больше меня лично пугает то, что они писали про взаимодействие с government в своем стейтменте.
Вообще, на мой сегодняшний взгляд, монополия на обладание подобной технологией одной компанией или правительством страны не несет ничего хорошего. В таком случае последствия всецело зависят от взглядов и желаний узкого круга людей. И даже если сейчас эти взгляды направлены на сугубо благо, не факт, что это не изменится в будущем.
В связи с этим, кажется, что нужно развивать механизмы регулирования AI-штук в мире. Такие механизмы, которые бы обеспечили невозможность аккумулирования AI-мощностей в одних руках. Радует, что OpenAI писали об этом в своем недавнем стейтменте "Planning for AGI and beyond". Будем надеяться, что компания будет придерживаться этой идее и далее, и с ее помощью удастся такие механизмы создать.
А вообще, OpenAI — далеко не единственные, кто не дает доступов к своим моделям. Google, например, делает так же: к Imagen доступ так и не дали никому, даже в сугубо рисерч целях (я писала им на почту, мне сказали, что не дают никому вообще). С OpenAI больше бомбит просто из-за того, что изначально компания создавалась с целями делать открытый AI, что и отражено и в названии. Ну и, не давать ни доступы к модели, ни вообще какое-либо описание ее устройства — это качественно новый уровень закрытости. Обычно описание устройства дают, а саму модель — нет.
В целом, хорошо, что OpenAI хотя нам хотя бы сказали, что такая моделька у них есть. Если компании начнут создавать мощный AI и вообще об этом молчать, имхо, будет хуже.
Подытожу: мне лично от OpenAI хочется четкой и прозрачной политики, а также реальных движений в сторону создания механизма регулирования AI в мире.
Разрешите пожаловаться. Почему что-то крутое и интересное постоянно выходит, когда я в отпуске??😒😒
Читать полностью…Продолжая тему language modeling: в декабре 22 года Google выкатил идею, как ускорить генерацию текста языковыми моделями. Идею назвали Confident Adaptive Language Modeling (CALM). Статья с NeurIPS-22, между прочим!
Общая идея CALM: смотрите, в процессе генерации текста некоторые слова генерировать "проще", чем другие. Часто очевидно, какое слово должно идти следующим в тексте. Так давайте предсказывать простые слова не на основе выхода последнего слоя модели, а с помощью выходов одного из начальных ее слоев: кажется, что уже в них информации для этого может быть достаточно. Таким образом, для многих слов мы будем прогонять вход не через всю модель, а только через пару ее первых слоев. Генерация станет намного быстрее.
Как такое реализовать:
Возьмем T5. Он состоит из нескольких блоков Self-attention + fully-connected. Немного изменим процес обучения модели. Смотрите, в обычном T5 только последний полносвязный (fc) слой учится выдавать эмбеддинг, который с помощью SoftMax превращается в распределение вероятностей для следующего токена. Мы же хотим, чтобы _все_ полносвязные слои модели выдавали осмысленный эмбеддинг, который после SoftMax превращался бы в распределение вероятностей для следующего токена. Для этого при обучении модели мы будем считать лосс-функцию не только по эмбеддингу последнего слоя T5, а по всем полносвязным слоям. Итоговый лосс сети — взвешенная сумма лоссов всех fc-слоев. Последние слои имеют больший вес, чем первые.
После такого обучения все fc-слои сети будут предсказывать распределение вероятностей для следующего токена. На этапе инференса при генерации каждого нового слова будем получать предсказания из каждого fc-слоя сети по очереди. Также будем измерять уверенность слоя в своем предсказании. Если уверенность большая, то выдаем предсказанное текущим слоем слово и останавливаем итерацию: в следующие слои сети информацию не передаем. Если уверенность низкая, продолжаем итерацию: смотрим на предсказания следующего слоя и его уверенность в этом предсказании. И так далее.
Авторы статьи предлагают три варианта измерения уверенности слоя:
✔️ Значение максимальной вероятности после применения SoftMax к выходу слоя. Если вероятность большая, то слой "уверен" в предсказании, если маленькая — не уверен. Тут нужно подобрать оптимальный порог уверенности;
✔️ Похожесть предсказаний двух последующих fc-слоев. Если текущий и следующий fc-слои выдают примерно одинаковое распределение на токены, то сеть уже как бы укрепилась в своем выборе следующего слова. И следующие слои сети, наверное, будут выдавать примерно такие же распределения. Тогда останавливаем генерацию и выдаем слово;
✔️ Обучить маленькую сеть-классификатор, которая будет выдавать ответ: хорошее получилось у текущего слоя предсказание или нет. Если хорошее, используем текущий слой для генерации слова.
Экспериментально вышло, что первый вариант выигрывает по соотношению скорость-качество. Вычислить максимальное значение SoftMax и сравнить с порогом — это очень быстро, и качество при этом получается неплохим.
И остается еще один нюанс. Пусть мы генерируем токен и находимся на четвертом слое сети. Аттеншену четвертого слоя нужны эмбеддинги этого же слоя с предыдущих итераций. Что делать, если на какой-то из предыдущих итераций мы остановили генерацию слова раньше четвертого слоя? Тогда мы для каких-то из прошлых слов не получили эмбеддинги четвертого слоя.
Решение простое — для таких слов использовать тот эмбеддинг, который есть. Если для слова "котик" мы остановили генерацию на втором слое, то self-attention четвертого слоя на следующей итерации будет использовать эмбеддинг слова "котик" со второя слоя сети.
Теперь все. Такая идея может ускорить генерацию текста в 2-3 раза, не сильно потеряв в качестве. При этом для большинства слов текста модель останавливается на четвертом слое или раньше (всего слоев 8).
Подробнее про метрики и результаты экспериментов читайте в статье. Также там есть картинки с инфой о том, на каких слоях останавливается модель для генерации каких токенов.
Небольшое дополнение к посту выше про исследование восприятия людями и нейронками текстов.
Авторы статьи замечают, что многие части мозга устроены иерархически. На это указывают многие исследования (тык, тык). То есть, например, за восприятие текста отвечают несколько отделов — извилина Хешля, верхняя височная извилина и несколько других. При этом разные части мозга отвечают за разные процессы в восприятии текста. Так, извилина Хешля и другие области верхней височной коры отвечает за обработку низкоуровневой информации — акустики, фонем, синтаксиса и локальной семантики. А нижнелобные и теменные области преимущественно отвечают за высокоуровневую, семантическую информацию в тексте.
Как же это переносится на языковые модели? В целом, из того, как устроены нейросети, мы знаем, что начальные слои сети преимущественно обрабатывают низкоуровневую информацию входных данных, а дальние слои — высокоуровневую. Авторы статьи поставили эксперимент: обучали регрессию предсказывать fMRI активации разных частей мозга на основе разных слоев GPT-2. И действительно, оказалось, что fMRI извилины Хешля лучше приближается первыми слоями GPT-2, а fMRI нижнелобных и теменных областей — дальними слоями.
Но и это еще не все. Был еще такой эксперимент: ученые взяли активации слоев GPT-2 и разделили их на два вектора — вектор X, содержащий низкоуровневую информацию о тексте, и вектор Y, содержащий высокоуровневую информацию. Сделали они это так: сгенерировали 10 предложений с одинаковой синтаксической конструкцией (общей информацией), и разными словами (локальной информацией). Получили активации GPT-2 на 10 этих предложений и усреднили их, получив вектор X. А векторы Y — это векторы-активации слоев минус X.
И дальше обучали регрессию восстанавливать fMRI разных частей головы на основе этих векторов. Снова оказалось, что fMRI извилины Хешля лучше приближается векторами Y локальной информации, а fMRI нижнелобных и теменных областей — вектором общей информации X.
Насколько я понимаю, последний эксперимент показывает не столько связь в идее обработки текста между GPT-2 и мозгом, сколько служит еще одним признаком того, что разные части мозга отвечают за разный уровнень восприятия текста. Вот так с помощью нейронки можно что-то там хорошее понять про мозг)
Но это дополнение я писала не только из-за этих двух экспериментов, а еще потому, что тут снова возникает идея иерархии. Я об идеях иерархической структуры в нейронках писала летом 2022 года, когда Ян ЛеКун выпустил свою статью с мыслями о том, как должен быть устроен AGI. Одна из основных идей работы ЛеКуна — иерархия. Это тогда вдохновило меня подумать, собрать мысли насчет нейронок и структуры в них в кучу, и написать про это большой пост на Хабре.
Общая мысль такая: кажется, современные нейросети (даже самые большие и классные) в процессе обучения не особо выучивают понятие структуры объектов и сущностей. С другой стороны, кажется, что структурное иерархическое восприятие сильно помогает людям взаимодействовать с миром. Отсюда возникает идея, что внедрение в нейросети структурного восприятия могло бы помочь им лучше решать сложные задачи.
И в статье на Хабре я подробнее описала то, почему структура важна, почему нейросети структуру не понимают и как это можно пытаться исправить.
А при чем тут эта статья от Meta AI— да просто при том, что это еще один эвиденс, что структурное иерархическое восприятие в человеке есть, и даже на уровне устройства мозга =)
Fast Language-Image Pre-training (FLIP) — новый, более эффективный метод обучения CLIP
(Про CLIP вот тут был пост)
Как работает FLIP:
Ребята из Meta AI взяли стандартный CLIP и применили к его обучению простой трюк, который в последнее время хорошо зарекомендовал себя в self-supervised моделях: masking. Идея такая:
Берем пары (картинка, текст-описание картинки). Делим картинку на квадратные патчи . Закрываем случайные 50% (или даже 75%) патчей. На такой masked картинке и ее тексте обучаем CLIP как обычно, с помощью contrastive objective.
После обучения FLIP используется как обычный CLIP. На вход подается картинка без закрытых частей. Это прекрасно работает, хотя при обучении FLIP видел только masked картинки.
Accuracy FLIP достигает примерно того же, что и CLIP, но при этом за гораздо меньшее время обучения. Если закрывать 50% картинки, то времени понадобится на 50% меньше. Если закрывать 75% картинки, то время уменьшится в 3 раза. Такой разгон достигается в том числе за счет увеличения размера батча: так как теперь через сеть прогоняется только малая часть каждой картинки, количество картинок в батче можно увеличить. (2 и 3 картинки к посту).
Обучение на закрытых на 50% картинках с большим батчом даже чуть улучшает итоговый accuracy по сравнению с CLIP. Также еще сильнее accuracy увеличивает небольшое дообучение FLIP на non-masked картинках. Авторы предполагают, что masking выступает в роли небольшой регуляризации, уменьшая переобучение, и поэтому в итоге модель обучается лучше.
Также можно закрывать и случайные токены текста. Но это уже не так сильно ускоряет работу модели, т.к. модель-энкодер текста не такая большая, а качество просадить может: закрывание 50% токенов понижает итоговый accuracy на 2.2%.
Вот так. Вообще, идея masking далеко не нова. Она активно используется для self-supervised learning (SSL). Правда, в SSL обычно обучают модель восстанавливать закрытые токены на основе части картинки. Недавно новую text-to-image модель на оснве этой идеи представили (пост был тут).
📄Статья
Мои знакомые тут решили создать в телеграме (да, еще одно) сообщество вокруг дата саенса и deep learning. Грубо говоря, это новый ODS, только в телеграме.
Там уже есть тематические чаты и каналы:
- по сферам: CV/NLP/data/...
- по географии: Россия/Азия/...
- новости, поиск работы, education и т.п.
Что из этого выйдет, я не знаю) Но если вы искали место, где можно узнать что-то новое, найти компанию по ML-интересам и позадавать вопросы — попробуйте. Пока выглядит ничего так.
Ссылка: Сообщество фанатов градиентов
P.S. Если ссылка не открывается, попробуйте обновить телеграм.
Хочешь поступить в ШАД?
Или, может быть, в магистратуру по Data Science?
Ищешь материалы и советы по подготовке?
#промо
Тогда подпишись на канал "Поступашки ШАД"!
Канал ведут преподаватели МГУ, ВШЭ и ШАД. Там тебя ждут:
🔺Подборки материалов по математике, алгоритмам, ML/DL;
🔺Советы, как поступить в ШАД, Ai masters или в магистратуры по Data Science;
🔺Инсайды и анонсы об актуальных стажировках, образовательных проектах и олимпиадах.
Примеры постов:
- Где получать дополнительное образование в области Data Science?
- How to заботать Deep Learning?
- Этапы отбора в Школу Анализа Данных от Яндекса
Подписывайся и поступай вместе с нами ⬇️
@postypashki_old
Летом 22 года Ян ЛеКун выпустил авторскую статью о видении того, как должен выглядеть General AI. Я про это несколько постов писала, вот тут начало.
В своей работе как одну из составляющих модели General AI Ян предлагает модуль JEPA: Joint Embedding Predictive Architecture. Кратко, это модуль, который отвечает за создание у AI ассоциативных связей и механизма предсказания будущего. Подробно о том, как устроен JEPA, я писала в статье на Хабре.
Так вот. Недавно несколько ученых в соавторстве с ЛеКуном выкатили статью, где предлагают использовать идею JEPA для self-supervised learning на изображениях. Назвали они свою модельку I-JEPA (Image-based JEPA).
Как она устроена:
Берем датасет картинок и ставим на них задачу для self-supervised learning: предсказание одной части изображения по другой части. И делаем вот что:
- Прогоняеем входящую картинку с закрытой частью через энкодер (contect encoder на картинке). Этот энкодер — обычный visual transformer (ViT). Получается эмбеддинг входящей картинки. Назовем его context embedding.
- Таргет (часть картинки, которую нужно предсказать) также прогоняем через свой энкодер (target encoder). Получаем эмбеддинг таргета (target embedding)
- Далее еще один ViT принимает на вход context embedding, а также в качестве condition информацию о том, какую часть закрытой картинки нужно предсказать. Выдает этот ViT эмбеддинг, который затем с помощью L2-лосса сравнивается с target embedding.
Т.е. задача I-JEPA — научиться в латентном пространстве предсказывать отсутствующий контент по части картинки. То, что в I-JEPA задача ставится именно в латентном пространстве, — главное отличие этого подхода от предыдущих.
Можно сравнить I-JEPA с Masked Autoencoders (MAE). Идейно, I-JEPA — тот же MAE, но предсказание происходит в латентном пространстве.
Эта простая идея заставляет модельку выучивать довольно полезную информацию о картинках. Дообучив I-JEPA на классификацию ImageNet, авторы получили SOTA top-1 по сравнению с другими self-supervised подходами, включая и MAE.
📄Статья
Краткий ликбез по self-supervised learning (SSL)
(под недавними постами несколько людей спрашивали, что это такое. Плюс, следующий пост тоже будет посвящен модельке для SSL)
В двух словах, self-supervised learning — это когда мы учим модельку понимать что-то о природе данных (или даже решать какие-то осмысленные задачи) на данных без разметки.
Подробнее:
Возьмем задачу классификации картинок. Обычно, чтобы научить модельку решать эту задачу, вам нужны данные вида (картинка, класс). То есть, нужно собрать датасет из кучи картинок, где каждая картинка размечена, т.е. к каждой картинке известен ответ: что на ней изображено. Обучение моделей на таких датасетах с разметкой называется supervised learning .
Собирать датасеты для supervised learning сложно, долго и дорого. Есть разные способы, как это делать. Самые распространенные — такие:
✔️ посадить живых людей размечать данные. Это позволяет получить довольно "чистый" датасет (без явных ошибок в разметке), но очень долгий и дорогой. А если вы хотите сэкономить и мало платить разметчикам, это может вызвать скандал. Вот с OpenAI недавно был: они платили всего $2 в час людям, которые выявляли "неподобающий" контент среди того, что генерирует ChatGPT;
✔️ собрать данные с разметкой из интернета автоматичеки. Например, для той же задачи классификации можно сделать так: вбиваем слово "песик" в гугл и скриптом скачиваем все выданные картинки. Этот подход намного проще и дешевле, чем первый, но у него тоже есть явные недостатки:
- данные получаются довольно "грязные". На запрос "песик" вы можете получить картинки далеко не милых собачек. Например, вот эта картинка выдалась мне на четвертой строке картинок в гугле по запросу "песик" =)
- данные в интернете могут быть защищены авторскими правами. Использование таких данных для обучения моделей, кхм, не приветствуется.
- этот способ подходит не для всех задач. Для классификации или генерации картинок по текстовому описанию понятно, как собрать датасет (см. LAION, на котором обучалась Stable Diffusion). А вот с сегментацией, например, все сильно сложнее.
Короче говоря, собрать датасеты с разметкой сложно. Поэтому активно развиваются исследования в области self-supervised learning. Это когда вы учите нейросеть на данных, к которым разметки нет.
Пример self-supervised learning — обучение языковых моделей типа GPT-3. Для них нужны просто куча текста и никакой разметки. Модель учится предсказывать следующий токен на основе предыдущих.
Надо сказать, что для задач, связанных с картинками, придумать self-supervised подходы довольно сложно. Что-то типа языковой модели не прокатит. Вот примеры SSL-подходов для картинок:
- делаем аугментации картинок из трейн сета (повороты, блюр, закрываем часть картинки и т.п.) и учим нейросеть выдавать одинковые ответы на одни и те же картинки, аугментированные разными способами;
- Masked AE: закрываем рандомные части картинок и учим автоэнкодер(AE) восстанавливать эти части.
При обучении подобным образом нейросеть начинает "понимать" что-то о природе картинок и объектов на них, и затем эти ее знания можно использовать в других задачах. Например, можно дообучить такую сеть на задачу классификации картинок. И для этого понадобится намного меньше размеченных данных, чем для обучения сети на эту задачу "с нуля". Про Masked AE я даже пост писала, вот тут.
На SSL, получается, еще можно смотреть так: SSL — это когда у вас есть неразмеченные данные, и вы на них придумываете псевдо-supervised задачу. Придумываете таким образом, чтобы сеть в процессе обучения выучила что-то полезное.
Ну и, стоит сказать, что есть подходы "между" supervised и self-supervised:
- semi-supervised learning. Это когда часть данных для задачи размечена, а часть — нет;
- weakly-supervised learning. Это когда данные размечены, но разметка очень "грязная" (слабая) или местами неполная.
Как-то так. В завершение рекомендую почитать этот пост про self-supervision в блоге Александра Дьяконова.
Stanford Webinar - GPT-3 & Beyond
Вчера посмотрел эту прелестную лекцию из Стенфорда о новейших Языковых моделях. Проф С. Potts очень классно дал общий обзор языковых моделей и быстренько рассказал, как мы докатились до таких чудес как, например, GPT-3 и ChatGPT. Затем он порассуждал о том, в каких подтемах NLP можно еще что-то привнести обычному смертному, если у вас нет миллионов долларов на обучение SOTA моделей.
И вот какие актуальные темы для рисерча:
🔵 Retrival augmented in-context learning (условно, как поженить поиск и LLM)
🔵 Создание лучших бенчмарков, датасетов
🔵 "Last mile" for productive apps: Адаптация огромных моделей для конечных приложений, упрощающих жизнь
🔵 Исследования в сторону объяснения и верификации результатов, выданных LLM (огромными языковыми моделями).
Сами они в научной группе этого профа, с его слов, почти перестали тренировать модели и, кажется, занимаются промт-инженирингом и докручиванием уже натренированных LLM по вышеуказанным направлениям.
Получилась не очень тяжелая, но очень вдохновляющая лекция! Может после этого вы захотите написать диссер в области NLP. Ну, либо создать стартап.
@ai_newz
ChatGPT Notes — канал про GPT
Тут такое дело. Мы со знакомыми-авторами каналов по AI посмотрели на все новости вокруг языковых моделей (ChatGPT, GPT-4, Bing, ...) и поняли, что их стало слишком много. Настолько много, что одному человеку за всем не угнаться, а если репостить все интересное себе в каналы, то все наши каналы превратятся в склад постов о GPT (наш внутренний чатик уже почти в такое превратился, хехе)
Поэтому мы решили создать под это дело отдельный канал: ChatGPT Notes. В нем мы будем собирать все, что нам покажется интересным по теме языковых моделей. Будут как свои тексты, так и репосты хороших постов с других каналов.
Авторы — люди, работающие AI рисерчерами/инженерами, и понимающие, что они пишут. Многие из них работают с чат-ботами напрямую и больше в этом разбираются, чем я. Никаких "у GPT появилось сознание, мы все умрем" или "покупайте курс по промптам к ChatGPT" там не будет.
К каналу есть чат. В нем можно и нужно общаться на темы вокруг GPT. Попасть в него можно из описания канала.
Больше инфы о канале и авторах — в закрепе.
Ну вот, если вам интересно знать, что там снова ковырнули в GPT, заходите! А тут, в DLStories, я продолжу писать посты о разных интересных вещах в AI, совсем не только (или вообще не) о GPT😌
Помните, в 2021 году была статья о распознавании фейковых видео людей (deepfake) по зрачкам глаз? Там была идея, что у реальных людей на видео отражения и блики в зрачках обоих глаз практически идентичны. На фейковых же видео отражения в глазах часто сильно разнятся. Впрочем, не особо удивительно, т.к. зрачки глаз — довольно low-level деталь, успешно подгонять которую модели для дипфейков научить сложно.
Так вот, оказывается, в 2020 году была еще одна работа с интересной идеей распознавания дипфейков: FakeCatcher. Идея эта — детектить некоторые биологические маркеры людей. А именно: когда сердце человека качает кровь, вены и сосуды меняют свой цвет в зависимости от стадии сердечного сокращения. Эти изменения образуют постоянный паттерн на видео, который можно детектить. Как и отражения в зрачках, еле заметные изменения цвета кожи из-за работы сердца — это low-level деталь, которая моделями для дипфейков не восстанавливается.
Причем авторы статьи утверждают, что FakeCatcher работает даже на low-resolution картинках, и что в целом система довольно устойчива к изменениям/шумам на видео. Это удивительно: казалось бы, при низком разрешении изменения цветов кожи должны становиться менее заметны.
Вообще, идея детектить подобные биологические паттерны на видео не нова. Идея возникла в медициенском домене, когда захотелось придумать неинвазивные методы мониторинга состояния пациентов. Это, к примеру, дистанционная фотоплетизмография на основе цвета. Фотоплетизмография — это ровно и есть метод регистрации изменений, возникающих при наполнении мелких сосудов кровью в зависимости от фазы кардиоцикла. Идеи оттуда и переняли ученые из Бингемтона для создания системы детекции дипфейков.
Статья про FakeCatcher была написана в 2020 году. А недавно, в ноябре 2022, Intel взяли эту работу и на ее основе выпустили полноценный продукт FakeCatcher. Ссылка с анонсом вот, но, кажется, открытого доступа к нему нет. По крайней мере, я не нашла.
Что там GPT-4
Соберу в этом посте в кучку несколько постов о GPT-4 и несколько интересных связанных новостей.
Что интересного в tech report GPT-4
Прежде чем у меня получилось сесть и более детально изучить tech report на предмет важных моментов, в паре соседних тг-каналах уже появились посты об этом. И авторы этих каналов — люди, которые занимаются NLP, т.е. лучше меня шарят, что там как. Поэтому я подумала, что вместо попыток разобраться самой лучше дать вам ссылки на эти посты (и вообще, я в отпуске!!):
- Интересные моменты тех репорта по мнению автора AbstractDL;
- Несколько постов в Сиолошной. Начинать отсюда и до конца
А теперь — пара новостей, связанных с GPT-4, которые меня удивили:
✔️ OpenAI подписали соглашение с правительством Исландии о сотрудничестве в задаче сохранения Исландского языка.
Дело в том, что Исландия активно интегрируется в глобальную экономику, и многие ее жители говорят на английском и других языках. Из-за этого исландский язык не очень распространен в интернете. И также в языке появляется много заимствований, что, как утверждают в стране, ставит исландский язык под угрозу вымирания.
Из-за этого GPT-4 в исландский умеет не очень. Даже специальное дообучение на корпусе исландских текстов не особо помогает. И партнерство Исландии с OpenAI направлено на то, чтобы лучше научить GPT-4 этому языку. Добровольцы будут исправлять ошибки модели и учить ее тонкостям языка и грамматики.
Планируется, что подобными усилиями можно будет работать над сохранением и других вымирающих языков на планете.
Блогпост OpenAI о сотрудничестве
Пост в Твиттере президента Исландии
✔️ Сonor Grogan (Head of Product @ Coinbase) скормил GPT-4 смарт-контракт Эфира (Ethereum). Моделька смогла найти уязвимости и даже описать, как эти уязвимости использовать для хака смарт-контракта. А самое интересное то, что GPT-4 нашла уязвимости и в контракте 2018 года. И одно из них как раз было использовано в том же году для bitburner/proof-of-weak-hands-powh-coin-hacked-866-eth-stolen">взлома токена Weak Hands.
И что, security engineer теперь тоже не нужны?..
✔️ Duolingo встроит GPT-4 в свое приложение для изучения языков. Функции с GPT-4 будут доступны по подписке Max. Вот что можно будет делать:
- попросить модель найти ошибки в тексте и объяснить, почему это ошибка и как ее исправить;
- практиковаться в языке с помощью диалога с моделькой.
Имхо если это будет хорошо работать, то процесс изучения языка станет намного проще и интереснее!
✔️Оказывается, есть такая компания — Anthropic. Основана она выходцами из OpenAI. И позавчера Anthropic представила своего чат-бота Claude — по сути, конкурента ChatGPT. С ним можно общаться, просить решать задачи: суммаризовать текст, кодить, находить информацию и т.п.
Anthropic уже сотрудничают с Notion, Quora, Juni Learning и DuckDuckGo, внедряют свой продукт в эти сервисы. И некоторые отзывы пользователей этих сервисов выглядят так:
- ”Claude feels more conversational than ChatGPT”;
- “I find Claude to be more interactive and creative in its storytelling.”
Что ж, интересно. Похоже, у OpenAI действительно есть сильный конкурент.
При этом в Anthropic говорят, что Claude довольно reliable and safe. Вообще, судя по сайту, главная цель Anthropic — как раз создание надежных и безопасных AI-систем. Про Claude они сами пишут: "Claude is a next-generation AI assistant based on Anthropic’s research into training helpful, honest, and harmless AI systems."
Запись в early access Claude тут
Расходимся. Деталей модели не будет. В статье ни слова о том, как именно картинки подаются в модель (самое интересное для меня), какая у нее архитектура и как учили.
Все, что есть:
- По образцу ChatGPT для обучения GPT-4 использовали RLHF (Reinforcement Learning from Human Feedback). Про то, что это за прием, есть отличная статья на HuggingFace;
- Очень много внимания уделили задаче safety, reliability модели и устранения галлюцинаций (придумывания несуществующих фактов, ошибки в логике и т.п.). Тут подход, в целом, "в лоб": с помощью разметчиков собрать примеры, где модель плохо себя ведет, и дообучить. Правда, сильно не помогло — в статье пишут, что "despite its capabilities, GPT-4 has similar limitations to earlier GPT models: it is not fully reliable (e.g. can suffer from “hallucinations”), has a limited context window, and does not learn from experience."
Честно — у меня сгорело. Я до последнего думала, что в нежелании OpenAI давать доступы и т.п. есть рациональное зерно, но тут я понимать перестаю. Как заметили в комментариях к посту выше, статья на 98 страниц больше похожа на рекламный буклет, а не на tech report. Это уже не рисерч и не наука, это уже бизнес какой-то.
А что там тогда на этих 98 страницах? А там куча картинок-примеров работы GPT-4 и страниц 30 о safety, reliability, risks & mitigations.
Час назад OpenAI представили GPT-4. К анонсу на сайте прилагается статья - tech report на 98 страниц. Разбираться с ней буду на неделе, напишу об этом пост (или несколько, если будет много интересного).
Пока вот ключевые моменты:
✔️GPT-4 мультимодальна, как и ожидалось. Правда, кажется, мультимодальный только вход, а выход все ещё всегда текст. Но интересно, что текст на входящих картинках модель тоже спокойно понимает;
✔️ OpenAI говорят, что в обычном режиме чат-бота разницу между GPT-3.5 и GPT-4 заметить будет сложно. Разница становится видна только в довольно сложных задачах: в них четвертая версия "более надёжна, креативнее, и лучше воспринимает нюансы запросов пользователя";
✔️ На OpenAI">YouTube-канале OpenAI в 23:00 по Москве будет live demo;
✔️ К GPT-4 сразу обещают API, запись в waitlist тут. Правда, в нем пока не будет возможности подавать на вход картинки, это только в демке покажут :(
Ещё, вроде как, владельцы pro-подписки на ChatGPT получают превью GPT-4 сразу.
📄Блогпост
🛠Tech report
Рассматриваете специальность «Дата-инженер» в качестве будущей работы? Или хотели бы больше узнать про различные профессии в сфере data science?
#промо
✍️ Международная школа анализа данных и разработки Mathshub приглашает вас на открытую встречу с практикующим дата-инженером. Гость — Андрей Ларионов. Он в аналитике уже более 15 лет. Прошел путь от аналитика данных до архитектора аналитических систем и руководителя практики инженеров.
На встрече поговорим о:
🟢Специфике работы дата-инженера;
🟢Основных инструментах, которые используют специалисты;
🟢Возможностях дата-профессий и особенностях входа в сферу.
➡️Встреча состоится 14.03 в 19:00. Бесплатно. Регистрация по ссылке.
-------------------
Mathshub — международная школа анализа данных и разработки. Практикующие преподаватели из ШАДа, НИУ ВШЭ, МФТИ, Y-Data уделяют внимание каждому студенту на живых занятиях. А спикеры, построившие карьеру в FAANG, Tesla, Amazon, Spotify делятся своим опытом в гостевой программе.
Прямо сейчас идет набор на программу «Дата-инженер» со скидкой 30%. Записывайтесь на бесплатную консультацию!
Сейчас опять будет про работу на стыке нейробиологии и AI. Ребята из Meta AI провели исследование, в котором сравнивали активации модели GPT-2 и человеческого мозга в ответ на входящий текст. И нашли интересные сходства и отличия между тем, как нейронки и человеки воспринимают текст.
Как обычно в таких постах дисклеймер: я мало понимаю в методах нейробиологии и том, как оценивать качество таких исследований. Пишу пост на том уровне, на котором смогла разобраться в статье.
Итак, подробнее о работе:
На самом деле, ранее уже публиковалось много статей, где ученые сравнивали активации языковых моделей а-ля GPT с активациями человеческого мозга в ответ на один и тот же входящий текст. Эксперименты ставятся примерно так: человек слушает текст в наушниках, во время этого записывается МРТ (fMRI) его мозга. Также этот текст прогоняетя через GPT-2 и берутся активации восьмого слоя этой сети (почему-то этот слой оказался самым информативным). Далее регрессия обучается по активации слоя GPT-2 на конкретное слово предсказывать сигналы МРТ мозга человека, полученные при прослушивании того же слова. Ну и затем на тестовой выборке оценивается, насколько предсказание регрессии в ответ на активацию слоя GPT-2 коррелирует с реальным сигналом fMRI. Если коррелияция большая, значит, GPT-2 "воспринимает" текст похожим образом, что и человек. Ведь, получается, что сигнал fMRI можно с хорошей точностью восстановить, взяв активации слоя GPT-2 и применив регрессию — просто линейное преобразование.
Так вот, в прошлых работах оказывалось, что корреляция тут есть, и довольно большая. То есть, идейное восприятие текста трансформером действительно похоже на то, как воспринимают текст люди. Однако корреляция эта все же далека от идеальной, т.е. разница между GPT-2 и человеками все же есть. В принципе, это очевидно и так: по тому, как языковые модели все еще часто не могут сгенерировать большой и связный текст, а также путаются в связях между словами в сложных предложениях (пример последнего — 'the keys that the man holds ARE here'. 'ARE' относится к ключам, но LM часто могут отнести глагол к 'the man')
Но в чем же разница? Ученые из Meta предложили следующую идею. Смотрите, языковые модели учатся по началу текста предсказывать одно следующее слово. Только одно. А человеческий мозг, по всей видимости, в каждый момент времени предсказывает целую часть дальнейшего предложения.
Чтобы проверить, в этом ли отличие, ученые провели эксперимент. Они взяли текст, подали его на вход GPT-2, взяли текущую активацию восьмого слоя, а также эмбеддинги нескольких последующих слов текста. Активацию слоя и эти эмбеддинги они сконкатенировали и уже на таких входных данных стали обучать регрессию. Оказалось, что корреляция выхода регрессии с fMRI сильно повышается (на ~23% +- 9%). И наибольшая корреляция достигается, когда берется ~8 последующих слов. Это позволяет предположить, что гипотеза была верна. Т.е. что довольно большая часть несоответствия между восприятием текста людьми и трансформерами действительно относится к тому, что люди "предсказывают" большие куски текста, а не одно слово.
Но и это еще не все. Чтобы по-другому проверить гипотезу, ученые взяли GPT-2 и дообучили ее на датасете Википедии следующим образом: в каждый момент времени нейронка должна была предсказывать не только следующее слово, но и высокоуровневные представления нескольких потенциальных следующих слов. В качестве таких представлений взяли эмбеддинги этих слов предобученной GPT-2. Далее к выходам 8 слоя такой дообученной модели снова применили регрессию. Оказалось, что статистически корреляция с fMRI действительно улучшилась.
В связи с этим вопрос к экспертам NLP: а что там с изобретением языковых моделей, которые предсказывают не только следующий токен, а что-то еще? Наверняка ж уже что-то такое пробовали. Но я о таком вот еще не слышала.
📄Статья
Три дня назад OpenAI выпустили документ под названием "Planning for AGI and beyond". В нем — общие принципы действий компании по мере того, как мир приближается к созданию AGI (Artificial General Intelligence).
Написали его OpenAI из идеи, что AI потенциально может принести людям много вреда, однако пытаться остановить прогресс — не вариант. Поэтому нужно понять, как продолжить этот прогресс так, чтобы не стало очень плохо.
Документ вот. Я тут выделю несколько ключевых (на мой взгляд) моментов из него:
✔️ В целом, мы хотим, чтобы AGI помогал человеку процветать во всех сферах жизни. В частности, экономически и научно.
✔️ Вместо того, чтобы сделать супер-крутой большой AI и сразу кинуть его в мир, мы будем придерживаться постепенного, медленного внедрения все более сложных и "умных" моделей. Идея такая: плавное увеличение способностей AI не повергнет мир в шок, и даст людям время приспособиться, адаптировать экономику и выработать нужные регламенты (а-ля законы) по взаимодействию с AI.
✔️ Более того, OpenAI предлагает всем крупным организациям договориться следовать правилу выше (выкатывать сильный AI постепенно). Также предлагает организовать независимые аудиты больших систем до их релиза в массы и ограничить количество вычислительных ресурсов, которые могут использоваться для тренировки моделей. В целом, OpenAI предлагает организациям сотрудничать в повышении безопасности AI вместо того, чтобы участвовать в гонках вида "кто первый выкатит модель покруче и побольше"
И вот еще интересная приписка к абзацу с этими мыслями: "Finally, we think it’s important that major world governments have insight about training runs above a certain scale". Вот тут хочется подробнее услышать о том, что OpenAI имеет в виду. На первый взгляд мне не кажется это предложение таким уж прям хорошим.
✔️ В то же время мы хотим, чтобы AI был максимально открыт для всех, и открыт для всех одинаково: "мы считаем, что будущее человечества должны определять сами люди, поэтому верим, что очень важно делиться информацией о прогрессе AI со всеми". Как достичь такого равенства, пока не очень понятно, поэтому OpenAI пишут следующее: "we hope for a global conversation about ... how to fairly distribute the benefits they [AI models] generate, and how to fairly share access".
✔️ Будем работать над созданием более согласованных и управляемых моделей. Тут речь, насколько я понимаю, про bias и нежелательное поведение моделей (вроде вот такого). У OpenAI идея тут такая: выпустить в массы версию модели, которая будет довольно ограничена, но при этом разрешить пользователям настраивать модельку под себя. Честно, не очень понимаю, как это поможет сделать модельк в целом менее biased (пользователи чего только там "под себя" не настроят). Разве что снимет с компании ответственность за подобное поведение модельки.
В целом, имхо, документ ведет в правильном направлении. Но у меня возник небольшой диссонанс между "мы не будем сразу показывать крутые модельки публике, а будем о них говорить государствам" и "люди должны знать о прогрессе AI".
Будем ждать подробных разъяснений от OpenAI по всем пунктам, короче.
ControlNet, или как научить одну модельку генерить картинки на основе разных входных данных.
Ребята из Стенфорда придумали способ "обобщить" text-to-image модельки на генерацию на основе других видов входов (не только текста). То есть, научили одну модельку генерить картинки на основе:
- скетча;
- human pose;
- маски сегментации;
- карты глубины
- ...
Примеры генераций см. на первой картинке к посту. А вот какая идея у ControlNet:
Современные нейросети обычно имеют блочную структуру. Давайте возьмем предобученную нейросеть (например, Stable Diffusion — SD), и сделаем копию каждого блока этой сети. На вход сети-копии будет подаваться входная информация, на основе которой модель в итоге должна сгенерить картинку (т.е. скетч, human pose и т.п.).
Каждую блок-копию соединим с соответствующим ему блоком исходной сети (вторая картинка к посту). Соединим так: на вход блок-копия будет принимать сумму выхода предыдущего блока-копии и выхода предыдущего блока исходной сети. И далее выход блока-копии будет складываться с выходом соответствующего блока исходной сети и дальше течь по исходной сети.
На третьей картинке к посту показано, как будет выглядеть итоговое устройство модели (исходная сеть + сеть-копия) на примере U-Net из Stable Diffusion. Здесь авторы соединили соответствующие блоки двух копий сетей только в декодере U-Net. Это логично, потому что именно в декодере и происходит генерация картинки (точнее, в случае SD, ее латентного представления).
Ну и дальше, собственно, обучаем сеть-копию end-t-end. Подаем на вход сети-копии скетч/human pose/карту глубины/... и на выходе ожидаем картинку, сгенерированную в соответствии с этим скетчем/human pose/...
Вспомним еще, что Stable Diffusion — это text-to-image model. Поэтому на вход ContolNet можно подавать еще и текст, и тем самым чуть изменять вид получаемой картинки. Например, попросить "картинку на основе скетча в стиле Пикассо" или не просто черепашку, а "черепашку у реки" (см. первую картинку к посту)
Заметим, что исходная сеть (левая часть монстрика с третьей картинки) не обучается. Получается, задача сети-копии в такой модели — переработать информацию из входного скетча/карты глубины так, чтобы исходная предобученная сеть с помощью этой инфы смогла сгенерировать нужную картинку. То, что каждая блок-копия имеет доступ к выходу предыдущего блока исходной сети, помогает блоку-копии лучше переработать информацию для дальнейшего внедрения ее в исходную сеть.
Конечно, для обучения ControlNet понадобятся датасеты вида (скетч, картинка), (карта глубина, картинка) и т.д. Авторы статьи собрали несколько таких датасетов автоматическим способом. Т.е. использовали общедоступные инструмены для получения human pose/карт глубины по картинкам. Полученные датасеты получились небольшими, но ControlNet при этом не переобчается. Авторы утверждают, что это и есть одно из главных преимуществ ControlNet перед обычным дообучением исходной Stable Diffusion на каждую из задач в отдельности.
В завершение еще заметим, что идею ControlNet можно применить для совершенно разных моделей, а не только для Stable Diffusion .
Cсылки:
📄 Статья
🛠Код на GitHub
Смотрите, какую тулзу создали OpenAI: Microscope. Это галерея с визуализациями активаций слоев и нейронов популярных CV-моделей (VGG, ResNet, CLIP-ResNet и т.п.)
Информация о том, какие паттерны входных картинок наиболее сильно активируют те или иные нейроны сети, нужна для изучения интерпретируемости (interpretability) сетей. Это помогает понимать, за обработку какой информации отвечает тот или иной слой/нейрон, и какие сложные пути обработки информации есть в сети.
Техник, которые позволяют "вытащить" из сверточных сетей подобную информацию, несколько. Microscope поддерживает пять из них (см. technique на картинке). Обещают также в будущем добавлять новые модели.
Визуализировать активации своей кастомной модели в Microscope, к сожалению, нельзя: это занимает слишком много вычислительных ресурсов, чтобы делать инструмент публичным. Но Microscope сделан с помощью lucid — тулзы для визуализаций моделек на Tensorflow. В репо lucid на гитхабе можно найти ссылки на почитать про техники визуализации нейросетей, а также научиться скармливать этой либе свои модельки.
Ссылки:
Подробнее о Microscope
GitHub lucid
Небольшое уточнение к посту выше:
В комментариях спросили, чем тогда отличается unsupervised learning (еще один термин, да) от self-supervised learning. Тут я задумалась, погуглила, и, выходит, что дела обстоят так:
- под unsupervised learning иногда понимают сетап, когда у модели вообще отсутствует тренировочная фаза. То есть, это, например, многие кластеризации, association rule learning algorithms, методы снижения размерности и т.п. Задача модели тут — найти какие-то паттерны в данных, и на основе этих находок что-то с этими же данными сделать.
А иногда понимается любой сетап, где у данных нет разметки. Т.е. в этом случае SSL — это частный случай unsupervised.
- под self-supervised learning понимают сетап, когда у вас есть неразмеченные данные, и вы на них придумываете псевдо-supervised задачу. Т.е. датасет (input, label) генерируется автоматически из неразмеченных данных.
Пример — тот, что в после выше: Masked AE. Тут вход в модель — картинка с рандомно закрытыми частями, ожидаемый выход — та же картинка.
Другой пример — учить модель по одной части картинки предсказывать другую часть.
GPT-3 тоже подходит. Вход — часть текста, ожидаемый выход — следующий токен этого текста.
Нагуглила еще вот такое лаконичное описание SSL: "Self-supervised learning is a machine learning process where the model trains itself to learn one part of the input from another part of the input" (источник)
Все равно стоит понимать, что все определения довольно размыты (можно зайти в комментарии и в этом убедиться). В этом посте я описала то, как сейчас в моей голове устроено понимание отличия unsupervised/SSL
Ну вот, как обычно — писала пост и сама лучше во всем разобралась. Ай хорошо)
Нашла еще один интересный подход к сегментации изображений: с помощью разбиения графа self-attention карты трансформера.
В чем идея:
Берем vision transformer, обученный на картинках в self-supervised режиме. Т.е. без какой-либо обучающей разметки. Смотрим на карты его self-attention. Оказывается, что на этих картах становтся подсвечены контуры объектов (см. 1 рис). Причем такое наблюдается только для трансформеров, обученных в self-supervised режиме: ни для supervised трансформеров, ни для CNN такое не работает.
Одними из первых это свойство заметили ребята из FAIR (статья). Они пошли дальше: взяли эти self-attention карты, обучили на них KNN и получили качество 78.3% top-1 на ImageNet.
Но вернемся к сегментации. Другие ребята придумали, как сделать сегментацию на основе этого свойства. Идея простая: берем элементы self-attention карты трансформера и строим на них граф. Ребро между двумя векторами будет равно 1, если косинусное расстояние между ними больше заданного порога, и eps, если меньше порога. На таким графе решаем задачу разбиения графа (normalized cut). Так элементы карты аттеншена, соответствующие объекту, будут отделены от элементов, соответствующих фону.
Последний шаг — применяем какой-нибудь алгоритм edge refinement (например, стандартный CRF), и получаем неплохую карту сегментации объекта на картинке.
Недостаток такого подхода — он умеет сегментировать только один объект на картинку. Поэтому ребята из FAIR (уже другие) предложили, как улучшить идею. Все просто: находим карту одного объекта. Далее накладываем на патчи self-аттэншена этого объекта маску, и снова запускаем алгоритм. И так несколько раз.
Это позволяет находить на одной картинке сразу несколько объектов (рис. 2).
Вот такая идея. Вообще, attention maps разных трансформеров часто обладают подобными свойствами, и на основе информации из них можно понимать, как "думает" моделька и решать разные downstream задачи. Интересно их исследовать)