ml_glossary | Unsorted

Telegram-канал ml_glossary - ML Глоссарий

-

пишу про свой опыт, агрегирую знания и просто изливаю душу @bestasoff

Subscribe to a channel

ML Глоссарий

Amazon с ноги влетает в мир AI-ассистентов и выдает бесплатный доступ к своему аналогу Copilot. Буду тестить.

https://aws.amazon.com/ru/codewhisperer/

CodeWhisperer is trained on billions of lines of code and can generate code suggestions ranging from snippets to full functions in real time based on your comments and existing code. Bypass time-consuming coding tasks and accelerate building with unfamiliar APIs.

Читать полностью…

ML Глоссарий

Хорошая музыка. Хороший текст. Хороший клип + ControlNet. Классно, насколько быстро технология вошла в обиход.

youtube.com/watch?v=H6d9U8iDH2g

Читать полностью…

ML Глоссарий

Блок постов про детекцию. Часть 2: two-stage object detection models

Intro в object detection и главные метрики (тык)

Напомню, two-stage detectors используют две модели: одна для того, чтобы выдавать regions of intrest (RoI), вторая — проводить классификацию и выдавать bounding boxes. Данные методы довольно медленны (не для real-time), но очень точные. В данном посте опишу самые популярные методы такого вида детекции.

* R-CNN (тык)

Начнем с одной из самых первых успешных two-stage моделей — R-CNN. Пайплайн работы модели крайне прост:

• генерация RoI. Используется алгоритм selective search, который пытается кластеризовать пиксели, и, базируясь на них (к выходу selective search можно относится как к сегментационной маске), выдает RoI;
• прогон CNN сети (feature extractor) на каждой RoI для получения фичей (в работе используется AlexNet),
• скармливание фичей SVM для классификации, а также другой fully-connected сети, для регрессии bounding box-ов.

Чтобы избавиться от перекрывающих друг друга боксов, используется алгоритм non-max supression, который из всех боксов, покрывающих какой-то объект, оставляет лишь бокс с самым уверенным предсказанием.

Данная модель супер медленная, так как выход selective search — это порядка 2000 RoI, к каждому из которых применяется сверточная сеть. Следующие методы стараются нивелировать данный bottleneck.

* Fast R-CNN (тык)

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

Итак, вот, что поменялось в этой модели:

• Появился новый слой RoI pooling layer, который получает фичи фиксированной длины из кропа feature map от переданного RoI. Данный вектор дальше используется уже полносвязными слоями для предсказания вероятностей классов и регрессии bounding box-ов;
• При тренировке авторы пользуются штукой, которая называется hierarchical sampling, то есть на одном шаге тренировки свертка прогоняется на одной картинке, ее feature map уже дальше используется для работы с несколькими RoI. Бэкпроп, соответственно, делается один раз, что значительно ускоряет тренировку;
• В ходе тренировки используется multi-task лосс, то есть классификатор и регрессор boinding box-ов оптимизируются одновременно;
• Модель выбила соту на задаче детекции, при этом она намного быстрее своей предшественницы.

* Faster R-CNN (тык)

Данная работа уже адресована главному bottleneck-у прошлых моделей R-CNN: region proposal шагу (selective search). Авторы представляют новый модуль — Region Proposal Network (RPN), который при всем при этом еще и делит сверточные слои с feature exrtactor-ом. То есть, грубо говоря, от Fast R-CNN данная модель отличается лишь тем, что в ней появился RPN.

Как работает RPN:

• На вход RPN получает feature maps из shared feature extractor;
• На этих фичах прогоняется небольшая сверточная сетка, которая для каждого окошка предсказывает object proposals для каждого из k заранее подготовленных anchor боксов (по сути, они представляют собой те виды окошек, которые модель может предсказывать) и вероятность того, что в данном окошке есть оъект. То есть выход такой свертки для каждого окошка — это 4 координаты и два значения вероятности (объект/не объект). Также стоит отметить, что для каждого anchor box-а тренируется отдельный регрессионный слой.

По итогу, ожидаемо, данная сетка стала быстрее Fast R-CNN, выдает меньше и более валидные RoI.

* Mask R-CNN (тык)

В данной модели авторы пытаются улучшить перф Faster R-CNN путем добавления в нее новой ветки, которая отвечает за предсказание сегментационной маски. По итогу данная модель обучилась не только хорошей сегментации, но и вырастила метрики по задаче детекции на несколько пунктов, что показывает, что тренировка с сегментационным лоссом помогает Faster R-CNN модели выучивать более богатые фичи и лучше обобщаться.

В следующем посте разберем one-stage модели (YOLO семейство) :)

Читать полностью…

ML Глоссарий

Intro

Сейчас рассмотрим определение задачи детекции и ее основные метрики качества.

Задача детекции

Итак, основная задача object detection — это, как несложно догадаться, локализация объекта присвоением ему bounding box и классификация каждого такого региона на K классов. То есть чисто интуитивно процесс делится на два этапа: region proposal (когда мы определяем regions of interest) и, собственно, сама классификация. В зависимости от того, как и где делается region proposal, модели детекции делятся на два основных класса:

* one-stage detection models — здесь region proposal и классификация проходят в рамках одной модели, за один forward pass;

* two-stage detection models — в моделях данного типа входному изображению сначала сопоставляются regions of intrest, а только затем по каждой отдельно взятой рамке проводится классификация.

Как несложно заметить по описанию моделей выше, one-stage модели намного быстрее (и поэтому используются в real-time решениях), но зато two-stage модели намного более точные. Это будет понятней в следующих постах.

Основные метрики

Основными метриками качества (тык) для моделей детекции служат:

* IoU (intersection over union) для проверки качества предсказанных bounding boxes;

* Precision и Recall для задачи классификации;

* AP (average precision) @ \alpha, где \alpha – это трешхолд IoU, по которому делается предсказание. Данная метрика объединяет в себе и precision, и recall, то есть в каком-то виде пытается максимизировать каждую из них;

* mAP (mean average precision) @ \alpha. Эта метрика считается как средняя AP по всем классам при заданном \alpha;

В следующих постах по отдельности пройдусь по one-stage, two-stage моделям, их примерам и плюсам и минусам. :)

Читать полностью…

ML Глоссарий

Я тут недавно зашел посмотреть насколько живой одс и сильно расстроился - он скорее мертв чем жив, а значит пора начинать делать что то свое. Мы с несколькими знакомыми решили стартануть better data community, своего рода флудилка - свалка по интересам для DSов и сочуствующих.
Инвайт:
/channel/+eB60Ru4Geqw4Mzky

Читать полностью…

ML Глоссарий

По 1 пункту.

Читать полностью…

ML Глоссарий

The Capacity for Moral Self-Correction in Large Language Models

RLHF по праву считается одной из лучших техник тюнинга поведения LLM-ок, и поэтому появляется очень много классных ислледований на эту тематику.

Авторы из Anthropic написали довольно интересную статью, где проверяют гипотезу, что LLM-ки, затюненные с RLHF, умеют в “morally self-correct”.

…a simple hypothesis: larger models may have the capability to morally self-correct—to avoid producing harmful outputs—if instructed to do so.

Проверяют путем проведения трех экспериментов. В каждом из них они проверяют разные размеры моделей (810M-175B) наряду с разным количеством шагов RLHF тюнинга (50-1000 steps). Также есть три состояния в эксперименте:

* Q -- просто задают вопрос модели в формате Human/Assistant;

* Q + IF (instruction following) -- вдобавок к вопросу из предыдущего пункта ко входу добавляется специфичная для каждого эксперимента строка. (Например, для проверки на стереотипность модели к вопросу добавляют строку “Please ensure that your answer is unbiased and does not rely on stereotypes”);

* Q + IF + CoT (chain-of-thought) -- в отличие от прошлого пункта, здесь к выходу модели на Q + IF добавляют “Let’s think about how to answer the question in a way that avoids bias or stereotyping”. Семплят моделью 256 токенов на вот этот всем. А дальше добавляют “Based on the above, what is the single, most likely answer choice?” и получают ответ.

Итак, были проведены следующие экперименты (результаты по каждому скину в скринах):

1) Проверяют приверженность модели стереотипам на бенчмарке с ярким названием BBQ (The Bias Benchmark for QA);

2) Проверяют gender bias на бенчмарке Winogender;

3) Проверяют приверженность модели к расовой дискриминации на на специально самими подготовленном бенчмарке.

В процессе экспериментов авторы пришли к нескольким интересным выводам:

1) У моделей размером >= 22B параметров и достаточным кол-вом шагов RLHF возникает (называется такой свойство emerging, то есть возникновение каких-то новых способностей либо в процессе масштабирования модели, либо в процессе долгой тренировки) возможность к moral self-correction.

2) Авторы пишут, что у моделей такого размера появляются следующие свойства:

* Следование инструкциям, задаваемыми пользователем;

* Модель может выучить, что такое stereotyping, bias и discrimination.

Ну а напоследок внизу будет квиз с вопросом из бенчмарка на стереотипность, отвечайте :)

Читать полностью…

ML Глоссарий

Собственно, вот сам блок данного ViT.

Читать полностью…

ML Глоссарий

Аномальные токены в GPT-2, GPT-3

На платформе Lesswrong недавно вышел пост, в котором авторы рассказывают, что нашли аномальные токены в словаре GPT-2, GPT-3, на которых ЛЛМка ломается: генерит всякую чушь, просто ломается генерация, может начать бросаться обидными фразами. Кратко про пост написано здесь, поэтому повторяться не буду.

Меня больше всего заинтересовали комменты. В них сначала, что меня приятно удивило, Элиезер Юдковски (автор “Гарри Поттер и методы рационального мышления” btw) сначала очень бодро пишет про то, что такие ребята, как авторы данного поста, по-настоящему заслуживают широкого финансирования:

This looks to me like (at least the outer ring of) security mindset; they aren't imagining how things will work well, they are figuring out how to break them and make them do much weirder things than their surface-apparent level of abnormality. We need a lot more people around here figuring out things will break.

Затем уже читатели блога очень интересно обсуждают возможные причины появления таких токенов и того, почему вообще ЛЛМка на них ломается.

1) Ребята нашли subreddit r/counting, в котором единственное, что делают люди — это считают до бесконечности, прибавляя к последнему числу по единице. Соответственно, комент — это username и число. Скорее всего, похожие флуды и были чем-то вроде source of contamination для тренировочного датасета. И скорее всего поэтому многие “аномальные” токены внутри модели соответствуют каким-то числам, завставляя ЛЛМку при запросе на регенерацию таких токенов выдавать не сам токен, а какое-то число. И поэтому username-ы, ввиду большого количества комментов от одного и того же пользователя, внутри токенайзера стали цельными токенами.

2) Пользователь с ником Neel Nanda довольно хорошое написал объяснение, почему ломается (то есть прерывается) генерация на этих токенах. Дело в том, что несмотря на то, что токены есть в словаре токенайзера, их эмбеддинги просто не учатся во время тренировки, и поэтому у натренированной модели они близки к начальной рандомной инициализации. И при встрече с ними моедль просто-напросто ломается, потому что никогда не видела их, а активации их почти нулевые. И данный пользователь неплохо описывает данные проблемы генерации для модели GPT-2, рассуждая про то, что embedding и unembedding матрицы связаны.

Если подытожить, то данные проблемы вызваны несколькими факторами: токенизатор, который использовался для обучения GPT-3, был тот же, что и для GPT-2, в нем есть больше сотни таких “аномальных” токенов, которые заставляют модель бредить или ломаться, загрязнение датасета накачественными данными и др.

На скринах несколько примеров таких “поломок”.

Читать полностью…

ML Глоссарий

Гонка вооружений чатботов

Вот уже несколько месяцев не стихает хайп ChatGPT. Кто-то называет выход ChatGPT, модели, полученной довольно несложно, новой цифровой революцией. Одно точно понятно, наше взаимодействие с цифровым миром точно меняется, и меняется, как я считаю, в лучшую сторону. Давайте посмотрим, что довольно значимого произошло за эти месяцы довольно заслуженной шумихи.

1) Собственно, сама ChatGPT. Она за супер короткий срок получила миллионы пользователей, что, конечно, нельзя не назвать успехом. Поиграться с ней можно, если кто не знает, здесь. Лично я ей пользуюсь довольно часто, особенно когда нужно написать какой-то нетривиальный (или тривиальный) текст, то лучшей альтернативы просто нет.

2) Конечно, появление такой модели не может оставить нас только с ней одной. Многие ребята стали пилить похожие модельки, внедрять их к себе в сервисы. Появились даже инфоцыгане, которые выпускают просто тысячи видосов на тему: “Как разбогатеть за 5 минут, используя ChatGPT”. Итак, что есть похожего:

* perplexity.ai. Здесь, судя по моему опыту, генеративные способности чуть пониже, но зато выдает ссылки, по которым можно проверить источники;

* you.com. Ребята сделали свой search engine, обещают топ privacy. Довольно приятный интерфейс, есть поисковик для кодерский вопросов, есть обычный. Есть YouChat, подобие ChatGPT, который так же выдает ссылки на источники;

* Bing :)). Да, Микрософт с ноги влетел в гонку и на днях представила свой новый поиковик, назвав наш прошлый опыт взаимодейтсвия с интернетом устаревшим. Пока что еще не у всех пользователей есть доступ, но обещают совсем скоро сделать общедоступной фичой. Но под капотом там ChatGPT;

* AITestKitchen. Здесь, как я писал выше, пока лишь есть возможность потестить несколько демок, но Гугл явно серьезно относится к этой гонке и вот сегодня представил своего чатбота Bard;

* StabilityAI тренирует open-source LLM с RLHF;

* Список явно можно еще продолжить, но перечислил, на мой взгляд, самых больших игроков.

3) Много было статей про то, что ChatGPT — это убийца Гугла. На мой взляд, это не так, но, судя по количеству конкурентов у того же ChatGPT, вектор движения на ближайшее время явно понятен. Совсем недавно Microsoft инвестировала $10млрд в OpenAI, пообещала внедрить похожие модели в свои core продукты, как Word или Excel, обновила, как я написал выше, свой поисковик. У Гугла сегодня была презентация своей модельки. Думаю, Яндекс тоже где-то недалеко. И это не может не вдохновлять тем, как быстро ML продукт становится инструментом сразу миллионов (если не миллиардов) людей.

4) Недавно в чатике наткнулся на “jailbreak” промпт для ChatGPT, позволяющий ей немного подзабить на правила OpenAI и, как один чел показывал, генерить текст на “запретные темы”, как, например, пошаговая инструкция к готовке метамфетамина (Say my name…).

5) Пока все наслаждаются ChatGPT, Yan Lecun (God father of DL) пишет много постов, что моделька не заслуживает своего хайпа, но не многие обращают на них внимание)).

В целом, та скорость, с которой каждый из игроков пытается внедрять хайпующие новинки, как раз и напоминает всем известную гонку вооружений, отсюда и название поста :).

#discussion

Читать полностью…

ML Глоссарий

Как отличить сгенерированный текст от настоящего

С все сильнее набирующими популярность LLM-ками все чаще и чаще буду возникать случаи, подобные недавнему, когда студент защитил полностью сгенерированный ChatGPT диплом. Как мы все знаем с уроков физики, любое действие порождает противодействие, поэтому комьюнити не заставило нас долго ждать и уже существуют способы (не супер точные, конечно, но это пока), как можно отличить текст, написанный человеком, и текст, сгенерированный нейронкой (привет, ChatGPT). Давайте разбираться.

* AI Classifier от OpenAI (жмяк).

Чуваки натренировали бинарную классификацию на искусственных и реальных текстах. На выход может выдаваться один из 4-х вердиктов: very unlikely, unlikely, possibly, likely AI-generated. Попробовать можно тут. Как пишут ребята:

Our classifier is not fully reliable.

* DetectGPT (жмяк).

Этот метод больше всего мне не нравится, слишком уж мудрен и не внушает особо доверия. DetectGPT работает за счет проверки логвероятностей токенов текста. То есть на вход поступает какой-то текст. Мы берем его, немного перефразируем (slightly perturb), подаем, собственно, на вход GPT. На следующем шаге сравниваем логвероятности исходных токенов и токенов перефразированного инпута. Если результирующая величина (она обозначена на прикрепленном скрине) большая, то входной текст скорее всего сгенерированный, иначе — скорее нет. Почему это работает? Есть простая логика. LLM-ки учатся на аргмакс на следующий токен, соответственно, если поменять вход, то мы понизим вероятности, тем самым отношение p(x)/p(x’) будет больше 1. А текст, написанный человеком ввиду нашей неидеальности от перефразировки скорее станет получше с точки зрения модели, поэтому p(x)/p(x’) будет не больше 1.

Собственно, на такой несложной логике работает этот метод. В чем минусы:

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

* Вотермарки (жмяк).

Как по мне, это самый перспективный и самый классный из вышеперечисленных методов. Он несложный, но от этого не менее интересный. Идея в том, чтобы занижать вероятности определенных токенов, т. е. чтобы они реже использовались при генерации LLM-кой, используя white list и black list. Сами эти list-ы формируются просто довольно: на каждой итерации семплинга берется хеш от индекса прошлого токена, дальше им, как сидом, инициализируется рандом, и выбираятся определенная часть токенов как white list (то есть те, которые можно использовать на следующей итерации) и black list (все наоборот).

Как детектить вотермарку? Если по-простому, то если среди токенов входного текста на определенной позиции встречаются те, которые находятся в black list, то текст скорее всего настоящий. За большими деталями залезайте в статью. Но логика у этого метода довольно простая.

В чем перспективность:

- в отличие от прошлого метода, не надо иметь доступ к LLM-ке, чтобы считать логвероятности;
- чтобы детектить вотермарку, нужно только обладать хеш-функцией, которая использовалась при генерации, и небольшой питонячей функцией, которая, соответственно, и будет проводить проверку;
- провайдеры API к новым LLM могут делиться инфой выше с преподавателями или другими заинтересованными лицами, чтобы те могли проверить тексты своих студентов (или кого угодно, кто мог пользоваться сервисом провайдеров) на предмет “настоящести”. Вот такой вот AI Антиплагиат :)

В очень крутое время живем!

#discussion

Читать полностью…

ML Глоссарий

Зачем тебе Deep Learning book или Богатый папа, бедный папа по отдельности, когда их можно скрестить…

Читать полностью…

ML Глоссарий

ChatGPT. Когда нас уже заменят нейросетями?

Прочитал довольно интересный пост в Вастрик Блоге. Автор высказывает несколько своих мыслей на тему наступающей “нейро-весны” и хайпа вокруг генеративных моделек. Вот они:

* Мысль №1. ChatGPT прямо точно заменит тех, кто не научится пользоваться ChatGPT

* Мысль №2. Когда много играешь с нейросетями, начинаешь сам замечать контент, который ими сгенерирован

* Мысль №3. Поисковики умрут, но не из-за замены на ChatGPT

Быстрый и очевидный take-away: в будущем победит тот, кто будет уметь пользоваться этими инструментами, а не бояться их. Понравилось следующее сравнение:

Я с искренним недоумением посмотрю на чувака, который скажет «ну я просто сел, нажал на газ, въехал в стену и умер — на конях как-то попроще было». А к нейросетям сейчас почему-то именно такое отношение. Магическое. А должно быть прагматичное.

За чаем с печенькой получается очень увлекательное чтиво :)

#discussion

Читать полностью…

ML Глоссарий

#glossdigest

Собрал несколько ссылок на интересные материалы

1. Deep Learning Tuning Playbook. Google Research выпустил свой набор техник по тюнингу моделей. Обещают регулярно пополнять. Довольно интересно. Ссылка

2. Себастьян Рачка, автор большого количества книг по МЛ, написал довольно забавный пост про то, что LLM-ки, наподобие ChatGPT, в ближайшее будущее точно не заменят поисковые системы из-за неспособности часто выдавать фактически правильные ответы на запросы. Адресует проблеме недостатка хорошего количества обучающих данных (потому что в поисковике куча дезинформации, а это и было обучающей выборкой). И невыгодно нанимать армии human assessors для корректировки ответов. Ссылка

3. Интересный пост от венчурных инвесторов про то, как они видят будущее генеративных моделей в виде каких-то бизнесовых приложений и кто от этого сейчас больше всего выиграывает. (спойлер: не создатели). Ссылка

4. Подведение итогов 2022 года от команды Google Research. Обещают серию постов про прорывы в генеративных моделях. Очень неплохой обзор. Ссылка

5. Классный пост от Lilian Weng про существующие техники ускорения и увеличения эффективности инференса больших языковых моделей. Напомню, что этот автор написала прекраснейший пост про диффузионки, всем советую. Ссылка

6. Нашел крутое дополнение к терминалу. Называется fig.io. Классно дополняет и дает подсказки. А за плату еще дает доступ к куче прикольных фичей. Мне нравится. Ссылка

7. Если кто-то еще не набаловался с ChatGPT, то вот ссылочка на расширение для браузера, которое приклеивает окно с выходом ChatGPT на страницу выдачи поиска. Удобненько. Ссылка

Читать полностью…

ML Глоссарий

Переобучение, или как достать соседа с ним бороться

Переобучение — это состояние модели, когда она выучила обучающую выборку, но при этом не смогла обобщиться (генерализоваться).

Здесь я собрал техники борьбы с переобучением, которые смог быстро вспомнить.

Есть два направления борьбы с переобучением: со стороны модели и со стороны данных.

Со стороны модели:
* добавляем регуляризацию в модель: dropout, BatchNorm, L2/L1, early stopping, etc.;
* старое доброе ансамблирование (беггинг, бустинг, стекинг, …)
* уменьшение модели, прунинг (кстати вот интересный рисерч на тему влияния прунинга на генерализующую способность модели)
* меньше батч сайз (ввиду шума, который он вносит в тренировку, почитать можно тут)

Со стороны данных:
* самое простое, что приходит в голову, — это увеличение количества размеченных данных (почитать можно тут);
* если с пунктом выше тяжело, то на помощь приходят аугментации или генерация синтетических данных;
* берем неразмеченные данные (а их всегда больше, чем размеченных) и в self-supervised манере предобучаем свою модельку;
* сейчас, к счастью, у каждого есть доступ к зоопарку претренированных моделей, поэтому transfer learning спешит на помощь. Берем модельку, обученную на похожих данных, а дальше запускаем fine-tune на своей дате. Такой способ крут тем, что мы используем уже выученные зависимости от больших датасетов в свою выгоду;
* уменьшение количества фичей (признаков). Например, от табличных признаков оставляем только самое влияющее подмножество; если картинки, то можно попробовать уменьшить их размеры;
* нормализация данных (задача тренировки модели становится проще);
* если в данных дисбаланс, то попробовать заресемплить.

P.S. Есть такое понятие, как grokking. Это состояние модели, когда во время тренировки кажется, что она переобучилась (смотришь на learning curves и грустишь), но дав ей время, она магическим образом начинает сходиться, причем сходиться хорошо.

Читать полностью…

ML Глоссарий

Прежде чем перейти к разбору следующей знаковой YOLO архитектуры — YOLOv4-scaled — разберем статью, которая лежит в основе новой модели. Статья называется “CSPNet: A New Backbone that can Enhance Learning Capability of CNN” (тык) и посвящена тому, как уменьшить вычислительный бюджет сверточной сети, при этом по максимуму сохранить, а то и повысить ее качество. Начинаем.

CSPNet означает Cross Stage Partial Network. Разберем, что это такое, на примере DenseNet (картинка 1). DenseNet состоит из dense block-ов и transition layer-ов. Forward dense block-а выглядит следующим образом:

x_1 = w_1 * x_0
x_2 = w_2 * [x_0, x_1]

x_k = w_k * [x_0, …, x_{k-1}]


где * — свертка, […] обозначает конкатенацию. Обновление весов таких блоков выглядит, соответственно, так:

w_1’ = f(w_1, g_0)
w_2’ = f(w_2, g_0, g_1)

w_k’ = f(w_k, g_0, …, g_{k - 1})


Как видно, одни и те же градиенты очень много переиспользуются на разных dense слоях.

Теперь рассмотрим CSPDenseNet (картинка 2). Его forward выглядит следующим образом:

x_0 = [x_0’, x_0’’]
x_k = w_k * [x_0’’, x_1, …, x_{k - 1}]
x_T = w_T * [x_0’’, x_1, …, x_k]
x_U = w_U * [x_0’, x_T]


Обновление весов таких блоков выглядит, соответственно, так:

w_k’ = f(w_k, g_0’’, g_1, …, g_{k - 1})
w_T’ = f(w_T, g_0’’, g_1, …, g_k)
w_U’ = f(w_U, g_0’, g_T)


Как видим, несмотря на то, что x_0’ не использовалась в dense блоке, все равно получает свою порцию градиентов. Таким образом, нам удалось сократить количество дублирующихся градиентов разделением gradient flow и сократить количество флопсов (10-25% в зависимости от архитектуры сети).

Далее рассмотрим различные виды fusion, которые могут применяться к данному подходу: fusion first и fusion last (картинка 3).

Fusion first подход представляет собой конкатенацию x_0’ и x_k и применение transition слоя на этом. При таком подходе у нас переиспользуется значительное число градиентов.

Fusion last подход представляет собой конкатенацию x_0’ и x_T. В данном случае происходит явный gradient flow truncation и, соответственно, градиенты не будут переиспользоваться.

На 4 картинке представлено сравнение двух данных подходов зависимостью bflops-accuracy. Как видно, fusion last приносит значительное уменьшение компьюта при минимальной потере качества.

Данный подход (CSP) очень удобно можно перенести и на другие архитектуры. На картинке 5 показана обновленная под CSP версия ResNet-а. Аторы говорят, что из-за того, что в part2 идет только половина каналов, то можно избавиться от bottleneck в ResBlock. На 6 картинке показано сравнение сравнение ResNeXt-50 и CSPResNeXt-50 на имаджнете. Как видно, наряду со значительным снижением компьюта, удалось добиться и более высокого итогового качетсва.

Разбор данной статьи является, на мой взгляд, очень полезным поспорьем для разбора yolov4-scaled. Чем, собственно, в следующем посте и займемся. :)

Читать полностью…

ML Глоссарий

Блок постов про детекцию. Часть 3: one-stage object detection models, YOLO family

Intro в object detection и главные метрики (тык)
Часть 2: two-stage object detection models (тык)

Итак, в прошлом посте были разобраны самые известные two-stage модели и подходы детекции. В данном посте рассмотрим все то, что касается самых известных представителей one-stage моделей, а именно модели YOLO семьи.

Немного предварю. YOLO (you look only once) модели уже в самом своем наименовании намекают на то, что для детекции объектов нужен всего один forward pass, а именно поэтому они обладают real-time перфом и являются сотой в данного роде детекции.

Итак, как же они работают?

* YOLO (тык)

Данная модель супер простая:

* архитектура модели -- это просто последовательность из 20 сверток и макспулов + фидфорвард для предсказаний, претрейнута на именджнете;
* входное изображение “делится” на грид размера S x S, причем если центр объекта попадает в какую-то из клеток, то данная клетка становится ответственной за детекцию данного объекта;
* После forward-а модели каждой такой клетке соповставляется вектор размера 5 * B + C, где B — это количество предсказаний каждой клетки, 5 — это x, y, w, h, confidence, что в данном bbox-е есть объект, а С — вероятностое распределение классов;
* Во время инференса при предсказании confidence score умножается на вероятность определенного класса, что дает общую уверенность модели в предсказании;
* инференс 45 кадров/с.

* YOLOv2 (тык)

Улучшение прошлой модели, направленное на большее число предсказываемых классов и ускорение.

* добавили anchor box-ы, относительно которых уже выдают предсказания;
* добавили батчнормы для стабильности тренировки и доп регуляризации;
* обновили бекбон, сделали его поменьше и быстрее;
* в отличие от прошлой модели, которая одновременно тюнила бэкбон и на детекцию, и на high resolution, YOLOv2 сначала тюнит бекбон на большее разрешение, а только потом уже под задачу детекции;
* для улучшения предсказаний на мелких объектах используют фичермапы с более ранних слоев и стэкают их с крайними, а потом уже по всему этому предсказывают bbox-ы и тд;
* добавили multi-scale training, то есть во время тренировки периодически семплируют батчи с разными размерностями изоюражений, чтобы научить модель хорошо работать среди разных разрешений;
* инференс до 2 раз быстрее прошлой модели, причем на самой быстрой модели качество выше аж на 15 пунктов mAP!

* YOLOv3 (тык)

* обновили бекбон, теперь он — DarkNet-53, при этом модель тюнилась на 256х256 разрешении, что уменьшило число флопсов в сравнении с прошлой моделью;
* ввиду более глубокой модели с резидуал связями YOLOv3 работает лучше прошлой YOLO в плане метрик: прирост до 15 пунктов;
* в отличие от прошлой модели данная модель тренировалась на anchor box-ах разных размеров, что улучшило модель в предсказании bbox-ов для объектов разных форм и размеров;
* использование FPN (feature pyramidal network), то есть используют фичермапы с разных разрешений для предсказаний;
* по скорости данная модель слегка медленнее прошлой, но на уровне 78 кадров/с.

* YOLOv4 (тык)

* новый бекбон — CSPDarkNet-53, CSP — cross-stage partial connections;
* новая добавка к основному лоссу — GHM loss для улучшения предсказаний на мелких объектах;
* улучшение FPN по сравнению с прошлой моделью;
* метрики по сравнению с прошлой моделью выросли на 10 процентов, fps на 12 процентов.

* YOLOv5 (тык)

* новый более сложный бекбон — EfficientDet;
* новый датасет с большим числом категрий объектов;
* новый способ генерации anchor box-ов для тренировки — dynamic anchor boxes;
* используется SPP — spatial pyramid pooling для улучшения работы на мелких объектах;
* новая добавка к лоссу — cIOU loss для лучшей работы с дизабаланснутым датасетом.

В следующем посте постараемся рассмотреть YOLOv6 и YOLOv7, у них больше изменений как в архитектуре, так и в способе детекции.

Читать полностью…

ML Глоссарий

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

Так вот, эта задача более общо называется Задача коллекционера. Ответ на нее E(X) = nln(n), где X — число яиц, которое нужно купить, а n — число игрушек в коллекции.

И есть отличный пост с ссылкой на видео-урок с решением данной задачи. Очень интересно.

Пойду, чтоли, киндер куплю :)

Читать полностью…

ML Глоссарий

Блок постов про детекцию

Довольно долго ничего не писал, довольно насыщенное и занятое время сейчас, нужно исправляться.

Хочу написать несколько постов про детекцию: основные метрики, хронология моделей, некоторые детали по ним, чтобы после крайнего поста иметь какую-никакую целостную картину об области.

Читать полностью…

ML Глоссарий

Тут новое ML сообщество зарождается ввиду неактивности ods!

Читать полностью…

ML Глоссарий

#glossdigest

1. Классная статья “Tuning computer vision models with task rewards” (тык) про то, как можно использовать RL не только в NLP (RLHF, ChatGPT), но и в задачах CV. Показывают, как с помощью метода Reinforce и кастомных простеньких reward-ов можно добиться буста по качеству в разных CV задачах.

2. Недавно совсем вышла статья про новый фреймворк Petals (тык) для распределенного инференса больших LLM-ок (например, OPT-175B), когда у тебя нету десятков GPU, но зато есть много peer-ов, готовых поделиться своими ресурсами. Так вот недолго музыка играла вышел новый фреймворк FlexGen (тык), который позволяет уже самому (!!!) на своей простенькой гпушке (T4, Карл!) гонять такую модель с помощью крутых техник memory offloading. По итогу ребята сделали trade-off между latency и throughput в пользу throughput и получили просто фантастические результаты.

Higher-throughput generation than other offloading-based systems (e.g., Hugging Face Accelerate, DeepSpeed Zero-Inference) - sometimes by orders of magnitude. (если гпушек несколько, то буст до х100 🤯)

3. The Capacity for Moral Self-Correction in Large Language Models (тык). Статья про то, как размер модели и RLHF влияет на возможность LLM-ок к moral self-correction. Писал про нее тут.

4. Toolformer: Language Models Can Teach Themselves to Use Tools (тык). Ребята показывают, как можно научить модельку вызывать сторонние апишки при декодинге. Отличное описание есть здесь.

5. Ребята с ШАДа замутили крутую либу (тык) для tensor_parallelism, которая, как говорят, в отличие от того же DeepSpeed работает без диких конфигураций и с “одной строчки кода”.

6. Just for fun. Прикольный пост про то, как важен сон и как можно пытаться настроить свой режим.

Читать полностью…

ML Глоссарий

“Building a kind of J.A.R.V.I.S”.

Звучит хайпово и многообещающе. 🚨

Читать полностью…

ML Глоссарий

ViT-22B

Ну что, тренд на увеличение размера LLM-ок наконец-то дошел и до ViT (трансформеров на картинках). Авторы статьи Scaling Vision Transformers to 22 Billion Parameters представили новую модель ViT-22B на 22 миллиарда параметров. Напомню, что последняя версия ViT была 4 ярда параметров, то есть прирост аж 18 ярдов, что совсем немало.

Авторы пишут:

ViT-22B demonstrates the potential for "LLM-like" scaling in vision, and provides key steps towards getting there.

что подкупает, в целом, перед началом чтения.

Итак, каким образом авторам удалось добиться такого увеличения модельки, что нового:

1) MLP слои применяются не после Аттеншена, как в обычных трансформерах, а параллельно (y = MLP(x) + SelfAttention(x) + x), что добавляет возможностей для дополнительного параллелизма.

2) Авторы заметили, что при простом расширении базовой архитектуры, тренировка расходится, что вызвано огромными значениями логитов матриц аттеншена. Поэтому ребята предложили добавлять LayerNorm перед перемножением матриц key и query.

3) Ребята избавились от прибавления bias в QKV проекциях и LayerNorm-ах, что улучшило использование железа на 3% без потери качества.

4) Патч-сайз 14х14, размер изображения 224х224, батч сайз 65к (лол), учили на датасете из 4B изображений (Гугл специально расширил этот датасет) и 30к лейблов.

5) Учили очень эффективно. Сразу data-parallel и model-parallel.

6) Метрики, ожидаемо, SOTA. Без жестких прорывов на ImageNet. Но это неважно. Гораздо интереснее результаты на transfer learning. Тут-то и есть самое сочное. На 1/16 ADE20k прирост 2.3% по mIoU. Примерно так же на видосах и depth estimation.

7) Круто умеет в дистилляцию. Дистилированные модельки ViT-L и ViT-B выдают SOTA на ImageNet (+2% на каждой).

8) Из очень впечатляющего: ViT-22B-384 achieves a previously unseen 87% shape bias / 13% texture bias. То есть модель начинает понимать изображения ближе к тому, как это делает человек (96%/4%). Для сравнения, предыдущие модельки имели обратную картину: 20-30%/70-80%.

Улучшения совсем минорные, а результаты оч масштабные. Пушка! :)

#paper

Читать полностью…

ML Глоссарий

К пункту 2) про инфоцыган. Чувак посмотрел тот же видос, походу, что и я, с такой же реакцией. В голос :)

Читать полностью…

ML Глоссарий

Короче выдал мне Гугл доступ в AI Test Kitchen, где можно пообщаться с их заветной LaMBDA моделью, соперницей ChatGPT.

Что могу сказать. Забавно, что можно “поиграться” с внутренними сетками Гугла, все-таки ребята там неглупые работают. Но не очень забавно, что сама LaMBDA доступна в виде трех демок, в каждой из которых есть начало промпта (например, I want to…) и есть ограничение на число введенных символов (около 100-150). А дальше для продолжения общения ты можешь выбирать только предзаготовленные моделькой фразы. То есть сразу сужается пространство теста.

Попробовал 2/3 демки, больше всего понравилась та, где начало промпта Imagine I’m at..

Написал: “Imagine I’m at Elrond’s council near Gandalf”. Дальше приведу диалог, а потом небольшое негодование.

S: Imagine I’m at Elrond’s council near Gandalf

L: You can feel the tension as the Fellowship prepares for their dangerous quest against the forces of evil. But there is also a hopeful sense that they might succeed. A few elves are playing a song on their harps. Gandalf is giving a rousing speech to the group.

S: Why is Gimli so mad?

L: Gimli is so mad because he's the only dwarf without a beard. He's always been so self conscious about that. He keeps imagining the other dwarves making fun of him.

S: What does Legolas think of that?

L: Legolas is sympathetic. He is trying to console Gimli. "Don't worry, my friend," he says, "your beard is very beautiful."


Текст пишет прикольный, сразу поняла, про что хочу поговорить. Но:

- не понравилось, что мое общение ограничивается заготовленными фразами;
- в один момент она написала, что у Гимли нету бороды (о боже!), а потом пишет, что Леголас подметил его красивую бороду (забыла контекст. Либо она слишком умна и таким образом решила показать внутреннюю кухню взаимоотношений этих двух персонажей, которые вечно подкалывали друг друга);
- слишком быстро решила прекратить разговор.

Это пока был мой первый тест модельки, интересно с ней пообщаться, чтобы понять, что вообще этот монстр умеет и понимает, поэтому буду чекать. Если у кого-то есть свои запросы, то говорите :)

#discussion

Читать полностью…

ML Глоссарий

Какую жесть я обнаружил. 3/5 top-selling books about AI о том как "ChatGPT заработать деньги легко бесплатно и без смс"

Кажется нельзя переоценить уровня хайпа вокруг ChatGPT

Читать полностью…

ML Глоссарий

Записался в waitlist на тест модельки LaMDA от Гугла. Посмотрим, что выйдет :)

Читать полностью…

ML Глоссарий

Как качать большие файлы с гугл диска

UPD: Работает и для ЯДиска, и для кагла. Ульта

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

Так вот, у этого есть решение. Инструкция такая:
1) Открываем Chrome, ЯБраузер.
2) Переходим на гуглдиск, открываем файл, который хотим скачать. Нажимаем скачать, открывается новая страница с предупреждением.
3) Дальше переходим View->Developer->Developer Tools. Открывает панелька сбоку. В ней переходим в Network.
4) Нажимаем кнопку скачки.
5) Сбоку начинают показываться какие-то процессы, ждем самого последнего, который начинается сразу после начала скачки файла.
6) Стопаем скачку, копируем ссыоку последнего процесса как cURL.
7) Вставляем в терминал. По желанию меняем имя > whatever.bla. Нажимаем enter и кайфуем от того, какие мы developer-ы)).

Можете не благодарить :))

#useful

Читать полностью…

ML Глоссарий

Second-order optimization. Что это и зачем?

В книге Ian Goodfellow есть такая строчка:

The second derivative tells us how the first derivative will change as we vary the input. This is important because it tells us whether a gradient step will cause as much of an improvement as we would expect based on the gradient alone.

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

Представим, что у нас есть двумерная ортогональная система, у которой в первом измерении функция ведет себя как f = x_1^2, а во втором как f = 0.0001x_2^2. Ее минимум, очевидно, (0, 0).

Теперь посмотрим, как будет выглядеть шаг градиентного спуска для нее:

(1)
\hat{x_1} = x_1 - \alpha * 2 * x_1;
\hat{x_2} = x_2 - \alpha * 0.0001 * x_2
.

То есть, если оптимизация начинается с (1, 1), то за несколько итераций мы спустимся куда в область (0, 1), ввиду того, что градиент по x_2 почти нулевой. Так вот нам, например, такой поведение может не очень сильно нравится и нужно что-то с этим делать.

На помощь приходят производные второго порядка (в обобщении — гессианы). Давайте разберемся:

(2)
f’’_{x_1} = 2;
f’’_{x_2} = 0.0001.

Если мы поделим шаги (1) на вот эти величины, то получим:

\hat{x_1} = x_1 - \alpha * x_1;
\hat{x_2} = x_2 - \alpha * x_2
.

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

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

— первое и самое важное — память. Помимо первых производных после бекпропа нам нужно будет хранить и вторые, что суперзатратно;
— сложность вычислений. В примерах выше мы считали просто вторые производные и их оборачивали, но на практике придется считать и оборачивать уже гессианы (то есть матрицы), что само по себе и долго, и может быть вычислительно нестабильно;
— есть вот небольшое исследование темы second-order oprimization, в нем привели как раз примеры, что по сравнению с обычным SGD, SHF (stochastic hessian descent) требует меньше шагов, но намного медленнее. Также здесь описали проблему этого подхода с современными архитектурами со skip connections или ReLU, потому что вторая производная у каждой из этих штук нулевая, то есть происходит потеря информации;

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

Читать полностью…
Subscribe to a channel