Telegram Web Link
Сегодня была на первом дне воркшопа DANGER в London Institute of Mathematical Sciences (LIMS). Это такой институт, который собирает ученых-теоретиков в области математики, физики и AI, где они занимаются наукой и публикуют исследования. Находится институт в здании на Mayfair, где когда-то жил Фаррадей!

Так вот, про воркшоп. Он посвящен исследованиям на стыке AI и математики. Идет два дня, сегодня и завтра, каждый день по 4 доклада. Все доклады записываются, записи двух из них уже можно посмотреть на YouTube (вот на этой странице описания тем со ссылками на видео. Остальные тоже обещали добавить). А еще там же можно найти описания и ссылки на Zoom для завтрашних докладов: на них можно прийти и даже спросить вопросы у выступающих.

Пара впечатлений от сегодняшних докладов:
Первые три из четырех докладов были вида "вот есть проблема из теоретической математики, вот так она формулируется, и вот так мы пытаемся ее решить с помощью нейросетей". Во всех них описанию математической проблемы занимало 90% времени, описание нейросетевого подхода — 10%. Потому что все подходы были вида "ну вот простая MLP/convolution, мы ее применили, и вот, работает". Причем в той работе, где применили convolution, не очень даже понятно, почему она вообще хорошо там работает ¯\_(ツ)_/¯
Из этого всего и из моего прошлого опыта взаимодействия с людьми, которые нейронки пытаются применить к задачам физики, складывается ощущение, что пока что взаимодействие миров "классических" наук типа физики/математики и AI не очень велико. Хочется больше исследовать природу математических и физических задач и подбирать такие ML/DL-алгоритмы, которые могли бы помочь там наилучшим образом. Кажется, для этого как раз нужны подобные институты и воркшопы, где собираются люди с разным бэкграундом, а также новые междисциплинарные курсы в ВУЗах.

Четвертый доклад сегодня (от Kathlén Kohn) был про теоретические свойства сверточных нейросетей без функций активации с точки зрения алгебраических многообразий. Доклад основан на этой статье, там исследуется некоторая зависимость геометрии многообразий, которые выражают такие нейросети, от архитектуры сети.
Так вот. Логичный вопрос к этому докладу, который задали многие: а что дальше? Реальные нейросети, которые мы обучаем на реальные задачи, очень далеки от чисто сверточных сетей без функций активации. Можем ли мы что-то подобное умное сказать о "реальных" сетях?
Ответ тут такой, что сделать это очень сложно. И пока что все попытки сделать это были ооочень робкими. Там еле ReLU добавлять пробуют и смотрят, что будет. В принципе, логично, т.к. семейство многообразий сразу становится абсолютно другим, и его сложнее исследовать.
Отсюда мысль такая (высказанная самой Kathlén Kohn, когда я ее про это все спросила): мы оочень мало знаем о том, как и почему работают нейросети. Прямо очень мало. Теоретических основ почти нет. И там еще столько работы, ммм. Короче, еще одна причина развивать сотрудничество между областями.

P.S. у LIMS есть программа fellowship для молодых исследователей-теоретиков из России, Украины и Беларуси. Подробнее тут
Мы открываем набор на осенний семестр школы глубокого обучения Deep Learning School!

DLschool — это школа при ФПМИ МФТИ, где мы учим нейронным сетям с самых азов до продвинутого уровня. Полный курс состоит из двух частей, каждая из которых длится полгода.
- Первая часть посвящена введению в нейросети и компьютерному зрению. Начинаем с основ машинного обучения и нейросетей, переходим к CNN для обработки картинок, заканчиваем переносом стиля изображений и ГАНами.
- Вторая часть полностью посвящена обработке естественного языка (NLP) и обработке звука.

Сейчас идет набор на первую часть. О новостях второй части курса напишем отдельно (скоро).

Особенность нашей школы в том, что мы даем много практики (теория при этом тоже есть, разумеется, и немало). Вам предстоит много практических домашних заданий и самостоятельный итоговый проект в конце семестра. По окончании обучения вы точно получите нужные практические навыки работы с нейросетями. Больше информации об организации курса и подробную программу первой части можно найти тут.

Преподаватели школы — ведущие специалисты российских и зарубежных IT-компаний и научные сотрудники исследовательских лабораторий. Среди них — я (Таня), буду вести у вас несколько лекций про CV, сегментацию и архитектуры сетей =)

Школа бесплатная. Полностью онлайн: учиться можно из любой точки мира, где есть интернет. Занятия проходят раз в неделю — лекция, семинар и домашнее задание. Обучение проходит на платформе Stepik. Берем всех, отбора нет.
❗️Начиная с этого года также есть возможность приобрести дополнительный пакет, в который входит индивидуальная поддержка от менторов и преподавателей в прохождении курса, а также дополнительные вебинары. Подробнее о нем читайте на нашем сайте.

Занятия начинаются 16 сентября. Регистрация продлится до 23 сентября. Чтобы зарегистрироваться на курс, оставьте заявку на нашем сайте. После этого вам на почту придет письмо со ссылками на курс на Степике, на канал и чат в Телеграме (письмо может идти 15-20 минут).

Ссылки:
Наш сайт
Подробная программа и оргинформация первой части курса
Ответы на часто задаваемые вопросы (F.A.Q)
Наш YouTube (тут видео всех лекций и семинаров школы, а также открытые лекции и интервью)
Наша группа VK
Поддержать нашу школу на Boosty
❗️В этом году в организации школы произошли некоторые изменения по сравнению с предыдущими потоками. Подробнее о них читайте тут. Также хочется сказать, что мы за лето хорошо поработали над организацией, и теперь не будет задержек в выкладке материалов, проверке дз и решении других вопросов =)

Если остались вопросы, пишите нам на почту ([email protected]), в сообщения в группе VK или в комментарии под этим постом.
И ждем вас в чатике курса в новом семестре! =)
⬆️ Это одна из главных причин, по которой летом (и особенно в последнюю неделю) было не очень много постов на канале.

Мы прям серьезно взялись за структуризацию школы и улучшение организации, которая явно хромала. Этим летом, можно сказать, попробовала себя в роли менеджера. Ощущения смешанные. Иногда хотелось послать все к черту и пойти дальше спокойно читать статьи и писать рисерчерский говнокод ставить эксперименты. Но пересиливало то, что DLS я очень люблю и чувствую за него ответственность. Хотелось попробовать сделать школу еще лучше и приятнее для студентов. Наладить процессы так, чтобы они не были сильно завязаны на конкретных людей и не буксовали.

А еще иногда становилось почти страшно от ответственности за принимаемые решения и изменения. Да и прям сейчас страшно: запустили набор и смотрим, как все то, что сделали, будет работать. По ощущениям, мы таки справились (хоть и не без косяков и задержек), и сейчас должно быть явно намного лучше. Но посмотрим на практике)

При этом все эти процессы еще даалекоо не закончены, еще остается сделать уйму вещей. А казалось бы, просто онлайн-школа с лекциями там, семинарами и дзшками... Как же я ошибалась насчет многих вещей о сроках и пайплайне их реализации =/

Так что вот. Буду рада, если поделитесь анонсом набора с теми, кому учиться в DLS может быть интересно)
И снова пост в продолжение истории про роль метрики оценивания качества моделей ИИ, и LLM в частности. Мне тут в рассылке MIT Tech Review попалась статья под названием "Large language models aren’t people. Let’s stop testing them as if they were". В ней — рассуждения разных ученых о том, почему, по их мнению, некорректно оценивать языковые модели теми же методами, как и человеческий интеллект.

В последнее время мы слышали много историй о том, какой высокий у GPT-4 IQ, как LLM лучше справляются с разного рода тестами и экзаменами и т.п. И это все вносит достаточный вклад в то, что люди начинают сильнее бояться развития LLM и последствий этого. И в статье MIT Tech Review приводят пару аргументов, почему мы не очень правильно воспринимаем результаты этих оцениваний.

Первая мысль такая: все эти тесты были разработаны для тестирования именно человеческого интеллекта. И они используют некоторые предположения о человеческом интеллекте, которые могут быть (и кажется, так и есть) не верны для LLM. Например, у LLM нет чувства здравого смысла относительно физики реального мира: если спросить LLM самый простой вопрос вида "как переложить конфеты из одной миски в другую", она не справится. Т.е. LLM не понимают базовых принципов взаимодействия с миром, хотя у людей это то, что базово умеет каждый маленький ребенок. И сравнивать баллы за тест по биологии/математике LLM и человека поэтому не очень честно.

Мои мысли на этот счет такие: это неудивительно. LLM просто неоткуда получить понимание физических процессов. Мне кажется, что чтобы такой здравый смысл относительно физики появился, нужно научить LLM с миром взаимодействовать. Т.е. следующий шаг в эволюции ИИ — это робототехника и ИИ для них. Вообще об этом уже задумываются: вот тут я писала о статье в Nature, где авторы как раз подчеркивают проблему неумения ИИ взаимодействовать с реальным миром, и даже предлагают новый тест Тьюринга, который бы оценивал у моделей в том числе подобные умения.

Вторая мысль в статье касается обучающих/тестовых выборок. OpenAI в своих технических репортах заявляют, что тестовые данные для GPT-4 не пересекаются с тренировочными, и что они это проверяли. Но если говорить о стандартных тестах по математике/биологии со стандартными формулировками вопросов, то в тренировочной выборке могли попадаться очень сильно похожие. А в этом случае то, что GPT-4 так хорошо справляется с такими тестами, уже не кажется удивительным: модель могла просто запомнить (memorize) вид ответа.

Одно из свидетельств, что такое может быть — твит Horace He, который протестировал GPT-4 на задачах с Codeforces. И на задачах, опубликованных до 2021 года, модель показала отличный результат — 10/10 задач. На задачах, опубликованных после 2021 года результат был 0/10. Статья также утверждает, что это не единственное подобное свидетельство. Это может означать, что GPT-4 таки запоминает некоторые виды промптом, а не "интеллектуально их решает".

Мне кажется, что это делает тестирование LLM очень сложным. Как тогда вообще понять, почему модель хорошо повела себя на какой-то из задач: действительно ли она их решает, или просто запоминает? Если бы я была LLM-рисерчером, я бы, наверное, заинтересовалась этим вопросом и попыталась придумать техники, как это понимать) Или, может быть, такие уже есть, но я о них просто не знаю?

📄 Статья
Подборка рассылок по AI

Подумала тут, что иногда мои посты получаются из статей, которые я получаю на почту из рассылок. Вчерашний пост вот был по статье из MIT Technology Review. Собрала в этом посте рассылки журналов, на которые подписана сама. Вдруг кому-то тоже будет полезно)

1️⃣ MIT Technology Review. Это журнал о технологиях в разных сферах: AI, бизнесе, climate change и пары других (все топики тут). Их рассылки — The Download и Weekend Reads. Там обычно собраны самые яркие статьи за последние дни/неделю. Часто попадаются интересные с рассуждениями вокруг технологий и AI и интервью с известными учеными (как, например, статья из поста выше).

У MIT Tech Review есть еще подкаст по AI "In Machines We Trust". Там — разговоры с разными людьми на разные темы AI. Темы выпусков правда довольно интересные.

2️⃣ Wired. Это журнал со статьями на разные темы, от культуры до технологий. Раздел чисто с AI — Artificial Intelligence Database. У журнала есть несколько рассылок на разные темы, полный перечень тут. Я подписана на Wired Weekly и Wired Fast Forward. Последняя — специализированная про AI. Там тоже попадаются интересные статьи с рассуждениями вокруг технологий и AI.

Ремарка: MIT Tech Review и Wired хорошо дополняют друг друга, статьи там в основном на совсем разные темы. Поэтому имеет смысл читать оба журнала.

3️⃣ Synced. Мой фаворит) Это журнал с обзорами AI Technology & Industry. У них даже есть отдельные разделы со статьями на темы Computer Vision & Graphics, Natural Language Tech, а статьи более приближены к научному миру и обозревают не какой-то феномен в AI, а отдельные новые статьи на узкие темы. Например, вот статья с обзором LLama-2.

Их рассылка — Synced AI Weekly, и она также более "научная", чем рассылки из пунктов выше. В ней обычно присылают ссылки и превью на 5-6 недавних интересных научных (ну или хотя бы околонаучных) статей, а также дайджест AI-мероприятий в мире. А еще дайджест открытых вакансий в AI-институтах и компаниях). Вот из этой рассылки у меня получалось прямо много постов в канале. Я просто просматриваю превью статьи в рассылке, и если меня заинтересовало, открываю саму ту статью.

4️⃣ The Batch от DeepLearning.AI. Этот журнал мне кажется более "обзорным": в нем в статьях часто приводится дайджест событий AI-мира. Но вот в разделе "Machine Learning Research" они выпускают статьи-обзоры на научные работы, почти как у меня в канале. Есть статьи и на другие темы — AI & Society, Culture и т.п. (а еще отдельные статьи по теме AI Careers). Подписаться на их рассылку можно тут.

Вроде бы все. Если вы знаете еще хоршие журналы/рассылки по AI, буду благодарна, если поделитесь в комментариях)
FILIP: CLIP, у которого близость можно измерять между эмбеддингами отдельных патчей картинки и токенов текста.
(статья еще с 2021, но я реально об этой идее узнала вот прям недавно)

Как работает обычный CLIP:
У обычного CLIP text и image encoder — это трансформеры. Image Encoder — это ViT, который разбивает картинку на 16х16 патчей, и на последнем слое выдает эмбеддинги каждого патча + эмббединг специального CLS токена. Text encoder — трансформер, который выдает эмбеддинги токенов текста. Текст при этом обрамляется токенами <BOS> и <EOS>.
Эмбеддинги CLS токена картинки и <EOS> токена текста считаются эмбеддингами картинки и текста соответственно. И CLIP учится делать так, чтобы эмбеддинги CLS токена картинки и <EOS> токена текста были близки для пар (картинка, описание этой картинки), и далеки для пар (картинка, текст), где текст не является описанием картинки.

Что предлагают в FILIP:
Предлагают чуть изменить лосс-функцию CLIP так, чтобы можно было измерять близость между эмбеддингами всех патчей картинки и всех токенов текста. Т.е. чтобы можно было понять, какая часть картинки соответствует какому куску текста.

Для этого предлагают на каждой итерации обучения делать вот что. Пусть нам пришла пара (картинка, текст). Прогоняем их через image и text encoder и делаем следующее:
- для каждого эмбеддинга патча картинки I_i ищем самый близкий эмбеддинг токена текста T_imax;
- считаем общую близость картинки к тексту L_IT как среднее произведений I_i T_imax для каждого патча картинки;
- то же самое делаем в обратном направлении: т.е. для каждого эмбеддинга токена текста ищем самый близкий эмбеддинг патча картинки и считаем общую близость текста к картинке L_TI;
- итоговая близость картинки и текста L = L_IT + L_TI
- делаем итерацию обучения сети с помощью L и contrastive loss. Т.е. если пара (картинка, текст) соответствуют друг другу, мы максимизируем L, если не соответствует — минимизируем.

Кажется, что такое обучение заставляет FILIP выучивать больше деталей об изображениях. Это подтверждается экспериментами по zero-shot text-to-image и image-to-text retrieval: на 2021 год FILIP брал SOTA. По сравнению с CLIP прирост был очень существенный.
Ну и еще такой вид обучения позволяет с небольшими дополнениями построить prompt-based сегментацию на основе FILIP. Но об этом в следующий раз =)

Напоследок надо сказать, что такой вид обучения занимает гораздо больше времени и памяти. Авторы статьи решают это тем, что уменьшают размер эмбеддингов до 256 и точность значений эмбеддингов с fp32 до fp16.

📄Статья
У DeepMind две новости:

1. В Vertex AI’s Model Garden (гугловая клауд-платформа для работы с модельками через API) добавили три новые модели: PaLM 2, Codey и Imagen. Мне тут интересен Imagen, т.к. это когда-то была SOTA text-to-image моделькой, доступ к которой Гугл не выдавал никому, даже рисерчерам (я проверяла). А теперь вот, наконец, можно будет играться с Imagen по API хотя бы. Правда, пока это будет доступно только ограниченному кругу людей.

2. Вместе с Imagen Гугл выкатывает тулзу SynthID для добавления скрытых watermark'ов на сгенерированные картинки. SynthID состоит из двух моделей — одна для добавления watermark на картинку, вторая для ее детекции на входной картинке.
Заявляется, что:
- watermark не виден вооруженным глазом и не влияет на качество изображения. Т.е. watermark — это небольшое контролируемое изменение некоторых пикселей изображения. Такое, что вторая нейросеть-детектор может по входящей картинке распознать, что она была изменена именно этим способом;
- watermark устойчив к несильным изменениям картинки (добавление шума/сжатие, т.е. все то, что происходит с картинками в интернете);
- нейросеть-детектор способна распознать watermark, даже если только часть картинки была сгенерирована Imagen;
- watermark можно будет добавлять к свом картинкам по желанию.

Статьи по SynthID не выкатили. Интересно, выкатят ли вообще. Но мне было бы очень интересно почитать, как именно устроена тулза. Правда, если выкатят статью, появятся тулзы, как эту штуку обойти ¯\_(ツ)_/¯

Ну и напомню по теме: добавление скрытых watermarks на сгенерированные картинки и обучение сетей для их детекции — это ответвление задачи fake images detection. Сама по себе задача детекции сгенеренных картинок (без всяких вотермарков) довольно сложна. Если интересно, вот тут я писала обзор подходов к ее решению.
Ну и раз уж мы заговорили о теме детекции сгенерированного контента, то с текстами дела обстоят так же плохо. Детектить их супер сложно. Сейчас не существует подхода, который бы давал приемлемое качество детекции.

Я текстами не занимаюсь, но ими занимается Юра, автор канала New Yorko Times. У него было несколько постов по этой теме:
- Доклад автора на DataFest-2023 про детекцию сгенерированного научного контента;
- Даже OpenAI не может сделать нормальный детектор;
- Важность задачи детекции фейкового научного контента. Индустрия paper mills. Можно почитать хотя бы ради того, чтобы ужаснуться, как в "научной среде" торгуют авторством статей;
- Факап на соревновании по детекции сгенерированного контента;
- Обратная задача: генерация фейковых текстов, которые для детекторов выглядят настоящими;
- Обзор детекторов фейкового текста.
(Юра, завел бы ты хэштег для fake_text_detection, ато постов накопилось)

А еще Лаида занимается текстами. И у нее есть научные статьи по детекции сгенерированного текста на основе исследования матриц внимания BERT-подобных моделей. Полгодика назад она писала об одной такой статье пост у себя на канале.

Если я что-то пропустила, может быть, авторы этих каналов придут в комментарии и что-то добавят. А в целом, я бы советовала прочитать эти посты хотя бы затем, чтобы ясно понять, насколько эта задача сложна. И в следующий раз, когда появится супер-стартап, заявляющий, что "мы детектируем фейковые тексты с точностью 99%", вы такому стартапу деньги не давали)
В Яндекс Лицее открыт набор на годовые программы обучения.
#промо

Яндекс Лицей — это годовые курсы по программированию для школьников 8‒11-х классов и студентов ссузов 1-2-х курсов. Среди направлений обучения — программы по Python, Go, разработке игр, Machine Learning, Django, анализу данных и Big Data. Можно выбрать офлайн- или онлайн-форму обучения.

На курсах — интенсивное погружение в IT, работа над групповыми проектами и много общения с единомышленниками. Очень много практики. Преподаватели — опытные профи, которые работают с ИИ, обучают голосовых помощников, пишут код и руководят командами разработчиков. Курсы заложат твердый фундамент для будущей учебы в ВУЗе или работы в IT-компании.

Обучение бесплатное. Нужно только успешно пройти вступительные испытания.

Более подробная информация о Лицее и поступлении — по ссылке. Ждем вас!
Небольшая задачка по предобработке признаков в ML.

Раньше я иногда вела семинары по feature engineering в классическом ML, и для них моим любимым датасетом были данные вот с этого соревнования (реальное соревнование, проводилось много лет назад). Тут по информации о клиенте банка нужно было предсказать, возьмет ли клиент потребительский кредит у нашего банка, или выберет другой. Информация о клиенте включала стандартные поля вида "пол", "возраст", "уровень дохода" и т.п. Разумеется, в доступе на boosters.pro был только train set, но я просто делила его на train-test для занятия и соревы на каггле для учеников.

Нравился мне этот датасет тем, что в нем признаки очень разного рода, и на них можно было показать много разных вариантов предобработки и нюансов. При этом в целом признаков не очень много, что позволяет легко на данные смотреть и с быстро с ними работать, не перегружая мозг (не то что стандартный датасет house prices, от которого у новичков немного ужас).

Так вот. Есть в этом датасете признак "living_region". В этом признаке словами был написан регион РФ, в котором живет клиент. Например,
"Башкортостан респ."
"Чувашия"
"Москва гор."

Мало того, что признак был грязный — один и тот же регион мог быть записан по-разному ("Москва" или "Москва гор."), так в нем было еще и очень много значений (80+, как регионов РФ). Вставал вопрос, как этот признак предобработать. Одна из простых идей — скриптом привести все имена регионов в один формат и бахнуть бинаризацию категориального признака. В этом случае из-за того, что некоторые регионы встречались в выборке нечасто, возникало два рода ситуаций:
- какой-то бинарный признак (т.е. какой-то регион) встречался в тренировочной части выборки, и не встречался в тестовой части;
- какой-то бинарный признак (т.е. какой-то регион) встречался в тестовой части выборки, и не встречался в тренировочной части;

Понятно, что в обоих случаях модель из sklearn, обученная на train части, не сможет сделать предсказание на тестовой части (тупо кол-во столбцов в данных разное). Вопрос: что в таком случае правильно делать?

Т.е. вопрос в следующем: что правильно делать, если:
- в тестовой части данных оказался признак, которого нет в тренировочной?
- в тестовой части данных не оказалось признака, который есть в тренировочной?

P.S. Связанный интересный вопрос — как вообще лучше предобрабатывать признак "регион" в данных =)
Больше года назад написала вот этот пост про Kaedim — стартап, который предлагал "AI-тулзу" для генерации 3D-моделей по рисунку пользователя за считанные минуты. Писала, что есть основательные подозрения, что внутри тулзы — совсем не AI, а тупо реальные люди сидят рендерят 3D-модели.

И вот прямо на днях вышло расследование от 404 Media про этот Kaedim. Tl;Dr такой: есть все основания полагать, что там реальные люди рисуют модельки, а AI там нет (ну или прям почти нет). Поинты такие:
- Источники, близкие к разработкам компании, говорят, что AI там очень плох. Условно вместо 3D-дерева получается непонятное облако;
- Kaedim нанимает 3D-художников по всему миру. Среди условий — умение в течение 15 минут сгенерировать приемлемую 3D-модель объекта по скетчу. В компании ответили на это так: видите ли, эти люди — quality control engineers, которые "докручивают то, что выдала AI-модель, до идеального состояния перед выдачей пользователю" и "дают фидбек о AI-инженерам для развития AI-модели". Тут надо посмотреть в пункт 1: говорят, модель там вообще не способна выдать что-то, что достаточно "докрутить" и о чем можно дать фидбек;
- Модельку свою Kaedim не показывает совсем. Не показывают даже примеры ее сырых генераций, объясняя тем, что "they showcase sensitive IP information about our ML approach" (не совсем даже понимаю, что это значит);
- После появления всех этих слухов и вопросов компания немного изменила текст лендинга своей тулзы. Сначала там было AI-generated, и труд людей не упоминался совсем. Сейчас там написано, что группа художников улучшает итоговый результат модели перед выдачей.

Вот так. Стоит пользование Kaedim, к слову, $150 за 10 моделей. А судя по найденным описаниями вакансий, художникам платили $1-4 за каждую работу ಠ_ಠ

Если честно, когда я увидела эту статью, меня больше всего удивило то, что Kaedim вообще до сих пор существует. Неужели они надеются допилить свою AI-модельку до нормального состояния, а потом показать, что типа "ну вот так оно и работало"?

P.S. За время существования Kaedim один из его основателей успел побывать в списке Forbes 30 Under 30. Тут невольно вспоминаются слова, что попадание в этот список хорошо коррелирует с наличием уголовного дела 🌝
Example Packing в LLM

Для ускорения обучения transformer-based LLM часто используется такой трюк как example packing. В этом посте кратко расскажу, что это за трюк и в чем его польза.

Пусть мы учим LLM на задачу классификации предложений. Любой элемент данных (т.е. предложение), которое LLM принимает на вход, должно быть одной и той же длины. Поэтому обычно выбирается некоторая максимальная длина предложения max_len, и предложения из датасета длиннее max_len обрезаются до max_len, а предложения меньшей длины дополняются в конце специальным токеном <PAD> до max_len. И каждый батч при обучении LLM имеет размер (batch_size, max_len).

Очень часто, однако, в текстовых датасетах встречается довольно мало длинных предложений и очень много коротких. И при формировании батча большинство предложений имеют много токенов <PAD> в правой части. Кажется, что это — довольно неэффективное расходование вычислительных ресурсов, и можно было бы поступить как-то умнее.

Как-то умнее — это, как раз, example packing. Идея тут такая: давайте при формировании батчей будем соединять несколько коротких предложений в одно длинное. Например, если max_len=30, то возьмем три предложения длины 10, 5 и 13, соединим в одно длины 28, и в конце дополним двумя токенами <PAD>. И формируем батч из таких "запакованых" предложений.

Чтобы это работало, нужны еще два небольших изменения в input и output модели. Если мы решаем задачу классификации, мы хотим, чтобы LLM выдавала отдельный ответ на каждый элемент в "запакованной" последовательности. Обычно у нас на выходе LLM один выделенный CLS токен (обычно это первый или последний токен текста), и на основе эмбеддинга CLS токена LLM выдает распределение вероятностей на классы. Теперь давайте сделаем вот что: во-первых, выберем значение max_seq_per_pack, т.е. максимальное количество предложений, которые мы можем "запаковать" в одну последовательность. И теперь у нас будет не один, а max_seq_per_pack CLS токенов. Например, пусть это будут последние max_seq_per_pack токенов. И на основе их эмбеддингов на последнем слое LLM мы и будем считать max_seq_per_pack распределений вероятности на классы, один на каждое из возможных предложений внутри элемента батча.

А еще надо дать LLM возможность понять, где внутри одного запакованного элемента находятся токены первого предложения, где — второго, где — третьего и т.п. Дать ей это понять нужно затем, чтобы self-attention для токена одного предложения не мог "смотреть" на токены из других предложений. Для этого вместе с входной последовательностью в LLM подается маска внимания (attention mask). Выглядеть она может примерно так:

packed_sequence: Мама мыла раму Я люблю дождь <PAD> <PAD>
attention_mask: 1 1 1 2 2 2 0 0

Т.е. в маске внимания указано, какой токен принадлежит какому предложению. Это используется внутри self-attention, чтобы корректно считать матрицы внимания.

Ну и, надо сказать, чем хорош этот трюк с example packing. Вспомним, что в Transformer-based LLM обрабатывают все элементы поданной на вход последовательности параллельно. Используя example packing, мы добиваемся, что несколько элементов данных теперь могут быть обработаны параллельно. Так можно получить хороший буст по времени обучения и инференса модели: аж в 6-9 раз. Такой сильный прирост обусловлен тем, что в текстовых датасетах чаще всего большинство предложений — короткие, и их "запаковывание" очень сильно уменьшает время, за которое можно сделать одну эпоху обучения.

И пара последних замечаний:
- Существуют разные алгоритмы того, как выбирать элементы датасета для запаковывания в одну последовательность. Это прям целая наука;
- Example Packing можно использовать далеко не только для задачи классификации текстов, но и для многих других. Просто формат получения ответа из LLM нужно будет поменять чуть по-другому.

Подробнее почитать про example packing можно вот в этой статье. Статья очень хорошая: тема разобрана тщательно, понятным языком, с картинками, видео и кодом.
NaViT: как адаптировать example packing для Vision Transformer, чтобы научиться обрабатывать картинки произвольных размеров.

Обычно что CNN, что ViT обучают на картинках одного размера. Для этого все картинки в датасете приводят к одному размеру либо с помощью resize, либо с помощью добавления padding к картинкам маленького размера. Первый вариант ухудшает общее качество работы сети, а второй очень неэффективный.

Конечно, люди уже давно думали над тем, как бы эффективно научить модельки работать с картинками разных размеров. Из идей — FlexiViT и Pix2Struct. А недавно ребята из DeepMind придумали новую идею: они адаптировали example packing из LLM для Vision Transformer, что позволило ViT обрабатывать картинки разных размеров, и при увеличить эффективность обучения (т.е. подход требует меньше итераций обучения для получения того же качества, что оригинальный ViT)

Идея, собственно, как и у example packing в LLM: фиксируем длину инпута (кол-во патчей) и максимальное кол-во картинок max_seq_per_pack, которое можем соединить в одну последовательность. При обучении сэмплируем картинки разного размера, делим их на патчи (при этом каждую картинку можно делить на разное кол-во патчей), запаковываем патчи картинок в последовательности, дополняем при необходимости замаскированным токенами а-ля <PAD>, подаем в модель. Точно так же, как в LLM, заставляем self-attention для каждого патча смотреть только на патчи из той же картинки. И NaViT для классификации картинок выдает max_seq_per_pack CLS эмбеддингов — по одному на каждую потенциальную картинку в input.

И еще несколько замечаний к NaViT:
- При обучении и инференсе NaViT можно подавать модели на вход одну и ту же картинку, приведенную к разным размерам (256x256, 1024x300, etc). Семплирование размернов картинок при обучении повышает качество модели.
- Чтобы NaViT мог работать с картинками разных размеров (включая такие размеры, которые не были в тренировосных данных), нужно чуть поменять создание positinal embeddings для патчей картинок. Авторы предлагают факторизованные positinal embeddings, отдельно по высоте и ширине картинки. Подробнее об этом в разделе 2.1 статьи.
- В NaViT авторы использовали такой трюк как variable token dropping, который тоже повышает эффективность обучения. Подробнее про подход можно прочитать в статье про Flip

Вот так. При обучении NaViT достигает качества ванильного ViT в 4 раза быстрее. Это, по сути, тот же эффект, что дает example packing в LLM. Также NaViT показывает эффективность в сеттинге, где ViT сначала предобучают на low-res картинках, а потом дообучают на high-res. Тут NaViT требует меньшее количество примеров для дообучения для достижения того же качества, что и ViT.

📃Статья
Иллюстрация к NaViT. Тут очень хорошо понято, как это все работает
Please open Telegram to view this post
VIEW IN TELEGRAM
💬 Вступайте в сообщество MLOps-инженеров в Telegram. Там публикуем дайджесты, обсуждаем новые инструменты и технологии.
#промо

В сообществе вы найдете:

▫️ Новости индустрии production ML;
▫️ Полезные статьи, инструменты и технологии;
▫️ Опыт коллег и лучшие практики.

Присоединяйтесь, чтобы получать новые знания от практиков MLOps и дата-аналитики: https://www.tg-me.com/+HF7-7UsKD5M2OTVi

Реклама ООО «Селектел» 2VtzqvLXnKi
Помните, рассказывала, как я в Кембридже на Хинтона ходила? Наконец выложили запись доклада, она вот. Доклад реально интересный с необычными мыслями, посмотреть рекомендую. Еще там очень интересная (я бы даже сказала, веселая) часть в конце с ответами на вопросы. Где-то даже слово "коммунизм" промелькнуло 🌝

А тут скажу еще вот что. В тех постах выше я рассказывала о той части этой лекции, которая касается опасности AGI. Но там была еще другая часть, первая. Касалась она аналогового железа и mortal computation. Эта идея вот про что (по крайней мере, как ее поняла я): смотрите, современные AI-модели не привязаны к конкретному железу (например, к одному компьютеру). Одну и ту же модель можно запустить на разных устройствах, и мы точно знаем, как эта модель устроена и работает. Можно сказать, что AI-модели "бессмертны": если даже сломать сервер, модельку можно будет перенести и запустить на другом серваке.

А что если отказаться от принципа бессмертия моделей? Что если подумать о том, чтобы создавать AI-агентов, которые были бы неотделимы от своего "железа"? Которые в процессе обучения могли бы учиться использовать свойства своего железа по-максимуму и даже подстраивать его под свои задачи?
Такой подход потенциально может дать два важных преимущества:
1. Модели подобного рода могли бы потреблять гораздо меньше энергии для работы. Например, возможно, мы могли бы использовать что-то типа аналоговых компьютеров;
2. Возможно, мы могли бы придумать, как "выращивать" железо с разными архитектурами и свойствами под решение определенных задач. Т.е. процесс обучения модели будет сводиться не просто к подбору численных значений фиксированных параметров, но и к подбору самой архитектуры.

Но тут возникает проблема: алгоритм обучения моделей backpropagation для такого не подойдет. Причины такие:
1. Он очень энергозатратный;
2. Для backpropagation нужно знать точное устройство модели и вид ее forward pass. А если мы добиваемся пункта два выше (учимся выращивать железо), то точный вид функции, которую будет выражать модель, нам будет неизвестен.

Короче, есть мотивация подумать о других способах обучения моделей. Которые подошли бы и "смертным" моделям. А дополнительной мотивацией еще может служить то, что человеческий мозг, по всей видимости, ничего похожего на backprop не делает. То есть, точно можно придумать что-то еще и для AI.

Так вот. Первая часть Кембриджской лекции была как раз про эту идею отказа от "бессмертия" моделей. А конкретнее, переходы в лекции были такими:
- описание идеи "смертных" моделей;
- идея, как можно такие модели учить без backprop;
- а что если у нас есть куча "смертных" моделей: как заставить их взаимодействовать и делиться знаниями друг с другом?
- дистилляция — хороший способ делиться знаниями с моделью, но в современных моделях (включая LLM) она сейчас используется неэффективно;
- что если куча LLM-like моделей получали бы знания из реального мира, а не из интернета, и делились ими друг с другом;
- How AI can take control и далее то, о чем я писала в прошлых постах.

Вот так вот от идеи аналоговых компов мы пришли к "AI захватит мир🙃"

Напоследок снова скажу: посмотреть лекцию советую. Это может хорошо помочь посмотреть на привычный AI с немного другой стороны. После этого точно появляется, над чем подумать.

📽Ссылка на лекцию
И еще к посту выше. Хинтон об идее аналоговых "смертных" моделей и способах их обучения думал уже давно. И одна из идей, которая у него родилась из этих размышлений — алгоритм обучения сети Forward-Forward. Это идея того, как обучать нейросеть с помощью двух forward-pass'ов вместо использования backward pass. При этом точный вид forward pass знать не нужно. Т.е. это потенциально та идея, которую можно было бы применить к "смертным" моделям, описанным выше.

По статье о Forward-Forward у Хинтона есть доклад на конференции в Морокко: Learning Deep Neural Networks. Там в начале тоже есть небольшой рассках про мотивацию исследовать что-то кроме backpropagation. А еще там есть часть про GLOM: идею Хинтона о том, как сделать CV-модель, имеющую понимание структурной иерархии объектов. Я эту идею упоминала в своей статье на Хабре про структурное мышление и ИИ.

Также про эти две вещи (смертные модели и Forward-Forward алгоритм) есть два хороших поста (этот и пост ниже) в канале gonzo-обзоры ML статей. Там я и нашла ссылку на лекцию Хинтона в Морокко.
Всем привет! Как вы поняли, в последний месяц я снова закопалась в делах и пыталась понять, как нормально жить эту жизнь (спойлер: поняла не особо). За это время, конечно, произошло много всего (чего стоит один Сэм Альтман и еще 700+ человек в OpenAI, которые прямо сейчас снимаются в увлекательном сериале про ИИ и бизнес). Но я тут начну не с таких громких новостей, а с чего-то поменьше. Например, расскажу про препринт статьи, в которой я стала соавтором =)

В начале осени я проходила мимо Лаиды и ее коллег, которые пытались решать задачу детекции сгенерированных текстов. Постановка задачи необычная: это не просто задача бинарной классификации типа "этот текст реальный", "этот текст сгенерированный". Задача ставится так: есть текст из 10 предложений. Известно, что начало текста (1+ предложений) написано человеком. Но, начиная с какого-то предложения, текст может стать сгенерированным. Задача простая: по тексту определить номер предложения, с которого начинается генерация. Проще говоря, на этом можно поставить задачу классификации на 10 классов: с какого номера предложения начинается сгенерированный текст.

Задача имеет отношение к реальности: многие люди пишут для ChatGPT начало текста и просят его дописать. Так что многие тексты получаются не полностью сгенерированными, но частично. И полезно было бы иметь детекторы, которые могли бы определять место, где текст перестает быть написанным от руки.

Задача усложняется тем, что тексты разделены на несколько доменов по жанру (газетные статьи/рецепты блюд/...). И можно учить модель на текстах одного домена и проверять на текстах другого. Это важно, т.к. хочется в идеале получить детектор, который мог бы детектить фейковые тексты любого жанра.

В завершение описания задачи надо сказать, что задача новая. В такой постановке задачи практически нет работ. Поэтому наша работа в статье состоит главным образом в том, чтобы исследовать эту задачу, попробовав на ней модели разного вида.

Итак. Проходя мимо коллег, я заметила, что у них были несколько идей решения этой задачи. Среди них:
- бейзлайн: LogReg/GradBoost на средней длине слов в предложении. Было замечено, что часто распределение длин предложений, сгенерированных LLM, отличается от того, что пишут люди. Этот бейзлайн дает ~20% acc in-domain и ~10% acc out-of-domain (по сути, случайное угадывание)
- лучшая модель — RoBERTa, дообученная в supervised режиме на эту задачу. Она дает 45-55% acc in-domain и 13-31% acc out-of domain. То есть, довольно сильно переобучается;
- были и еще другие методы, которые показывали результаты между двумя описанными выше. О них можно подробнее почитать в статье.

Так вот. Проходя мимо этого всего у меня возник вопрос: почему не попробовать очевидный подход с log likelihood?
Идея такая: берем LLM. Например, GPT-2. Для каждого префикса текста считаем распределение вероятности на следующий токен. Считаем log likelihood реального токена текста на основе этого распределения. Ожидается, что фейковый текст будет для GPT-2 казаться более "естественным", потому что его генерировали модели похожего устройства. То есть, ожидается, что там, где текст переходит от реального к сгенерированному, будет резкий скачок в log likelihood.

Идея модели тогда может быть такая: считаем log likelihood для каждого токена каждого предложения. Затем для каждого предложения усредняем log likelihood его токенов. В итоге каждый текст начинает представляться массивом чисел длины 10. На этом всем обучаем что-нибудь простое (GB/LogReg) на задачу классификации на 10 классов.

И это работает: дает 30-40% acc in-domain и 20-35% acc out-of-domain (причем 20% — это на оч плохом домене). То есть, в in-domain ведет себя похуже Роберты, но зато показывает лучшую переносимость между доменами. И если посмотреть на коэффициенты Logreg, то можно заметить, что LogReg действительно учится искать "скачок" в log likelihood, и на этом основывает свое решение.

Вот так. Статья вот. Текст, правда, очень сырой, и мы будем его сильно править перед подачей на конфы. Ну и у меня еще пара идей появились, которые я тут хочу попробовать.
2025/07/06 08:19:20
Back to Top
HTML Embed Code: