gonzo-обзоры ML статей – Telegram
gonzo-обзоры ML статей
24K subscribers
2.75K photos
2 videos
3 files
1.36K links
Авторы:
Гриша Сапунов, ранее руководитель разработки Яндекс-Новостей, ныне CTO Intento. Области интересов: AI/ML/DL, биоинформатика.
Лёша Тихонов, ранее аналитик в Яндексе, автор Автопоэта, Нейронной Обороны... Области интересов: discrete domain, NLP, RL.
Download Telegram
Пара анонсов (от @che-shr-cat).

1) Во вторник 7 июля в 14:30 МСК буду на вебинаре NTR рассказывать про трансформеры.

Ссылка на регистрацию тут: https://us02web.zoom.us/s/83517251112

Архив предыдущих вебинаров и программа будущих тут: https://www.ntr.ai/webinar

Пост в ФБ про этот вебинар: https://www.facebook.com/nick.mikhailovsky/posts/10158683303693459

Доклад является продолжением и углублением рассказа на недавнем DevParty https://www.youtube.com/watch?v=KZ9NXYcXVBY с акцентом на том, как устроены внутри некоторые интересные трансформеры.

Prerequisites: понимание как работает базовый трансформер.
Если ещё не понимаете, прочитайте http://jalammar.github.io/illustrated-transformer/ или посмотрите запись последней лекции (#12) с курса https://github.com/che-shr-cat/deep-learning-for-biology-hse-2019-course
2) В пятницу 17 июля в 18:00 планирую разобрать на биоинформатическом семинаре свежую статью от Salesforce "BERTology Meets Biology: Interpreting Attention in Protein Language Models" (https://arxiv.org/abs/2006.15222).

Интересующимся применением DL в биологии также рекомендую канал и чат группы на базе ФББ МГУ, в которой уже не первый год проводятся разборы нейросетевых статей.

Подключайтесь и участвуйте! DL ещё много всего должен изменить в биологии и медицине!

Канал: https://news.1rj.ru/str/dl_bio
Чат: https://news.1rj.ru/str/fbb_dl_chat

Подробности про сам доклад будут в чате ближе ко времени.
👍1
Big Self-Supervised Models are Strong Semi-Supervised Learners
Ting Chen, Simon Kornblith, Kevin Swersky, Mohammad Norouzi, Geoffrey Hinton
Статья: https://arxiv.org/abs/2006.10029
Код: https://github.com/google-research/simclr

Продолжаем серию про большие модели. Теперь картиночная SimCLRv2 от команды Google Brain с Хинтоном. Это пока не пиллиарды и бразиллионы параметров, как в GPT-3, но тем не менее.

В каком-то смысле это адаптация идей GPT (там работы назывались похоже — “Language Models are Unsupervised Multitask Learners”, “Language Models are Few-Shot Learners”) на картиночную область, также хитрым претрейнингом добиваемся получения большой модели, которую затем легко дообучить под конкретную задачу.

Авторы обучают глубокую и широкую модель (ResNet) в режиме self-supervised и затем файнтюнят на небольшом числе размеченных примеров (в случае ImageNet это стандартные сабсеты на 1% и 10%) и ещё потом всё дистиллируют.

Итоговый пайплайн таков:
#1. Unsupervised pretraining используя SimCLRv2 (наследник также весьма свежего SimCLR, https://ai.googleblog.com/2020/04/advancing-self-supervised-and-semi.html)
#2. Supervised fine-tuning на небольшом числе размеченных примеров.
#3. Дистилляция на неразмеченных примерах из целевой задачи.

Обо всём по порядку.

Оригинальный SimCLR первой версии (“A Simple Framework for Contrastive Learning of Visual Representations”, https://arxiv.org/abs/2002.05709) использует подход contrastive learning, когда хорошие представления выучиваются через максимизацию согласия между трансформированными изображениями. Представления картинок, произошедших от общего оригинала, должны получаться близкими, а от разных — далёкими.

Каждая картинка в батче дважды аугменируется (случайный crop, изменение цвета, Gaussian blur), прогоняется через ResNet и затем MLP, а после считается contrastive loss между всеми позитивными парами (негативные пары явно не сэмплятся, но это все остальные комбинации картинок внутри батча, они влияют на нормализацию лосса).

SimCLRv2 отличается в трёх аспектах:

1) Более глубокий и широкий ResNet (вместо ResNet-50 берём ResNet-152 с 3x больше каналов и Selective Kernels (https://arxiv.org/abs/1903.06586). Даёт +29% относительного улучшения по top-1 accuracy при файнтюнинге на 1% размеченных картинок.
2) Нелинейная часть сети, projection head (MLP после ResNet), становится глубже. SimCLR отбрасывала эту часть после предобучения, здесь делаем файн-тюнинг со среднего слоя этой части. Ещё +14% относительного улучшения.
3) Добавляется механизм памяти из MoCo (https://arxiv.org/abs/1911.05722). Ещё где-то +1%.

После предобучения и файнтюнинга делают дополнительную дистилляцию без меток, когда уже обученная сеть-учитель предсказывает метки неразмеченной части (уже новой задачи), а сеть-студент пытается к этому предсказанию приблизиться. Метки, если есть, в процедуру тоже несложно добавить. Дистиллировали в такую же архитектуру (self-distillation) или в более компактную.

Обучали на 128 Cloud TPUs, во время файнтюнинга и дистилляции делали случайные кропы и горизонтальные развороты.

Результаты хорошие.

Большие модели более label-efficient и улучшаются намного сильнее на небольшом числе примеров. Более глубокие projection heads также помогают (выучивают более качественные представления), особенно когда размеченных данных мало. Дистилляция только по неразмеченным примерам работает прекрасно, и небольшое число размеченных мало что к ней добавляет.

Из философски интересного здесь наблюдение, что более тяжёлые модели на небольшом числе размеченных примеров генерализуют лучше, хотя у них есть все шансы лучше заоверфититься. И это хорошее наблюдение, которое показывает, что в некоторых случаях, когда дополнительные данные добыть реально трудно, возможно, стоит инвестировать в обучение более тяжёлых моделей.

Ещё из интересного, ощутимо бьют 100%-supervised baseline (здесь правда может быть корректнее сравнивать по computational budget или чему-то похожему, ибо SimCLR внутри по сути делает много всякой аугментации данных)
This media is not supported in your browser
VIEW IN TELEGRAM
An illustration of the proposed SimCLR framework. The CNN and MLP layers are trained simultaneously to yield projections that are similar for augmented versions of the same image, while being dissimilar for different images, even if those images are of the same class of object. The trained model not only does well at identifying different transformations of the same image, but also learns representations of similar concepts (e.g., chairs vs. dogs), which later can be associated with labels through fine-tuning.
Contrastive Code Representation Learning
Paras Jain, Ajay Jain, Tianjun Zhang, Pieter Abbeel, Joseph E. Gonzalez, Ion Stoica
Статья: https://arxiv.org/abs/2007.04973
Код: https://github.com/parasj/contracode

Про большие модели продолжу в следующий раз, а сейчас расскажу про ещё один кейс использования contrastive learning, но теперь для задачи работы с кодом! Благо вышла свежая работа от команды из Беркли.

Как и в случае SimCLR, идея в том, чтобы в режиме self-supervised с применением contrastive loss выучить какие-то интересные представления для кода, на которых потом можно файнтюнить интересные и полезные задачи -- суммаризацию кода, предсказание типов, автокомплит, определение ошибок и т.д.

Потенциал идеи огромен. Как минимум появятся более удобные тулы, позволяющие программистам удобнее и быстрее создавать надёжный код. Как максимум, генерация неотличимого от человеческого кода может стать обычным делом, как сейчас происходит с языком. Кстати, если вы ещё не видели примеры, как GPT-3 (зафайнтюненый на гитхабе) умеет писать питоновский код по текстовому описанию функций (https://www.youtube.com/watch?v=fZSFNUT6iY8) или отвечает на вопросы телефонного интервью по Ruby (https://twitter.com/lacker/status/1279136788326432771, этот вроде дефолтный), гляньте, это просветляет.

Проблема с кодом -- это отсутствие больших размеченных датасетов. Можно, конечно, заходить со стороны генерации данных, но получается несколько однобоко, по сравнению с реальным кодом. Есть неразмеченные, и с ними надо что-то делать. Self-supervised pre-training как раз подходящий инструмент для этого.

Уже были заходы на прикрутить берт к коду, например, CodeBERT (https://arxiv.org/abs/2002.08155) или CuBERT (https://arxiv.org/abs/2001.00059), были и другие заходы на эмбеддинги для кода (code2vec, code2seq и т.п.), но, кажется, результат пока не очень.

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

По имеющимся программам определить их эквивалентность не очень-то просто (в общем случае, конечно, вообще нельзя), но можно попробовать нагенерить вариантов различными модификациями имеющихся программ (типа аугментация для кода). Авторский подход под названием ContraCode использует это для выучивания интересных репрезентаций через contrastive learning.

Для генерации эквивалентных вариантов используют переименование переменных, переформатирование кода, обфускацию, вставку и удаление мёртвого кода, сворачивание констант, конвертацию типов (например, true в 1), плюс ещё subword regularization (влияет на токенизацию, но в целом это кажется не про модификацию кода) и сэмплирование строк (например, выбирают 90% строк, что конечно приводит к не-эквивалентности, но зато работает как регуляризация).

На этих вариантах делают contrastive pre-training, минимизируя InfoNCE loss (https://arxiv.org/abs/1807.03748), который определяет близость программ через скалярное произведение их эмбеддингов. Позитивные пары берутся из пар эквивалентных программ (полученных трансформацией), негативные из прошлых программ (хранятся в большой очереди, шансов что там затерялось что-то эквивалентное, мало).

Для обучения используется процедура аналогичная MoCo (конкурент SimCLR, https://arxiv.org/abs/1911.05722), где один энкодер обучается SGD, а второй архитектурно идентичный momentum encoder через EMA (exponential moving average) параметров первого энкодера. Сам энкодер может быть разным, здесь проверяют на BiLSTM и трансформере.

После предобучения делают трансфер на задачу, добавляя специфичную для неё голову декодера (MLP, LSTM, трансформер).

Для предобучения берут датасет CodeSearchNet (https://github.com/github/CodeSearchNet) и из него только JavaScript. Размеченные программы из него же используют для задачи extreme code summarization (надо предсказать имя метода). Также берут датасет от DeepTyper (https://github.com/DeepTyper/DeepTyper) и на примерах TypeScript из него обучают вывод типа.
🔥1
Результат? Работает несколько лучше предыдущих методов. Бертоподобные репрезентации, работающие через MLM (Masked Language Model), показывают себя слабенько, а аугментации ContaCode помогают обычному supervised обучению даже без претрейнинга.

Может не выглядит как суперпрорыв по цифрам, но направление прикольное. И contrastive learning в последнее время всё более популярен. Следите за обоими!