Митасов Андрей Павлович : другие произведения.

Металоция неведомого. Модуль М. Мульти-модели

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:
Школа кожевенного мастерства: сумки, ремни своими руками
 Ваша оценка:
  • Аннотация:
    Выжимка информации из Инета по мультимодальным моделям.
    Предварительный анализ.
    Крайнее обновление 08.10.2024.

  Я думаю, учёные наврали,
  Прокол у них в теории, парез...
  Развитие идёт не по спирали,
  А вкривь и вкось, вразнос, наперерез.
  
  Владимир Высоцкий - У профессиональных игроков
  
  Оглавление:
   Предисловие.
   Как все начиналось.
   Анализ гуманитария 2.
   Анализ гуманитария 1.
   Анализ неспециалиста.
   Резюме "анализов".
   Введение в мультимодальные системы.
   Предчувствие мультимодальной революции.
   Анонс платформы ruDALL-E.
   Краткое пояснение к используемым материалам.
   Статья о "Модели Kandinsky".
   Статья о "Модели Kandinsky 2.0".
   Резюме о "Модели Kandinsky 2.0".
   Статья о "Модели Kandinsky 2.1".
   Резюме о "Модели Kandinsky 2.1".
   Вместо заключения.
  
  Часть 2. Вариации на тему мультимоделей.
   Размышления о одной отсутствующей конструкции.
   А вот и первые шаги к простеньким "би-системам".
   А это идея новой "би-системы".
   Еще пару идеек в общую копилку ММэшек.
   Анонс "Модели Kandinsky 2.2".
   Еще одна "безумная идея" о мультимоделях.
   Неожиданный поворот в развитии "Модели Kandinsky 2.x".
   Использование своего собственного языка обучения мультимоделей.
   Возможный стандарт универсального интерфейса между ИИ-системами.
   Когда мультимоделей становится слишком много.
  
  Информация к размышлению:
   Попытка "диффузионного" анализа анонса "Модели Kandinsky 3.0".
   А чем занимаются партнеры разработчиков из Сбера?
   Введение в метод диффузии для "чайников".
   Еще о реализации диффузии для "чайников".
   Метод "потока Пуассона" для "чайников".
   Еще одно описание метода "диффузии" для "чайников".
   Новое направление в работе с мультимодальными эмбеддингами.
   "Дистилляция диффузионки" для "чайников".
   Симулятор реальности Sora.
   Диффузионные текстовые модели.
   Анонс "Модели Kandinsky 3.1".
   Сеанс поэтапной "дистилляции".
   Больше латентов "хороших и разных".
   Обучение матрицами вращения.
   "Небольшая" деталь к пониманию работы "диффузионок".
   Попытка понять суть метода "обратной дистилляции".
  
  Иллюстрации:
   Композиция "Маршрут Кандинского" от "Модели Kandinsky 2.0".
   Галеон "Мультимодальность" от "Модели Kandinsky 2.1".
   Композиция "Синтетическое программирование" от Bing.
   Галеон "Мультимодальность" от "Модели Kandinsky 3.0".
   Галеон "Мультимодальность" от "Модели Kandinsky 3.01".
   Галеон "Мультимодальность" от "Модели Kandinsky 3.1".
  
  =========
  
  27.03.2023 6:54
  
  Предисловие.
  В оглавление.
  
  Этот модуль мне хотелось бы ориентировать на вопросы,
  группирующиеся вокруг того, что известно и, вроде, понятно,
  и как именно можно представить себе работу таких ИИ-систем,
  как "Модель Kandinsky 2.0" более осмысленно и системно,
  чем это дается в материалах разработчиков.
  Т.е. попытаться ответить на вопросы "что" и "почему",
  а не только "как именно".
  
  Отдельный момент - это как называть эти ИИ-системы обобщенно.
  Сначала был вариант называть их "диффузионками",
  чтобы отразить наиболее "продвинутый" на сегодня способ их обучения,
  основанный на "диффузионном подходе"
  (пояснения по этому подходу будут ниже).
  Но после размышлений пришел к выводу, что это не правильно,
  так как главная их особенность не способ обучения,
  а именно попытка увязать две различные "модели" -
  "модель языка/текста" и "модель образа/изображения".
  Такие модели называются по-ученому "мультимодальные"
  и, в перспективе, такой подход будет применяться все больше и больше,
  но с разным акцентом на то, какая "модель" является "ведущей",
  а какая - "ведомой".
  
  Поэтому такие ИИ-системы в данном модуле,
  ВРЕМЕННО будут называться "ммэшками",
  пока не будет найдено какое-то иное более "приемлемое"
  или более правильное название.
  А то, что это придется сделать, тоже, практически, сомнений нет,
  так как предполагаемый для интерпретации ммэшек "голографический принцип",
  наверняка потребует какой-то иной терминологии/классификации.
  
  В общем? планов и надежд на этот модуль у меня достаточно много,
  но посмотрим, что получится в итоге.
  
  Но сначала стоит немного познакомится с той очень скудной информацией,
  что об "ммэшках" можно узнать из открытых источников.
  Причем делать это приходится, продираясь через чудовищный "ИТ-сленг"
  и увлечения англицизмами "Касты Посвященных" в тайны ИИ-систем.
  
  =======
  
  12.03.2023 8:37
  
  Как все начиналось.
  В оглавление.
  
  Итак что мы имеем по информации о платформе ruDALL-E
  и ее инкарнации "Модель Kandinsky 2.0".
  
  Ну, начнем с того, что я эту информацию практически "проспал"
  в свое время, так как совершенно не представлял,
  что это может на что-то сгодиться в наших "железяках".
  
  И даже практически три подряд материала на Афтершоке,
  с периодом в пару-тройку дней, не возбудили интереса,
  тем более, что я, в который раз, поверил, вроде как,
  обоснованному и авторитетному мнению авторов этих статей,
  о "сыроватости" этой технологии/направления,
  да и представленные/подобранные авторами иллюстрации
  вроде как это наглядно иллюстрировали.
  
  Хотя если бы смотрел оригинальные статьи,
  а не выжимки/"интертрепации", то может что-то и увидел.
  В общем очередной мне урок,
  что все новое - проверять самому,
  и не доверять в таких вопросах
  как перспективность и область применения,
  практически никому,
  особенно если это мнение "отрижительное" или "полоцательное",
  не говоря уже про "отвергательное"
  - все можно использовать в дело,
  нужно только уметь это увидеть.
  
  Но когда мне захотелось приклеить к "Металоции",
  какой-то визуальный образ, то то, что нашел по быстрому в Инете,
  либо было не того формата (требовался jpeg или png),
  либо они были защищены авторскими правами,
  а еще точнее что я просто не знал, где и как искать.
  Никогда в жизни этого не требовалось.
  
  И я решил "совместить приятное с полезным".
  Т.е. проверить концепцию тренировки образного мышления
  с помощью "генеративного художника" "Модель Kandinsky 2.0",
  как наиболее доступной для меня.
  Делать запросы на "иноземной мове" мне было откровенно "в лом".
  И первый же запрос-ответ
  "Модель Kandinsky 2.0 нарисовала:
  Металоция неведомого
  в стиле Айвазовский
  8b649812ee7d4e868ced9252f1ce51e5_00000"
  меня ОШАРАШИЛ,
  да качество проработки деталей не важное,
  но ОБРАЗ...
  Я такого себе не мог и предположить.
  И после этого я "Модель Kandinsky 2.0" ЗАУВАЖАЛ.
  И стал ее исследовать. Но осторожно и постепенно.
  Пытаясь найти с ней "общий язык".
  Но это отдельная история.
  (Приведена в "Модуле Е").
  
  Ну и начал искать источники информации,
  чтобы лучше понимать, с чем же я столкнулся.
  
  И начал с тех пропущенных "мимо межушного пространства" ссылок на Афтершоке.
  Но уже прорабатывать их очень внимательно.
  Вот протокол этой, с позволения сказать, "аналитической разработки".
  Шел от первой найденной ссылки.
  
  =========
  
  25.02.2023 16:12
  
  Анализ гуманитария 2.
  В оглавление.
  
  https://aftershock.news/?q=node/1214975
  
  Анализ гуманитария - чайник тестирует Миджорни
  8.8K 13:07 - 22/Фев/23 Karver
  
  В комментах к https://aftershock.news/?q=node/1214738
  подсказали более продвинутую нейросеть Миджорни,
  ////// Это тоже "генеративный художник", т.е. нейросетка,
  ////// примерно на том же "движке" и наверняка с похожей если не той же
  ////// базой для обучения, но естественно со своими наворотами,
  ////// как в части обработки запросов, так и интерфейса/функционала.
  ////// Но там есть ограничения на условия использования, язык запросов,
  ////// и наверно что-то еще - мне это ни к чему.
  ////// Главное отличие в том, что интерфейс/функционал, позволяет
  ////// "ломать через колено" систему пытаясь за ставить ее выдать то,
  ////// что хочет видеть "заказчик",
  ////// а не то, как это "представляет себе" ИИ=Система.
  ////// Кому-то это больше нравится.
  ей были заданы те же вопросы.
  Ну, оно, конечно, гораздо продвинутее.
  
  .......
  
  Резюме.
  
  По сравнению с ruDALL-E,
  конечно, небо и земля,
  отличия колоссальные.
  Имеется масса нареканий,
  но все они пока что объясняются банальной молодостью и неопытностью системы.
  Напротив, сравнив Миджорни с ruDALL-E,
  хочется надеяться,
  что ИИ дорастёт и до нормального творчества.
  Как педагог я в это не верю,
  я поддерживаю мнение некоторых комментаторов,
  что ИИ это просто компиляция кубиков,
  которые накидали в базу данных.
  С другой стороны,
  у нас уже есть хороший подмастерье,
  который уже делает на неплохом уровне сложную работу.
  
  Напоследок закинул очередную провокацию.
  
  Мальчиш Кибальчиш
  
  .....
  
  А вот это уже интересно.
  Хотя тут и девочки, и старик вместо мальчиков,
  но есть красные галстуки.
  ИИ понял главное - коммуняка.
  И вот это я бы назвал самой лучшей похвалой системе.
  
  ////// Вспоминая тот момент, то думаю это наблюдение
  ////// о вариантах "Мальчиш Кибальчиш", и присутствующем
  ////// во всех вариантах "красного галстука",
  ////// и породило сначала какое-то интуитивное ощущение,
  ////// что в этом "что-то есть", а затем, после нескольких итераций,
  ////// пришло к пониманию, что термин "токен" для такого рода систем,
  ////// уже НЕ СООТВЕТСТВУЕТ реальности, это уже какие-то
  ////// "символы", связанные какими-то "невидимыми нитями",
  ////// с какими-то устойчивыми "элементами изображения",
  ////// точнее "символами изображений", т.к. происходит не простое
  ////// "резать-клеить", а какая-то очень непростая, не всегда совершенная,
  ////// но трансформация этого зрительного образа под общую композицию.
  
  ////// Собственно из этого неясного ощущения и возникла ассоциативная
  ////// связь с "голографическим принципом". Где "один бит" или "токен"
  ////// на самом деле может выступать в качестве "ведущего символа",
  ////// "маяка", к которому стремится композиция, причем не непосредственно,
  ////// а через несколько "прыжков" через "гиперпространство" "черной дыры"
  ////// данной нейросети.
  ////// Вот у меня самый короткий маршрут таких "прыжков" получается
  ////// примерно таким "Мальчиш Кибальчиш" - Гайдар - "Тимур и его команда"
  ////// - пионеры - галстук.
  ////// Короче, вроде не получается. Наверно, воображение хромает.
  
  ////// Ну а следующим этапом осмысления был переход от "света маяка"
  ////// к "магическому потенциалу" каждого "токена-символа".
  ////// Но это было уже много-много позже,
  ////// уже после отработки, пусть в черновом варианте,
  ////// "фарватеров потенциалов".
  
  ========
  
  Анализ гуманитария 1.
  В оглавление.
  
  Следующий материал, хотя хронологически он должен был идти раньше,
  но пути поиска/анализа информации бывают весьма причудливы.
  
  https://aftershock.news/?q=node/1214738
  
  Анализ гуманитария - чайник тестирует ИИ-художника
  
  ?? 6.9K 02:29 - 22/Фев/23 Karver
  
  Прочёл https://aftershock.news/?q=node/1214294
  и загорелся кровожадным азартом - надо же посмотреть,
  что за зверь такой. Тем более,
  что сейчас так и мелькают в сети потрясающие картины
  с гордым заголовком - это ИИ по запросу сгенерировали.
  Из последних, что видел, очень хорошие портреты городов.
  Перешёл по ссылке на ruDALL-E,
  и закинул самый сложный запрос - Варлок стоит с эльфийкой на скале.
  Это сразу чугунный шарик в ореховой скорлупе, подсунутый белке.
  Кто такой варлок, знает исчезающее малое количество людей,
  ни один программист такого не заложит в программу.
  Но я надеялся на эльфийку. Увы.
  
  Это, конечно, не варлок, это друид, и не НА скале,
  а ПОД скалой, но - позвольте! - где эльфийка?!!!!!
  //// Это вот то самое желание получить "фсе и сразу".
  
  Ну, хорошо, хорошо, я падла, знаю,
  подсунул невыполнимое задание программе, каюсь.
  
  ........
  
  Итог тестирования: не могу выложить,
  там из приличных только предлоги.
  Складывается стойкое ощущение очередного распила бюджета.
  
  ........
  
  Rollon 05:20-22/Фев/23
  
  Ру-Дали
  
  оно как бы на старом софте работает.
  Новая версия это Midjourney.
  Вы бы хоть, прежде чем критиковать,
  брали то что актуально а не то что старое
  и плохо работающее по определению))
  
  .......
  
  spellbound 16:06-22/Фев/23
  
  Поисковый запрос ,
  ИИ нейросеть Midjourney Mariupol attack by Russian special forces in 2022.
  По мне очень круто,
  учитывая, что потратил менее 10 мин на все про все.
  
  ////// Вот наверно после этой статьи и не стал обращать внимание
  ////// на эту тематику, Прошло всего-то 3 дня,
  ////// и "звезды повернулись под другим углом"
  
  ////// Кстати почему-то у меня не сработал маркер на "распил бюджета",
  ////// то ли автор был настолько убедителен, то ли иллюстрации он привел
  ////// настолько отвратные, что даже мысль о том,
  ////// что мир обычно не "черно-белый", и автор мог чего-то не заметить,
  ////// не возникла.
  ////// Но сама мысль о возможности включения "генеративных художников"
  ////// в процесс обучения "образному мышлению" все-таки зафиксировалась.
  ////// И когда решил проверить эту гипотезу на "себе любимом",
  ////// именно с этой страницы и взял нужную ссылку на ruDALL-E,
  ////// а там уже выбрал "Kandinsky 2.0", но с первого раза не получилось.
  ////// А вот еще через два дня получил полный ШОК.
  ////// И пошло и поехало.
  
  =======
  
  Анализ неспециалиста.
  В оглавление.
  
  А вот эту статью я первоначально вообще пропустил,
  как лежащую далеко вдали от всех моих интересов.
  
  /////// - это отметки комментариев уже сегодняшнего дня.
  
  https://aftershock.news/?q=node/1214294
  
  ИИ-художник от Сбербанка - хотели как лучше. А как получилось?
  
  ?? 9.3K 18:28 - 21/Фев/23 Olvik
  
  У всех на слуху чат-бот ChatGPT от компании OpenAI
  - ИИ-ассистент, способный работать в диалоговом режиме
  и поддерживающий запросы на естественных языках.
  Несколько меньшее внимание привлекает другой ИИ-ассистент,
  на основе нейросети DALL-E тоже от OpenAI,
  который способен генерировать качественные изображения,
  исходя из описания на естественном языке.
  ИИ-дивизион Сбербанка в конце 2021г. объявил
  о создании отечественного аналога - ruDALL-E,
  который с тех пор прошёл несколько генераций
  и в настоящее время доступен для тестирования всем желающим.
  https://rudalle.ru/
  Проект призван, по мнению экспертов,
  решать достаточно серьёзные содержательные проблемы
  на пути создания сильного ИИ.
  Что удалось сделать к настоящему моменту?
  Решил протестировать и изложить свои предварительные впечатления.
  
  .......
  
  4. Долгосрочная цель нового направления
  - создание <мультимодальных> нейронных сетей,
  которые выучивают концепции в нескольких модальностях,
  в первую очередь в текстовой и визуальной областях,
  чтобы <лучше понимать мир>.
  ///////// Что такой за зверь "мультимодальность", хоть какое-то понимание
  ///////// пришло ой как не скоро.
  Здесь следует пояснить, что под неудачным,
  на мой взгляд,
  наименованием
  <мультимодальность> подразумевается способность оперировать
  потоками разнородной информацией
  (образной и вербальной в нашем случае),
  устанавливая между ними необходимое соответствие.
  Подробно я рассматривал этот вопрос в своей статье об интуиции,
  https://aftershock.news/?q=node/1209047
  ///////// Ходил я по этой ссылке - на мой взгляд, "психологическая муть".
  когда говорил о концептуальной и эйдетической интуиции.
  Концептуальная сторона мышления
  - связывание понятий/терминов с зрительными образами,
  а эйдетическая, наоборот,
  - ассоциация образов и изображений с понятиями,
  которым они соответствуют.
  //////// Теоретически вроде верно - "но КАК, Холмс?"
  Так вот, проект ruDALL-E должен научить симулировать
  происходящий в нашем мышлении концептуальный процесс
  представления (воображения) понятий и терминов
  в виде зрительных образов.
  И это совсем не простая задача!
  
  5. В чём, по мнению разработчиков, польза от подобных систем?
  Они считают, что генерация изображений по тексту
  <решает две важных потребности,
  которые пока не может решить информационный поиск:
  
  - Возможность точно описать желаемое -
  и получить персонализированное изображение,
  которое раньше не существовало.
  
  - В любой момент создавать необходимое количество
  licence-free иллюстраций в неограниченном объеме>
  
  Ну, это, так сказать,
  тот <выхлоп>, который подобные системы дают автоматически,
  так они спроектированы.
  Весь вопрос в качестве этих изображений и иллюстраций,
  насколько они соответствуют замыслам создателей
  и могут заменить контент,
  созданный белковым художником.
  ////// А вот, на мой взгляд, для таких разработок "качество"
  ////// - это не главный приоритет. Куда более важен опыт,
  ////// и возможность реализации какой-то новой, хорошо бы,
  ////// прорывной идеи/технологии.
  
  6. Димитров приводит несколько примеров того,
  как такие изображения можно использовать <прямо сейчас>:
  
  Фото-иллюстрации для статей, копирайтинга, рекламы.
  Можно автоматически (а значит - быстрее и дешевле)
  создавать иллюстрации к статьям, генерировать концепты
  для рекламы по описанию.
  - Примеры, которые он приводит,
  меня совсем не убеждают
  (здесь и далее в этом параграфе изображения из поста Димитрова)
  
  .......
  
  Visual Art - источник визуальных концепций,
  соединений различных признаков и абстракций.
  
  - Ну, здесь как раз полная свобода для любителей подхода
  <а я так вижу!>,
  который популярен в определённых кругах.
  И если захотелось помечтать о <тёмной энергии>,
  то флаг вам в руки, как говорится!
  ///////// И приводится ужасно отвратное визуальное представление
  ///////// "загадочной темной энергии".
  ///////// Такое ощущение, что вклеили первое, что получилось,
  ///////// или это "система" так откликнулась на очередное "издевательство"
  ///////// своих "мучителей".
  ......
  
  Итак, резюмируя изложенные <примеры целесообразного использования>
  могу предположить,
  что никаких глобальных задач
  (о которых мечтает К.Анохин)
  разработчики на данном этапе перед собой не ставят,
  ограничившись оправданием бюджета на примере ряда прикладных задач
  с туманными перспективами.
  ///////// Опять "распил".
  
  .......
  
  8. Сформулирую изложенное выше простыми словами.
  Рассматриваемая нейросеть
  - это попытка перевести семантику исходного описания
  в максимально адекватный визуальный образ,
  используя колоссальные объёмы обучающих данных,
  где такой <перевод> сделан человеком.
  Предлагаю посмотреть, насколько удачной вышла эта попытка.
  
  .......
  
  Нарисуй-ка мне художник!
  
  Визуализация объекта
  
  Для тестирования я выбрал последнюю версию ruDALL-E - Kandinsky 2.0
  (есть ещё Kandinsky и Malevich).
  
  ......
  
  Сразу отметим, что вариант <без стиля>
  работает с реалистичными изображениями (фотографиями)
  и, в отличии от других,
  не имеет <авторского почерка>.
  Мост выглядит адекватно,
  а изображение, действительно, передает соответствующую <манеру художника>.
  
  .......
  
  Выводы
  
  1. Настоящее тестирование не предполагает
  глубокомысленных заключений о потенциале технологии DALL-E
  в силу малой выборки и субъективного подхода к оценке результатов.
  //////// Это да.
  Однако, свои впечатления от знакомства с этой технологией я изложить могу.
  
  2. Пожалуй, с известной доработкой, заявленные задачи
  - подготовка рекламных материалов, непритязательные иллюстрации <на лету>,
  Visual-Art - эта технология выполнить позволяет.
  И, если этим и ограничиться,
  то никакого продвижения в сторону сильного ИИ, она не гарантирует.
  
  3. Одна из основных задач на пути к сильному ИИ
  - научить машину понимать так, как это делает человек.
  /////// А может проще решить обратную задачу -
  /////// человеку научиться понимать "машину"?
  Если ограничиться только текстом (а это ChatGPT),
  то весь комплекс возникающих проблем хорошо описан
  в длящейся десятилетия дискуссии вокруг теста Тьюринга
  и <китайской комнаты> Д.Сёрла (я описывал эту полемику здесь).
  Добавление к текстовому ещё и образного измерения понимания
  многократно усложняет эту задачу.
  /////// Или облегчает. Это как подойти.
  /////// Если рассматривать как еще одно "измерение",
  /////// такое же, как и остальные, то при использование тех же самых подходов,
  /////// которые плохо работали и до этого,
  /////// то да - усложняет.
  /////// А вот если использовать другие подходы - то "бабушка надвое сказала"
  Согласитесь, далеко не каждый из нас способен
  адекватно вербально выразить, возникающие в сознании образы,
  равно как и решить обратную задачу,
  например, представить себе как <гусь свинье не товарищ!>.
  Здесь уместно вспомнить героя знаменитого романа Орлова <Альтист Данилов>,
  который мог, при желании, мыслить мелодиями,
  чем ставил в тупик демонов-экспертов,
  изучавших его сознание в режиме онлайн.
  
  4. Никаких признаков "понимания" того, что он изображает,
  ИИ-художник не демонстрирует.
  Да, вам может повезти и он, вдруг, нарисует именно то,
  о чём вы думаете.
  Это лишь свидетельствует о сильной удаче
  - в обучении использовался корпус данных,
  точно соответствующих вашему запросу.
  ////////// А вот и нет. "Металоции" в Инете до 9 февраля
  ////////// нет ни единого упоминания. Проверено.
  ////////// А вот поди ж ты, как-то она "попала в яблочко" с первого раза.
  ////////// Да и потом таких попаданий было не мало.
  Вариантов простых (даже не идиоматических!) фраз
  - бесконечное множество (буквально!).
  На все случаи обучающие данные никогда не подобрать.
  Нужно, чтобы ИИ "был воплощен в мире" и обучался сам.
  Ну, это уже совсем другая история ( я обсуждал этот казус здесь).
  
  5. На мой взгляд,
  способ построения и обучения подобных нейросетей
  не даёт надежды на то,
  что ИИ научится понимать то, что он говорит или рисует.
  И в этом я согласен с Сёрлом.
  Я не разделяю оптимизм К.Анохина,
  что подобные ruDALL-E технологии
  способны дать исследователям представление
  о способе взаимодействия нашего сознания с окружающим миром
  и воплотить этот способ в адекватных алгоритмах.
  Повторюсь, что это не экспертное заключение,
  а моё личное впечатление.
  
  ////////// И ссылки в тексте в большинстве на "себя либимого".
  ////////// Тоже достаточно информативный маркер.
  
  =========
  
  Резюме "анализов".
  В оглавление.
  
  Так что было дальше? Толком уже не помню, так как плотно
  подсел на работу с "Модель Kandinsky 2.0",
  а информация мне в тот момент была не очень нужна.,
  Главное я понял - есть какая-то сложная связь между "токенами"
  и какими "фрагментами/концептами изображений"
  и эту взаимосвязь я и пытался понять/охватить,
  потихоньку приноравливаясь к "Модели Kandinsky 2.0".
  
  И процесс сбора информации шел в фоновом режиме.
  
  Ладно попытаюсь восстановить по "вахтенному журналу".
  
  Ага вот.
  Но он сильно большой, так что придется подрезать
  не теряя основные мысли.
  Т.е. придется частично перерабатывать по новой.
  
  28.03.2023 5:51
  
  Да, но если подрезать и перерабатывать, то что именно,
  ведь от этого зависит и восприятие и понимание материала.
  
  Нет. Наверно, все-таки надо сначала объяснить принципиальную важность
  того что скрывается за ммэшками или по ученому "мультимодальными моделями".
  Это пока далеко не на слуху, и большинству читателей, наверно,
  представляется очень, абстрактным, туманным и очень отдаленным.
  
  А что, если за ГПТ-революцией уже назревает следующая - ММ-революция?
  
  =========
  
  Введение в мультимодальные системы.
  В оглавление.
  
  Вот очень интересные мысли из свежей заметки:
  "Учимся совершать правильные ошибки
  - краткое сравнение человеческого восприятия
  и мультимодальных языковых моделей"
  Автор: mr-pickles
  https://habr.com/ru/company/wunderfund/blog/724608/
  
  ......
  
  Что собой представляют мультимодальные языковые модели?
  
  Большие языковые модели, вроде GPT-3/Luminous/PaLM,
  это, упрощённо говоря, системы для предсказания следующего токена.
  Их можно рассматривать как (большие) нейронные сети,
  которые обучены классификации следующего слова/знака препинания в предложении,
  что, выполненное достаточное количество раз,
  как представляется,
  позволяет генерировать текст, который согласован с контекстом.
  
  Мультимодальные языковые модели - это попытка приблизить то,
  как подобные языковые модели воспринимают мир,
  к восприятию мира человеком.
  Большинство современных популярных моделей глубокого обучения
  (вроде ResNets, GPT-Neo и т.п.)
  отличаются узкой специализацией либо на задачах машинного зрения,
  либо на языковых задачах.
  Модель RestNet хороша в извлечении информации из изображений,
  а языковые модели, вроде GPT-Neo, хорошо генерируют тексты.
  Мультимодальные языковые модели
  - это попытка сделать так,
  чтобы нейронные сети воспринимали бы информацию
  и в виде изображений, и в виде текста.
  Достигается это благодаря комбинации моделей
  компьютерного зрения и языковых моделей.
  //// Пока это основное направление развития/использования ммэшек,
  //// но если этот подход окажется жизнеспособным,
  //// то не за горами и появления других комбинаций/гибридов/композиций,
  //// объединяющих языковые и/или визуальные модели с чем-то еще.
  //// Просто пока достаточно большие наборы обучающих данных - датасеты -
  //// накоплены именно в языковых и визуальных областях.
  //// Но ведь есть еще и музыка, техника, например патентный фонд, и др.
  
  Как работают мультимодальные языковые модели?
  
  Мультимодальные языковые модели способны использовать знания о мире,
  закодированные в их языковой модели,
  //// Правда как это именно "закодировано" толком не понятно.
  в других областях, наподобие обработки изображений.
  //// А вот тут, как ни странно, больше определенности,
  //// но вопрос со способом "кодирования" пока тоже достаточно "туманен".
  Люди не просто читают и пишут.
  Мы видим, читаем и пишем.
  Мультимодальные языковые модели пытаются имитировать эти процессы,
  адаптируя свои части,
  ответственные за обработку изображений,
  таким образом, чтобы они оказались бы совместимыми
  с <пространством эмбеддингов> их языковых моделей.
  //// Меня самого от этого англицизма "эмбеддинг" слегка корежит,
  //// почему не используетсяь термин "представление" или "микропредставление"
  //// не знаю. Может быть это связано со способом реализации внутри программы,
  //// когда эти "эмбеддинги" постоянно трансформируются при переходе
  //// от слоя к слою, от узла/нейрона к другому узлу/нейрону.
  //// Но и тогда можно было бы использовать какие-то "квазипредставления",
  //// Ладно, Инет пока не доступен. Позже посмотрим Вики.
  //// Инет заявляет, что это некое "вложение".
  
  \\\ https://www.nkj.ru/open/36052/
  \\\ ....
  \\\ Эмбеддинг в NLP означает процесс или, чаще,
  \\\ результат процесса преобразования языковой сущности
  \\\ - слова, предложения, параграфа или целого текста
  \\\ в набор чисел - числовой вектор
  \\\ В русскоязычной литературе эмбеддингами обычно называют
  \\\ именно такие числовые векторы,
  \\\ которые получены из слов или других языковых сущностей.
  \\\ .....
  
  Одним из примеров подобных моделей является MAGMA.
  Это - GPT-подобная модель,
  которая может <видеть>.
  Она способна принять на вход произвольную последовательность данных,
  включающую в себя текст и изображения,
  и выдать подходящий текст.
  
  Эту модель можно использовать для генерирования ответов
  на вопросы относительно изображений,
  для идентификации и описания объектов,
  присутствующих на входных изображениях.
  А иногда она ещё удивительно хороша
  в деле оптического распознавания символов.
  Она, кроме того, известна хорошим чувством юмора.
  https://twitter.com/Sigmoid_Freud
  //// Собственно ради последних двух строчек и включил поледние два абзаца.
  //// Дело в том, что в предыдущей откомментированной статье,
  //// автор отрицает возможность наличия/проявления у "глупых ммэшек",
  //// такой способности, как "интуиция", а тут указывается уже
  //// на что, если не большее, то сопоставимое - юмор.
  //// А у меня были "встречи" и с "иронией" в исполнении "Модели Kandinsky 2.0".
  
  //// Тут вот какое дело, все эти качества/проявления интуиции/юмора/иронии,
  //// все это может быть выявлено/зафиксировано не самими ммэшками,
  //// а теми кто их использует. Нужно уметь увидеть это.
  //// Ниже будет пример такой иронии/юмора.
  
  ........
  
  Что мы имеем в виду под <правильными ошибками>?
  
  Если только вы не видели этого изображения раньше,
  то высоки шансы того, что вы прочтёте текст с него как
  "I love Paris in the springtime",
  а не как "I love Paris in the the springtime"
  (обратите внимание на второй артикль "the" в последнем варианте текста).
  Это так из-за того, что ваше <нисходящее восприятие>
  читает первую часть предложения и с уверенностью предполагает,
  что оставшаяся часть грамматически правильна.
  
  Даже несмотря на то, что необработанные данные с изображения
  говорят вам о том, что тут имеется второй артикль "the",
  вы, благодаря своему <нисходящему восприятию>,
  его пропускаете,
  что связано со сбором предложений из слов без их полного прочтения.
  
  А теперь вопрос:
  происходит ли нечто подобное при подготовке выходных данных MAGMA?
  Ответ на этот вопрос - да.
  
  MAGMA - это, определённо, не наилучшая из существующих модель
  для оптического распознавания текста.
  Но она, похоже, имеет некий интуитивный фильтр,
  //// Интуитивный фильтр. Надо запомнить.
  //// А еще лучше бы разобраться в деталях, что есть "интуиция",
  //// какими способами/элементами она проявляется и т.д,
  //// но без всякой "психологической мути".
  //// И то же самое попытаться сделать для "юмора" и "иронии".
  //// Это ведь тоже процентов на 80 какая-то "техника".
  накладываемый на результаты решения простой задачи чтения того,
  что написано на изображении.
  Когда мы убираем с изображения одно из двух ,
  результат остаётся тем же самым.
  
  .......
  
  Чем эти мультимодальные языковые модели лучше свёрточных нейронных сетей?
  
  Для решения задач машинного зрения
  чаще всего используются свёрточные нейронные сети.
  Это - особая архитектура нейронных сетей.
  Такие сети обучают на специализированных наборах данных
  для решения весьма специфических задач наподобие классификации изображений.
  
  На другом краю спектра архитектур нейронных сетей
  находятся большие языковые модели.
  Здесь было сказано, что они, в своей основе,
  представляют собой всего лишь по-настоящему большие нейронные сети
  с <простой единообразной архитектурой,
  обученные наитупейшим из возможных способов>
  (их учат предсказанию следующего слова).
  
  Когда мы передаём свёрточной нейронной сети
  (например - ResNet50)
  изображение человека в костюме плюшевого медведя,
  она кодирует информацию и выдаёт прогноз,
  в соответствии с которым это
  - (плюшевый медведь).
  Модель полностью игнорирует тот факт,
  что это может быть просто человек в костюме медведя.
  Нам не стоит винить подобные модели за эту их ограниченность,
  так как их обучали лишь тому,
  к каким категориям относятся изображения,
  предоставляя им ограниченный набор категорий
  (например, в данном случае - набор данных ImageNet).
  
  Но когда мы подстроим ту же свёрточную нейронную сеть
  в расчёте на кодирование изображений,
  совместимое с <пространством эмбеддингов> языковой модели,
  мы можем, решая вышеописанную задачу,
  задействовать знания о мире,
  которые есть у языковой модели.
  //// !!!Вот это ключевое в понимании того, что могут дать ммэшки.!!!
  Эти знания о мире внутри языковой модели
  примерно аналогичны той форме <нисходящего восприятия>,
  которое обрабатывает исходную визуальную информацию,
  поступающую от кодировщика изображений.
  //// "Примерно", но все-таки другое и это следующий принципиальный момент.
  //// Вместо одной пусть даже самой "наворочнной" системы,
  //// появляется "би-система со сдвинутыми характеристиками",
  //// и сточки зрения ТРИЗ это принципиальное решение,
  //// которое может кардинально изменить всю ситуацию.
  //// Т.е. начинает вырисовывать линейка "моно - би - поли и снова моно",
  //// и, соответственно, начинает раскручиваться "маховик прогресса".
  
  ........
  
  Чем мультимодальные языковые модели отличаются
  от простого расширения обучающих данных моделей машинного зрения
  путём включения в эти данные костюма плюшевого медведя?
  
  В чём заключается проблема попытки простого расширения
  области выходных данных моделей путём включения в них категорий,
  наподобие <костюмы плюшевых медведей>?
  А проблема в том, что это непрактично,
  так как существует невероятно огромное количество таких категорий.
  //// Еще один важный момент, поясняющий суть "тектонического сдвига",
  //// происходящего при использовании ммэшек.
  //// Одна модель, частично облегчает создание/обучение/настройку другой,
  //// а та, в свою очередь, как-то компенсирует недостаки/ограниченность первой.
  Языковые же модели, с другой стороны,
  не требуют подобного,
  так как у них имеются внутренние знания о мире,
  закодированные в них (возможно - объективные, возможно - нет).
  В этом случае модель ResNet50 имеет
  очень ограниченное пространство выходных данных.
  
  По своей сути, появление на выходе ResNet50
  чего-то вроде <костюма медведя>
  ограничено лишь метками классов,
  на которых была обучена модель.
  А вот языковые модели могут генерировать выходные данные произвольной длины.
  Это означает, что они имеют гораздо большее пространство выходных данных,
  соответствующее масштабам языка,
  на котором они обучены.
  
  Мультимодальные языковые модели
  - это попытка расширить входное пространство языковых моделей
  путём добавления <восходящей> обработки данных
  к уже существующим в них моделям мира.
  Мультимодальные языковые модели создают именно так,
  а не путём расширения выходного пространства моделей машинного зрения.
  //// Ну тут, даже мне не очень понятны формулировки аргументации автора,
  //// так как не очень понял его логику о "восходящем" и "нисходящем" мышлении.
  
  Итоги
  
  Интересным направлением исследований в этой сфере
  была бы попытка добавить больше модальностей
  не только к входам моделей,
  но и к их выходным пространствам.
  Это, например, могли бы быть модели,
  которые способны генерировать и текст, и изображения
  в виде единого, цельного выходного сигнала.
  
  Интеллект - это не всегда правильность.
  Иногда это - способность совершать правильные ошибки
  основываясь на чьём-либо понимании мира.
  Этот принцип, сам по себе,
  является важным базовым компонентом работы человеческого мозга.
  
  Я уверен, что многие исследователи искусственного интеллекта
  были бы несказанно счастливы в тот день,
  когда ИИ начнёт видеть некие образы в облаках
  - так же, как видим их мы.
  Это ещё на шаг приблизит нас к цели в нашем стремлении
  к созданию машин,
  размышляющих о разном так же, как люди,
  //// Но, возможно, что цель именно в такой формулировке и не достижима,
  //// в обозримом будущем,
  //// а вот, вроде как, противоположная цель,
  //// приспособить "машинные размышления" для задач интересных для человека,
  //// особенно учитывая гибкость и обучаемость человеческого сознания,
  //// на мой взгляд, вполне достижима и достаточно практична.
  и задающих вопросы, которых мы не могли задавать.
  //// А почему "мы не могли задавать"?
  //// Ну, это, наверно, вопрос уже из другой "оперы".
  
  ==========
  
  Предчувствие мультимодальной революции.
  В оглавление.
  
  Резюмируя вышеизложенное, с учетом целого вала анонсов и релизов
  самых различных систем в которых так или иначе пытаются
  "прикрутить" более или менее навороченные "языковые модели",
  т.е., фактически, взрывной рост количества и типов этих самых ммэшек,
  почему-то вспоминается "микропроцессорная революция".
  
  Немножко напомню историю этого технологического прорыва,
  коренным образом изменившее ситуацию и на рынке компьютеров,
  да и, вообще, лицо технологической человеческой цивилизации.
  О ней уже стали забывать, но она весьма поучительна.
  
  Легенда гласит, что когда-то в конце 60-х, когда еще ни о каких
  универсальных микросхемах/чипсетах речи не было,
  а под каждое изделие проектировалась и изготавливалась
  что-то узкоспециализированное в одну американскую фирму
  обратился японский предприниматель с заказом на комплект микросхем,
  кажется для очередной модели калькулятора.
  Но при этом так сформулировал задачу/проект,
  что исполнители просто обалдели от "наивности чукотского юноши".
  Быстренько выполнили его заказ, проводили его с почетом...
  И тут же застолбили за собой идейку этого проекта,
  суть которой заключалась в том, чтобы не делать одну специализированную
  микросхему а представить ее в виде универсальных блоков,
  объединенных идеей ПРОГРАММНОГО исполнения основного цикла работы устройства
  и отдельных специализированных функций.
  Т.е. появилась идея микропроцессора,
  т.е. устройства в миниатюре повторяющего идею и устройство больших ЭВМ,
  но за счет возможности массового применения в "стиралках и холодильниках"
  а затем и в персональных компьютерах
  - а это уже был следующий революционный шаг -
  потихоньку загнали эти "чисто большие ЭВМ" в далекий "медвежий угол"
  суперкомпьютеров, которые тоже во многом используют те же микропроцессоры.
  
  К чему это "воспоминания прошлого"?
  А к тому, что вот эти ммэшки открывают возможность следующего шага -
  \\\ задействовать знания о мире,
  \\\ которые есть у языковой модели.
  и сделать это практически доступным уже сейчас
  не только на крутых серверах центров обработки информации
  а практически на любом персональном компьютере с приличной видеокартой.
  История любит повторяться, но каждый раз по-особенному.
  
  Нужно только научиться это делать,
  и в этом направлении работы ведутся не покладая рук,
  ссылок в сети уже больше чем достаточно,
  только разобраться пока в них трудновато,
  но и это, скорее всего, скоро изменится.
  
  Вот к примеру самая свежая новость:
  "Энтузиаст запустил клиента ChatGPT из командной строки под MS-DOS
  на старом компьютере IBM 5155 - проект doschgpt"
  Автор: denis-19
  https://habr.com/ru/news/t/725206/
  
  Скоро это может стать просто "одним из стандартных интерфейсов" типа USB.
  
  НО. Нужно научиться и понимать, как этим пользоваться.
  А вот с этим пока ситуация "очень не очень".
  
  Вот с этих позиций, наверно, и стоит в дальнейшем рассматривать
  информацию о "Модели Kandinsky 2.0" как об одном из представителей
  класса ммэшек.
  
  И начнем с позапрошлогодней статьи, в которой и был первый анонс
  платформы ruDALL-E.
  
  ==========
  
  04.03.2023 12:48
  
  Анонс платформы ruDALL-E.
  В оглавление.
  
  "ruDALL-E: генерируем изображения по текстовому описанию,
  или Самый большой вычислительный проект в России"
  Автор: ddimitrov (Денис Димитров)
  https://habr.com/ru/company/sberbank/blog/586926/
  2 ноя 2021 в 14:34
  
  .......
  
  2021 год в машинном обучении ознаменовался мультимодальностью
  - активно развиваются нейросети,
  работающие одновременно с изображениями, текстами, речью, музыкой.
  Правит балом, как обычно, OpenAI,
  но, несмотря на слово в своём названии,
  не спешит выкладывать модели в открытый доступ.
  В начале года компания представила нейросеть DALL-E,
  генерирующую любые изображения размером 256?256 пикселей
  по текстовому описанию.
  В качестве опорного материала для сообщества были доступны
  статья на arxiv
  https://arxiv.org/pdf/2102.12092.pdf
  и примеры в блоге.
  https://openai.com/blog/dall-e/
  //////// Т.е. большинство из списка "генеративных художников"
  //////// "выпали из одного гнезда",
  //////// ну а дальше каждый полетел своим путем.
  
  С момента выхода DALL-E к проблеме активно подключились
  китайские исследователи:
  открытый код нейросети CogView позволяет решать ту же задачу
  - получать изображения из текстов.
  Но что в России?
  Разобрать, понять, обучить
  - уже, можно сказать, наш инженерный девиз.
  Мы нырнули с головой в новый проект
  и сегодня рассказываем, как создали с нуля
  полный пайплайн для генерации изображений
  по описаниям на русском языке.
  \\\ Пайплайн (от английского pipeline - <трубопровод>)
  \\\ - это документ, визуализирующий процесс разработки продукта.
  //// Т.е. просто разработали план и представили его картинкой.
  //// А как умно/прикольно звучит.
  
  В проекте активно участвовали команды Sber AI, SberDevices,
  Самарского университета, AIRI и SberCloud.
  
  Мы обучили две версии модели разного размера
  и дали им имена великих российских абстракционистов
  - Василия Кандинского и Казимира Малевича:
  
  ruDALL-E Kandinsky (XXL) с 12 миллиардами параметров;
  
  ruDALL-E Malevich (XL) c 1.3 миллиардами параметров.
  
  Некоторые версии наших моделей доступны в open source уже сейчас:
  
  .......
  
  Две последние модели встроены в пайплайн генерации изображений по тексту
  (об этом расскажем ниже).
  
  Потестировать ruDALL-E Malevich (XL)
  или посмотреть на результаты генерации можно здесь:
  
  //////// Так это слегка устаревший материал, так как относится
  //////// к предыдущей версии.
  
  Demo и галерея лучших изображений
  
  ........
  
  Обучение нейросети ruDALL-E на кластере Christofari
  стало самой большой вычислительной задачей в России:
  
  Модель ruDALL-E Kandinsky (XXL) обучалась 37 дней на 512 GPU TESLA V100,
  а затем ещё 11 дней на 128 GPU TESLA V100 - всего 20 352 GPU-дней;
  
  Модель ruDALL-E Malevich (XL) обучалась 8 дней на 128 GPU TESLA V100,
  а затем еще 15 дней на 192 GPU TESLA V100 - всего 3 904 GPU-дня.
  
  Таким образом, суммарно обучение обеих моделей заняло 24 256 GPU-дней.
  
  //// GPU - графический процессор, который из-за своей архитектуры,
  //// часто используется, как среда исполнения однотипных вычислительных задач.
  
  Разберём возможности наших генеративных моделей.
  
  Почему Big Tech изучает генерацию изображений
  
  Долгосрочная цель нового направления
  - создание <мультимодальных> нейронных сетей,
  которые выучивают концепции в нескольких модальностях,
  в первую очередь в текстовой и визуальной областях,
  чтобы "лучше понимать мир".
  
  Генерация изображений может показаться достаточно избыточной задачей
  в век больших данных и доступа к поисковикам.
  Однако, она решает две важных потребности,
  которые пока не может решить информационный поиск:
  
  Возможность точно описать желаемое
  - и получить персонализированное изображение,
  которое раньше не существовало.
  
  В любой момент создавать необходимое количество
  licence-free иллюстраций в неограниченном объеме.
  //// В общем это был тот момент, который меня и привлек к этой теме.
  //// Но что из этого получилось...
  //// Воистину "бесплатный сыр только в мышеловке".
  
  Первые очевидные применения генерации изображений:
  
  Фото-иллюстрации для статей, копирайтинга, рекламы.
  Можно автоматически (а значит - быстрее и дешевле)
  создавать иллюстрации к статьям,
  генерировать концепты для рекламы по описанию:
  
  Иллюстрации, свободные от лицензии фотостоков,
  тоже можно генерировать бесконечно:
  
  Визуализации дизайна интерьеров - можно проверять свои идеи для ремонта,
  играть с цветовыми решениями, формами и светом:
  
  Visual Art - источник визуальных концепций,
  соединений различных признаков и абстракций:
  //// И это тоже вначале виделось самым привлекательным в этом направлении.
  
  Более подробно о самой модели и процессе обучения
  
  В основе архитектуры DALL-E - так называемый трансформер,
  он состоит из энкодера и декодера.
  Общая идея состоит в том,
  чтобы вычислить embedding по входным данным с помощью энкодера,
  //// Напоминаю, embedding - это числовой вектор,
  //// используемый в дальнейших расчетах.
  //// Весь мир есть число, и embedding - пророк его.
  а затем с учетом известного выхода
  правильным образом декодировать этот embedding.
  
  Совсем верхнеуровневая схема <ванильного> трансформера
  //// Не нашел определение "<ванильного> трансформера".
  //// Что-то из сугубо авторского слэнга.
  
  В трансформере энкодер и декодер состоят из ряда идентичных блоков.
  
  Чуть более подробная схема <ванильного> трансформера
  
  //////// Ну очень все "понятно". Даже на уровне отдельных слов.
  //////// И для кого такие статьи пишутся? Для "галочки"?
  
  Основу архитектуры трансформера составляет механизм Self-attention.
  Он позволяет модели понять,
  какие фрагменты входных данных важны
  и насколько важен каждый фрагмент входных данных для других фрагментов.
  Как и LSTM-модели,
  трансформер позволяет естественным образом моделировать связи <вдолгую>.
  Однако, в отличие от LSTM-моделей,
  он подходит для распараллеливания
  и, следовательно, эффективных реализаций.
  
  //////// Ну, похоже, и здесь подход к распараллеливанию вычислений
  //////// как и в ЧатГПТ, но годом раньше. Хотя нет, все они из "одного гнезда".
  
  Первым шагом при вычислении Self-attention
  является создание трёх векторов
  для каждого входного вектора энкодера
  (для каждого элемента входной последовательности).
  То есть для каждого элемента создаются векторы
  Query, Key и Value.
  Эти векторы получаются путем перемножения embedding'а и трех матриц,
  которые мы получаем в процессе обучения.
  //// Т.е. что-то похожее на процесс "фаззировки" в нечеткой логике.
  Далее мы используем полученные векторы
  для формирования Self-attention-представления
  каждого embedding'а,
  что дает возможность оценить возможные связи
  в элементах входных данных,
  а также определить степень <полезности> каждого элемента.
  //////// Ну это так предполагается, а вот что на самом деле происходит
  //////// по "верхнему уровню", думается никто не знает.
  
  Трансформер также характеризует наличие словаря.
  Каждый элемент словаря - это токен.
  В зависимости от модели размер словаря может меняться.
  Таким образом, входные данные сначала превращаются
  в последовательность токенов,
  которая далее конвертируется в embedding с помощью энкодера.
  Для текста используется свой токенизатор,
  для изображения сначала вычисляются low-level-фичи,
  а затем в скользящем окне вычисляются визуальные токены.
  Применение механизма Self-attention
  позволяет извлечь контекст
  из входной последовательности токенов в ходе обучения.
  Следует отметить,
  что для обучения трансформера требуются большие объёмы
  (желательно "чистых") данных,
  о которых мы расскажем ниже.
  /////// Вообще-то. Логичнее вроде делать обучение как-то "по ступеням",
  /////// а не надеяться, что большой объем "чистых данных" загруженных чохом
  /////// "сам собой", за счет "волшебной палочки" в виде "процеса обучения",
  /////// превратится во что-то функционально способное.
  /////// Ну это так, мнение дилетанта.
  
  Как устроен ruDALL-E
  
  Глобальная идея состоит в том,
  чтобы обучить трансформер авторегрессивно
  моделировать токены текста и изображения
  как единый поток данных.
  //// Вот это собственно и есть "изюминка" ммэшек.
  //// Т.е. увязка двух моделей во что-то композитное.
  Однако использование пикселей
  непосредственно в качестве признаков изображений
  потребует чрезмерного количества памяти,
  особенно для изображений с высоким разрешением.
  Чтобы не учить только краткосрочные зависимости
  между пикселями и текстами,
  а делать это более высокоуровнево,
  обучение модели проходит в 2 этапа:
  
  Предварительно сжатые изображения
  с разрешением 256х256
  поступают на вход автоэнкодера
  (мы обучили свой SBER VQ-GAN,
  улучшив метрики для генерации по некоторым доменам,
  и об этом как раз рассказывали тут,
  https://habr.com/ru/company/sberbank/blog/581738/
  причем также поделились кодом),
  https://github.com/sberbank-ai/sber-vq-gan
  который учится сжимать изображение в матрицу токенов 32х32.
  Фактор сжатия 8 позволяет восстанавливать изображение
  с небольшой потерей качества:
  см. котика ниже.
  //////// Ага вот это я при первом чтении пропустил.
  //////// Изображение разбивается на "видео-токены" размером "32х32",
  //////// И уже происходит попытка обучения нейросетки
  //////// связям между "текстовыми токенами" и "видео-токенами".
  //////// Так вроде более-менее понятно.
  
  Трансформер учится сопоставлять токены текста
  (у ruDALL-E их 128) и 32?32=1024 токена изображения
  (токены конкатенируются построчно в последовательность).
  Для токенизации текстов использовался токенизатор YTTM.
  //////// Да. Вроде понял правильно.
  //////// А "количество токенов" это надо понимать "размерность вектора".
  
  Исходный и восстановленный котик
  
  Важные аспекты обучения
  
  На данный момент в открытом доступе нет кода модели DALL-E от OpenAI.
  Публикация описывает её общими словами,
  но обходит вниманием некоторые важные нюансы реализации.
  Мы взяли наш собственный код для обучения ruGPT-моделей
  и, опираясь на оригинальную статью,
  https://arxiv.org/pdf/2102.12092.pdf
  а также попытки воспроизведения кода DALL-E
  мировым ds-сообществом,
  написали свой код DALL-E-модели.
  Он включает такие детали,
  как позиционное кодирование блоков картинки,
  свёрточные и координатные маски Attention-слоёв,
  общее представление эмбеддингов текста и картинок,
  взвешенные лоссы для текстов и изображений,
  dropout-токенизатор.
  //////// Ничего не понял, кроме того что что-то свое ими применялось.
  
  Из-за огромных вычислительных требований эффективно обучать модель
  можно только в режиме точности fp16.
  Это в 5-7 раз быстрее, чем обучение в классическом fp32.
  Кроме того, модель с таким подходом занимает меньше места.
  Но ограничение точности представления чисел
  повлекло за собой множество сложностей
  для такой глубокой архитектуры:
  
  a) иногда встречающиеся очень большие значения внутри сети
  приводят к вырождению лосса в Nan
  и прекращению обучения;
  //////// Оч. понятно.
  
  b) при малых значениях learning rate,
  помогающих избежать проблемы а),
  сеть перестает улучшаться
  и расходится из-за большого числа нулей в градиентах.
  //////// И это тоже. Кроме того, что в процессе обучения есть свои "гитики",
  //////// и не все там "гладко и пушисто".
  
  Для решения этих проблем мы имплементировали
  несколько идей из работы китайского университета Цинхуа CogView,
  https://github.com/THUDM/CogView
  а также провели свои исследования стабильности,
  с помощью которых нашли ещё несколько архитектурных идей,
  помогающих стабилизировать обучение.
  Так как делать это приходилось прямо в процессе обучения модели,
  путь тренировки вышел долгим и тернистым.
  //////// Ну, там где есть проблемы,
  //////// следовательно, есть "экологические ниши"
  //////// для "изобретателей" и "инженеров".
  
  
  Для распределенного обучения на нескольких DGX
  мы используем DeepSpeed,
  https://github.com/microsoft/DeepSpeed
  как и в случае с ruGPT-3.
  https://habr.com/ru/company/sberbank/blog/524522/
  
  Сбор данных и их фильтрация:
  безусловно, когда мы говорим об архитектуре,
  нововведениях и других технических тонкостях,
  нельзя не упомянуть такой важный аспект как данные.
  Как известно, для обучения трансформеров их должно быть много,
  причем <чистых>.
  Под <чистотой> мы понимали в первую очередь хорошие описания,
  которые потом нам придётся переводить на русский язык,
  и изображения с отношением сторон не хуже 1:2 или 2:1,
  чтобы при кропах не потерять содержательный контент изображений.
  //////// Хотелось бы примеров таких "хороших описаний",
  //////// и может быть подойдут и "не очень хорошие", но для чего-то другого.
  
  Первым делом мы взялись за те данные,
  которые использовали OpenAI (в статье указаны 250 млн. пар)
  и создатели CogView (30 млн пар):
  Conceptual Captions, YFCC100m,
  данные русской Википедии, ImageNet.
  Затем мы добавили датасеты OpenImages, LAION-400m, WIT, Web2M и HowTo
  //////// Вот они общие для большинства "генеративных художников"
  //////// обучающие наборы примеров.
  как источник данных о деятельности людей,
  и другие датасеты,
  которые покрывали бы интересующие нас домены.
  Ключевыми доменами стали люди, животные, знаменитости,
  интерьеры, достопримечательности и пейзажи,
  различные виды техники, деятельность людей, эмоции.
  
  После сбора и фильтрации данных
  от слишком коротких описаний,
  маленьких изображений
  и изображений с непригодным отношением сторон,
  а также изображений,
  слабо соответствующих описаниям
  (мы использовали для этого англоязычную модель CLIP),
  перевода всех английских описаний на русский язык,
  был сформирован широкий спектр данных для обучения
  - около 120 млн. пар изображение-описание.
  ///////// Так надо попытаться запомнить эту цифру, как ориентир.
  
  Кривая обучения ruDALL-E Kandinsky (XXL):
  как видно,
  обучение несколько раз приходилось возобновлять
  после ошибок и уходов в Nan.
  
  Обучение модели ruDALL-E Kandinsky (XXL) происходило в 2 фазы:
  37 дней на 512 GPU TESLA V100, а затем ещё 11 дней на 128 GPU TESLA V100.
  
  Подробная информация об обучении ruDALL-E Malevich (XL):
  
  Динамика loss на train-выборке
  
  Динамика loss на valid-выборке
  
  Динамика learning rate
  
  Обучение модели ruDALL-E Malevich (XL) происходило в 3 фазы:
  8 дней на 128 GPU TESLA V100,
  а затем еще 6.5 и 8.5 дней на 192 GPU TESLA V100,
  но с немного отличающимися обучающими выборками.
  
  Хочется отдельно упомянуть сложность выбора
  оптимальных режимов генерации для разных объектов и доменов.
  В ходе исследования генерации объектов
  мы начали с доказавших свою полезность в NLP-задачах
  подходов Nucleus Sampling и Top-K sampling,
  которые ограничивают пространство токенов,
  доступных для генерации.
  Эта тема хорошо исследована в применении к задачам создания текстов,
  но для изображений общепринятые настройки генерации
  оказались не самыми удачными.
  ///////// Т.е. для каждого типа нейросетки, предпочтительнее какие-то
  ///////// свои "настройки генерации".
  ///////// Но это, наверно, "полянка" плотно утоптанная.
  Серия экспериментов помогла нам определить
  приемлемые диапазоны параметров,
  но также указала на то,
  что для разных типов желаемых объектов
  эти диапазоны могут очень существенно отличаться.
  ///////// И как эта проблема решается? Усреднением?
  И неправильный их выбор может привести
  к существенной деградации качества получившегося изображения.
  Вопрос автоматического выбора диапазона параметров по теме генерации
  остаётся предметом будущих исследований.
  ///////// Как оптимистично это звучит.
  
  Вот не совсем удачные генерации объектов на примере котиков,
  сгенерированные по запросу <Котик с красной лентой>:
  
  А вот <Автомобиль на дороге среди красивых гор>.
  Автомобиль слева въехал в какую-то трубу,
  а справа - странноватой формы.
  
  Пайплайн генерации изображений
  
  Сейчас генерация изображений представляет из себя пайплайн из 3 частей:
  генерация при помощи ruDALL-E
  - ранжирование результатов с помощью ruCLIP -
  и увеличение качества и разрешения картинок с помощью SuperResolution.
  
  При этом на этапе генерации и ранжирования
  можно менять различные параметры,
  влияющие на количество генерируемых примеров,
  их отбор и абстрактность.
  //// Интересно, что в используемой мной сейчас "Модели Kandinsky 2.0"
  //// таких параметров нет. Или я что-то не понял, то ли в ней тестируется
  //// что-то другое.
  
  В Colab можно запускать инференс модели ruDALL-E Malevich (XL)
  с полным пайплайном:
  генерацией изображений, их автоматическим ранжированием и увеличением.
  
  Рассмотрим его на примере с оленями выше.
  
  ......
  
  Можно заметить,
  что один из оленей получился достаточно <улиточным>.
  На этапе генерации можно делать перебор гиперпараметров
  для получения наиболее удачного результата
  именно под ваш домен.
  Опытным путем мы установили,
  что параметры top_p и top_k
  контролируют степень абстрактности изображения.
  Их общие рекомендуемые значения:
  
  top_k=2048, top_p=0.995
  
  top_k=1536, top_p=0.99
  
  top_k=1024, top_p=0.99
  
  ///////// Хорошо, что у меня не было доступа к этим параметрам,
  ///////// и пришлось искать другие пути, и может быть,
  ///////// что-то крайне интересное и не заметил.
  ///////// "Когда нас ставят зубами к стенке, мы прогрызаем стену".
  ///////// Почти по Гаррисону, цикл "Стальная Крыса".
  
  .......
  
  Будущее мультимодальных моделей
  //// А вот это уже интересно.
  //// Как видели разработчики эту перспективу 2 год назад.
  
  Мультимодальные исследования становятся всё более популярны
  для самых разных задач:
  прежде всего, это задачи на стыке CV и NLP
  (о первой такой модели для русского языка, ruCLIP, мы рассказали ранее),
  а также на стыке NLP и Code.
  Хотя последнее время становятся популярными архитектуры,
  которые умеют обрабатывать много модальностей одновременно,
  например, AudioCLIP.
  Представляет отдельный интерес Foundation Model,
  которая совсем недавно была анонсирована исследователями
  из Стэнфордского университета.
  
  И Сбер не остается в стороне
  - так в соревновании Fusion Brain Challenge конференции AI Journey
  предлагается создать единую архитектуру,
  с помощью которой можно решить 4 задачи:
  
  С2С - перевод с Java на Python;
  
  HTR - распознавание рукописного текста на фотографиях;
  
  Zero-shot Object Detection - детекция на изображениях объектов,
  заданных на естественном языке;
  
  VQA - ответы на вопросы по картинкам.
  ///////// А вот это интересное направление, надо будет понаблюдать
  ///////// что из этого получится.
  ///////// Может быть удастся для чего-то приспособить.
  
  ........
  
  Коллектив авторов:
  
  @rybolos,
  https://habr.com/ru/users/rybolos/
  
  @shonenkov,
  https://habr.com/ru/users/shonenkov/
  
  @ollmer,
  https://habr.com/ru/users/Alter_Ego/
  
  @kuznetsoff87,
  https://habr.com/ru/users/kuznetsoff87/
  
  @alexander-shustanov,
  https://habr.com/ru/users/alexander-shustanov/
  
  @oulenspeigel,
  https://habr.com/ru/users/oulenspiegel/
  
  @mboyarkin,
  https://habr.com/ru/users/mboyarkin/
  
  @achertok,
  https://habr.com/ru/users/achertok/
  
  @da0c,
  https://habr.com/ru/users/da0c/
  
  @boomb0om
  https://habr.com/ru/users/boomb0om/
  
  //// А также топ автор. С него и начнем.
  
  \\\ ddimitrov (Денис Димитров )
  \\\ https://habr.com/ru/users/ddimitrov/
  
  //// А никто из авторов свой мэйл не указал. Одни "телеги".
  //// Еще один штришок к образу "коллективного разума Хабра".
  
  ......
  
  //// Но комментариев много - аж 185 штук.
  //// И много очень интересных, восторженных и негативных.
  //// Т.е. эта разработка в свое время вызвала повышенное внимание.
  //// Тогда как следующая версия "попала в тень" от ChatGPT-3,
  //// и даже количество комментариев на такого же рода статью
  //// от разработчиков интереса вызвала на порядок меньше,
  //// судя по количеству комментариев.
  //// Причем в основном были комментарии по сравнению "Модели Kandinsky 2.0"
  //// со своими зарубежными аналогами, причем обычно негативные.
  //// А вот попыток анализа "как это работает" уже не было ни одного.
  //// Т.е. за какой-то год-полтора "всем все стало ясно".
  //// Как-то работает? Ну и ладно. А если чего-то не так - "учи матчасть".
  
  ......
  
  //// Что можно сказать по итогу такой статьи?
  //// То, что особых перспектив у ммэшек в ближайшем будущем
  //// авторы и сами не ожидают.
  //// Обычная, трудоемкая, но достаточно рядовая работа.
  
  ========
  
  Краткое пояснение к используемым материалам.
  В оглавление.
  
  В общем, как начиналась история с "Моделью Kandinsky 2.0"
  более менее понятно.
  Достаточно стандартный путь - взяли модную тему
  и доступные стартовые технологии, и дальше пошли "набивать собственные шишки",
  Что-то особо нового вроде не предлагалось, обычное освоение новой темы,
  с оглядкой на "мировой уровень".
  Но это было два года назад и теперь можно посмотреть,
  что же изменилось за это время - срок по нынешним временам
  для этой области весьма существенный.
  
  Тут надо понимать стоящую перед разработчиками ruDALL-E дилемму,
  или вступить "в гонку" за коммерческий продукт, с необходимостью
  в первую очередь обеспечить качество получаемых изображений,
  либо искать какой-то свой путь в поиске каких-то новых решений
  и/или задач. Либо пытаться делать и то и другое одновременно.
  
  ======
  
  03.04.2023 8:11
  
  Изучение истории разработки платформы
  как примера полноценной мультимодальной системы,
  можно было бы провести почти с самого начала
  по следующим материалам:
  
  "ruCLIP - мультимодальная модель для русского языка"
  Автор: king_menin (Антон Емельянов)
  https://habr.com/ru/companies/sberdevices/articles/564440/
  24 июн 2021 в 12:50
  
  "Как мы тестировали и дообучали одну из самых хайповых разработок года"
  Автор: thedenk (Денис)
  https://habr.com/ru/companies/sberbank/articles/581738/
  5 окт 2021 в 17:36
  
  "Большому художнику - большой критик:
  новые версии модели ruCLIP для ранжирования результатов ruDALL-E
  (и не только)"
  Автор: kuznetsoff87 (Андрей Кузнецов)
  https://habr.com/ru/companies/sberbank/articles/646447/
  19 янв 2022 в 12:40
  
  Но интерес они, наверно, представляют, больше частью,
  как этапы "большого пути" от начальных попыток
  освоить/приспособить чужую технологию под свои нужды,
  и знакомства с какими-то базовыми элементами
  "высоконаучного сленга" в области ИИ-систем.
  
  В общем, на данном этапе знакомится с ними предлагаю любителям
  покопаться "под капотом".
  
  А вот следующий ряд материалов, наверно, тоже не самый интересный,
  и, к сожалению, не очень познавательный для не профессионалов,
  проработать, считаю, достаточно полезным.
  Мне он необходим, чтобы попытаться понять,
  каким путем идут разработчики ruDALL-E,
  после того как создали что-то более-менее работоспособное,
  с какими проблемами встречаются и как их пытаются решить.
  И что из этого получается.
  
  ======
  
  14.03.2023 19:49
  
  Статья о "Модели Kandinsky".
  В оглавление.
  
  "Большая версия ruDALL-E, или Как отличить Кандинского от Малевича"
  Автор: Gugutse (Дарья Бакшандаева)
  https://habr.com/ru/company/sberbank/blog/671210/
  14 июн 2022 в 16:03
  
  .....
  
  Картина 1: <Пёстрая жизнь>, или Что нового произошло в мире генеративного AI
  
  Буквально несколько лет назад,
  когда речь шла о временном промежутке около полугода,
  было не так просто сделать насыщенный обзор новых решений и архитектур,
  появившихся за столь короткий промежуток времени.
  Но вот в 2022 году такой проблемы просто не существует.
  Новые методы и модели публикуются настолько часто,
  что даже самый пытливый и интересующийся читатель
  многочисленных новостных каналов в области DL
  наверняка что-нибудь пропустит.
  Поэтому в этой части мы вовсе не претендуем на полноту обзора,
  а лишь хотим показать формирующиеся тренды в области генеративного AI.
  
  Вышедшие модели можно условно разделить на две категории.
  Первые представляют собой мультимодальные мультизадачные архитектуры,
  которые призваны решать open-ended текстовые задачи (Flamingo, OFA).
  Данные архитектуры построены на базе сильных языковых моделей,
  умеют работать с разными входными модальностями
  (текст, изображения, видео)
  и решают такие задачи как
  Question Answering, Visual Question Answering, Visual Commonsense Reasoning
  и другие.
  //// Русских терминов то ли еще нет, то ли авторы стесняются "посконного".
  По заверениям авторов,
  большинство монозадачных state-of-the-art моделей
  проигрывают им в качестве.
  Вторая категория моделей представляет в нашем случае
  куда больший интерес,
  потому что на выходе позволяет генерировать изображения.
  В этой группе наиболее значимые результаты принадлежат
  таким моделям как GLIDE, DALL-E 2 от OpenAI
  и свежайшей Imagen от Google.
  В основе указанных моделей лежит диффузионный процесс,
  который обещает стать новым трендом визуального генеративного AI:
  результаты генерации действительно впечатляют
  и порождают предсказания о трансформации профессий художника и дизайнера
  в ближайшем будущем.
  
  В DALL-E 2 происходит <распаковка> эмбеддингов CLIP
  (не зря в статье авторы называют архитектуру ):
  текстовый эмбеддинг, полученный с помощью текстового энкодера
  предварительно обученной модели CLIP,
  скармливается модели-приору
  (авторегрессионной или диффузионной);
  на выходе получаются возможные картиночные эмбеддинги CLIP,
  соответствующие описанию,
  - остаётся только прогнать их через диффузионный декодер,
  чтобы получить финальное изображение.
  //// Как же все это понятно и прозрачно.
  Авторы же Imagen в качестве текстового энкодера
  берут замороженную T5-XXL
  - сильную языковую модель -
  и последовательность эмбеддингов,
  полученных с её помощью,
  пропускают через каскад диффузионных моделей:
  разрешение изображения,
  восстановленного из текстовых эмбеддингов,
  во время этого процесса подрастает с 64x64 до 1024x1024.
  Архитектура этого каскада - улучшенная версия UNet,
  которую авторы назвали Efficient-UNet
  (она проще, быстрее сходится и более эффективна
  с точки зрения вычислительных ресурсов).
  Если верить авторам,
  Imagen обгоняет DALL-E 2 по FID на COCO 256x256 30k:
  7,27 у Imagen vs 10,39 у DALL-E 2.
  Что сразу становится очевидным,
  так это то, что модель от Google лучше справляется
  с генерацией текста на изображении,
  не путается в цветах объектов и в принципе точнее понимает запрос,
  чем DALL-E 2
  (явно T5-XXL демонстрирует свою мудрость).
  //// Мудрость ли это, или попугайство?
  /////// Вот что из этих трех больших абзаце в "выжать",
  /////// что было два направления развития одно более специализированное,
  /////// другое более общее. И в этом более общем направлении,
  /////// пока выигрывает тот, чья именно "языковая модель" "толще".
  /////// Т.е., можно предполагать, что именно в этом направлении
  /////// и будут приложены основные усилия.
  
  Картина 2: <Развитие>, или Как появился наш самый большой нейрохудожник
  
  Архитектура
  
  С точки зрения архитектуры и генеративного подхода
  модель Kandinsky практически ничем не отличается от модели ruDALL-E XL,
  разве что добавлено больше слоёв и увеличена
  размерность скрытого пространства
  (детали можно увидеть в таблице)
  - модель совместима с кодовой базой ruDALL-E XL
  и так же использует в качестве энкодера и декодера изображений Sber-VQ-GAN,
  а YTTM - в качестве токенизатора текстовых последовательностей.
  
  Таким образом, модель Kandinsky всем уже хорошо знакома.
  //// Кому как.
  В её основе лежит трансформер,
  который работает с последовательностью токенов,
  формируемой с помощью двух энкодеров:
  визуального и текстового.
  Общая идея состоит в том,
  чтобы вычислить эмбеддинг по входным данным с помощью энкодера,
  а затем с учётом известного выхода правильным образом
  декодировать этот эмбеддинг.
  Напомним кратко про использованные энкодеры:
  
  Предварительно уменьшенные изображения с разрешением 256х256
  поступают на вход автоэнкодера (SBER VQ-GAN),
  который учится сжимать изображение в матрицу токенов 32х32.
  
  Токенизация текстового описания
  (всего у ruDALL-E 128 текстовых токенов)
  выполняется с помощью YTTM со словарем в 16384 токена.
  
  Мы уже писали в прошлой статье на Хабре,
  https://habr.com/ru/companies/sberbank/articles/586926/
  что в 2021 г. столкнулись с проблемой расхождения модели Kandinsky
  в режиме FP16 из-за её глубины
  - на данный момент генерация доступна только в режиме FP32.
  //// Т.е. при увеличении масштаба модели требуется еще и повышать
  //// точность вычислений, иначе возникают некие "расхождения".
  //// Уже забыл, что это означает и почему возникает. Придется вспоминать.
  Мы ценим вклад в развитие проекта
  и будем рады новым идеям в официальном репозитории.
  https://github.com/ai-forever/ru-dalle
  
  Данные
  
  Безусловно, нельзя обсуждать процесс обучения без описания данных,
  на которых он строится.
  Для первой и второй фаз обучения мы использовали разные наборы данных:
  на первом этапе использовалась та же выборка,
  что и для обучения модели ruDALL-E XL;
  основа второго этапа
  - русскоязычная часть датасета LAION-5B,
  которая включает в себя порядка 170 млн пар изображений и описаний к ним.
  И хотя качество исходных данных достаточно хорошее
  (авторы провели фильтрацию с помощью модели CLIP),
  мы разработали дополнительный набор фильтров,
  чтобы избавиться от изображений с водяными знаками,
  скриншотов презентаций, сайтов и прочих нежелательных данных.
  //// Т.е. какая-то предварительная фильтрация данных все-таки была.
  Фильтрацию проводили с помощью классификатора изображений с водяными знаками,
  который был обучен нами на открытых наборах данных,
  и модели ruCLIP.
  Также мы почистили текстовые описания изображений:
  убрали словосочетания,
  которые не несли смысловой нагрузки,
  но добавили бы модели трудностей в поиске закономерностей.
  В результате фильтрации мы получили датасет размером 119 млн.
  Примеры отфильтрованных изображений можно увидеть ниже.
  
  .......
  
  А что же за данные мы брали для файнтьюнов?
  //// Замечательный образец сленга, чтобы отсечь всех "непосвященных".
  Если говорить про ключевой тюн большой модели
  (cherry-pick генерации которого мы покажем дальше, терпение),
  то процесс обучения выполнялся на субъективно отобранных
  400 изображениях картин
  - хотелось немного изменить визуальный стиль генераций,
  сохранив при этом знание модели о мире аналогично тому,
  как это описано в статье про Emojich XL.
  //// Т.е. окончательная доводка модели осуществлялась
  //// по очень скромному набору данных - сравните 120 млн и просто 400.
  
  Процесс обучения
  
  На первом этапе модель Kandinsky обучалась командой SberDevices
  на протяжении двух месяцев на платформе SberCloud ML Space,
  и этот процесс занял 20 352 GPU-V100 дней.
  В рамках этой фазы обучения использовался датасет без фильтрации,
  состоящий из 60 млн пар изображений и текстовых описаний к ним;
  впоследствии он был сокращён до 28 млн пар.
  //// Т.е. исходный набор все урезался и урезался,
  //// но почему? Какие это решало задачи, кроме банального сокращения времени.
  В состав данных вошли такие известные датасеты,
  как ConceptualCaptions, YFCC100m
  (описания были переведены на русский язык системой машинного перевода),
  русская Википедия и другие.
  Первый этап обучения продолжался в течение 250 тыс. итераций.
  
  После этого командой Sber AI была выполнена вторая фаза обучения модели
  на новых отфильтрованных данных (7 680 GPU-A100 дней).
  В состав обучающего датасета на этот раз вошли
  исключительно нативные русскоязычные данные
  (без автоматического перевода с других языков):
  русская часть датасета
  LAION-5B, VIST, Flickr8k, Flickr30k, Wiki-ru, CelebA и др.
  Из датасетов были исключены изображения с водяными знаками,
  а также выполнен реранкинг пар с помощью модели ruCLIP.
  В общей сложности набор данных для второй фазы обучения
  составил 119 млн пар,
  обучение длилось 60 тыс. итераций.
  
  В ходе обеих фаз обучения использовался
  динамически меняющийся learning rate
  (на рисунке показан график изменения LR для второй фазы).
  //// Опять неизвестный термин. Ага, скорость обучения
  //// - "настраиваемый параметр алгоритма оптимизации".
  
  Ниже представлены графики изменения текстовой, визуальной
  и общей функций потерь для первой (синий)
  и второй (оранжевый) фаз обучения
  на валидационной выборке.
  В качестве такой выборки мы использовали часть MS-COCO validation set,
  которая состояла из 422 пар.
  Каждая пара была проверена вручную:
  описание переведено на русский язык автоматическим переводчиком
  и скорректировано при необходимости.
  
  Анализируя данные горизонтальной оси,
  можно заметить, что первая фаза обучения включала в себя
  около 3,5 эпох, а вторая - 1,5 эпохи.
  При первом взгляде на графики возникает естественный вопрос
  по поводу разрыва между первой и второй фазами.
  На самом деле, этому есть несколько объяснений:
  изменение кодовой базы для тренировки модели
  (ушли от подхода Megatron model-parallel),
  изменение количества карт в обучении
  (что, соответственно, привело к сбросу всех состояний
  оптимизатора deepspeed zero3 после первой фазы),
  а также совершенно новые данные для обучения.
  //// Т.е. точного ответа нет.
  
  Картина 3: <Отпечатки рук художника>,
  или Проводим эксперименты и судим о результатах
  ........
  
  Качественная оценка
  
  Известно, что Василий Кандинский на определённом этапе творческого пути
  стал разделять свои произведения на три типа
  (и такая разметка, надо думать, очень помогла искусствоведам):
  <импрессии>, <импровизации> и <композиции>.
  Главным критерием такой классификации,
  если не вдаваться в подробности,
  можно назвать связь изображённого
  с непосредственно воспринимаемой реальностью:
  чем тоньше и слабее эта связь,
  тем больше работа отдаляется от <импрессии>,
  приближаясь к <композиции>,
  которая представляет собой чистую абстракцию.
  Мы позволили себе ещё более вольно трактовать эти типы
  (да простят нас искусствоведы)
  - и оценили,
  как модель справляется с генерацией реалистичных изображений
  (<импрессий>);
  фантазийных образов, совмещающих в себе несколько концептов
  (<импровизаций>);
  геометрических форм и пространственных структур
  (<композиций>).
  
  Следуя душеспасительным советам,
  согласно которым сравнивать себя нужно в первую очередь
  с <собой вчерашним>,
  мы сравнили генерации моделей ruDALL-E XL и Kandinsky,
  полученные по текстовым описаниям
  из статьи про первую версию модели ruDALL-E.
  Что мы заметили:
  большая модель весьма хорошо справляется с созданием
  реалистичных изображений,
  качественно передавая различные текстуры
  (шерсть лисы, горная порода, гладкая поверхность металла,
  бархатная обивка кресла),
  тени
  (под автомобилем, под диваном)
  и отражения
  (закатное небо на озерной глади,
  окружающая зелень на поверхности стекла автомобиля).
  И хотя некоторые детали всё так же порой страдают
  (на морду оленя, например, лучше смотреть издалека и без очков),
  в большинстве случаев общая форма и отдельные элементы
  соответствуют желаемым объектам
  (те же <улиточные> олени больше не появляются,
  если их не звать намеренно).
  Что касается <импровизаций>,
  комбинирующих в себе неожиданные образы,
  то здесь ситуация улучшилась,
  по сравнению с первой моделью:
  сгенерированная кошка действительно умудряется
  одновременно сочетать в себе признаки как кошки, так и облака
  (<воздушная>, <тающая> белая шерсть);
  кот оказывается если и не на Луне,
  то всё же на небесном теле
  - и может похвастаться адекватной формой.
  А Ждун сумел избавиться от созависимых отношений с авокадо.
  //// Т.е. в большей модели качество повысилось,
  //// но причина этого остается непонятной.
  //// Почему увеличение дополнительных "внутренних слоев",
  //// причем не понятно в отношении изображений или а отношении текста,
  //// или, все-таки, от "совместного эмбединга",
  //// повышает общее качество изображения пока остается загадкой?
  ........
  
  ...В этом случае, конечно, меньше подходящих вариантов:
  считать углы непросто,
  иногда выходит больше,
  а иногда и вовсе не хочется заморачиваться
  - и получается привычный круг.
  Но верные генерации, тем не менее,
  в итоге успешно рождаются.
  //// А вот было бы интересно посмотреть на "маршрут" к "верным генерациям".
  
  Что касается взаимного пространственного расположения объектов,
  то здесь у ruDALL-E те же проблемы,
  с которыми пока не смогли справиться ни DALL-E 2, ни Imagen:
  на сгенерированных изображениях объекты
  не всегда располагаются в соответствии с запросом
  - особенно, если этот порядок не соответствует привычным паттернам,
  как, например, в случае с фразой
  
  (<Лошадь, скачущая на космонавте>).
  Этот запрос был даже включен в бенчмарк DrawBench
  - набор затравок, который создатели модели Imagen
  предлагают использовать для оценки text2image моделей.
  
  Мы также решили <вписать себя в историю>
  и дополнить кочующую из статьи в статью
  (от Make-A-Scene до DALL-E 2 - или,
  как её называют авторы в статье, unCLIP)
  таблицу с изображениями,
  сгенерированными различными моделями по избранным описаниям из MS-COCO.
  Результаты модели Kandinsky мы разместили рядом
  с её ближайшим родственником
  - моделью DALL-E от Open AI
  (модели, следующие в таблице за ней,
  относятся к семейству диффузионных моделей
  - другому типу архитектуры;
  разве что Make-A-Scene - всё тот же авторегрессионный трансформер,
  но генерирующий изображения не только на основе текста,
  но и сегментационной маски).
  Получившиеся картинки выглядят весьма достойно
  даже в сравнении с нынешними state-of-the-art диффузионными моделями
  и значительно выигрывают в качестве, реалистичности и детализированности
  у DALL-E.
  .......
  
  Количественная оценка
  
  Самое время перейти к объективным метрикам
  и показать какие-нибудь красивые числа.
  Для адекватной оценки условной генерации изображений
  нужно учитывать как минимум два аспекта:
  эстетические качества и реалистичность получившегося изображения
  и его соответствие исходному запросу.
  Базовый набор метрик в этом случае - FID и CLIP score,
  а каноничный датасет - MS-COCO validation set
  (30 тыс. изображений).
  Мы взяли этот датасет с описаниями,
  автоматически переведёнными на русский,
  - и получили такой результат:
  .......
  
  Как видим, Kandinsky показывает лучшее значение метрики FID
  среди моделей с аналогичной архитектурой.
  .......
  
  Объективные количественные показатели (FID, IS, SSIM и др.),
  используемые для оценки генеративных моделей,
  конечно, просты в подсчёте,
  позволяют сравнивать модели друг с другом
  и измерять качество получившихся изображений
  - однако в ограниченной степени
  и не всегда в согласии с тем,
  как воспринимают и оценивают изображения люди.
  По этой причине, пока поиск идеальной объективной метрики всё ещё идёт,
  авторы новых генеративных архитектур продолжают включать в статьи
  раздел .
  Кратко расскажем далее, как происходит этот процесс.
  
  Оценка сгенерированных изображений людьми выполнялась по протоколу,
  аналогичному тому, который был применён в случае с DALL-E, GLIDE, DALL-E 2 и др.:
  вниманию разметчиков были представлены пары изображений
  (одно из пары получено с помощью модели ruDALL-E XL,
  другое сгенерировано моделью Kandinsky)
  и вопрос <Какая картинка реалистичнее?>.
  Также предоставлялся исходный текстовый запрос для того,
  чтобы можно было оценить,
  какое изображение больше соответствует описанию
  (и соответствует ли ему в принципе).
  
  Для генерации была использована уже упоминавшаяся подвыборка
  из валидационной части MS-COCO (422 описания),
  каждая пара изображений была оценена 3-5 людьми.
  Как видно из графика,
  модель Kandinsky выигрывает у предшественника
  и с точки зрения реалистичности генерируемых изображений,
  и с точки зрения их соответствия текстовому запросу
  (и хотя изображения не всегда подходят к запросам
  - столбец None на графике, -
  показатель соответствия более, чем в 70% случаев для обеих моделей,
  весьма высок).
  
  Картина 4: <Лирическое>, или Заключение
  
  Мы не случайно назвали наши text2image модели
  в честь художников-абстракционистов,
  и не зря иллюстрации к разделам этой статьи
  были сгенерированы по названиям картин Кандинского
  (кстати, советуем сравнить с оригиналами):
  нам кажется, что художникам и дизайнерам не стоит бояться,
  а стоит сделать генеративные модели своими помощниками
  и вдохновителями
  - будущее явно за творческим тандемом человека и AI.
  
  Многие из исследователей в области визуальной генерации
  пока не предоставляют доступа к весам своих моделей,
  что во многом замедляет процесс тестирования новых задач
  и анализа потенциальных областей их применения.
  Мы, команды Sber AI и SberDevices, сразу знали,
  что пойдём по другому пути
  - будем и дальше максимально сохранять открытость наших разработок
  и тем самым быстрее оценивать сильные и слабые стороны моделей.
  Отдельно хотим поблагодарить сообщество,
  всех разработчиков,
  кто присылал свои пулл-реквесты, делал файнтюны
  и предлагал идеи:
  благодаря вам мы двигаем генеративные сети вперёд!
  
  Мы делаем нейроискусство Kandinsky доступным:
  
  запросы к модели можно подавать в режиме реального времени
  с помощью виртуальных ассистентов Салют
  (<Салют, включи художника>);
  
  в чате Discord можно делиться результатами генерации
  и подбирать лучшие запросы в формате общей очереди;
  
  наш репозиторий с последними файнтюнами;
  https://github.com/ai-forever/ru-dalle
  
  Telegram-канал главного разработчика ruDALL-E.
  
  Коллектив авторов:
  Алексей Шоненков, Олег Шляжко, Дарья Бакшандаева, Игорь Павлов,
  Андрей Кузнецов, Денис Димитров, Татьяна Шаврина, Сергей Марков,
  Александр Николич, Анастасия Мальцева, Виталий Горбачев,
  Алена Феногенова, Михаил Барг, Алексей Кондрашин
  
  Картина 5, из запасников: <Маленькие миры>, или Галерея генераций
  ........
  
  Запрос:
  <Синий генеративный котёнок с ушками феи>
  .......
  
  Запрос:
  <Профессиональная классическая академическая живопись маслом.
  Рене Магритт, сюрреализм.
  Трамвай на дороге.
  Улицы и дома вечернего города России.
  Эстетика сюрреализма и соцреализма.
  трамвай на фоне города. арт>
  ........
  
  Запрос: <Картина маслом портрет красивой девушки>
  ......Из комментариев.....
  
  Alexey2005
  14 июн 2022 в 18:01
  
  Диффузионные модели дают намного меньшую степень контроля
  над итоговым результатом,
  чем DALL-E-подобные модели.
  Потому что если диффузная модель начала сходиться
  к некоторому изображению,
  то указать ей,
  //// Входит в штопор?
  что она сходится куда-то не туда
  и скорректировать процесс практически невозможно.
  
  В случае же DALL-E можно:
  
  Подать в качестве затравки крошечный кусочек (полоску) изображения,
  или даже несколько кусочков-патчей,
  и она будет успешно достраивать это изображение
  
  Следить за процессом генерации пиксельных блоков,
  и если генерация свернула куда-то не туда
  - тут же выбрать более устраивающий вариант
  (поскольку на каждом этапе генерируется вероятностное распределение,
  и всегда есть из чего выбрать)
  
  Подать результат генерации на вход самой же модели:
  если изображение в общем устраивает,
  но есть пара областей, заполненных мусором
  - можно указать модели перегенерировать их,
  не трогая остальные области
  
  Если результаты генерации сохранены в качестве тензоров,
  за счёт работы VAE возможно бесшовно склеивать разные картинки
  и кусочки картинок,
  а также выполнять интерполяцию между двумя картинками.
  
  В итоге управляемость и возможность получить вот именно то,
  что хочется,
  у DALL-E-моделей намного выше,
  и работать с ними приятнее.
  Диффузионные модели вызывают ощущение,
  будто вы пытаетесь что-то слепить из тёплого желе
  - как ни старайся, а получается не совсем то.
  //// Т.е. они еще более "раскрепощены".
  //// Плохо это или хорошо?
  
  Уже как-то выкладывал тут примеры работы ruDALL-E.
  
  Повторюсь
  +5
  ........
  
  averkij
  14 июн 2022 в 20:24
  Модель генерирует довольно неплохо.
  Жалко, что нет весов в открытом доступе.
  
  Еще я бы упомянул ребят из midjourney,
  у которых тоже классные диффузионные модели:
  ......
  
  averkij
  14 июн 2022 в 20:37
  
  И, кстати, у вас хорошо работает upscale картинки из библиотеки rudalle,
  спасибо за него.
  //// А это еще что такое?
  
  +2
  ........
  
  dimnsk
  15 июн 2022 в 18:21
  demo API планируется как у суммаризатора ?
  
  0
  .......
  
  Gugutse
  23 июн 2022 в 12:50
  Да, планируется!
  
  +1
  ......
  
  Gugutse
  17 июн 2022 в 13:03
  
  Тут я могу только прокомментировать фразу:
  просто запускаете чужой готовый код на картинках,
  но с другими подписями,
  - кода оригинальной DALL-E нет в открытом доступе
  (деятельность OpenAI уже давно не соответствует её названию),
  //// О как.
  так что код мы писали сами.
  
  +4
  .......
  
  FDosha
  23 июн 2022 в 12:51
  Классно наблюдать за прогрессом!
  Подскажите, а планируется ли у вас попробовать имплементировать dalle-2?
  Вы единственная надежда на то,
  чтобы реально пощупать такую нейронку
  (так как оригинальный вряд ли получится пощупать у себя локально
  из-за размеров, плюс не факт что это в принципе будет доступно всем подряд)
  
  0
  
  Gugutse
  23 июн 2022 в 12:55
  
  Спасибо за добрые слова :)
  Да, мы, безусловно, будем работать с диффузионками
  - это будет DALL-E-2-like или Imagen-like,
  но что-то подобное точно.
  .......
  
  //// Короче уже наблюдается существенное отставание,
  //// от темпа развития в этой области.
  //// Внешне выглядит как накачка "мышечной массы".
  //// И нет какой-то продуманной стратегии на будущее.
  //// Или не считают нужным ее озвучивать.
  
  =========
  
  Данную модель я не испытывал, если не считать пары запросов,
  которые я не очень понял как сохранять.
  Так что какой-то собственной оценки этого этапа развития
  проекта ruDALL-E давать не могу.
  Поэтому идем дальше.
  
  =========
  
  19.03.2023 8:29
  
  Статья о "Модели Kandinsky 2.0".
  В оглавление.
  
  "Kandinsky 2.0 - первая мультиязычная диффузия
  для генерации изображений по тексту"
  Автор: Razant (Anton Razzhigaev)
  https://habr.com/ru/company/sberbank/blog/701162/
  23 ноя 2022 в 17:30
  
  Диффузия всё увереннее вытесняет GANы и авторегрессионные модели
  в ряде задач цифровой обработки изображений.
  Это не удивительно,
  ведь диффузия обучается проще,
  не требует сложного подбора гиперпараметров,
  min-max оптимизации и не страдает нестабильностью обучения.
  А главное, диффузионные модели демонстрируют state-of-the-art результаты
  почти на всех генеративных задачах
  - генерации картинок по тексту, генерация звуков, видео и даже 3D!
  
  К сожалению, большинство работ в области text-to-something
  сосредоточены только на английском и китайском языках.
  Чтобы исправить эту несправедливость,
  мы решили создать мультиязычную text-to-image
  диффузионную модель Kandinsky 2.0,
  которая понимает запросы более чем на 100 языках!
  И главное, на русском ;)
  Подробности - под катом.
  
  Модель Kandinsky 2.0 уже доступна на HuggingFace и GitHub,
  а попробовать генерацию можно на сайтах FusionBrain и rudalle.ru.
  Над этим проектом работали исследователи из SberAI и SberDevices
  при научной поддержке учёных из Института искусственного интеллекта AIRI.
  
  Обязательно почитайте про наши предыдущие text-to-image модели,
  если вы не очень знакомы с темой синтеза изображений по текстовым описаниям:
  
  ruDALL-E
  https://habr.com/ru/company/sberbank/blog/586926/
  
  Kandinsky
  https://habr.com/ru/company/sberbank/blog/671210/
  
  //// Вроде как прорабатывал.
  
  Что такое диффузия?
  
  Существует много подходов к описанию диффузионных моделей,
  но если опустить некоторые математические тонкости,
  то диффузия работает следующим образом:
  
  Сначала нужно итеративно испортить изображение,
  например, с помощью зашумления (прямой диффузионный процесс)
  
  На втором этапе необходимо научиться итеративно восстанавливать изображение
  (обратный диффузионный процесс)
  
  Впервые диффузионные модели были описаны в статье 2015 года
  Deep Unsupervised Learning using Nonequilibrium Thermodynamics
  - и, как видно из названия статьи,
  тут к её описанию пытались подойти через математический аппарат термодинамики.
  Отсюда взялось и название.
  
  Диффу?зия - процесс перемешивания вещества,
  приводящий к выравниванию распределения.
  
  В случае изображений такой процесс может выглядеть как, например,
  постепенное зашумление картинки до тех пор,
  пока от неё не останется гауссовский шум.
  //// Вот только не "гауссовский", а какой-то "спецефически окрашеный",
  //// иначе восстановление из него "исходной" или просто "близкой" картинки,
  //// лично для меня, необъяснимо, какой бы мат-аппарат к этому бы не приплетали.
  
  Впервые превосходство диффузионных моделей над GAN'ами
  продемонстрировали в 2021 году
  в статье Diffusion Models Beat GANs on Image Synthesis.
  Авторы предложили и первый способ управления генерацией (conditioning),
  который назвали classifier guidance
  - использование градиентов от дополнительного классификатора
  для генерации объектов нужного класса (например, собак).
  Само же управление осуществляется через механизм Adaptive GroupNorm,
  то есть через предсказание коэффициентов нормализации.
  
  Эту статью можно считать поворотным моментом,
  после которого многие переключились на исследование диффузии
  для различных задач генеративного ИИ.
  Каждые несколько недель начали появляться новые статьи о диффузии
  для superresolution, image inpainting, audio generation, text-to-video,
  text-to-3D и даже motion generation!
  Мы же сосредоточимся на задаче text-to-image
  - генерации картинок по текстовому описанию.
  
  Text-to-image диффузия
  
  Как мы уже сказали ранее,
  в случае диффузионного процесса в модальности изображений
  процесс обычно сводится к зашумлению и устранению шума,
  поэтому в качестве базовой архитектуры принято использовать UNet
  https://ru.wikipedia.org/wiki/U-Net
  и различные её модификации.
  
  =======
  
  https://ru.wikipedia.org/wiki/U-Net
  
  U-Net
  
  Материал из Википедии - свободной энциклопедии
  
  U-Net - это свёрточная нейронная сеть,
  которая была создана в 2015 году
  для сегментации биомедицинских изображений
  в отделении Computer Science Фрайбургского университета [1].
  Архитектура сети представляет собой полносвязную свёрточную сеть[2],
  модифицированную так,
  чтобы она могла работать с меньшим количеством примеров (обучающих образов)
  и делала более точную сегментацию.
  
  Архитектура сети
  
  Архитектура U-Net для сегментации изображения
  
  Сеть содержит сверточную (слева) и разверточную части (справа),
  поэтому архитектура похожа на букву U,
  что и отражено в названии.
  На каждом шаге количество каналов признаков удваивается.
  
  Сверточная часть похожа на обычную свёрточную сеть,
  он содержит два подряд свёрточных слоя 3?3,
  после которых идет слой ReLU и пулинг с функцией максимума 2?2 с шагом 2.
  
  Каждый шаг разверточной части содержит слой,
  обратный пулинг, который расширяет карту признаков,
  после которого следует свертка 2?2,
  которая уменьшает количество каналов признаков.
  После идет конкатенация
  с соответствующим образом обрезанной картой признаков
  из сжимающего пути и две свертки 3?3,
  после каждой из которой идет ReLU.
  Обрезка нужна из-за того,
  что мы теряем пограничные пиксели в каждой свёртке.
  На последнем слое свертка 1?1 используется
  для приведения каждого 64-компонентного вектора признаков
  до требуемого количества классов.
  
  //// Кто-нибудь что-нибудь понял? Я так практически ничего.
  
  Всего сеть имеет 23 свёрточных слоя.
  
  Две статьи авторов сети имеют более 1600 и 1000 цитирований на май 2018 года[3]
  
  ========
  
  Чтобы генерировать изображение на основе текста,
  нужно чтобы этот текст как-то учитывался
  во время генерации (text-conditioning).
  В статье OpenAI про модель GLIDE
  авторы предложили адаптировать метод classifier-free-guidance для текста.
  На этом подходе будут основаны все последующие text-to-image
  диффузионные модели,
  поэтому расскажем о нём чуть подробнее:
  
  Текст кодируется в список эмбеддингов
  некоторым заранее определённым энкодером
  (в GLIDE - это был обучаемый трансформер).
  
  Эмбеддинги проецируются на размерность слоя attention в UNet.
  
  Затем они конкатенируются с контекстом UNet на каждом слое
  (управление через внимание).
  
  CLS эмбеддинг подаётся на вход Adaptive Group Normalization
  (управление через нормировку).
  
  Во время обучения текст на вход модели подаётся не всегда,
  а только с некоторой вероятностью
  
  При сэмплировании на каждом шаге генерируется два варианта апдейта:
  с учётом текста и без него.
  При этом финальный апдейт экстраполируется в сторону того,
  который был получен с учётом текста.
  
  За счёт такого подхода удаётся управлять диффузией
  не только при помощи меток классов (кот, собака, машина и тд.),
  но и по полноценным текстам!
  Причём очень качественно.
  
  В дальнейшем генерацию по тексту удалось значительно улучшить
  за счёт использования замороженных предобученных текстовых энкодеров
  и механизма каскадного повышения разрешения (Imagen).
  Оказалось, что совершенно незачем обучать
  текстовую часть text-to-image моделей
  - если взять замороженную T5-xxl,
  то качество картинок и понимание текста получается намного выше,
  а ресурсов для обучения требуется сильно меньше.
  //// Т.е. "текстовая часть" как-то обучается отдельно о картинок,
  //// а затем, в этом "замороженном" т.е. предварительно обученном состоянии,
  //// как-то используется уже при обучении системы текст-изображение.
  //// В принципе прием понятный - делим проблему на части.
  //// Но наверно тогда и "графическую часть" стоит "подучить самостоятельно".
  Также в этой статье предложили улучшение сэмплирования
  - динамический трешхолдинг,
  который позволил повысить качество генерации
  при средних и высоких значениях guidance scale
  (варьируемый параметр, отвечающий за степень близости
  генерируемых сэмплов к тексту).
  Трешхолдинг - ограничение значений пикселей на каждом шаге диффузии,
  и если такое ограничение не использовать,
  то значения пикселей могут выйти далеко за пределы допустимого диапазона,
  что негативно скажется на генерации.
  
  В статье про Latent Diffusion авторы показали,
  что на самом деле и картиночную часть не нужно обучать
  (по крайней мере не полностью).
  Если взять сильный автоэнкодер для картинок (VQ-VAE или KL-VAE)
  в качестве визуального декодера
  и пытаться диффузией генерировать эмбеддинги
  из его латентного пространства,
  а не само изображение,
  то обучение пойдёт ещё быстрее.
  Недавно выпущенная модель Stable Diffusion также основана на этом подходе.
  
  Рисунок 4 - Архитектура модели из статьи про Latent Diffusion.
  
  Архитектура Kandinsky 2.0
  
  В основе Kandinsky 2.0 лежит улучшенный подход Latent Diffusion
  (мы генерируем не изображения, а их латентные векторы)
  с несколькими существенными отличиями:
  
  Мы используем два мультилингвальных текстовых энкодера,
  эмбеддинги которых конкатенируются
  //// О как. Сразу два. А причины этого решения было бы неплохо озвучить.
  
  Больше UNet (1.2 млрд параметров)
  
  Динамический трешхолдинг в процессе сэмплирования
  
  Рисунок 5 - Архитектура модели Kandinsky 2.0.
  
  Чтобы модель стала по-настоящему мультиязычной,
  мы решили использовать мультилингвальный энкодер,
  причём сразу два:
  //// Неплохой ход.
  XLMR-clip и mT5-small.
  Таким образом, модель может понимать
  не только английский, русский, французский и немецкий,
  но даже монгольский, иврит и фарси!
  Всего 101 язык.
  Почему было решено использовать сразу две модели для кодирования текста?
  Потому что у этих моделей разные,
  но очень важные особенности
  - XLMR-clip видел картинки и даёт близкие эмбеддинги для разных языков,
  а mT5-small хорошо понимает сложные тексты.
  И наши предварительные тесты показали,
  что такая комбинация работает лучше всего,
  а так как обе модели имеют не очень много параметров (560M и 146M),
  то было решено использовать два энкодера сразу.
  
  На рисунке ниже можно увидеть генерацию,
  полученную по текстовому промту на двух языках.
  Несмотря на такой формат описания,
  генерируется структурно правильное изображение.
  
  Рисунок 6 - Генерация Kandinsky 2.0 для запроса
  "A teddy bear на Красной площади".
  
  Как происходило обучение?
  
  Обучение проходило на платформе ML Space
  c использованием мощностей суперкомпьютеров Christofari.
  Нам потребовалось 196 карт NVIDIA A100 с 80 Гб памяти на каждой из них.
  Всё обучение заняло 14 дней или 65 856 GPU-часов.
  Сначала 5 дней модель училась на разрешении 256х256,
  затем 6 дней на разрешении 512x512
  и 3 дня на максимально чистых данных.
  
  Для обучения использовались следующие гиперпараметры:
  
  Оптимизатор: AdamW с дефолтными параметрами
  
  OneCycleLR: max_iter=500k, max_lr=1e-4, pct_start=0.01
  
  Batch size: 48
  
  Linear noise scheduler: beta_start = 0.0001, beta_end = 0.02
  
  Diffusion steps: 1000
  
  Ограничение длины текстов: 77 токенов
  
  Разрешение: 256 -> 512
  
  В качестве обучающих данных мы использовали комбинацию датасетов,
  которые мы предварительно отфильтровали по критериям наличия водяных знаков,
  низкого разрешения, низкого соответствия текстовому описанию
  по метрике CLIP-score:
  
  LAION-improved-aesthetics - 700 M
  
  LAION-aesthetics-multilang - 46 M
  
  ruDALLE-russian - 44 M
  
  //// Вот ничего не говорящая для непосвященных информация,
  //// в общем, представляется, что таким образом поданная информация,
  //// в лучшем случае, "научная рекламная фишка".
  
  Дополнительные возможности модели
  
  Для решения задач inpainting и outpainting
  мы обучаем дополнительную модель по аналогии с подходом из GLIDE:
  в качестве инициализации берём обученную Kandinsky 2.0
  и добавляем к первой конволюции дополнительный канал для маски.
  После этого продолжаем обучение модели,
  но случайным образом закрашиваем часть каждой картинки
  и конкатенируем к ней соответствующую маску.
  
  Рисунок 7 - Примеры маскирования при обучении задаче inpainting.
  
  Рисунок 8 - Пример outpainting "зелёная планета в космосе"
  
  Рисунок 9 - Пример inpainting <Девушка в красном платье>.
  
  Мультиязычная генерация
  
  Kandinsky 2.0 - это первая мультилингвальная модель
  для генерации изображений по тексту,
  поэтому впервые появилась возможность оценить
  лингво-визуальные смещения в языковых культурах,
  что мы первым делом и сделали.
  
  Ниже приведены результаты генерации одного и того же запроса
  на разных языках.
  Например, для запроса на русском
  <человек с высшим образованием> в результатах генерации
  присутствуют исключительно белые мужчины,
  а для французского варианта
  "Photo d'une personne diplomee de l'enseignement superieur"
  результаты более разнообразные.
  Хочется отметить, что только в русскоязычном варианте
  присутствуют грустные люди с высшим образованием.
  
  А ещё с помощью этого подхода можно составить
  средний портрет <опасного человека>
  или <грабителя> для разных языковых культур
  и образ национальной кухни.
  
  Заключение
  
  Впереди у нас запланировано ещё много экспериментов
  с крупными языковыми моделями и другими подходами
  к процессу диффузии,
  но уже сейчас можно смело заявить,
  что Kandinsky 2.0
  - это первая по-настоящему мультиязычная диффузионная модель!
  Генерацию и инпеинтинг, можно попробовать на сайтах
  FusionBrain и rudalle.ru,
  а также при помощи команды <Запусти художника>
  на умных устройствах Sber и в мобильном приложении Салют.
  
  Авторы
  
  Если вам интересно следить за новинками в DL,
  то обязательно подписывайтесь на каналы авторов Kandinsky 2.0 в Telegram:
  
  Градиентное погружение
  
  AbstractDL
  
  Коллектив авторов:
  Арсений Шахматов, Антон Разжигаев, Владимир Архипкин, Александр Николич,
  Игорь Павлов, Андрей Кузнецов, Денис Димитров, Татьяна Шаврина, Сергей Марков.
  
  Полезные ссылки
  
  Kandinsky 2.0 демо
  https://fusionbrain.ai/diffusion
  
  ruDALL-E демо
  https://rudalle.ru/
  
  Большая версия ruDALL-E, или Как отличить Кандинского от Малевича
  
  ruDALL-E: генерируем изображения по текстовому описанию, или Самый большой вычислительный проект в России
  
  Deep Unsupervised Learning using Nonequilibrium Thermodynamics
  
  Diffusion Models Beat GANs on Image Synthesis
  
  GLIDE: Towards Photorealistic Image Generation and Editing
  with Text-Guided Diffusion Models
  
  Classifier-Free-Guidance
  
  Imagen: Photorealistic Text-to-Image Diffusion Models
  with Deep Language Understanding
  
  High-Resolution Image Synthesis with Latent Diffusion Models
  
  Stable Diffusion
  
  The Illustrated Stable Diffusion
  
  XLMR-clip
  
  mT5-small
  
  .......Из комментариев.....
  
  Kelbon
  23 ноя 2022 в 22:25
  
  Почему вы хвалитесь количеством поддерживаемых языков,
  а не качеством изображений?
  Гугл переводчик справится с поддержкой языков и без вас.
  Налицо плохая архитектура с странной расширяемостью?
  
  +4
  
  averkij
  23 ноя 2022 в 22:45
  
  Не, в конце статьи видно, что генерация чувствительна к языку ввода,
  при машинном переводе это бы потерялось.
  Так что что-то в этом есть.
  
  +6
  
  Kelbon
  23 ноя 2022 в 22:58
  
  вот только не показали как различается в зависимости от языка ввода
  результат на обычных запросах,
  не связанных с традициями и прочим языковым
  .......
  
  keydach555
  23 ноя 2022 в 23:25
  
  по запросу : компания мальчишек идет по железной дороге,
  вокруг лето, один из мальчиков раскинув руки идет по рельсу как канатоходец,
  летний пейзаж, в художественном стиле имажинистов
  
  миджорни через бота в дискорде мне выдало вот эти варианты
  https://postimg.cc/R6GdD148
  https://postimg.cc/nsJ1VSLg
  
  кандинский 2 на тот же запрос выдал вот это
  https://postimg.cc/2V3YT2rs
  
  без выводов
  
  +13
  
  //// А вывод может быть и такой:
  //// Кандинский 2 знает, чем кончается хождение по путям
  //// на железной дороге. И спрогнозировала результат.
  //// Т.е., возможно, Кандинский 2, чувствует себя более свободным,
  //// чем "миджорни".
  
  vassabi
  24 ноя 2022 в 01:43
  
  каждый раз поражает, когда нейронка пытается подставить еще и тени.
  
  То есть - она бывает угадывает, бывает - промахивается,
  но само вот это намерение - "тут добавить тень",
  это для меня лично очень поразительно!
  
  0
  
  radtie
  24 ноя 2022 в 15:19
  
  Всё соответствует ТЗ,
  только остальных мальчишек и ноги первого увез паровозик.
  
  +2
  
  starcs
  25 ноя 2022 в 11:16
  
  А вывод простой.
  Видимо обучен, что гулять по путям - опасно для жизни.
  
  +1
  
  lozy_rc
  24 ноя 2022 в 09:10
  
  Stable Diffusion
  
  Тем временем 5 часов назад вышла Stable Diffusion 2.0.
  Пока примеры поражают,
  самая крутая Text-to-Image что я видел.
  ......
  
  Aniro
  24 ноя 2022 в 14:44
  
  На самом деле она не так чтобы сильно продвинулась вперед.
  Из хорошего - новые модели deep2img и text guided upscale,
  768x768 вместо 512х512.
  Из плохого - основательно порезанный датасет,
  убраны celebrity, современные художники, nsfw.
  
  В результате фотографии животных, домиков и машинок рисует лучше,
  людей - примерно также или хуже.
  Арты сильно хуже.
  Понимание кто на ком стоит улучшилось не сильно,
  лошадь едущую на астронавте по прежнему нормально не может нарисовать.
  
  Сейчас из доступных сетей наиболее продвинутой выглядит midjourney v4,
  хотя кастомные модели на основе sd могут превосходить mj в своих областях.
  Через месяц посмотрим что будет,
  когда энтузиасты дообучат sd2,
  потенциал у нее есть.
  
  +4
  
  Kristaller486
  24 ноя 2022 в 18:46
  
  Да, выпил художников, это наверное самое печальное,
  что сделали разработчики.
  
  +3
  
  WaveCut
  25 ноя 2022 в 16:18
  
  Миджорни, к слову, тоже работает на SD с файнтюном и сахаром в запросах.
  
  0
  .......
  
  Gero39
  25 ноя 2022 в 12:09
  
  Куда хуже прошлой модели.
  
  0
  
  ========
  
  06.04.2023 12:03
  
  Резюме о "Модели Kandinsky 2.0".
  В оглавление.
  
  //// Можно резюмировать результат такого развития мультимодели "Kandinsky 2.0"
  //// как существенное усиление "текстовой" части системы,
  //// и даже не в смысле "многоязычной" поддержки,
  //// а как возможности определенного "понимания" текста промпта
  //// как по частям (XLMR-clip), так и в какой-то мере в целом (mT5-small).
  //// Причем, эти составляющие были обучены/подготовлены отдельно/самостоятелно,
  //// и как-то потом объединены в единую систему.
  //// Судя по собственным ощущениям в ходе экспериментов,
  //// с заданием одного и того же промпта,
  //// Это приводило к очень сильным "разбросам" при генерации картинок,
  //// //// что, в общем-то, соответствовало "званию генеративного художника",
  //// но для целей "иллюстративных" было не очень-то приемлемо.
  //// И по этому критерию "Модель Kandinsky 2.0" сильно уступала
  //// зарубежным аналогам.
  
  В общем, развитие в сторону мульти-лингвистики,
  каких-то особых преимуществ на первом этапе не дало.
  Пользователи это не оценили,
  а переключились на сравнение с другими системами.
  А тут, похоже, проект ruDALL-E "гонку проигрывает".
  
  Но похоже из-за этой "мульти-лингвистики"
  у "Модели Kandinsky 2.0" проявлялась какая-то
  повышенная "креативность" и "неустойчивость".
  А может это было как-то связано со схемой "дообучения",
  которая явно проявлялась в цепочке последовательных
  запросов с одним и тем промтом но в разных стилях
  с отметкой понравившихся реализаций.
  Причем жаловаться на "фантазию" обычно не приходилось,
  наоборот, обычно было сожаление, что интересное решение
  буквально при следующем запросе уходило "в пучину".
  
  Конечно такое поведение, для требований создания иллюстраций
  было явно неудовлетворительным.
  
  //// Можно резюмировать результат такого развития мультимодели "Kandinsky 2.0"
  //// как существенное усиление "текстовой" части системы,
  //// и даже не в смысле "многоязычной" поддержки,
  //// а как возможности определенного "понимания" текста промпта
  //// как по частям (XLMR-clip), так и в какой-то мере в целом (mT5-small).
  //// Причем, эти составляющие были обучены/подготовлены отдельно/самостоятельно,
  //// и как-то потом объединены в единую систему.
  //// Судя по собственным ощущениям в ходе экспериментов,
  //// с заданием одного и того же промпта,
  //// Это приводило к очень сильным "разбросам" при генерации картинок,
  //// //// что, в общем-то, соответствовало "званию генеративного художника",
  //// но для целей "иллюстративных" было не очень-то приемлемо.
  //// И по этому критерию "Модель Kandinsky 2.0" сильно уступала
  //// зарубежным аналогам.
  
  И, похоже, Сбер на это запрос пользователей отреагировал.
  "креном" в другую сторону.
  
  Недели полторы назад генерируемые картинки очень жестко "застабилизировались",
  вплоть до почти 100% повторения композиции и цветовой гаммы.
  
  Сделано это было без всяких предварительных анонсов,
  но почувствовалось просто сразу.
  И только неделю спустя появилось хоть какое-то пояснение,
  как-то иллюстрирующее изменения за последние четыре с половиной месяцев
  в системе "Модели Kandinsky 2.0"
  
  ======
  
  05.04.2023 8:33
  
  Статья о "Модели Kandinsky 2.1"
  В оглавление.
  
  "Kandinsky 2.1, или Когда +0,1 значит очень много"
  Автор: kuznetsoff87 (Андрей Кузнецов)
  https://habr.com/ru/companies/sberbank/articles/725282/
  4 апр в 12:03
  
  В ноябре 2022 года мы выпустили свою первую диффузионную модель
  для синтеза изображений по текстовым описаниям Kandinsky 2.0,
  которая собрала как позитивные, так и отрицательные отклики.
  Её ключевой особенностью была мультиязычность
  и использование двойного текстового энкодера на входе сети:
  XLMR-clip и mT5-small.
  Рефлексия после релиза подтолкнула нас к перестройке планов
  по развитию архитектуры
  и к сильному стремлению получить буст в качестве генераций,
  чтобы выйти на уровень аналогичных решений,
  названия которых слишком хорошо известны, чтобы их называть.
  //// Т.е. включились в "коммерческую гонку".
  //// Интересно, от чего пришлось при этом отказаться.
  В то же время мы могли наблюдать за появлением новых генеративных моделей
  и их файнтюнов, таких как ControlNet, GigaGAN, GLIGEN, Instruct Pix2Pix и др.
  В этих работах представлены и новые взгляды на генерацию,
  и новые возможности использования латентного пространства
  для внесения контролируемых изменений через текстовые запросы,
  а также для смешивания изображений
  - возможности использования генеративных моделей расширяются постоянно.
  Бурное развитие прикладных кейсов привело
  к интенсивно нарастающему числу различных привлекательных для пользователей
  реализаций этих функций
  - визуализация городов,
  изображения известных личностей в нетипичных ситуациях
  и многие другие.
  
  Протестировать модель на своих запросах можно несколькими способами:
  
   в Telegram?боте (есть все доступные 4 режима генерации)
   https://t.me/kandinsky21_bot
  
   на сайте fusionbrain.ai
   https://fusionbrain.ai/diffusion
   (доступна генерация по тексту и режимы inpainting/outpainting)
  
   на платформе MLSpace ??в хабе предобученных моделей и датасетов DataHub
   https://sbercloud.ru/ru/datahub/rugpt3family/kandinsky-2-1
  //// Интересная поддиректория - rugpt3family - а что там еще есть.
  //// Самая большая модель на 13млрд параметров. От ГПТ-3 отставание в 50 раз.
  //// Вряд ли можно догнать, двигаясь тем же курсом.
  
   в навыке Салют <Включи художника>
  
   на сайте rudalle.ru
  //// Судя по всему, на этом сайте новые возможности
  //// появятся в последнюю очередь.
  
  В целях повышения качества генераций будущих пользователей
  мы также разрабатываем специальный промтбук,
  который позволит вам выжать из модели максимум :)
  
  Архитектура и детали обучения
  
  Решение о внесении изменений в архитектуру пришло
  после продолжения обучения версии Kandinsky 2.0
  и попыток получить устойчивые текстовые эмбеддинги
  //// Вот-вот "устойчивости" не хватало.
  //// Но почему это связано с "текстовыми эмбеддингами"
  //// при одних и тех же запросах не очень понятно.
  мультиязычной языковой модели mT5.
  Закономерным выводом стало то,
  что использование только текстового эмбеддинга
  было недостаточно для качественного синтеза изображения.
  //// Ну непонятно, только почему к такому выводу нужно было идти 2 года.
  Проанализировав еще раз существующее решение DALL-E 2 от OpenAI
  было принято решение поэкспериментировать с image prior моделью
  (позволяет генерировать визуальный эмбеддинг CLIP по текстовому промту
  или текстовому эмбеддингу CLIP),
  //// Т.е. v.2.1 - это тоже эксперимент
  одновременно оставаясь в парадигме латентного визуального пространства,
  //// А вот этого не понимаю.
  чтобы не пришлось переобучать диффузионную часть UNet модели Kandinsky 2.0.
  //// А это понятно. Но вопрос, сам по себе интересен,
  //// уже с точки зрения мультимоделей,
  //// получается, что нынешняя версия это какой-то композит,
  //// отдельно обученных моделей, из разных парадигм.
  //// И возникает вопрос, а как это все между собой согласуется,
  //// или какой процесс обеспечивает такое согласование?
  Теперь чуть больше деталей про процесс обучения Kandinsky 2.1.
  
  На первом этапе мы начали учить image prior модель
  для маппинга текстов и изображений,
  обучив отдельную диффузионную модель DiffusionMapping
  на текстовых и картиночных эмбеддингах CLIP.
  В качестве модели CLIP мы использовали предобученные веса mCLIP,
  а в основе DiffusionMapping лежит трансформерная архитектура с параметрами:
  
   num_layers=20
  
   num_heads=32
  
   hidden_size=2048
  
  Обучив image prior модель (рисунок 1, слева),
  мы стали учить целевую модель синтеза изображения
  по текстовому описанию (рисунок 1, в центре).
  В этой реализации обученный image prior в виде модели DiffusionMapping
  использовался для синтеза по входному текстовому промту
  визуального эмбеддинга mCLIP,
  который далее применялся в процессе обучения диффузионной модели.
  Таким образом, мы обучали механизм обратной диффузии
  восстанавливать латентное представление изображения
  НЕ только из текстового эмбеддинга как в Kandinsky 2.0,
  а еще и из визуального эмбеддинга CLIP
  с condition на этот текстовый эмбеддинг.
  В паре с дополнительными чистыми данными
  такое архитектурное изменение привело
  к существенному росту качества генераций
  (генерации можно наблюдать в конце статьи).
  В качестве конечного блока модели выступает новый декодер,
  который из латентного представления позволяет получить
  финальное синтезированное изображение.
  //// Качество заметно улучшилось.
  //// И теперь становится более понятным почему.
  //// Т.е. обучение разделяется на отдельные этапы,
  //// задача которых согласовать отдельные модели,
  //// посредством "комбинирования эмбедингов" различной природы,
  //// и, наверняка, размерностей.
  
  Среди нескольких возможных способов использования генеративной модели
  мы особое внимание уделили возможности смешивания изображений
  (рисунок 1, справа).
  В отсутствии необходимости использовать текстовые эмбеддинги
  мы просто подаём в обученную диффузионную модель
  два визуальных эмбеддинга CLIP,
  и далее декодером восстанавливаем "смешанное" изображение.
  
  В описании выше я умышленно не погрузился
  в детали нового декодера изображений,
  потому что этот этап заслуживает отдельного внимания,
  и даже отдельной статьи,
  но кратко о том, почему мы ушли
  от использованного в прошлых версиях генеративных моделей VQGAN
  и стали использовать специально обученный для наших целей MoVQGAN модель,
  я расскажу в отдельном блоке ниже.
  
  Рисунок 1. Обучение image prior модели (слева),
  архитектура text2image модели (в центре),
  механика смешивания изображений (справа).
  
  Архитектура Kandinsky 2.1 содержит 3.3B параметров:
  
   Text encoder (XLM-Roberta-Large-Vit-L-14) - 560M
  
   Image prior - 1B
  
   CLIP image encoder - 427M
  
   Latent Diffusion UNet - 1.22B
  
   MoVQ encoder/decoder - 67M
  
  Для того, чтобы каждый мог оценить качество новой модели Kandinsky 2.1
  мы по традиции выкладываем веса в open source на следующих источниках:
  
   HuggingFace
   https://huggingface.co/sberbank-ai/Kandinsky_2.1
  
   GitHub
   https://github.com/ai-forever/Kandinsky-2
  
   MLSpace
   https://sbercloud.ru/ru/ai-services
  
  Датасеты
  
  Обучение image prior модели выполнялось на датасете LAION Improved Aesthetics,
  а затем был выполнен файнтюн на данных LAION HighRes.
  
  Обучение основной Text2Image диффузионной модели выполнялось
  на основе 170M пар "текст-изображение" из датасета LAION HighRes
  (важным условием было наличие изображений с разрешением не меньше 768x768).
  Использование 170M пар для претрейна обусловлено тем,
  что мы сохранили диффузионный блок UNet от версии Kandinsky 2.0,
  что позволило не обучать его с нуля.
  Далее на этапе файнтюнинга применяли отдельно собранный
  из открытых источников датасет из 2М очень качественных изображений
  в высоком разрешении с описаниями
  (COYO, anime, landmarks_russia и ряд других).
  //// Про использование результатов генерации изображений пользователями
  //// опять ни слова.
  
  Визуальный автоэнкодер MoVQGAN
  
  В ранних исследованиях (Kandinsky 1.0 и 2.0)
  мы использовали VQGAN автоэнкодер,
  который был специально дообучен под задачи синтеза изображений
  на таких сложных доменах, как тексты и лица людей.
  Это позволило добиться определённого успеха
  в части генераций изображений по сравнению с ванильной моделью VQGAN.
  Более подробно об экспериментах с VQGAN автоэнкодером
  мы писали в этой статье.
  https://habr.com/ru/company/sberbank/blog/581738/
  
  Очевидно, что весомо в эффектность генераций
  добавляет именно визуальный декодер,
  поэтому от его качества зависит очень много.
  Часто бывает так, что когда долго ищешь решение проблемы,
  оно приходит не сразу,
  но стоит немного отпустить мысль,
  как возникает какой-то новый путь.
  Получилось так,
  что на одном из регулярно проводимых в нашей команде ReadingClub
  мы делали обзор новой модели VQGAN - MoVQ:
  Modulating Quantized Vectors for High-Fidelity Image Generation [1].
  Эта работа дала новую жизнь части модели,
  отвечающей за представление изображений в пространстве квантованных векторов.
  
  Основное нововведение MoVQ заключается
  в добавлении слоя spatial conditional нормализации
  в блоки декодера,
  что позволило повысить реалистичность восстанавливаемых изображений.
  Сама идея spatial нормализации не новая
  и известна со времён StyleGAN и AdaIN слоёв,
  но авторы MoVQ применили её в пространстве квантованных представлений энкодера,
  что позволило избежать возникновения
  типичных повторяющихся артефактов,
  которые возникают из-за процесса квантования
  пространственно близких эмбеддингов
  в одинаковые индексы codebook.
  Использование spatial нормализации
  добавляет степеней свободы квантованным представлениям после энкодера
  и позволяет распространять по слоям декодера
  более вариативные представления эмбеддингов.
  //// Так надо будет почитать где-то про эту "нормализацию".
  
  Приведённые в [1] результаты сравнения с известными автоэнкодерами
  показывают качественное преимущество по всем известным метрикам
  (PSNR, SSIM, LPIPS и rFID) на двух датасетах:
  датасет лиц FFHQ и датасет ImageNet (рисунок 2).
  Отдельно хочется обратить внимание на тот факт,
  что размер codebook (Num Z) для модели MoVQ самый маленький
  и составляет всего 1024 вектора.
  Следует также отметить, что визуально качество MoVQ по изображениям
  оценить крайне трудно,
  но далее я приведу примеры декодированных изображений
  обученной нами модели на самых сложных доменах для автоэнкодеров:
  лица и текст.
  
  Рисунок 2. Сравнение MoVQ с другими энкодерами [1]
  
  Впечатлившись результатами MoVQ,
  мы реализовали блок spatial нормализации в рамках нашей модели VQGAN,
  потому что технически эта операция была совершенно понятна и проста.
  Модель содержит всего 67M параметров,
  но результаты восстановления действительно не позволяют в большинстве случаев
  отличить декодированное изображение от исходного (groundtruth).
  Модель обучалась на 1 GPU в течение двух недель
  на данных LAION HighRes.
  Как и обещал, предлагаю оценить качество восстанавливаемых изображений
  на ярких примерах с декодированием лиц, текста и сложных сцен.
  В отдельной статье мы представим более подробное сравнение
  различных автоэнкодеров c нашей реализацией MoVQ.
  
  Сравнение с другими Text2Image моделями
  
  Далеко не все современные решения
  делятся результатам качественной оценки своих моделей,
  ведь куда важнее пользовательский отклик
  - это лучшая оценка работы модели.
  Тем не менее, мы как исследовательская команда
  не можем себе позволить обойти стороной вычислительные эксперименты
  на уже всем известных датасетах для валидации генеративных моделей.
  С точки зрения метрики мы всё также используем
  уже ставшую золотым стандартом оценки Frechet Inception Distance (FID),
  которая позволяет оценить
  близость двух вероятностных распределений
  (распределение оригинальных изображений
  и распределение синтезированных генеративной моделью изображений)
  
  ...... ,где r - оригинальные, а g - сгенерированные изображения.
  
  Сравнение Kandinsky 2.1 и аналогичных решений мы проводили
  на датасете COCO_30k, который содержит 30 тыс. изображений
  с центральным кропом до 256x256 пикселей..
  Измерять мы будем в режиме zero-shot,
  то есть датасет COCO не использовался при обучении модели.
  Полученные результаты (Таблица 1) позволяют утверждать,
  что Kandinsky 2.1 сделал большой качественный скачок
  относительно своих прошлых версий
  и вышел на уровень зарубежных аналогов,
  а некоторые из них даже превзошел.
  Среди известных решений модель Kandinsky 2.1 занимает уверенное третье место.
  //// Да качество улучшилось, и "стабильность" резко повысилась.
  //// Что собственно этот критерий и отражает.
  //// А вот "творческую жилку", похоже, этот критерий не отражает.
  
  /////// "Интересно" еще вот что. Когда только начинался проект ruDALL-E,
  /////// у разработчиков на основании чисто визуальных оценок,
  /////// возникали сомнения в надежности/релевантности критериев типа FID:
  /////// "Как мы тестировали и дообучали одну из самых хайповых разработок года"
  /////// Автор: thedenk (Денис)
  /////// https://habr.com/ru/companies/sberbank/articles/581738/
  /////// 5 окт 2021 в 17:36
  \\\ ...Интересно, что для данной метрики оригиналы выглядят менее естественными,
  \\\ чем то, что сгенерили некоторые автоэнкодеры (!).
  \\\ Вероятнее всего, мы уже упёрлись в возможности данной метрики,
  \\\ оценка с её помощью уже становится менее объективной...
  /////// А вот спустя полтора года "сомнения исчезли"...
  /////// И к чему бы это?
  
  Таблица 1. Значения метрики FID генеративных моделей на COCO_30k
  
  Генерации
  
  Синтез изображений по тексту
  ......
  
  Смешивание изображений
  
  В столбце слева находится изображение "стиля",
  которое мы хотим перенести на исходное изображение посредством диффузии.
  //// Интерфейса к этой функции на сайте rudalle.ru пока нет.
  .......
  
  Синтез изображений, похожих на референсное
  
  В столбце слева находятся оригинальные изображения,
  а остальные изображения - являются его вариациями,
  синтезированными с помощью диффузионной модели.
  //// Интерфейса к этой функции на сайте rudalle.ru тоже пока нет.
  ......
  
  Изменение изображений по тексту
  
  Слева показаны исходные изображения,
  а справа текстовое описание и результат изменения исходной картинки
  по этому тексту.
  //// Интерфейса к этой функции на сайте rudalle.ru тоже пока нет.
  ......
  
  Telegram-бот
  
  Обновленная модель Kandinsky 2.1 доступна для использования
  в новом Telegram-боте,
  доступ к которому можно получить по ссылке.
  https://t.me/kandinsky21_bot
  В боте доступны 4 режима работы с моделью:
  
   Синтез изображений по тексту
  
   Смешивание изображений
  
   Синтез изображений, похожих на референсное
  
   Изменение изображений по тексту
  
  При генерации изображений доступны 3 стиля:
  
   artstation - сформирован в ходе файнтюна
   на наборе изображений с сайта artstation.com
  
   4k - сформирован в ходе файнтюна на наборе изображений высокого разрешения
  
   anime - сформирован в ходе файнтюна на наборе аниме-изображений
  
  //// Ну, может когда-то и для "бестележных" что-то сделают.
  
  Выводы и планы
  
  В итоге: что можно считать ключом к успеху?
  Вряд ли возможно выделить какое-то одно сделанное изменение
  из описанных мною выше,
  именно их совокупность как в рамках архитектуры,
  так и в части подготовки данных для претрейна/файнтюна
  позволила получить очень впечатляющий качественный прирост генераций,
  а также мы успели решить несколько прикладных задач
  на базе новой модели синтеза:
  
   смешивание изображений;
  
   изменение изображений на основе текстового описания;
  
   генерация изображений, похожих на заданное;
  
   inpainting/outpainting на изображениях.
  
  Что же дальше?
  Мы продолжим исследовать возможности нового энкодера изображений,
  общей архитектуры и будем работать
  над усилением (увеличением) текстового энкодера,
  а также проведём эксперименты с генерацией изображений
  в разрешении 1024x1024 и выше.
  Всё это и многое другое мы имплементируем
  в следующих версиях модели Kandinsky :)
  
  Следите за новостями в каналах
  Градиентное погружение,
  https://t.me/gradientdip
  
  CompleteAI
  https://t.me/complete_ai
  
  и AbstractDL.
  https://t.me/abstractDL
  
  Авторы и контрибьют
  
  Модель Kandinsky 2.1 была разработана и обучена исследователями команды Sber AI
  при партнёрской поддержке учёных из Института искусственного интеллекта AIRI
  на объединённом датасете Sber AI и компании SberDevices.
  
  Коллектив авторов:
  Арсений Шахматов (*), Антон Разжигаев, Владимир Архипкин, Александр Николич,
  Игорь Павлов, Ангелина Куц, Андрей Кузнецов, Денис Димитров.
  .......
  
  //// И уже 91 комментарий.
  //// Прошлая версия вызвала на порядок меньше комментарием.
  //// Значит чем-то эта версия пользователей "зацепила".
  
  ......
  
  recompileme
  4 апр в 13:09
  
  у меня сердце разрывается, когда я думаю что на эти деньги
  и за это время можно было сделать на базе SD
  вместо того чтобы сделать свое, отечественное
  -3
  
  turbowyrm
  4 апр в 16:29
  
  Унификация любых решений скорее будет приводить к стагнации,
  поэтому разнообразные подходы к решению одной и той же задачи
  помогают сообществу в целом двигаться вперёд -
  тут так же как с биоразнообразием
  - большее количество видов приводит к стабильности системы в целом.
  
  Тут опять же можно вспомнить о разработке принципиально новых подходов
  к построению сетей - если бы все упирались только в одно решение,
  возможно мы бы никогда и не увидели диффузные модели.
  
  Поэтому я считаю, что вы не справедливы к разработчикам
  - они своими "велосипедами" дают новые нотки всему ансамлю нейронок.
  ......
  
  rPman
  4 апр в 14:50
  
  Возможно тут главный результат не модель, уровня SD,
  а опыт построения таких моделей.
  Чтобы сделать лучше, нужно научиться делать хотя бы так же.
  ......
  
  koshi
  вчера в 11:33
  
  Да, похоже модель воспринимает текст весьма поверхностно,
  как слабо слышащий, не очень эрудированный человек,
  которых строит ассоциации по обрывкам слов.
  
  Думаю, логичнее сделать промежуточный этап:
  запрос пользователя растолковывается продвинутой лингвистической моделью
  (ChatGPT), а результат уже идёт на вход генератора картинок.
  ......
  
  ========
  
  07.04.2023 7:55
  
  Резюме о "Модели Kandinsky 2.1".
  В оглавление.
  
  Резюмируя этот последний текст и комментарии к нему,
  а также собственный опыт использования "Модели Kandinsky 2.1",
  наверно, стоит сказать следующее.
  
  Конечно, модель стала более "художественней",
  т.е. делать более качественнее "картинки",
  но при этом стала менее "генеративнее" по сравнению
  с "Модель Kandinsky 2.0", в том смысле,
  что сейчас она "честно" пытается отобразить,
  то что лежит "на поверхности" промпта.
  Если конечно ее не загоняют "в ступор" нетривиальным запросом.
  А вот какие-то "глубинные слои" промта,
  которые как-то иногда, очень не регулярно,
  но гарантированно все-таки "прорывались" в генерируемое изображение,
  теперь уже ни разу не удалось увидеть.
  
  Т.е. не смотря на то, что вроде бы "текстовая модель"
  изменениям вроде как не подвергалась,
  а все усилия были приложены в первую очередь к генерации картинок,
  где-то на этапе совместной притирки языковой и визуальной модели,
  какие-то "глубинные связи" в текстовой модели, либо "потерялись",
  либо очень сильно нивелировались. "Картинка" победила "текст".
  И это стало очень заметно - работа с "картинкой" улучшилась,
  хотя не на квадратных изображениях это не очень заметно,
  а вот "понимание" текста, на мой взгляд, значительно ухудшилось.
  
  Точнее не так. Соответствие "текста промта" и "изображения"
  вроде как улучшилось, но чисто механически,
  как в басне Крылова "слон-художник", только хуже.
  В том смысле, что какие-то токены промта могут в тех или иных
  стилях настолько "забивать" другие токены своим "магическим потенциалом",
  что никакими ухищрениями, избавиться о этого не получается.
  Это явление было и в "Модели Kandinsky 2.0",
  но там была какая-то возможность, думаю, что за счет дообучения,
  как-то "раскачать" ее на что-то "нестандартное".
  
  А вот в "Модели Kandinsky 2.1" такой "фокус" уже не получается,
  то ли "дообучение" вообще отключено,
  то ли оно как-то иначе работает,
  то ли это следствие доминирования "визуальной" модели.
  Пока непонятно, надо будет еще поэкспериментировать.
  Но ощущение что с каждым последующим повторным запросом,
  картинка, как минимум, не улучшается,
  и даже не пытается измениться ни по композиции, ни по цветовой гамме,
  уже есть. И это ощущение очень "стойкое".
  На десяток примеров "неулучшения" приходится один-два примера
  действительно чего-то более менее "выразительного",
  но опять же в той же композиции и цветовой гамме.
  
  И тут стоит вспомнить парочку комментариев годичной давности
  когда делалась еще делалась "Модель Kandinsky 2.0"
  "Большому художнику - большой критик:
  новые версии модели ruCLIP для ранжирования результатов ruDALL-E
  (и не только)"
  Автор: kuznetsoff87 (Андрей Кузнецов)
  https://habr.com/ru/companies/sberbank/articles/646447/
  19 янв 2022 в 12:40
  ....
  
  \\\ kr12
  \\\ 22 янв 2022 в 17:13
  \\\
  \\\ А не привидёт ли это к большей "стандиртизации"
  \\\ и уменьшению разнообразия до заученых и наиболее популярных лекал?
  \\\ А эти заученные образцы и так просматриваются
  \\\ в значительном количестве выдачи RuDALL-E.
  \\\ Искуство ведь ценно новизной.
  \\\ Отсюда ещё важный вопрос,
  \\\ есть ли метрика или механизм,
  \\\ позволяющая избегать сильно большого сходства с датасетами,
  \\\ чтоб не преврящаться в поиск по памяти нейросети
  \\\ и отрисовке просто оригинала,
  \\\ как его запомнило сеть?
  \\\ 0
  \\\
  \\\ kuznetsoff87
  \\\ 22 янв 2022 в 19:48
  \\\
  \\\ Отнюдь.
  \\\
  \\\ Пайплайн ruDALL-E состоит из собственно синтеза,
  \\\ ранжирования ruCLIP
  \\\ и следующем за ним блоке повышения разрешения.
  \\\ Генерация построена на специального вида энкодере,
  \\\ который позволяет в n-мерном пространстве признаков
  \\\ так строить кодированные вектора,
  \\\ чтобы близкие по смыслу слова давали случайный вектор
  \\\ из той области пространства,
  \\\ в которой находятся релевантые объекты.
  \\\ //// Вот с этим бы хотелось бы разобраться.
  \\\ //// Откуда и как берутся "смыслы слов" и как это кодируется,
  \\\ //// Ну м собственно механизм построения случайного вектора.
  \\\ Чтобы избежать близких, похожих изображений,
  \\\ нужно в дальнейшем продолжать учить модель
  \\\ на бОльшем наборе данных,
  \\\ увеличивать размер модели и т.д.
  \\\ //// Не факт. Версия 2.1 подтверждает как раз обратное.
  \\\
  \\\ Отвечая на вопрос про метрики.
  \\\ Используется метрика InceptionScore.
  \\\ Ее суть заключается в том,
  \\\ что при синтезе изображение было похоже
  \\\ и отличалось от известных в этой же области признакового пространства
  \\\ (созданная собака не совпадает с другими изображениями собаки)
  \\\ и в то же время было похоже на реальный объект
  \\\ (сгенерированная собака принадлежит классу "собака").
  \\\ +3
  
  Да в "Модели Kandinsky 2.0" "случайных векторов" было больше чем "достаточно".
  А вот "Модели Kandinsky 2.1" уже все, скорее, с точностью до наоборот.
  И причина ли в новом энкодере, большей базе обучения,
  или не совсем удачной подгонке текстовой и визуальной модели друг другу,
  пока не очень ясно.
  
  Представляется, что ситуации вряд ли улучшится,
  если разработчики ruDALL-E будут делать дальнейшую ставку
  на совершенствовании чисто изобразительных средств.
  Все-таки в мультимодальных системах все части системы должны
  быть как-то взаимоувязаны и сбалансированы.
  И крен в одну или в другую сторону может принципиально
  изменить "применимость" системы.
  
  В "Модели Kandinsky 2.0" "крен" был больше в "текстовую сторону",
  и она могла служить пусть и не идеальным, но именно "генеративным художником".
  В "Модели Kandinsky 2.1" "крен" больше в "визуальную сторону",
  и она может служить "иллюстратором", выдавая новые идеи/решения,
  только в каких-то "проблемных" с точки зрения "промпта" случаях.
  
  Насколько должна стать "толще" текстовая модель по сравнению с сегодняшней,
  трудно сказать, но если прикидывать по тому какие возможности
  начинают проявлять ГПТэшки, при увеличении "размеров",
  то представляется, что текстовую модель нужно делать "толще",
  как минимум на порядок.
  Вроде как в планах разработчиков что-то такое присутствует,
  но "будем посмотреть", как это будет реализовано.
  И, очень желательно, доработать функцию "дообучения",
  а не просто "смешения картинок".
  
  Но это мое мнение. Не специалиста.
  А что выберут разработчики ruDALL-E - посмотрим.
  Если конечно они не станут "почивать на лаврах".
  
  "За 48 часов пользователи сгенерировали
  свыше 1,3 млн изображений в Kandinsky 2.1"
  Автор: hello_hella (Ольга)
  https://habr.com/ru/news/727434/
  6 апр в 16:31
  
  ========
  
  Вместо заключения.
  В оглавление.
  
  Наверно на этом пока стоит поставить определенную логическую точку.
  Естественно и эксперименты и наблюдение за этой темой
  - развитие мультимодальной системы "Модель Kandinsky 2.X" -
  будет продолжаться, но вряд ли новые материалы появятся
  в ближайшие три-четыре месяца.
  И для работы над анализом мультимоделей нужно будет искать
  какой-то иной материал.
  
  8 апреля 2023 года Андрей Павлович Митасов, Минск, РБ, Порт приписки Земля
  
  
  ========
  
  08.06.2023 19:00
  
  Часть 2. Вариации на тему мультимоделей.
   Размышления о одной отсутствующей конструкции.
   А вот и первые шаги к простеньким "би-системам".
   А это идея новой "би-системы".
   Еще пару идеек в общую копилку ММэшек.
   Анонс "Модели Kandinsky 2.2".
   Еще одна "безумная идея" о мультимоделях.
   Неожиданный поворот в развитии "Модели Kandinsky 2.x".
   Использование своего собственного языка обучения мультимоделей.
   Возможный стандарт универсального интерфейса между ИИ-системами.
   Когда мультимоделей становится слишком много.
  
  ========
  
  07.06.2023 6:40
  
  Размышления о одной отсутствующей конструкции.
  В оглавление.
  
  Просматривая архивы Хабра, обратил внимание на одну тенденцию.
  Может быть конечно, это связано с недостаточной глубиной поиска,
  или недостаточностью внимания или понимания просмотренных материалов,
  но пока все, что я видел можно охарактеризовать как "однониточные конструкции".
  Исключение, пожалуй, составляют "деревянные решения" в форме "случайного леса".
  И в одном из материалов вскользь упоминаются "ансамбли сетей"",
  как способ "суммирования" работы нескольких нейронок с целью повышения качества.
  //// Еще там же упоминаются некие "snapshot-ансамбли", вроде как успешные,
  //// но подробностей этой конструкции я пока не нашел.
  Но судя по остальному просмотренному массиву информации,
  это пока где-то очень далеко от нынешнего мэйнстрима в ИИ-технологиях
  в той части, которая относится к нейронкам.
  "Деревянные решения" это все-таки отдельная ветвь в машинном обучении,
  со своей спецификой и классом задач.
  
  Даже ввели специальный термин
  для такой концепции "однониточной" обработки данных - "пайплайн",
  если я, конечно, правильно в этом разобрался.
  И все основные усилия по разработке систем на основе нейронок,
  будь-то ГПТэшки или ММэшки, сконцентрированы вокруг этого одного "пайплайна",
  чтобы добиться нужного качества обучения.
  
  В терминах ТРИЗ это обычно называется "моносистема",
  насколько сложной она бы не выглядела внутри,
  одна из основных ее характеристик "одноканальность", "однониточность" и т.п.
  И есть в ТРИЗ такой закон развития технических систем как
  "моно -> би -> поли -> моно", отражающий типовую закономерность
  появления и использования различных конструкций систем одного назначения.
  Причем, каждый "переход" от одной конструкции к другой может происходить
  самыми разными способами, но определенная специфика/особенности есть у каждого.
  
  И вот с позиций этого закона обращает на себя внимание полное отсутствие
  что в нейронках, что в ГПТэшках, что в ММэшках, как "самым навороченным",
  конструкций с соответствующих в этой классификации термину "би-система",
  т.е. нейронок принципиально состоящих из двух параллельных "пайплайнов",
  и, хотя бы частично, по разному обеспечивающую главную функцию системы,
  плюс обеспечивающую новое качество, и, соответственно, применимость системы.
  
  Попробую проиллюстрировать это на понятных примерах.
  Классический пример - "двустволка", у которой разные стволы имеют
  либо разные калибры, либо разный тип заряда/патрона,
  либо вообще используется как резерв на "непредвиденные обстоятельства".
  Причем живучесть двустволки по отношению к тем же многозарядным пушкам,
  доказывает, что есть у этой конструкции, определенная "экологическая ниша"
  Еще один пример - телескоп, у которого параллельно основной "трубе",
  есть еще маленькая для "наводки" на нужный участок небосклона.
  Ну и т.д. Если присмотритесь по-внимательней, то увидите просто огромное
  количество таких примеров на самых привычных устройствах.
  Даже когда Вы читаете этот текст, то, скорее всего,
  у Вас под рукой как раз "мышка" с двумя кнопками.
  //// Возможно, что кнопок уже по более,
  //// но это уже следующий переход к "полисистемам".
  //// Можно, конечно, вспомнить "мышку" с одной кнопкой в первых версиях
  //// "макинтошей", но жизнь доказала, что такая конструкция "не айс",
  //// как бы не хотелось этого признавать Джобсу.
  
  В общем, конструкций соответствующих термину "би-система" не просто много,
  а очень много. И такая распространенность определяется тем,
  что это очень просто придумывается, и очень часто дает дополнительный
  "сверх-эффект" от, казалось бы, простого удвоения системы.
  В ТРИЗ есть даже специальные приемы решения технических задач,
  и улучшения/оптимизации систем за счет именно перехода к "би-системам".
  Самое очевидное это совместное использование одних и тех же "подсистем",
  например, приклада в двустволке, одного и того же объектива,
  для камеры и видоискателя в "зеркалках" (фотоаппаратах), ну и т.д.
  
  Но самый сильный прием для "би-систем" в ТРИЗ, и за что его так любят,
  это "би-система со сдвинутыми характеристиками".
  Т.е. параллельные каналы в "би-системе" сознательно делают
  "чуть-чуть" отличающимися друг от друга,
  и это, как правило, обеспечивает выполнения достаточно противоречивых требований,
  и, еще чаще, обеспечивает новое качество системы, например "юзабилити".
  
  Что-то похожее для оценки "границ точности" системы предлагалось
  в "Модуле Г. ГПТ-модели", во фрагменте "Попытка связать идейку визуализации "многомерных допусков/посадок" с нейронками.",
  в виде параллельно работающей "прогнозной нейронки" или даже нескольких,
  "заточенных" на конкретные параметры.
  Но там, конечно, немножко наивное представление о "точности" нейронок,
  //// Это было еще до гипотезы о "фрактальной природе" нейронок.
  но само направление, в целом, верное - дооснастить нейронку "видоискателем"
  границ "доверительного интервала". Надеюсь, еще удастся к ней вернуться.
  
  Но каких-то других похожих технических решений по структуре
  "би-система со сдвинутыми характеристиками" как-то не наблюдается.
  
  Возможно это связано с остротой проблемы "точности нейронок"
  в части "обобщающих свойств" - все усилия направлены именно на это,
  а все остальное оставлено "на потом". В том числе и какая-то иная цель
  организации нейронок в "ансамбли" помимо обеспечения "необходимой точности".
  
  Из того же материала Павла Садовникова:
  
  \\\ Снова вспомним про ансамбли,
  \\\ состоящие из различных версий одной и той же модели[24]
  \\\ и избыточность весов в нейронной сети[28].
  \\\ Это вселяет уверенность,
  \\\ что всё-таки как-то можно взять лучшее от каждого запуска модели
  \\\ и намного улучшить предсказания,
  \\\ не меняя саму модель.
  ...
  //// Вот это самое - "не меняя модель", как раз и есть, на мой взгляд,
  //// главный "психологический барьер" мещающий появиться "би-системам"
  //// в области нейронок.
  
  Но опять же из истории техники достаточно наглядно можно продемонстрировать,
  что попытки решить задачу "в лоб" просто "силовым методом"
  или "большими батальонами" не всегда оказывается оптимальным
  в историческом плане. Некоторые пути или решения "в обход" или "в сторону",
  в итоге могут дать тот самый "сверхэффект", который требовался
  для решения "основной проблемы". Иногда даже помогает "шаг назад",
  но в комплексе с этой самой "би-системой".
  
  Звучит, наверно это все, если не заумно,
  то, как минимум, сильно "теореХтизировано".
  Если бы не одно но...
  
  В последнем добавленном фрагменте "Модуля Н. Нейронки"
  "Строим магический "ландшафт" самостоятельно."
  вроде как нащупывается путь к уже следующему переходу - "поли-системам" -
  и далее просматривается переход опять к "моно", но уже иного качества.
  Причем все это в строгом соответствии с приемами и законами и ТРИЗ,
  и этой отрасли техники. Приемы "разделить на части",
  "обеспечить местное качество", "использовать копии" и т.д. и т.п.
  Не суть важно. Важно, что вполне можно применять "низменную" технологию ТРИЗ
  и в этой, казалось бы, совершенно "возвышенной" области "машинного обучения".
  
  А раз так, то стоит посмотреть, а какие "законы" ТРИЗ выполняются в этой области,
  а какие грубо нарушуются. И первое, что бросилось в глаза,
  это практическое отсутствие "би-систем",
  как наиболее простого тренда в развитии технических систем,
  при том, что различных конструкций предлагается значительное количество.
  Собственно эта "неувязочка" и побудила написать этот фрагмент.
  На мой взгляд, тут просто колоссальная ниша для самых разных конструкций,
  причем даже для тех, которые почему-то в текущем мэйнстриме "не прижились".
  
  08.06.2023 6:49
  
  Как бы это лучше передать ощущение, которое возникло у меня
  после написания вышеупомянутого фрагмента.
  Представьте, что Вы видите проезжающего мимо Вас виртуоза на "моноколесе".
  И в голове у Вас рождается достаточно четкий образ "многоколесной" конструкции.
  И следующим шагом в рассуждении становится вопрос,
  если есть "одноколесные велосипеды", "моноколеса",
  и вполне просматривается в будущем появление "сороконожек",
  то где тогда "двухколесные велосипеды", "трехколесные", "самокаты" и т.д. и т.п?
  Но их нет. Или присутствуют в микроскопических количествах.
  Может быть они не нужны - нет соответствующего "спроса",
  или это что-то другое, более "привычное",
  например, "большим дядям" неинтересны запросы "детей младшего возраста",
  или нет подходящих "чертежей" или "деталей". Но ведь это вроде не так.
  Наверно, это даже интересно разобраться в такой ситуации.
  
  Вот, например, смотрим интересную заметку от команды YaLM:
  
  "Нейросеть, способная объяснить себе задачу: P-tuning для YaLM"
  Автор: roman-gorb
  https://habr.com/ru/companies/yandex/articles/588214/
  10 ноя 2021 в 11:29
  
  Предлагается интересное решение:
  
  ......
  
  Как работает P-tuning?
  
  Задача остаётся прежней:
  на базе подводки составлять новый текст,
  пользуясь знаниями об устройстве языка и мира, заложенными в модель.
  
  Как известно,
  системам машинного обучения гораздо проще работать не с исходными данными
  - в нашем случае с текстами, -
  а с их векторными представлениями, эмбеддингами.
  И в модель few-shot, и в P-tuning,
  о котором я сейчас расскажу,
  и в любые другие модели мы загружаем наборы векторов,
  получившиеся из текстов.
  С этими векторами производятся некоторые манипуляции,
  после чего мы превращаем их обратно в итоговый текст.
  Нам не обойтись без перехода на этот более глубокий уровень.
  
  Выше я сказал, что подводка сильно влияет на результат
  и её приходится <дотюнивать> руками.
  Но, повторюсь, подводка всё равно затем превращается в векторы,
  и модель работает уже с ними.
  Что если <дотюнивать> сразу их - и поручить это самой модели?
  
  Именно так и работает P-tuning.
  Набор эмбеддингов, получившихся из подводки,
  априори не является самым удачным.
  И модель пытается отыскать более оптимальный набор,
  меняя эти эмбеддинги так,
  чтобы итоговая задача решалась всё лучше.
  Поскольку мы оптимизируем не тексты, а числа,
  то это можно делать классическим методом уменьшения ошибки
  - градиентным спуском.
  
  ......
  
  То есть модель сама подбирает себе наиболее оптимальную подводку
  - потому что мы перешли на понятный ей уровень абстракции.
  Если совсем грубо - <заговорили> на её языке
  (языке эмбеддингов, а не текстов),
  объясняя, какого результата мы от неё ждём.
  //// Вот это ключевая идея.
  //// "Управлять эмбедингом" в нужную сторону.
  //// Причем, это управление может быть как "автоматическое", так "РУЧНОЕ".
  //// Но, похоже, дальше авторы делают ставку только "автомат",
  //// упуская из виду возможность "ручного вмешательства" в генерацию эмбединга.
  //// "Специалист подобен флюсу..."
  
  Что из себя представляет оптимальная подводка
  
  Для интересующихся: как всё устроено внутри
  
  Авторы оригинальной статьи предложили следующий подход:
  https://arxiv.org/pdf/2103.10385.pdf
  
   Давайте заменим эмбеддинги токенов подводки (на рисунке выше),
   которые мы во few-shot подбирали руками,
   на обучаемые векторы (которые будем предсказывать некоторой моделью)
   и будем учить только их, заморозив веса основной языковой модели.
  
   Моделировать эмбеддинги можно несколькими способами,
   авторы предложили использовать для этого LSTM и MLP:
  
   Наши эксперименты показывают, что такая модель
   хорошо работает на сотнях (и больше) примеров в обучении.
  
   Если же примеров только десятки, и больше получить нельзя,
   то стоит моделировать их просто новым Embedding-слоем,
   без LSTM и MLP,
   но инициализировать веса этого слоя весами эмбеддингов
   pretrained языковой модели,
   которые соответствуют токенам из вашей подводки,
   составленной руками заранее (впервые предложено в этой статье).
   https://arxiv.org/pdf/2104.08691.pdf
  
   Получается своего рода adversarial attack
   на часть входного текста в NLP-модель.
  
  Мы проверили, что P-tuning отлично работает
  в связке с представителями семейства языковых моделей,
  но ничто не мешает использовать его и c другими популярными архитектурами,
  например с BERT или T5.
  
  Для одного запуска P-tuning'a требуется не очень много вычислительных ресурсов
  (об этом ниже).
  А значит, имея в распоряжении GPU-кластер большого размера,
  становится возможным перебирать гиперпараметры.
  Да-да, вам это не снится, настал день,
  когда можно недорого перебрать гиперпараметры NLP-нейросети.
  Такая особенность делает метод ещё более применимым в задачах,
  близких к продакшену, где нужны максимальные показатели качества.
  
  Преимущества P-tuning
  
  Устройство P-tuning'a наделяет его следующими свойствами:
  
   P-tuning избавляет инженера от перебора подводок
   и всегда обеспечивает более высокое качество,
   чем few-shot (способен найти почти любую подводку,
   которая может быть создана руками).
  
   Модель чаще всего не производит артефактов, присущих few-shot.
  
   Так как параметры модели не обучаются,
   то для применения метода не требуется больших вычислительных ресурсов
   (вместо GPU-дней в finetuning'е получаем GPU-часы).
  
   Модель, которая ищет более оптимальную подводку,
   имеет относительно небольшое число параметров.
   Поэтому для её обучения не нужны огромные массивы данных
   - достаточно сотен или тысяч примеров,
   в то время как для finetuning-a нужны десятки тысяч.
  
   Так как P-tuning по своей природе влияет только на данные,
   поступающие на вход, то для одной и той же pretrained языковой модели
   можно <подключать> разные P-tuning-модели:
   весят они всего лишь килобайты.
   Это позволяет создать runtime API,
   в котором зафиксирована языковая модель,
   а пользователи сервиса (в данном случае разработчики)
   посылают запросы в виде пар <модель + текст>.
   Благодаря API можно быстро создавать прототипы для новых задач.
  
  ......
  
  Красивая идея, неплохое решение, опыт практического применения...
  Просто напрашивается приспособить его в роли какого-то "видоискателя"...
  
  НО.
  Так это решение используется в "однониточной системе"
  для "повышения качества" дешевыми средствами
  то при повышении требований к качеству
  оно перестанет удовлетворять "потребителя".
  
  И спустя два года от него полностью отказались:
  
  "YandexGPT в Алисе: как мы создаём языковую модель нового поколения"
  Автор: hommforever (Андрей)
  https://habr.com/ru/companies/yandex/articles/739626/
  5 июн 2023 в 10:29
  
  ......
  
  \\\ Создание большого Alignment-датасета и использование
  \\\ Fine-tuning вместо P-tuning
  
  \\\ P-tuning хорош тем, что позволяет быстро решить конкретную задачу,
  \\\ но обладает важной проблемой -
  \\\ у него есть ограничение в качестве.
  \\\ Это связано с тем, что P-tuning оптимизирует тысячи параметров (инпутов модели).
  \\\ Как в них уместить всю глубину личности Алисы?
  \\\ Все факты о ней, её историю, её предпочтения?
  \\\ А ведь кроме хранения фактов о персонаже,
  \\\ P-tuning должен ещё научить модель красиво отвечать на произвольный запрос,
  \\\ не грубить и многое другое.
  
  \\\ Чтобы научить модель всему этому,
  \\\ мы собрали большой датасет из сотен тысяч примеров
  \\\ с хорошими ответами включающий все аспекты, указанные выше.
  \\\ Для такого количества данных лучше подходит Fine-tuning.
  \\\ Это такой же процесс обучения, как и обучение на Pretrain.
  \\\ Он оптимизирует миллиарды параметров модели.
  \\\ Такое обучение сложнее, чем P-tuning,
  \\\ требует большой обучающей выборки,
  \\\ но результат получается лучше.
  
  ......
  
  Закономерный итог, для многих простых и дешевых решений именно потому,
  что в "однониточной системе" для них "экологических ниш" не так много,
  и они закономерно вытесняются более качественными и дорогими решениями,
  при дальнейшем развитии "моно-системы".
  А вот в "би-системах" такие решения, обычно находят свою "уникальную нишу",
  и "обитают" там очень уверенно и долго.
  
  Так что, если у кого-то завалялось какое-то удачное решение,
  но не пошедшее "в серию" в рамках "моно-системы",
  то, уверен, стоит подумать насчет "би-системы со сдвинутыми харктеристиками".
  Особенно это относится к мультимодальным системам,
  в которых само их определение просто "кричит" о возможности использования
  самых различных конструкций и схем как "моно-", так "би-", даже "поли-".
  
  Не стоит бояться изобретать "велосипеды", даже в такой области как эта,
  если ничего "прорывного" и не получится,
  то, наверняка, будет интересно и поучительно.
  
  "Развитие идёт не по спирали,
  А вкривь и вкось, вразнос, наперерез."
  
  
  ========
  
  09.06.2023 16:05
  
  А вот и первые шаги к простеньким "би-системам".
  В оглавление.
  
  Не прошло и пары дней, как появился материал подтверждающий
  и перспективность развития мультимоделелей в "персональном варианте",
  и работоспособность/применимость "би-систем" в этой области,
  пусть это еще и не совсем "би-система со сдвинутыи характеристиками",
  но основные компоненты уже налицо, так что и следующий шаг не за горами,
  и он в первую очередь будет определяться нахождением новых "экологических ниш".
  
  "AIsaacChat: ИИ чатбот на основе ruT5"
  Автор: AlanRobotics
  https://habr.com/ru/articles/740882/
  9 июня 2023
  
  2023 год стал годом нового бума обработки естественного языка.
  В магазинах мобильных приложений можно найти огромное количество продуктов с ИИ.
  В основном под капотом подобные приложения обращаются к API компании OpenAI
  (chatGPT),
  и с технической точки зрения реализовать это довольно несложно.
  Идея создания AIsaacChat была в том,
  чтобы оно обращалось с языковой модели,
  которую мы дообучим с помощью своих ресурсов.
  //// Вот первая необходимая компонента - пусть маленькая, но СВОЯ модель,
  //// "заточенная" под конкретную задачу.
  
  Второй причиной создания была идея объединить в одном приложении
  генерацию картинок и текста.
  Очевидно, что таких приложений много,
  разница состоит в том, что AIsaac может понимать ваши намерения.
  Что это означает для пользователя?
  Вы можете задавать Айзеку команды в произвольной форме
  ("можешь резко нарисовать дом в стиле Ван Гога"),
  и он поймет, что именно вы от него хотите:
  генерацию текста или картинок.
  //// Понятно, что здесь можно очень расширить и обогатить "конкретное понимание".
  
  Схема работы
  
  На данный момент возможности Айзека должны быть понятны,
  это генерация текста и картинок.
  //// Ну здесь пока явно фантазия очень скудная,
  //// хотя если "затачивать" систему под конкретные шаблоны текста,
  //// или варианты картинок, то это может найти применение
  //// не только в чат-ботах, но и в промышленных или обучающих системах.
  Для начала рассмотрим общую схему, а затем каждую нейронную сеть отдельно.
  
  В качестве примера возьмем два частных случая,
  когда пользователь сначала хочет сгенерировать текст,
  а затем сгенерировать картинку.
  
  Пользователь нажимает на кнопку,
  после чего в мобильное приложение начинает распознавать речь
  с помощью SFSpeechRecognizer (Apple's speech recognition API).
  Распознанная речь
  (допустим "создай резюме в одно предложение про программиста по имени Исаак")
  передается на наш REST API в виде текста.
  Теперь нам нужно понять намерения пользователя.
  Пользовательский prompt подается на вход функции intent_classification
  c сиамской нейронной сетью под капотом.
  На выходе мы получаем намерение "Выполни инструкцию".
  После этого prompt подается на вход нашей языковой модели.
  На выходе мы получаем "Исаак- программистс более чем пятилетним опытом работы
  в области разработки веб- приложений".
  Довольно неплохо для языковой модели,
  которая примерно в 100 раз меньше chatGPT и работает на домашнем сервере.
  //// Тоже важный нюанс. Возможность работы на локальном оборудовании
  //// без выхода в Инет, что в ряде случае является очень критичным требованием.
  
  Затем пользователь говорит: "Ты можешь нарисовать город в стиле Ван Гога".
  В этот раз intent_classification выдает нам намерение "Нарисуй изображение".
  Для генерации картинки используется stable diffusion.
  Подать ей на вход пользовательский prompt в изначальном виде
  - это плохая идея, ведь из предложения
  "Ты можешь нарисовать город в стиле Ван Гога, быстро"
  нам нужно выделить, что же именно нужно нарисовать.
  //// Тоже очень нужный компонент, по "фильтрации базара",
  //// т.е. выделение "смыслового ядра" уже в добавок к "категории запроса".
  Для этого используется вопросно-ответная система на основе ruT5,
  которая мы обучили на наборе данных sberquad.
  Нейронная сеть отвечает на вопрос "Что нужно нарисовать?",
  на выходе получаем "город в стиле Ван Гога".
  stable diffusion принимает на вход prompt на английском языке,
  поэтому мы переводим "город в стиле Ван Гога"
  с помощью нейронной сети opus-mt-ru-en.
  Сгенерированное изображение отправляется обратно в приложение.
  //// Но ведь это может быть и "график функции" и "система знаков/пиктограмм",
  //// или вообще "карта распределения/ландшафта/допусков" задачи.
  //// Тут тоже еще много места для творческого подхода.
  //// Да и на тексте с картинками, тоже ведь, "свет клином не сошелся".
  //// Будет и еще что-то. Различных модулей с известным API уже очень много.
  
  Обучение языковой модели
  
  Кратко рассмотрим два передовых способа обучения языковых моделей:
  
   Тонкая настройка большой языковой модели с помощью заморозки ее слоев.
   Затем мы добавляем к слоям адаптеры и обучаем только их
  
   Тонкая настройка на генерациях chatGPT.
   Именно так Стэнфорд обучил свои модели Alpaca
  
  Что если мы возьмем маленькую сберовскую модель ruT5-base
  (всего 222 903 552 параметров)
  и обучим ее на 29 000 генерациях chatGPT?
  Именно так мы и сделали.
  //// Т.е. дообучение только тому, что требуется для данной задачи.
  //// Вполне себе широко распространенный прием.
  //// Особенность/новшество, наверно, в том что относительно большую модель,
  //// "дообучают" на минимальный набор команд.
  
  Датасет с hugging face IlyaGusev/ru_turbo_alpaca
  представляет собой сгенерированные с помощью chatGPT инструкции,
  которые могут быть выполнены языковыми моделями.
  Были отфильтрованы лишние поля и подготовлен датасет
  для обучения модели с архитектурой seq2seq.
  Затем модель обучалась в течение 2 эпох с lr = 5.6e-5
  (около 20 минут на RTX 3070).
  //// Тут мне видится перспективным использование "синтетических данных",
  //// в данном случае "сгенерированных chatGPT",
  //// но ведь это могут быть и "показания приборов", которые требуется
  //// "озвучить" или "визуализировать".
  
  ......
  
  Для подготовки данных и обучения использовались библиотеки
  transformers и datasets.
  В процессе обучения модели используется MLOps- инструмент MLflow,
  это означает что для разработчика доступны параметры, метрики, версии моделей
  и прочее.
  //// Т.е. нормальное использование стандартизированных компонент,
  //// для сборки новой конструкции.
  
  Конечно, instruct-T5 тупит, повторяется, галлюцинирует
  и не напишет вам контент- план,
  но она показывает относительно неплохие результаты для такой маленькой модели
  
  Модель доступна по ссылке: AlanRobotics/instruct-T5
  //// Понятно, что такого рода систем - чат-ботов с таким функционалом -
  //// уже достаточно много на рынке, и разработчикам нужно искать свою "нишу",
  //// но сам подход через "заточку" больших моделей под "узкую область",
  //// вполне можно применять и в других областях.
  
  ......
  
  Классификатор намерений
  
  Предложение пользователя и команда из домена ассистента
  кодируются с помощью различных энкодеров,
  затем измеряется L1- расстояние,
  получившийся вектор подается на слой полносвязной нейронной сети
  с двумя выходами.
  Если вероятность на втором нейроне больше чем на первом,
  то предложения сходны по смыслу.
  Фраза пользователя сравнивается с каждой из команд ассистента
  ("Нарисуй изображение", "Выполни инструкцию")
  
  Было разработано три версии классификатора намерений (различаются энкодерами):
  //// А можно использовать еще и подход, отмеченный в предыдущем фрагменте
  //// в материале о P-tuning, с возможностью "ручной доводки" эмбединга/энкодера.
  
  ........
  
  Набор данных содержит 291 строку и специально составлен под AIsaacChat.
  100 предложений сгенерировано с помощью chatGPT.
  Входной prompt для chatGPT:
  "Сгенерируй 100 текстовых заданий, которые может выполнить языковая модель".
  //// Вот и еще одно применение для chatGPT, причем любой версии.
  Модель обучалась в течение 20 эпох
  //// Т.е. совсем не долго.
  //// Короче "дешево и сердито".
  
  Модель доступна по ссылке: AlanRobotics/aisaac-siamese
  https://huggingface.co/AlanRobotics/aisaac-siamese
  
  .......
  
  Конец цитирования.
  
  В целом, материал мне понравился. Просто, понятно, и ... реализуемо.
  Причем и в каких-то иных направлениях и областях.
  
  Так что, эпоха массового "изобретения велосипедов" еще только начинается.
  
  Все уже почти готово, осталось только решить задачу о "неработающей машине",
  т.е. о ее назначении.
  Напомню, что по классификации ТРИЗ это задача 5 рода,
  и считается наиболее сложной, потому что тут пока особых закономерностей
  еще не выявлено. Что первое "выстрелит" заранее неизвестно.
  Так что дерзайте. Теория Решения Изобретательских Задач на Вашей стороне.
  Осталось совсем чуть-чуть - найти точку приложения усилий.
  
  
  ========
  
  11.06.2023 7:04
  
  А это идея новой "би-системы".
  В оглавление.
  
  Как все-таки спрессовалось в последнее время и события и идеи.
  Вот буквально пару дней назад отмечал, что основная проблема
  в развитии мультимодальных систем в первую в идеях нового применения.
  Конструкций/деталей уже достаточно много, а будет еще больше,
  причем самых разных, нужно только придумать как их обхединять.
  И тут же появляется сообщение о новой системе,
  которая просто напрашивается быть полноправной частью в "би-системе"
  с большой языковой моделью в качестве полноправной "второй нитки",
  причем это может быть далеко не "простенькой поделкой",
  хотя и "мобильные" варианты тоже не исключаются.
  
  Судите сами:
  
  "MusicGen - генерируем музыку на своём ПК.
  Новая локальная нейросеть - знакомство и установка"
  Автор: ligofff (Алексей)
  https://habr.com/ru/articles/741118/
  11 июня 2023
  
  Facebook* на днях выкатил в свет новую нейронку - MusicGen (репозиторий).
  https://github.com/facebookresearch/audiocraft
  Видимо, парням из компании было мало выпустить текстовую модель Llama,
  давшую огромный разгон развитию локальных нейросеток,
  и они решили сделать то же самое в сфере музыки.
  
  О модели
  
  Опубликованные веса позволяют по текстовому описанию
  и, по надобности, звуковому примеру, генерировать новую музыку.
  
  Всего в свет выпустили 4 версии моделей:
  
  Small - маленькая модель с 300М параметров, только txt2music.
  
  Medium - 1.5B параметров, средняя модель, также только txt2music.
  
  Melody - 1.5B параметров, но с возможностью добавлять к генерации
  звуковой пример композиции (txt+music2music).
  
  Large - 3.3B параметров, самая большая модель, только txt2music
  
  Не смотря на фразу в репозитории о том, что Medium модель требует 16GB VRAM
  - у меня всё заработало даже на 8GB, на моей старенькой GTX 1070.
  Также, некоторые люди пишут о том, что на 6GB VRAM тоже всё работает стабильно.
  
  Максимальная длина звукового файла, который можно сгенерировать в GUI,
  на данный момент составляет 30 секунд.
  О всех возможностях по длительности музыки на выходе нейросети
  я другой информации не нашёл,
  но известно, что для генерации более длинных отрывков
  потребуется сильно больше видеопамяти.
  Возможно поэтому в интерфейсе пока стоит ограничение.
  
  И также внесу примечание - чем худее модель,
  тем меньше вычислительных мощностей она требует,
  так что вполне вероятно, что мы сможем генерировать
  довольно длинные композиции.
  А со смещением контекста - так вообще бесконечные.
  
  О данных, которые использовали при тренировке модели, просто приведу цитату:
  
  Мы используем 20 тысяч часов лицензионной музыки для обучения MusicGen.
  В частности, мы полагаемся на внутренний набор данных
  из 10 000 высококачественных музыкальных треков,
  а также на музыкальные данные ShutterStock и Pond5.
  
  Звучит, наверное, прилично.
  Но как мы знаем - лучше качественный датасет, чем просто большой.
  Поэтому лично мне всё это ни о чём не говорит,
  в отличие от качества музыке, получаемой на выходе.
  
  .......
  
  Код для тренировки своих моделей обещают выкатить в скором времени:
  
  ......
  
  Кому оно вообще надо - мнение
  
  Мнение у меня по поводу этой модели такое,
  что композиторам нижнего звена стоит прямо сейчас быстренько идти
  и изучать, как работает этот инструмент.
  
  30 секунд, которые на данный момент позволяет сгенерировать нейронка,
  это не то чтобы много, но думаю все мы помним,
  как развивался Stable-Diffusion
  - сначала скучные картинки с кривыми котиками,
  а потом кастомные модели, ControlNet,
  и всё-всё-всё остальное.
  
  Примерно также будет и здесь, но чуть медленнее,
  из-за того что в музыке народ не так заинтересован,
  как в картинках с обнажёнными женщинами.
  
  Вижу как минимум 3 сферы, которым данная нейронка будет интересна:
  
  Разработка инди-игр - моя сфера, живу в ней, знаю что и как.
  Не сказал бы, что у нас мало композиторов в среде
  (А иногда их даже слишком много, но не все полезны),
  но нам здесь очень нужна халявная музыка,
  и желательно много вариантов за короткий срок.
  
  С качественным развитием данной нейросети это требование быстро закроется.
  
  Певцы нижнего звена, мамкины реперы и т.д.
  - из-за перегретости музыкальной сферы,
  минуса стоят неприятно дорого.
  Так битмари ещё и роялти просят.
  
  Те, кто хочет изливать свою душу в песнях,
  но не умеют писать музыку,
  будут очень рады новому инструменту.
  
  Ютуберы/Стримеры - чтобы не запариваться с авторскими правами на музыку,
  т.к. ContentID банит за любой среньк,
  будут использовать нейронки.
  Написал, о чём видео, какое настроение требуется, какая скорость
  - получил подходящий трек на фон,
  на который точно никто не кинет страйк.
  
  ........
  * Организация запрещена в РФ
  ........
  
  Конец цитирования.
  
  Но рассматриваемые автором направления развития этой системы,
  не включают в себя очевидно напрашивающуюся конструкцию,
  в которой не просто по текстовому описанию создается саундтрек,
  а делается попытка согласовать текст и музыку в рамках песенного творчества.
  
  Т.е. под текст ритм/мелодию и, наоборот, под ритм/мелодию или просто
  под пару аккордов подбираются слова, рифма, образы и т.д.
  Хотя бы в рамках музыкальных пародий/подражаний.
  Если объединять текст и изображение становится уже практически типовым приемом
  (см. фрагмент "А вот и первые шаги к простеньким "би-системам"),
  то следующим совершенно закономерным шагом становятся самые разные варианты
  объединения в одной системе текст и музыку, или, более общее, "звук".
  И для этого уже почти все компоненты уже есть или вот-вот появятся.
  
  Очевидно, что такие же комбинации в виде различных "би-систем"
  появятся и при появлении следующих новых компонент/подсистем
  типа работы с "видео" и даже может быть "запахом/ароматом" и "вкусом" и т.д.
  Почему бы не пофантазировать.
  Тут важно увидеть систему/закономерность.
  
  А как раз закономерность появления различных "би-систем"
  подтверждена веками развития человеческой технологической цивилизации.
  И вряд ли нейронки и, тем более, ММэшки в этом отношении окажутся исключением.
  
  18.06.2023 9:56
  
  P.S. Кому тема музыкальных генераторов показалась интересной и перспективной
   рекомендую посмотреть вот такой фрагмент дискуссии с ИИ-системой Бинг
   о перспективах развитии этой системы тоже чисто с позиций ТРИЗ,
   но с использованием других закономерностей и приемов в "Модуле О. Общение.":
   фрагмент "Использование ТРИЗ в исполнении Бинг".
  
  
  ========
  
  21.06.2023 7:49
  
  Еще пару идеек в общую копилку ММэшек.
  В оглавление.
  
  Подобралось несколько ссылок которые можно попытаться объединить
  в какую-то тематическую "композицию", на тему какие еще идеи
  и точки приложения мультимодальных моделей просматривается
  на основе данных материалов.
  
  Сначала, вроде как, достаточно тривиальная и уже далеко не оригинальная
  концепция генерации текстового описания к изображениям.
  Тут важен сам факт реализуемости такого подхода,
  и примерный уровень текущей реализации, чтобы было на что ориентироваться.
  
  "Нейросеть LG Captioning способна генерировать
  текстовые описания к изображениям"
  Автор" Travis_Macrif (Руслан)
  https://habr.com/ru/news/742828/
  21 июня 2023
  
  \\\ LG представила сервис генеративного искусственного интеллекта Captioning,
  \\\ который способен создавать текстовые описания к изображениям.
  \\\ Южнокорейская компания показала нейросеть на конференции
  \\\ Computer Vision and Pattern Recognition 2023,
  \\\ прошедшей в Ванкувере.
  
  \\\ Решение базируется на технологии LG AI Research под названием
  \\\ Zero-shot Image Captioning,
  \\\ которая позволяет ИИ понимать и описывать объекты и сцены.
  \\\ Для этого нейросеть не использует подсказки,
  \\\ полагаясь на предыдущий опыт и собственные знания.
  
  \\\ В компании рассказали, что Captioning отличается от ИИ-сервисов,
  \\\ таких как Midjourney, где пользователи вводят текст
  \\\ или добавляют изображение, используя которые,
  \\\ нейросеть генерирует что-то новое.
  
  \\\ Текстовые описания к иллюстрациям и фотографиям
  \\\ могут показаться простыми,
  \\\ поскольку это старая концепция, однако технология генеративного ИИ
  \\\ использует визуальный интеллект,
  \\\ чтобы формулировать выводы об изображениях,
  \\\ которые нейросеть не видела ранее,
  \\\ отметил представитель LG.
  \\\ Например, сервис способен определить место по пейзажу.
  
  .......
  
  Первое что напрашивается на ум при чтении такого сообщения
  это попытаться "закольцевать" между собой "генеративного художника"
  и такую систему "генерации описания" и пусть они "общаются" друг с другом,
  чему-то друг друга обучая, хотя непонятно чему именно.
  
  Но это первая мысль, которая не всегда оказывается самой удачной.
  Желательно всегда в таких случаях соединить ее с другой идеей.
  
  Поэтому, смотрим дальше, что принесли сегодня к нашему берегу волны Инета.
  
  "AI позволяет генерировать невероятно красивые QR коды".
  Автор: rvnikita
  https://habr.com/ru/articles/742726/
  20 июня 2023 00:17
  
  \\\ И да, они работают, можете сами проверить.
  \\\ Невероятный потенциал для рекламной индустрии
  
  \\\ Ребята выложили рабочую демку на
  \\\ https://huggingface.co/spaces/huggingface-projects/QR-code-AI-art-generator
  
  ........
  
  И из комментариев...
  
  ........
  
  \\\ Augustusormous
  \\\ 18 часов назад
  
  \\\ Как концепт - очень круто, но учитывая какие потери при кодировании будут
  \\\ и сколько процентов на коррекцию надо отдать...
  
  \\\ И да, ни телефоны, ни 5 первых ссылок в гугле не прочитали эти QR.
  
  \\\ UPD: https://products.aspose.app/barcode/recognize/qr смог прочитать первый.
  
  \\\ P. S. То ли руки кривые, то ли демка кривая,
  \\\ но подобную красоту не получилось сделать, жаль.
  
  ........
  
  \\\ Wadimich
  \\\ 15 часов назад
  
  \\\ Мне казалось, что задачей QR кода является легкое сканирование
  \\\ даже в очень плохих условиях.
  \\\ Здесь даже в ИДЕАЛЬНЫХ условиях у меня сканируется только второй
  \\\ (iphone 12 pro max).
  \\\ Остальные как не крутил камерой и не менял расстояние - нет и всё.
  
  \\\ Так себе способ использовать нейросеть...
  
  .........
  
  Т.е. идея интересная - визуализировать какие-то наборы данных
  как-то нестандартно, но в конкретном приложении/исполнении выглядит
  пока "не очень". Может быть просто не нашла еще нужной "точки сборки".
  В любом случае, это стоит запомнить, как возможность визуализации
  сложных данных по каким-то особым/специальным правилам
  с помощью специально обученной ММэшки.
  
  Но и это еще не весь сегодняшний "улов".
  
  "Система распознавания COVID-19 по голосовым признакам"
  Автор: vladimir-shilonosov (Владимир)
    title="Система распознавания COVID-19 по голосовым
  признакам">https://habr.com/ru/companies/serverspace/articles/742646/
  21 июня 2023
  
  \\\ Исследователи и медики признают ценность голоса
  \\\ как биометрического параметра,
  \\\ который может отражать не только индивидуальные особенности человека,
  \\\ но и его здоровье.
  \\\ Несмотря на то, что пандемия COVID-19 уже закончилась,
  \\\ болеть ковидом люди не перестали.
  \\\ Поэтому разработка и применение голосовых систем
  \\\ для распознавания заболевания может позволить быстрее диагностировать болезнь
  \\\ при появлении ее симптомов.
  
  \\\ Традиционные методы диагностики Covid-19,
  \\\ такие как ПЦР-тесты и анализы на антитела,
  \\\ обеспечивают точные результаты, но они требуют времени, ресурсов и
  инфраструктуры.
  \\\ Голосовая система распознавания, с другой стороны,
  \\\ основывается на анализе изменений в голосе и речи,
  \\\ которые могут быть связаны с присутствием вируса.
  
  \\\ Учась в Университете ИТМО, в рамках проекта
  \\\ я создал систему распознавания COVID-19,
  \\\ которая анализирует способности голосовых биометрических признаков
  \\\ в выявлении заболевания.
  \\\ В статье разберу подробнее, какие методы я использовал
  \\\ и, как это вообще работает.
  
  \\\ Идея проекта
  
  \\\ Идея проекта системы распознавания COVID по голосу заключается
  \\\ в применении методов классического машинного обучения и выборе лучшего из них.
  
  ......
  
  \\\ Модель <дерево принятия решений>
  
  ......
  
  \\\ INGV
  
  \\\ При разработке системы распознавания COVID-19 по голосу,
  \\\ я ориентировался на популярный проект из другой доменной области
  \\\ - INGV (Volcanic Eruption Prediction или Прогнозирование извержений вулканов).
  \\\ Это исследование, которое ведется Итальянским национальным институтом
  \\\ геофизики и вулканологии (INGV).
  \\\ Его цель заключается в разработке и применении методов прогнозирования
  \\\ извержений вулканов для повышения безопасности и снижения рисков для населения,
  \\\ проживающего в зоне вулканической активности.
  
  
  \\\ Проект INGV использует различные методы и инструменты
  \\\ для сбора и анализа данных.
  \\\ Важной частью работы проекта является непрерывный мониторинг
  \\\ геофизических параметров, таких как сейсмическая активность,
  \\\ изменение магнитного поля, газовые выбросы и другие физические показатели,
  \\\ связанные с вулканической деятельностью.
  \\\ Для этого используются сети сейсмических станций, геодезические инструменты,
  \\\ датчики газов и другое оборудование.
  
  \\\ Как использовался проект для создания модели прогнозирования COVID?
  
  \\\ Так же как в проекте INGV используются данные о колебании тектонических плит,
  \\\ в системе распознавания COVID по голосу берутся данные о колебании звука.
  
  \\\ В обоих проектах применяется извлечение признаков из данных.
  \\\ В проекте INGV это может быть извлечение характеристик сейсмической активности,
  \\\ газовых выбросов, температуры и других параметров.
  \\\ В системе распознавания COVID по голосу извлекаются признаки
  \\\ из голосовых данных, такие как высота звука, громкость,
  \\\ спектральные параметры и другие.
  
  \\\ Оба проекта используют модели машинного обучения
  \\\ для анализа данных и предсказаний.
  \\\ В системе распознавания COVID по голосу тестировались несколько методов,
  \\\ но в итоге использовалась модель <дерева решений>.
  \\\ А в проекте INGV применяются различные модели,
  \\\ такие как нейронные сети, алгоритмы классификации и регрессии
  \\\ для прогнозирования извержений вулканов.
  
  \\\ Оба проекта направлены на предсказание событий.
  \\\ Проект INGV стремится предсказывать извержения вулканов,
  \\\ чтобы уменьшить риски для населения.
  \\\ Система распознавания COVID по голосу направлена на предсказание
  \\\ наличия COVID-19, что может помочь в раннем выявлении и контроле
  \\\ распространения болезни.
  
  ......
  
  \\\ Подобные системы не заменяют традиционные методы тестирования и диагностики,
  \\\ а служат дополнительным инструментом в борьбе с болезнью.
  
  ......
  
  Эта статья полезна в плане того, что расширяет воображение о том,
  какие данные можно использовать и для каких целей,
  используя в качестве анализатора и/или входного преобразователя нейронную сеть.
  Но в данной статье используется традиционный вывод результатов
  анализа в виде прогнозной оценки, что в ряде случаев не очень удобно.
  если эти оценки многопараметрические.
  И в таких ситуациях часто требуется какое-то иное
  более удобное представление результатов.
  
  Но как эти представленные материалы между собой связаны,
  тем более в отношении новых идей о применении ММэшек?
  
  А теперь достаем "из рукава" заранее заготовленную "козырную карту",
  и внимательно "следим за руками".
  
  19.06.2023 9:03
  
  Визуализация многомерных данных с помощью диаграмм Эндрюса
  Автор galvanom
  https://habr.com/ru/articles/248623/
  23 янв 2015 в 09:35
  
  \\\ В эпоху Big Data графическое представление многомерных данных
  \\\ является весьма актуальной задачей.
  \\\ Однако результат визуализации не всегда соответствует ожиданиям.
  \\\ Вот пример не самого наглядного графика
  \\\ для изображения многомерных данных <Ирисы Фишера>:
  \\\ https://ru.wikipedia.org/wiki/%D0%98%D1%80%D0%B8%D1%81%D1%8B_%D0%A4%D0%B8%D1%88%D0%B5%D1%80%D0%B0
  
  \\\ Это обыкновенная точечная диаграмма.
  \\\ Можно даже увидеть в ней закономерность.
  \\\ Есть группа точек (выделенный красным сорт setosa)
  \\\ которые явно выделяются на фоне остальных.
  \\\ Но сколько времени понадобилось, чтобы рассмотреть всю диаграмму и понять это?
  \\\ А здесь ведь только 4 измерения.
  \\\ Что будет, когда у вас будут данные с 10-ю измерениями?
  \\\ Не трудно догадаться,
  \\\ что тогда задача визуальной классификации станет намного сложнее.
  
  \\\ Диаграммы Эндрюса
  
  \\\ Дэвид Эндрюс (Andrews, David F.) в 1972-м году
  \\\ описал удобный способ визуализации многомерных данных.
  \\\ Суть данного метода такова:
  
  \\\ Каждая точка представляется в виде ряда Фурье:
  
  ......
  
  \\\ Получившаяся функция изображается на графике в промежутке t = [-pi, pi]/
  
  \\\ Таким образом, каждой точке из набора данных соответствует линия на графике
  \\\ в этом промежутке.
  
  \\\ Возьмем для наглядности тот же набор данных,
  \\\ который использовался для точечной диаграммы выше,
  \\\ и изобразим эти данные с помощью диаграммы Эндрюса.
  
  ......
  
  \\\ Можно заметить, что линии соответствующие похожим значениям
  \\\ также имеют и схожую форму.
  \\\ При этом размерность данных не имеет никакого значения,
  \\\ каждой точке всегда будет соответствовать одна линия на графике.
  \\\ Так же не составляет труда выделить сорт setosa
  \\\ (линии изображенные красным цветом) в отдельный класс.
  \\\ Главным достижением диаграммы Эндрюса в данном случае является, то,
  \\\ что мы получили понятное и легко читаемое представление наших данных.
  
  \\\ Диаграммы Эндрюса далеко не единственная возможность
  \\\ визуализировать многомерные данные.
  \\\ Но этот метод прост в реализации, понятен
  \\\ и может без труда применяться на практике.
  
  \\\ Список литературы:
  
  \\\ ? en.wikipedia.org/wiki/Andrews_plot
  \\\ http://en.wikipedia.org/wiki/Andrews_plot
  
  \\\ ? Andrews, David F. (1972). .
  \\\ International Biometric Society 18 (1): 125-136. JSTOR 2528964.
  
  \\\ ? glowingpython.blogspot.ru/2014/10/andrews-curves.html
  \\\ http://glowingpython.blogspot.ru/2014/10/andrews-curves.html
  
  //// Интересный метод, но встает вопрос о начальных фазах
  //// и дробных коэффициентах при синусах/косинусах.
  //// если рассматривать, что многомерность не чисто "ортогональная",
  //// а "перекошенная", "перевязанная", "динамичная",
  //// т.е. какие-то "размерности" связаны/коррелируют между собой.
  //// Но метод действительно интересный, стоит взять на вооружение,
  //// и попытаться как-то развить.
  
  В комментариях к статье упоминаются и другие используемые методы визуализации,
  например, parallel coordinates (Пример: http://exposedata.com/parallel/).
  Т.е. такие методы есть не в единственном числе,
  вопрос в том, что визуализации ранее применялась исключительно
  для использования человеком, т.к. средств автоматизации анализа
  визуальных представлений практически не было,
  разве что за исключением классического метода:
  
  "Фигуры Лиссажу"
  Разместил: Око Политика
  Источник: masterok.livejournal.com.
  https://oko-planet.su/politik/politikdiscussions/700101-figury-lissazhu.html
  20.06.2023 19:01
  
  \\\ В чем тут суть...
  
  \\\ Фигуры Лиссажу получаются при сложении колебаний различных частот,
  \\\ которые друг относительно друга перпендикулярны.
  \\\ При этом, в зависимости от соотношения частот и от соотношения фаз,
  \\\ получаются типовые фигуры, и по числу пересечений это фигуры
  \\\ с осью X и осью Y можно узнать соотношение частот,
  \\\ при этом полагается, что частота одного колебания известна.
  
  \\\ У осциллографа есть режим XY,
  \\\ он как раз это и делает, поворачивает один сигнал и складывает его с другим.
  
  Но это был случай двумерных данных,
  а ведь большинство интересных ситуаций/данных
  имеют куда большее количество измерений.
  И если есть способы визуализации этих данных,
  то напрашиваются и средства автоматизации анализа таких представлений.
  
  И вот это как раз вполне законная ниша для различного рода ММэшек.
  Посмотрите под этим углом зрения на указанные выше материалы,
  практически все составляющие есть - средства анализа, средства визуализации,
  средства анализа визуализации. И все это уже решается более-менее
  отработанными и даже почти стандартными средствами.
  Остается просто объединить все части в систему, и дать ей по настоящему
  новую задачу, хотя и старых задач "выше крыши", если хоть чуть-чуть оглядеться.
  
  А вот действительно новая задача может быть вот такой:
  
  "Космофизические факторы в случайных процессах"
  Автор: Симон Эльевич Шноль
  http://www.delphis.ru/journal/article/kosmofizicheskie-faktory-v-sluchainykh-protsessakh
  
  Там один из ключевых фрагментов звучит так:
  
  ......
  
  \\\ За это время теория колебаний вошла в лаборатории
  \\\ очень многих направлений науки,
  \\\ а я оказался не там, потому что настоящих колебаний,
  \\\ то есть каких-нибудь периодов в том разбросе результатов,
  \\\ который сопровождал каждый мой опыт ежедневно, не было.
  \\\ Поэтому, оставив очень заманчивый путь изучения колебаний, поиск периодов,
  \\\ я продолжал заниматься этим странным явлением,
  \\\ характеризуя его формой гистограмм
  \\\ (график изменения количества импульсов в короткую единицу времени
  \\\ для того или иного процесса в течение некоторого
  \\\ более длинного интервала времени. - Ред.).
  \\\ Такие гистограммы математики высокомерно и правильно называют
  \\\ <несостоятельными>, ибо в них число измерений
  \\\ сопоставимо с числом разрядов
  \\\ (длительностей, в которых ведётся подсчёт импульсов в единицу времени. - Ред.),
  \\\ - это очень небольшие числа.
  \\\ Поскольку вся идеология науки связывает точность измерений с числом измерений
  \\\ (закон больших чисел),
  \\\ то, когда у вас получаются какие-то неприятности,
  \\\ возникает нормальная реакция:
  \\\ у вас мало точек.
  
  \\\ Большого числа измерений я сначала делать не мог.
  \\\ Но стало ясно, что <несостоятельные> гистограммы
  \\\ с малым числом измерений имеют удивительно воспроизводимую форму.
  \\\ С гордостью могу сказать, что понятие формы гистограммы
  \\\ не существовало до меня, и считаю,
  \\\ что 60 лет работы были потрачены не зря.
  \\\ Подобная тонкая структура статистически недостоверна,
  \\\ так как для того, чтобы отнести изучаемый объект к определённой статистике,
  \\\ как следует из многих теорем,
  \\\ требуется критерий согласия гипотез.
  \\\ А он тонкую структуру <не чувствует>,
  \\\ поскольку гистограммы интегральны по самой своей природе,
  \\\ будучи огибающими, сглаживающими контурами.
  \\\ Тем не менее, формы их оказываются похожими.
  \\\ И возникло чрезвычайное противоречие между очевидностью
  \\\ и строго научным подходом к делу.
  
  ......
  
  Смысл "метода Шноля", отличающего его от классических статистических методов
  в анализе ФОРМ гистограмм, правда чисто ручными не автоматизированными методами.
  К слову сказать, гистограммы много где используются для визуализации данных,
  но вот про автоматизацию анализа их ФОРМ слышать не приходилось.
  А ведь это точно затребовано во многих отраслях и науки и техники,
  экономики, финансов, здравоохранения и т.д. и т.п.
  
  Так вот суть моего предложения:
  на основе ММэшки сделать автоматический анализатор гистограмм,
  как новый инструмент статистического анализа.
  
  А почему именно ММэшки, а не просто та же нейронка,
  выдающая какие-то цифры/оценки/прогнозы?
  а дело в том, что можно использовать этап визуализации гистограмм
  и как форму обобщения/представления данных и как стандартный способ обучения
  уже анализатора форм этих гистограмм.
  //// Да и не только гистограм, а, естественно, и графиков, спектров,
  //// "ландшафтов", причем, с размерностью даже больше трех,
  //// в общем, много чего еще, что сейчас либо традиционно делается
  //// исключительно человеком, либо не делается вообще,
  //// например в силу принципиальной очень большой многомерности.
  
  Т.е. на базе ММэшек можно сделать не только что-то для рекламы или "ширпотреба",
  но и полноценный инструмент для исследовательских и научных задач
  с целым спектром различных свойств и специализаций.
  
  Если такой инструмент/инструменты появятся, то можно предполагать
  и появление новых научных данных и даже концепций/открытий,
  как появились "спутники Юпитера" после "открытия телескопа".
  Новый инструмент всегда порождает что-то и новое и что-то неведомое.
  
  
  ========
  
  22.07.2023 12:44
  
  Анонс "Модели Kandinsky 2.2".
  В оглавление.
  
  Не прошло и трех с половиной месяцев с выхода "Модели Kandinsky 2.1",
  как команда разработчиков Сбера аносировала и реализовала
  уже следующую версию "Модель Kandinsky 2.2".
  
  "Kandinsky 2.2 - новый шаг в направлении фотореализма"
  Автор: ddimitrov (Денис Димитров)
  https://habr.com/ru/companies/sberbank/articles/747446/.
  12 июл в 15:14
  
  Статья - типичный продукт творчества разработчиков,
  с перечислением каких-то технических деталей/новшеств,
  обещанием реализации новых "очень нужных фич",
  и без единого слова как этим реально пользоваться.
  Только по каким-то иллюстрациям можно попытаться "наковырять"
  какие-то крохи новых знаний.
  Так что, фиксирую ее больше для протокола.
  
  К чести разработчиков, надо отметить, что в этот раз они
  не просто снесли старую версию, заменив ее без всякого предупреждения новой,
  а все-таки сделали для новой версии отдельный "вход",
  и возможность использовать предыдущую.
  
  Из более-менее информативного из этой статьи, с точки зрения пользователя,
  наверно, стоит отметить такое:
  
  \\\ С момента выхода Kandinsky 2.1 (4 апреля 2023 года)
  \\\ прошло чуть больше трёх месяцев, и вот сегодня мы анонсируем
  \\\ новую версию модели в линейке 2.X.
  \\\ И если архитектурно модель не претерпела кардинальных изменений,
  \\\ то в части расширения функционала получила существенное развитие.
  \\\ В первую очередь, мы сделали упор на повышение качества генераций
  \\\ и их разрешении, а также новых возможностях синтеза изображений.
  \\\ Список ключевых изменений включает в себя следующие:
  
  \\\ разрешение генераций теперь достигло 1024 px по каждой стороне
  \\\ (в 2.1 было 768 px);
  
  \\\ генерация может иметь любое соотношение сторон
  \\\ (в 2.1 были только квадратные генерации);
  
  \\\ теперь изображения можно генерировать с эффектом фотореализма;
  
  \\\ появился функционал ControlNet, что добавляет возможность
  \\\ вносить локальные изменения на картинке, не меняя всей композиции сцены.
  
  \\\ появился функционал генерации стикеров
  \\\ (генерация просходит с помощью добавления в конце промпта слова "sticker",
  \\\ после этого модель сегментации удаляет фон);
  \\\ таким образом, можно генерировать стикеры на любую тему,
  \\\ и собирать целые стикерпаки в ТГ.
  
  \\\ Немного статистики про версию Kandinsky 2.1 к настоящему времени:
  
  \\\ более 70 млн генераций;
  
  \\\ 1 млн уникальных пользователей был достигнут
  \\\ за первые 4 дня после релиза.
  .....
  
  \\\ Возможности ControlNet
  
  \\\ Как уже было отмечено выше, одним из преимуществ новой версии
  \\\ является возможность использования функционала ControlNet.
  \\\ В чем же сила и особенность этой доработки?
  
  \\\ Ключевым недостатком всех генеративных моделей
  \\\ является невозможность контролировать процесс синтеза.
  \\\ Это означает, что вы можете долго мучаться с подбором промта
  \\\ для создания сцены (которую вы себе уже возможно даже нарисовали в голове),
  \\\ но в точности попасть в ваши ожидания модель не в силах по ряду причин.
  \\\ Для решения этой проблемы учёные из Стэнфорда предложили
  \\\ ввести дополнительные ограничениям на генерацию
  \\\ с помощью добавления входных условий в состав condition части модели.
  \\\ Таким образом можно управлять положением какого-то объекта,
  \\\ его формой, позой, контурами/границами.
  \\\ Пример показан на рисунке ниже - здесь авторы показывают
  \\\ как можно использовать результат выделения контуров алгоритмом Канни
  \\\ для создания дополнительного входного условия на состав сцены.
  ......
  
  \\\ С целью имплементации этого функционала в новой версии Kandinsky 2.2
  \\\ мы встроили дополнительный слой перед диффузионным блоком U-Net,
  \\\ который сворачивает дополнительный condition
  \\\ (карта глубины, контуры Канни и т. д.) к shape входного шума.
  \\\ После создания такого вектора,
  \\\ он конкатенируется с основным шумом,
  \\\ и дальше U-Net учится учитывать это дополнительное условие в модели.
  \\\ Наиболее интересным входным ограничением на наш взгляд
  \\\ является карта глубины, которая позволяет лучшим образом
  \\\ контролировать структуру сцены.
  \\\ Для построения такой карты мы использовали модель оценки depth map
  \\\ по изображению - MiDaS.
  \\\ Внедрение этого режима потребовало 100 тыс. итераций
  \\\ в режиме файнтюнинга на 8 GPU.
  ....
  //// Но как этим пользоваться разработчики опять забыли рассказать.
  //// Наверное, считают, что это реализовано предельно интуитивно понятно.
  
  \\\ Примеры генераций Kandinsky 2.2
  
  \\\ В этом разделе показаны различные генерации модели Kandinsky 2.2
  \\\ из совершенно разных доменов в самых разных стилевых окрасах:
  \\\ люди, пейзажи, абстракции, объекты, взаимодействующие объекты и др.
  \\\ Описания для генерации на двух языках,
  \\\ а что самое интересное - модель может синтезировать изображения по смайликам -
  \\\ призываю всех обязательно с этим поэкспериментировать :)
  
  //// Кстати этот раздел оказался самым информативным, во всяком случае для меня,
  //// так как по тексту промптов, оказалось можно уловить какие-то
  //// не совсем очевидные детали языка запросов к этой модели.
  .......
  
  \\\ Выводы и планы
  
  \\\ В итоге следует отметить, что новый апдейт принёс нам
  \\\ существенный шаг вперёд в качестве и фотореалистичности.
  \\\ Конечно, ряд проблем со сложными доменами ещё остался,
  \\\ но мы сейчас активно исследуем механики по файнтюнингу с помощью LoRA,
  \\\ адаптации негативных промтов для этих доменов
  \\\ и другие способы решения проблемы.
  \\\ Тем не менее за прошедшие 3 месяца с момента выхода 2.1
  \\\ новая модель <научилась> генерировать изображения в более высоком разрешении,
  \\\ с различным соотношением сторон,
  \\\ а также приобрела свойство фотореализма генераций,
  \\\ что можно заметить на рисунках выше и, конечно же,
  \\\ возможности архитектурного улучшения за счёт ControlNet механики.
  \\\ Большим достижением также считаю внедрение модели
  \\\ в самый большой фреймворк генеративных моделей diffusers,
  \\\ что подтверждает заинтересованность и высокую оценку модели в мировом комьюнити.
  
  \\\ Извечный вопрос - что дальше?
  \\\ Мы продолжаем исследовать текстовые энкодеры,
  \\\ чтобы научиться понимать всё более сложные текстовые описания,
  \\\ оптимизировать архитектуру модели, экспериментируем с разными подходами
  \\\ к файнтюнингу Kandinsky и занимаемся оптимизацией инференса.
  \\\ Эти и другие нововведения вы уже увидите в следующей версии :)
  ......
  
  \\\ Авторы и контрибьют
  
  \\\ Модель Kandinsky 2.2 была разработана и обучена исследователями команды Sber AI
  \\\ при партнёрской поддержке учёных из Института искусственного интеллекта AIRI
  \\\ на объединённом датасете Sber AI и компании SberDevices.
  
  \\\ Коллектив авторов: Андрей Кузнецов, Арсений Шахматов*, Антон Разжигаев,
  \\\ Владимир Архипкин, Игорь Павлов, Ангелина Куц, Татьяна Паскова, Михаил Шойтов,
  \\\ Сергей Нестерук, Анастасия Лысенко, Юлия Агафонова, Сергей Марков,
  \\\ Денис Димитров.
  
  \\\ * - главный контрибьютор
  \\\ Контакты для коммуникации
  
  \\\ По всем возникающим вопросам и предложениям по развитию модели и сотрудничеству
  \\\ в части её внедрения можно и нужно смело писать в ТГ мне или Андрею.
  \\\ https://t.me/dendimitrov
  \\\ https://t.me/kuznetsoff87
  ........
  
  И куча гневных комментариев, что новая модель по сравнению с прежней,
  стала "скучнее", "тупее", "прямолинейнее" и т.д.
  С очень редкими вкраплениями чего-то информативного.
  Типа таких:
  
  \\\ anonymousmaharaj
  \\\ 14 июл в 14:08
  
  \\\ По крайней мере в Stable Diffusion каждый последующий токен
  \\\ влияет на все предыдущие,
  \\\ и это как раз о том, что лучше использовать короткие токены,
  \\\ желательно вообще из 1-2 слов, чем длинные предложения.
  \\\ Я думаю, что тут примерно тоже самое.
  .......
  
  \\\ TiSS_ea
  \\\ 13 июл в 12:10
  
  \\\ Подскажите, пожалуйста, как пользоваться ControlNet?
  ......
  
  \\\ Axelaredz
  \\\ 13 июл в 19:04
  
  \\\ https://youtube.com/xpuct
  .......
  
  \\\ OleGrim
  \\\ 13 июл в 12:10
  
  \\\ Что-то потеряно с выходом новой версии.
  \\\ Она стала какой то "правильной", не осталось той непредсказуемости,
  \\\ какой то "изюминки".
  \\\ Потерялся свой стиль, который её отличал от других моделей.
  \\\ Одни говорят что она стала "пресной", другие что потеряла "душу",
  \\\ я бы ещё добавил что потеряла фантазию.
  
  \\\ Было интересно "играть" с ней, когда писал разную "абракадабру" на входе
  \\\ и на выходе получал разный интересный результат.
  ......
  
  \\\ softwardev
  \\\ 13 июл в 12:16
  .....
  \\\ В общем упустили вы некоторую поэтичность что-ли, задушили модель.
  \\\ Сделайте версию 2.3 с фотореалистичностью 2.2 и поэтичностью 2.1!
  
  \\\ +4
  ......
  
  В общем. что-то пошло не так. Но интересно, что что-то подобное было
  и когда произошла предыдущая смена версий, и тоже были не все довольны,
  например, "Ваш покорный слуга".
  Так и теперь нужно просто принять, что это ДРУГАЯ модель,
  к которой нужно искать какие-то свои подходы,
  раскрывающие ее "творческий потенциал",
  возможно, эти подходы будут близки к предыдущей, но, наверняка, ИНЫЕ.
  
  Что же, это просто новая и интересная задача исследований,
  тем более "приз" в виде более качественных, более "цветонасыщенных",
  более "атмосферных" иллюстраций, наверно, а может и еще чего, стоит того.
  
  
  ========
  
  23.09.2023 16:36
  
  Еще одна "безумная идея" о мультимоделях.
  В оглавление.
  
  Общее количество публикаций о все новых и новых мультимодельных ИИ-системах
  просто зашкаливает, и уже кажется, что склепать свою собственную персональный
  телеграмм-бот с мультмодальным функционалом это уже рядовая задача
  для "кружка "Умелые руки".
  Но при этом направления развития таких систем "прирастают" не очень быстро,
  и в этом отношении стоит отметить интересную публикацию на Хабре,
  о новой мультимодальной конструкции используемой в робототехнике:
  
  "Роботы TRI осваивают новые навыки за полдня"
  Автор: Cloud4Y
  https://habr.com/ru/companies/cloud4y/articles/762728/.
  22 сен 2023 11:26
  
  Автор оригинала: Siyuan Feng, Ben Burchfiel, Toffee Albina, and Russ Tedrake
  https://medium.com/toyotaresearch/tris-robots-learn-new-skills-in-an-afternoon-here-s-how-2c30b1a8c573
  
  Статья интересна тем, что вводит понятие "больших поведенческих моделей,
  а еще и тем, что она раскрывает и возможности использования "метода диффузии"
  в несколько непривычной области.
  Мне это показалось весьма интересным и стоящим отдельного рассмотрения:
  Возможно, "Все что Вам нужно - это диффузия".
  
  И, собственно, этот анализ стал завершающим штрихом к оформлению
  очередной "безумной идеи" применительно к возможному развитию
  мультимодальных моделей.
  
  Началось все во время дискуссии с Бинг о возможностях/ограничениях
  больших языковых моделей, см.:
  Бинг и тест Тьюринга. Часть 1.
  в которой Бинг с упорством достойным лучшего применения утверждал,
  что основная проблема больших языковых моделей в отсутствии у них возможности
  отличать "истину" и "ложь", так как все их знание/логика основана только
  на обучающем корпусе текстов (датасете).
  
  Учитывая, что этот диалог получился в результате обсуждения аналогии
  в обучения языку больших языковых моделей и детей в возрасте "от двух до пяти", см.:
  "Чудо ожившего и обретшего самостоятельность языка".
  то хотелось продолжить эту линию/аналогию аргументации
  и для озвученной Бинг проблемы "истины"/"лжи" применительно к ИИ-системам.
  
  И тут подоспела достаточно рядовая для сегодняшнего дня публикация:
  
  "OpenAI представила генератор изображений DALL-E 3,
  который будет включён в ChatGPT"
  Автор: AnnieBronson
  https://habr.com/ru/news/762410/
  20 сен в 22:28
  
  \\\ OpenAI представила новую версию своего генератора изображений DALL-E
  \\\ и объявила о планах интегрировать её в ChatGPT.
  \\\ Разработчики обещают, что DALL-E 3 будет лучше понимать промты
  \\\ и анализировать сложные инструкции,
  \\\ а не смешивать разные элементы подробного запроса,
  \\\ и генерировать <чрезвычайно детальные и точные изображения>.
  \\\ У пользователей также появилась возможность составлять промты
  \\\ с помощью ChatGPT.
  
  .....
  
  \\\ DALL-E 3 позволяет использовать ChatGPT
  \\\ в качестве <партнёра для мозгового штурма> и уточнения промтов.
  \\\ Пользователь сможет попросить ChatGPT составить подробный промт
  \\\ и внести изменения в получившееся изображение,
  \\\ если оно не совсем соответствует запросу.
  
  ......
  
  И вот тут появилась мысль, что если можно улучшать "генераторы изображений"
  с помощью специальной подстройки к ним больших языковых моделей типа ChatGPT,
  то ведь можно предполагать, что и в "обратном направлении" это может сработать.
  Т.е. приспособить технику "генераторов изображений" для улучшения
  больших языковых моделей, но не просто для повышения "выразительного функционала",
  а для более существенного изменения их возможностей,
  фактически создания в ней второй/параллельной "сигнальной системы".
  И, в перспективе, таким образом даже возможное формирование "образного мышления"
  у таких систем, которое в какой-то мере может помочь ИИ-системам
  в самых разных областях, в том числе и в оценке "истины"/"лжи".
  
  Я даже честно постарался "прокачать" тезисы этой "завиральной идеи"
  в диалоге с Бинг, и в принципе, мне удалось ее обосновать, см:
  "Завиральная идея" об "образном мышлении" в ИИ-системах.
  
  Если кратко изложить основные тезисы этой дискуссии, то они следующие:
  
  Первое: если сопоставить освоение языка ребенком и большими языковыми моделями,
  то можно провести достаточно много параллелей,
  при всем различии "механизмов" реализации этого процесса.
  Кроме того способность различать "истину" и "ложь"
  у больших языковых моделей и у ребенка в возрасте "от двух до пяти",
  в общем-то, не сильно различаются, если они ориентируются только
  на "языковую информацию". И могут проявляться и в виде "галлюцинаций"
  и/или "детских фантазий".
  
  Второе: появление у больших языковых моделей "изобразительных" возможностей
  также можно сравнивать с соответствующими "художествами" у ребенка в этом возрасте.
  Но принципиальное отличие заключается в том,
  что ребенок может сравнивать полученное изображение с "задуманным" и оригиналом,
  т.е. это выполняет роль параллельной языку обучающей "сигнальной системы".
  А вот для ИИ-систем такого параллельного обучающего контура,
  основанного на визуальных образах, как-то не наблюдается.
  Есть просто стыковка отдельно обученной на текстах языковой модели,
  и обученной на картинках генератора картинок.
  Т.е. два обучающих процесса не запараллелены, а разорваны.
  А у ребенка это единый или, как минимум, запараллельный процесс,
  на выходе формирующий "образное мышление".
  
  Собственно, "завиральная идея" и заключается в том,
  чтобы включить в "курс обучения" больших языковых моделей,
  как "равноправный курс" обучение "второй сигнальной системы",
  основанной на изображениях. Причем именно как "полноценный замкнутый контур",
  включающий как создание изображения по промпту, что уже становится
  стандартом де факто, так, и это главное новшество,
  создание текстовых описаний изображений.
  
  Причем сами по себе такие системы генерации описаний уже есть
  это и упоминавшаяся ранее:
  
  "Нейросеть LG Captioning способна генерировать
  текстовые описания к изображениям"
  Автор" Travis_Macrif (Руслан)
  https://habr.com/ru/news/742828/
  21 июня 2023
  
  Так и большое количество появившихся ее аналогов:
  
  "8 инструментов для аннотирования изображений в 2023 году"
  Автор: kucev (Куцев Роман)
  https://habr.com/ru/articles/754900/
  5 сен в 21:39
  Автор оригинала: Dhruv Parmar
  https://geekflare.com/best-image-annotation-tools/
  
  Т.е. уже все прототипы такой технологии вполне себе освоены,
  а соединение двух различных потоков обучения в один обобщенный,
  тоже имеет прототипы, например, такой, какой используется
  в упомянутой в начале заметки статье о робототехнике.
  
  Еще раз попробую сформулировать основную идею,
  "СКРЕСТИТЬ" ДВА РАЗЛИЧНЫХ ПРОЦЕССА ОБУЧЕНИЯ В ОДИН,
  с целью попытаться сформировать у больших языковых моделей
  параллельно языковой/вербальной логике какое-то подобие "образного мышления".
  Представляется, что это поможет если и не решить проблему отсутствие у них
  механизма/критерия отличия "истины от лжи", то сделать их более "объективными".
  
  Даже как-то неудобно упоминать, что такой подход соответствует
  приемам и законам развития технических систем согласно ТРИЗ,
  в особенности закону "моно-би-поли и снова моно".
  
  Есть, конечно, вопросы, даже не столько как это реализовать на практике,
  и каких это усилий/затрат потребует, сколько к каким негативным последствиям
  такое решение может привести, но это пока оценить достаточно трудно,
  а "алармистские" прогнозы "на другом этаже".
  Мне интересно сами тенденции развития технических систем.
  
  Так что, возможно, подчеркиваю, возможно,
  что к уже известным большим языковым моделям,
  и потихоньку формирующимся "большим поведенческим моделям",
  добавятся еще и "большие образные модели",
  ну или как-то по-другому, более красиво названные,
  но которым трудно будет отказать в основах "образного мышления".
  
  
  ========
  
  16.10.2023 13:50
  
  Неожиданный поворот в развитии "Модели Kandinsky 2.x".
  В оглавление.
  
  По традиции пытаюсь отследить тенденции в развитии "Модели Kandinsky 2.x".
  И хотя текущий "поворот сюжета" мне не очень по душе,
  но сам подход и возникающие при его анализе размышления,
  на мой взгляд, могут представлять интерес даже для тех,
  кто тематикой "генеративных художников" не очень интересуются.
  Слишком все переплетено сейчас в "машинном обучении" и "мультимодальности",
  и идеи, возникающие в одном направлении легко могут быть использованы в другой.
  
  "Размываем границы времени и учимся создавать видео - Kandinsky шагает дальше"
  Автор: ddimitrov (Денис Димитров)
  https://habr.com/ru/companies/sberbank/articles/766968/.
  12 окт в 16:54
  
  //// Начало цитирования
  
  .......
  
  Несмотря на стремление исследователей создать единую модель для синтеза видео,
  есть не менее элегантные подходы к генерации видеороликов.
  В этой статье речь пойдёт как раз о таком способе создания анимированных видео
  на основе модели генерации изображений по тексту
  - в нашем случае, это, как вы уже успели догадаться, модель Kandinsky 2.2.
  В деталях изучив направление моделирования различных визуальных эффектов
  вокруг генеративной модели,
  которая обладает способностью преобразования изображений (image-to-image)
  и механизмами дорисовки (inpainting/outpainting),
  мы разработали решение, которое расширяет границы статичных генераций
  и даёт возможность синтеза так называемых анимационных видео.
  //// Собственно на это решение, как комбинацию нескольких,
  //// вроде как, идеологических несвязанных приемов и стоит обратить внимание,
  //// как полезную "информацию к размышлению" при поиске решения собственных задач.
  
  .......
  
  Описание метода
  
  Идея анимирования картинки довольно проста:
  из исходного 2D-изображения мы получаем псевдо-3D-сцену
  //// Это первый прием.
  и затем моделируем облёт камерой этой сцены.
  //// Это второй прием.
  Эффект псевдо-3D возникает ввиду восприятия глазом человека
  динамики движения через пространственные преобразования.
  //// А это уже не чисто прием, а использование эффекта,
  //// связанного с особенностями человеческого восприятия.
  Используя различные механики анимации движения,
  мы получаем последовательный набор кадров,
  как будто бы снятый на камеру от первого лица.
  Процесс создания такого набора кадров разбивается на 2 этапа:
  
   создание псевдо-3D-cцены и имитация облёта камеры
  (получение последовательных кадров);
  
   применение подхода image-to-image для дополнительной коррекции
  полученных изображений.
  
  Облёт камерой псевдо-3D-сцены
  
  Рассмотрим подробнее как работает создание сцены и имитация съемки её камерой.
  
  Псевдо-3D-сцену мы получаем при помощи модели MiDaS,
  которая генерирует карту глубины по 2D-изображению.
  //// Т.е. используется "технология", напрямую никак не привязанную
  //// к "машинному обучению" - она более "древняя -
  //// хотя ее, конечно, тоже можно реализовать через обучение нейронок.
  //// Как именно реализована эта функция в "модели MiDaS",
  //// честно говоря, разбираться не досуг
  //// и, на мой взгляд, это не принципиально.
  //// Важно применение какой-то дополнительной/внешней информации
  //// к исходному контексту.
  //// А как он получен, зависит от фантазии/возможностей разработчика.
  Диапазон значений этой карты по оси z ("вглубину")
  лежит на некотором отрезке [znear, zfar]
  (в системе координат, о которой речь будет чуть ниже).
  
  ......
  
  Сверху: исходные изображения.
  Посередине: карты глубины, построенные с помощью модели MiDaS.
  Внизу: соответствующие изображениям облака точек
  (отрендеренные с новых точек обзора).
  Изображение было взято из следующей статьи.
  https://arxiv.org/pdf/1907.01341.pdf
  
  Камера характеризуется координатами положения в пространстве сцены (x, y, z),
  и направлением взгляда, которое задаётся тремя углами (??, ??, ??).
  Соответственно, для задания траектории движения камеры
  необходимо определить зависимости x = x(t), y = y(t), z = z(t),
  ?? = ??(t), ?? = ??(t), ?? = ??(t).
  
  Импровизированная съёмка сцены камерой от первого лица
  представляет из себя операцию перспективных проективных преобразований.
  Изначально камера зафиксирована в начале координат,
  а сцена удалена на расстояние znear от неё.
  
  Отметим, что движение и повороты камеры эквиваленты тем же движениям
  и поворотам нашей сцены, взятыми со знаком минус.
  Соответственно преобразования поворота и трансляции
  мы можем применять к нашей сцене,
  а камеру зафиксировать в начале координат.
  
  По факту сцена представляет собой конечный набор точек
  в силу конечного набора пикселей в исходном изображении.
  Поэтому наши преобразования мы можем применить непосредственно
  к каждой из этих точек,
  вращая их относительно осей, проходящих через центр сцены,
  а затем применяя трансляцию этого центра.
  Вращение в трехмерном пространстве распадается на вращение
  вокруг трёх ортогональных осей.
  
  .......
  
  Некоторые частные случаи (примеры 2D-перспективных проекций)
  
  .......
  
  Отметим, что карта глубины одной картинки
  всё же не является полноценной 3D-сценой
  и небольшие отклонения камеры от исходной проекции будут давать искажения,
  как это видно на картинках выше.
  Поэтому есть два необходимых дополнения к этим рассуждениям:
  
  каждое из последовательных преобразований должно
  незначительно менять положение сцены,
  т. е. применяемые операции должны быть инфинитезимальными преобразованиями
  для получения проекции без сильного искажения;
  //// А вот это, на мой взгляд, очень "плодотворная дебютная идея",
  //// в том смысле, что такого рода преобразования
  //// на основе какой-то внешней информации и модели включения этой информации
  //// в общий контекст - в данном случае "менять положение сцены" -
  //// должны быть "инфинитезимальными", т.е. "бесконечно малыми".
  //// Смысл таких "бесконечно малых" изменений - "нащупать градиенты",
  //// а на базе них осмысленно управлять/обучать модель, и, наверно, не только.
  //// Вот в данной реализации "инфинитезимальность" обеспечивает
  //// возможность использования других уже реализованных в "Модели Kandinsky 2.2"
  //// приемов/механизмов/инструментов.
  
  после каждого такого преобразования необходимо применять подход image-to-image
  для устранения на изображении возможных искажений.
  //// Наверно, при этом можно добиться и еще чего-то,
  //// но разработчикам, конечно, виднее и, возможно, тут есть свои "подводные камни".
  
  ......
  
  Как устроен режим image-to-image
  
  Сначала небольшое напоминание, как работают диффузионные модели.
  Диффузионныи процесс представляет собой два процесса:
  прямои и обратныи.
  
  В ходе прямого процесса мы добавляем шум к входным данным,
  приводя их распределение шаг за шагом к стандартному нормальному.
  Обратныи процесс представляет из себя
  пошаговое восстановление исходного распределения.
  
  Оба процесса являются гауссовскими со следующими параметрами:
  
  .......
  
  Дисперсия прямого процесса ??_t задается нами,
  а дисперсия обратного выражается через ??_t и не зависит от данных.
  В обратном процессе обучаемым является среднее значение ??_??(xt, t)
  - именно оно моделируется глубокой нейронной сетью (обычно это UNet).
  Подробнее про диффузионный процесс и обучение диффузионных моделей
  можно прочитать в статьях Kandinsky 2.0, Kandinsky 2.1 и Kandinsky 2.2.
  https://habr.com/ru/companies/sberbank/articles/701162/
  https://habr.com/ru/companies/sberbank/articles/725282/
  https://habr.com/ru/companies/sberbank/articles/747446/
  
  Стоит отметить две вещи:
  
   В силу случайности как прямого, так и обратного процессов
  мы не вернемся в исходное состояние после последовательного их прохождения
  (см. изображение с распределениями выше).
  
   если наша неи?ронная сеть обучена хорошо предсказывать среднее значение
  в обратном процессе, то на каждом шаге мы будем получать семпл
  с высокои вероятностью q(x_t).
  
  Идея реализации подхода image-to-image проста.
  Мы не будем проходить весь прямои? процесс диффузии до конца,
  а сделаем лишь несколько шагов зашумления.
  Далее относительно полученного состояния начне?м обратныи? процесс
  и в конечном итоге получим картинку,
  сильно похожую на исходное изображение.
  //// Тоже, наверно, стоит отметить этот момент,
  //// как еще одно из направлений развития "диффузионных методов".
  //// Во всяком случае описание такой "полудиффузии"
  //// встречать еще не приходилось, и тут есть,
  //// что позаимствовать в "рабочий инструментарий" "машинного обучения".
  //// Ну, во всяком случае, из этого абзаца мне стало больше понятна
  //// сама идея применения "метода диффузии" к разного рода трансформациям.
  
  Применение метода image-to-image для моделирования облёта камеры
  является необходимым шагом,
  так как нам нужно получить картинку, похожую на реальную,
  после применения проективного преобразования.
  Если остановиться на шаге с получением проекции после преобразования
  псевдо-3D-сцены, полученной из карты глубины изображения,
  то синтезированное изображение будет содержать артефакты на краях,
  т. е. сильно отличаться от того, что можно считать эстетически красивым.
  Однако, сделав после этого несколько шагов прямого процесса
  и столько же шагов в обратном направлении,
  можно получить существенно более красивую сцену
  (за счёт того, что проекция h_0, возможно,
  с низкои вероятностью q преобразуется после этого в p_0
  уже с высокои вероятностью q,
  то есть становится больше похожа на обычное изображение).
  На картинке эти манипуляции можно представить следующим образом:
  
  С помощью такой <коррекции> проекций на основе метода image-to-image,
  получается алгоритм генерации анимации из 2D-изображения:
  
  .......
  
  В качестве иллюстрации рассмотрим, как end-to-end устроены,
  например, операции отдаления и поворота
  (на очень наглядной картинке ниже):
  
  .......
  
  Где и как можно воспользоваться функцией генерации анимационных видео,
  примеры работы
  
  .......
  
  Как было сказано выше, всего нами реализовано 16 режимов анимации,
  каждый из которых - это некоторое движение камеры внутри сцены.
  Камера может погружаться вглубь изображения,
  обозревать объект на генерации с разных сторон,
  вращаться на 360 градусов от первого лица и так далее.
  Посмотреть примеры движения камерой можно в боте по команде /examples.
  
  .......
  
  Как создавать сюжетные видео
  
  Анимированное изображение, конечно, выглядит красиво,
  но киношедевр не может существовать одним статичным кадром в 4 секунды,
  где ничего не происходит, кроме, например, небольших движений милого котика.
  Кино - это в первую очередь история, разложенная покадрово.
  
  Наша главная фича, достойная отдельного обзора,
  - возможность генерировать 2-3 сцены за одну генерацию,
  что позволяет создавать мини-сценарии в меру своей фантазии.
  Переходы между сценами происходят с помощью склейки наплывом.
  Это значит, что один кадр плавно преобразуется в другой.
  Пример:
  
  .......
  
  У генераций в 2-3 промпта есть свои особенности,
  которые нужно учитывать, чтобы создавать красочные видеоролики:
  промпты рекомендуется писать похожие или одного и того же стиля;
  режимы движения камеры должны развивать сюжет и логично продолжать друг друга.
  В противном случае у вас может получиться что-то такое:
  
  .....
  
  Поэтому для каждого кадра продумывайте,
  как он объединится с предыдущим и как раскроется в художественном смысле.
  Советуем также сначала проверять промпты в Kandinsky 2.2
  и уже потом генерировать видео,
  чтобы не тратить время на ожидание и получить не то, что представляли.
  
  Примеры сюжетов
  
  .......
  
  Выводы
  
  В статье мы постарались в деталях описать,
  как насыщаем модель Kandinsky 2.2 новыми возможностями,
  выходя за границы статичных генераций и наделяя её возможностью
  создавать анимированные видео.
  Данный подход предопределён набором механик анимации,
  что является его заметным ограничением.
  Тем не менее создаваемые видео выглядят эффектно
  и демонстрируют уже проверенные навыки модели генерации изображений
  как в части качества картинки,
  так и в части скорости синтеза.
  Напомню, что 1 секунда 24 FPS видео генерируется около 20 секунд,
  то есть каждый кадр видеоролика создаётся меньше, чем за 1 секунду.
  Особенно интересно выглядит режим режиссёра,
  где пользователь может создать ролик из нескольких текстовых описаний (сцен),
  дополнительно применив к этим сценам различные виды анимаций.
  
  Несмотря на высокое качество генераций,
  с рядом артефактов ещё предстоит бороться,
  а неумолимое развитие end-to-end моделей синтеза видео вовлекает и нас
  в этот исследовательский стрим.
  Продолжая исследования в части высококачественной генерации видеороликов,
  мы непременно будем делиться получаемыми результатами.
  Цель таких исследований в конечном итоге перейти от анимации статических сцен
  к генерации по текстовому описанию полноценных сюжетов,
  в которых каждый объект и фон могут существовать и изменяться
  во времени самостоятельно, при этом не нарушая общую композицию сцены.
  
  Обязательно будем держать вас в курсе :)
  
  Лирический P.S.
  
  Дополнительно хочется сказать, что проекты на стыке науки и искусства
  могут быть сложными и требовать интеграции различных дисциплин
  (надо отметить, что это наблюдение далеко не новое).
  Важно, чтобы разработчики и креаторы находились
  в постоянном диалоге и обменивались своими знаниями и опытом
  для создания технологичного и эстетичного продукта.
  Если никакого симбиоза не происходит,
  тогда есть шанс (причем достаточно большой),
  что разработчик законсервируется внутри кода,
  не привнося нового в конечный результат,
  а креатор остановится на хорошей идее,
  которую невозможно технически реализовать.
  
  Разработчикам пора погрузиться в картины Василия Кандинского,
  а креаторам - разобраться в генеративных моделях (особенно диффузионных)!
  
  Поэтому и текущая статья устроена так,
  что первая часть достаточно техническая,
  а вторая - достаточно креативная
  (статью прочитать целиком будет полезно всем
  - и специалистам в области DL, и креаторам).
  
  Очень приятно отметить, что у нас получилось собрать именно такую команду
  - состоящую как из технических специалистов,
  так и из креаторов (Ангелина Куц, Татьяна Паскова ????),
  которые показывают наши модели всему миру с их лучшей стороны.
  
  Следите за новостями на каналах <Градиентное погружение>,
  CompleteAI, AbstractDL, Dendi Math&AI и на канале Сергея Маркова.
  
  Авторы и контрибьют
  
  Функциональность синтеза анимированных видео на основе Kandinsky 2.2
  разработана и исследована командой Sber AI.
  
  Коллектив авторов: Саид Азизов*, Арсений Шахматов*, Ангелина Куц (SberDevices),
  София Кириллова, Владимир Архипкин, Игорь Павлов, Татьяна Паскова,
  Михаил Шойтов, Сергей Нестерук, Андрей Кузнецов, Денис Димитров.
  
  ........
  
  Полезные ссылки
  
  сайт проекта
  https://ai-forever.github.io/deforumkandinsky.github.io/
  
  Telegram-бот
  https://t.me/video_kandinsky_bot
  
  rudalle.ru
  https://rudalle.ru/
  
  канал в Telegram
  http://t.me/gigstery/15662
  
  чат в VK
  http://vk.cc/cryDe9
  
  ........
  
  //// Конец цитирования.
  
  Понятно, что тут еще очень далеко до реализации автоматического создания
  какого-либо блокбастера даже по самому подробному сценарию,
  но главная задача таких проектов нащупать какие-то новые методы/подходы
  по развитию ИИ-систем вообще и мультимодальных моделей в частности.
  И команда Сбера, работающая с "Моделью Kandinsky 2.x" в целом
  меня радует темпом различных новаций, хотя претензий к качеству реализаций,
  и, особенно, наличию "понятного и доступного хелпа" тоже хватает.
  Но сейчас времени на работу с этой ИИ-систем практически нет совсем,
  и может быть к следующей версии что-то в этом изменится.
  По изменению в интерфейсе видно, что что-то они планируют/экспериментируют
  и иногда даже откатываются назад, но пока ничего кроме озвученного
  не анонсируют.
  
  Но в данном случае, на мой взгляд, важен не столько результат,
  сколько сама попытка нащупать новый подход,
  включающий использование дополнительной внешней информации к оценке контекста,
  причем, полученный, возможно, совершенно отличным от "машинного обучения" методом,
  включение этой информации в модель контекста,
  и, самое интересное, "инфинитезимальное" изменение промежуточного результата
  с постоянной его корректировкой "полудиффузионным методом".
  Представляется, что такой подход может применяться не только
  для "анимирования гифок" или "микровидосиков".
  
  Хотя как применить его собственно для "размывания времени"
  пока сообразить не могу,
  но надежды не теряю.
  
  
  =========
  
  16.10.2023 16:27
  
  Использование своего собственного языка обучения мультимоделей.
  В оглавление.
  
  Еще одна интересная статья о специализированной мультимодальной системе,
  точнее о процессе ее формирования/создания,
  которая интересна, в первую очередь, четкой, практически, пошаговой инструкцией,
  как внедрить в ИИ-систему свой собственный язык обучения/общения.
  Может быть, кому-то это покажется тривиальным или само собой разумеющимся,
  но для меня эта статья послужила отправной точкой для дальнейших размышлений
  о возможных направлениях развития этого направления "машинного обучения".
  Поэтому считаю полезным проработать этот материал максимально внимательно.
  
  "Используем Hugging Face для обучения GPT-2 генерации музыки"
  Автор: PatientZero
  https://habr.com/ru/articles/766510/.
  16 окт 2023 в 10:43
  
  Автор оригинала: Juan Carlos Pineros
  https://huggingface.co/blog/juancopi81/using-hugging-face-to-train-a-gpt-2-model-for-musi
  
  //// Начало цитирования.
  
  .......
  
  Источником вдохновения и фундаментом этого туториала
  стала выдающаяся работа доктора Тристана Беренса.
  https://www.linkedin.com/in/dr-tristan-behrens-734967a2
  
  Введение
  
  Сегодня генеративный ИИ имеет большую популярность в сфере машинного обучения.
  Впечатляющие модели наподобие ChatGPT и Stable Diffusion
  благодаря своим потрясающим возможностям захватили внимание
  технологического сообщества и широкой публики.
  Крупные компании (Facebook, OpenAI и Stability AI)
  также присоединились к этому движению,
  выпустив впечатляющие инструменты для генерации музыки.
  
  Обычно для создания генеративных музыкальных моделей используется два подхода:
  
  Сырое аудио: при таком подходе для обучения модели используется
  сырое представление звука (.wav, .mp3) .
  Такую методику применяют для StableAudio и MusicGen.
  
  Символическая музыка: вместо использования сырого представления звука
  можно использовать команды для генерации аудио.
  Например, вместо использования записи мелодии на флейте
  применяется считываемая музыкантом нотная запись.
  Команды для создания конкретного музыкального фрагмента
  хранятся в файлах MIDI или MusicXML.
  Компания OpenAI обучала MuseNet (уже недоступную) на символической музыке.
  
  В этом туториале мы будем применять символические модели.
  В частности, мы реализуем хитрую идею:
  если получится преобразовать команды из файлов символической музыки
  (в туториале используются файлы MIDI) в слова,
  то мы сможем при обучении модели воспользоваться
  потрясающими достижениями в сфере NLP!
  //// Вот реализация этой идеи и привлекла особое внимание,
  //// так как такой подход можно использовать не только
  //// для "файлов символической музыки".
  
  Сбор датасета и преобразование его в слова
  
  .......
  
  Токенизация датасета
  
  На изображении выше показан один из способов преобразования
  музыкальных команд в токены,
  а это именно то, что нужно для обучения языковой модели!
  В этом разделе мы узнаем, как выполнить переход от файла MIDI
  в текстовый формат с использованием псевдослов
  (не относящихся к английскому лексикону) для обучения модели GPT-2.
  //// Вот этот термин "псевдослова" может быть и не очень удачный,
  //// но позволяет дорисовать в воображении нечто большее,
  //// чем термин идентификаторы, т.к. "псевдослова" могут подразумевать наличие
  //// не только "лексики", но и "синтаксиса" и "грамматики",
  //// т.е. возможность задавать определенные "правила собственного языка".
  
  Разбиение датасета на блоки
  
  В этом туториале мы будем токенизировать каждый файл на восьмитактовые окна,
  где каждый <такт> (bar) - это сегмент, содержащий указанное количество долей.
  Вы можете поэкспериментировать с другими числами, например, с 4 или 16,
  и понаблюдать, как меняется результат.
  Можно сделать это множеством разных способов,
  но мы для простоты обойдём в цикле датасет и создадим новые файлы MIDI
  длиной восемь тактов.
  Для разбиения на блоки я воспользовался следующим кодом в Colab:
  
  ......
  
  Из команд MIDI в слова
  
  Сегментировав каждую композицию в восьмитактовые файлы MIDI,
  мы можем преобразовать их в псевдослова.
  Исследователи предложили различные методики токенизации музыки.
  Вот одни из самых популярных:
  
  .....
  
  REMI
  https://dl.acm.org/doi/10.1145/3394171.3413671
  
  REMIPlus
  https://arxiv.org/abs/2201.10936
  
  MIDI-Like
  https://arxiv.org/abs/1808.03715
  
  CPWord
  https://ojs.aaai.org/index.php/AAAI/article/view/16091
  
  MMM
  https://arxiv.org/abs/2008.06048
  
  Потрясающий обзор различных токенизаторов
  https://miditok.readthedocs.io/en/latest/tokenizations.html
  можно найти в документации MidiTok
  https://github.com/Natooz/MidiTok
  - мощного пакета Python для токенизации музыкальных файлов MIDI.
  
  В этом туториале я буду использовать MMM:
  методику токенизации Multi-Track Music Machine.
  MMM - это простая, но мощная методика преобразования файлов MIDI в псевдослова.
  Можете попробовать другие токенизаторы и сравнить результаты.
  
  MMM: Multi-Track Music Machine
  
  Джефф Энс и Филип Паске представили токенизатор MMM в научной статье MMM:
  Exploring Conditional Multi-Track Music Generation with the Transformer.
  https://arxiv.org/abs/2008.06048
  Чтобы лучше понять эту методику, взгляните на иллюстрацию из статьи:
  
  .......
  
  В MMM числа обозначают высоту нот и инструменты в нотации MIDI.
  Например, на показанной выше схеме NOTE_ON=60 - это C4,
  а INST=30 означает гитару с овердрайвом (Overdriven Guitar).
  Можно использовать NOTE_ON/NOTE_OFF для обозначения того,
  где нота начинает и заканчивает звучать,
  и TIME_DELTA для перемещения временной шкалы.
  Ноты обёрнуты в токены и ,
  которые добавлены внутрь псевдослов и ,
  которые, в свою очередь, группируются внутри и ,
  обозначающих начало и конец произведения.
  
  .......
  
  Надеюсь, этот краткий обзор объяснил вам, как работает MMM.
  А теперь самое интересное! Давайте возьмём датасет LMD Clean
  и преобразуем его в псевдослова.
  
  Для токенизации датасета можно воспользоваться опенсорсными библиотеками,
  например, MidiTok (о которой говорилось выше) или Musicaiz.
  У обеих имеются замечательные возможности по настройке процесса токенизации.
  Однако в качестве начальной точки я решил взять репозиторий MMM-JSB
  и адаптировать его под Lakh Midi Dataset,
  потому что это позволит мне иметь больше контроля над процессом.
  //// А вообще-то здесь напрашивается уже не просто библиотека,
  //// а опять же нейронка, точнее ГПТэшка - большая языковая модель
  //// "заточенная" на использование словаря из этих "псевдослов".
  //// Но это явно будет уже в следующей версии.
  //// Важно понять, что, наверно, любую задачу можно представить как "текст",
  //// имеющий свой "псевдословарный" запас, и "псевдограмматику",
  //// с помощью которых можно преобразовать исходный датасет.
  //// Этот подход отличается от простого "эмбединга" тем,
  //// что появляется промежуточное и,
  //// самое главное, "читабельное"/контролируемое представление,
  //// которое, в свою очередь, может обрабатываться ГПТэшкой.
  
  .......
  
  Обучаем токенизатор и модель
  
  ........
  
  Так как теперь у нас есть датасет псевдослов,
  то следующая часть будет очень похожа на обучение языковой модели,
  но язык будет состоять из музыкальных слов.
  //// Или любой другой "предметной области".
  Эта часть туториала во многом повторяет курс по NLP Hugging Face,
  https://huggingface.co/learn/nlp-course/chapter0/1?fw=pt
  в котором после получения датасета нужно обучить токенизатор.
  //// Очень важный момент. Мне пока не очень понятный в реализации,
  //// но с учетом возможного перехода от "векторного эмбединга",
  //// к "псевдословному представлению" обязательно постараюсь
  //// разобраться с этим вопросом.
  
  Примечание:
  если вы незнакомы с токенизацией или обучением моделей,
  то рекомендую для лучшего понимания нашего туториала просмотреть курс.
  
  Токенизатор
  
  .......
  
  В этом туториале мы будем обучать модель GPT-2.
  Эта модель имеет превосходные возможности обучения,
  она опенсорсная и к тому же Hugging Face существенно облегчил её обучение
  и использование.
  Однако GPT-2 не обучена на музыкальный язык,
  поэтому её нужно обучить заново,
  начав с токенизатора.
  
  Чтобы проиллюстрировать предыдущий абзац,
  токенизируем несколько слов из нашего датасета
  при помощи стандартного токенизатора GPT-2:
  
  .......
  
  Как видите, стандартный токенизатор GPT-2 испытывает трудности
  с музыкальными токенами.
  Для улучшения результатов нужен индивидуальный подход.
  
  При обучении токенизатора обычно начинают с нормализации слов.
  В этот шаг включается удаление ненужных пробелов,
  перевод слов в нижний регистр и устранение знаков ударения.
  При работе с музыкальными токенами этот этап,
  необходимый для естественных языков, не нужен.
  
  Следующий этап - это предварительная токенизация,
  разделение ввода на сущности меньшего размера, например, слова.
  В нашем случае достаточно разбивать ввод по пробелам:
  
  ........
  
  Наконец, мы обучаем токенизатор,
  выполняем необходимую постобработку и
  (необязательно, но крайне рекомендуемо)
  загружаем его в Hub.
  //// Вроде выглядит не очень страшно, но разбираться все же нужно.
  //// Но это позже, сейчас важно зафиксировать,
  //// что обучение токенизатора - практически "рутинная задача".
  
  .......
  
  Давайте посмотрим, как наш токенизатор работает после обучения:
  
  ........
  
  Именно то, что мы и хотели! Отличная работа!
  Теперь у нас есть токенизатор в Hub для обучения модели GPT-2.
  
  ........
  
  Модель
  
  .......
  
  Теперь, когда датасет и токенизатор готовы,
  настало время обучать модель.
  В этой части туториала мы выполним следующее:
  
  Подготовим датасет для модели.
  
  Выберем конфигурацию модели.
  
  Обучим модель при помощи специального тренера.
  Специальный тренер позволит нам логировать результаты модели
  в процессе обучения в Weights and Biases (для этого нужен аккаунт W&B).
  
  Подготовка датасета
  
  Самое сложное мы уже сделали,
  так что подготовка датасета будет простым процессом.
  Нужно взять датасет с Hugging Face
  и воспользоваться новым токенизатором для создания токенизированного датасета.
  Именно эту токенизированную версию датасета
  GPT-2 ожидает в качестве входных данных.
  
  .......
  
  Выбор конфигурации модели
  
  .......
  
  Для этого туториала мы используем небольшую версию
  (с малым количеством параметров),
  которая позволит нам обучить модель в условиях ограниченных ресурсов,
  а после обучения генерировать музыку быстрее.
  Как вы видели, демо из начала туториала не использует GPU
  и создаёт музыку за разумное время.
  
  ......
  
  Data Collator
  
  Перед тем как начинать обучение,
  нужно создать батчи для модели.
  Кроме того, следует вспомнить, что входные данные используются
  как метки в каузальной языковой модели (Causal Language Model)
  (со сдвигом на один элемент), поэтому это тоже нужно учитывать.
  Но не беспокойтесь, всё это сделает за нас data collator Hugging Face,
  это определённо облегчит нашу жизнь!
  //// Опять не очень понятный момент.
  //// Ох, сколько еще надо закрыть "пробелов" в образовании.
  
  ......
  
  Обучение модели
  
  Мы собрали всё вместе, и настал момент истины: обучение модели!
  В процессе обучения модели не следует действовать слепо,
  так что всегда стоит по ходу дела тестировать некоторые поколения.
  Эта часть работы доставляет удовольствие:
  вы будете слышать, как ваша ИИ-музыка будет эволюционировать со сменой эпох.
  
  ........
  
  Используем Sweep для поиска улучшенных гиперпараметров
  
  .......
  
  Демонстрация показателей модели в Hugging Face Space
  
  ........
  
  Ещё одна критически важная часть приложения
  - переход от сгенерированных моделью токенов к музыкальным нотам.
  На протяжении туториала я скрывал эту функцию,
  а теперь давайте посмотрим, как она работает.
  По сути, эта функция использует библиотеку note_seq Magenta
  для создания note_sequence,
  которую можно использовать для преобразования в MIDI или для воспроизведения.
  Вот код для этого; его авторство полностью принадлежит доктору Тристану Беренсу.
  https://www.linkedin.com/in/dr-tristan-behrens-734967a2
  
  .......
  
  Этические аспекты
  
  Во-первых, хочу поблагодарить вас за то, что вы читаете этот туториал,
  он длинный и, возможно, немного пугает.
  Я максимально стремлюсь обеспечить его точность и качество,
  но признаю, что его можно улучшить и в нём, вероятно, есть ошибки.
  Я постоянно учусь и развиваюсь,
  поэтому буду признателен за любые отзывы и рекомендации по улучшению контента.
  
  .......
  
  И этот список можно продолжить.
  На все эти вопросы ответить невозможно,
  поэтому мне бы хотелось сосредоточиться на одном
  особенно волнующем меня аспекте: цифровом барьере.
  
  Цифровой барьер (digital divide)
  - <это неравный доступ к цифровым технологиям>
  (источник: Wikipedia), создающий опасный мост между теми,
  кто имеет доступ к информации и ресурсам, и теми, кто его не имеет.
  //// Проблема не только в доступе к информации/технологии,
  //// но и в понимании того как этим можно воспользоваться,
  //// в том числе и как применить для своих целей незнакомую/новую технологию.
  //// В духе темы данной статьи это "переложить мелодию на нужный инструмент".
  
  Как насчёт цифрового барьера в мире музыки?
  
  <Музыка - универсальный язык человечества>, - Генри Лонгфеллоу
  
  .......
  
  Машинное обучение формирует совершенно новую реальность
  - как сказал профессор Эндрю Ын,
  это новое электричество.
  Возможно, мы приближаемся к революции ИИ,
  которая изменит наш мир, и все мы должны иметь право голоса
  и участвовать в этом развитии,
  вне зависимости от языка, культуры, национальности,
  уровня образования и этнической принадлежности.
  
  .......
  
  //// Конец цитирования.
  
  Пока до конца не могу сформулировать все мысли,
  которые вызвал данный материал.
  
  Первое, что понятно, это возможность описание задачи и обучающего датасета
  какими-то своими "псевдословами", возможно имеющими
  определенный "синтаксис", "грамматику" и т.п.
  
  Второе, для формирования обучающего датасета в терминах/правилах "псевдоязыка",
  также можно использовать ГПТэшку, обученную для формирования такого "псевдотекста",
  хотя бы в форме "шаблонов" ввода/вывода.
  
  Третье, наличие такого слоя "псевдотекста" может быть полезно
  для автоматического/автоматизированного контроля/проверки
  самого обучающего датасета и анализа результатов работы ИИ-системы.
  Это как явный аналог "псевдокода", широко используемый в ИТ-технологиях.
  
  И как бы сформулировать главную мысль, возникшую в процессе обработки
  данной статьи, так чтобы это было хоть немного понятней.
  Может быть так:
  преобразование "текст в вектор" (эмбеддинг) оказалось очень продуктивным
  в ИИ-системах и "машинном обучении",
  но в технике обычно все эффективные приемы/операции
  имеют не менее эффективные "обратные" преобразования,
  типа "литье-штамповка", "сварка-резка", "плавка-заморозка" и т.д.
  Так и здесь, представляется, что преобразование "вектор в текст",
  особенно "псевдотекст", найдет применение
  не только для аннотации изображений/видео,
  а для куда большего круга задач, которые трудно описать обычными словами,
  а вот "псевдословами"/операторами вполне реально.
  
  Больше того, вполне возможно, что если таким образом взглянуть
  на сегодняшние приемы "тьюнинга" ГПТэшек, то это как раз именно и реализуется.
  Ладно, это нужно еще раз хорошо обдумать,
  но возможность обучения или, точнее, дообучения ГПТэшек и мультимоделей,
  используя свой собственный язык, пусть даже и выглядящим как "псевдокод",
  мне лично, представляется весьма перспективным.
  
  
  ========
  
  04.11.2023 14:45
  
  Возможный стандарт универсального интерфейса между ИИ-системами.
  В оглавление.
  
  На Хабре появилась интересная заметка.
  Интересная и сама по себе, и теми мыслями, которые она породила:
  
  "Понимают ли нейросети друг друга?"
  Автор: Lelepud (Владимир)
  https://habr.com/ru/articles/771514/.
  2 ноя в 14:52
  
  Лучше, конечно читать эту статью в оригинале, там красивые иллюстрации,
  но в силу важности того направления, которое она открывает
  решил ее по максиму "законспектировать".
  
  //// Начало цитирования.
  
  Скрестив 3 различных нейросети - провел небольшой эксперимент
  по поводу движения информации внутри цепочки нейрогенераторов.
  
  Привет!
  
  А что если взять 3 разные нейросети и проверить,
  насколько они "поймут" друг друга в режиме игры "Глухой телефон"?
  
  Беспокойная голова нашла себе новое беспокойство, и я приступил.
  
  План работ эксперимента.
  Тут надо вчитаться:
  
  Даем задачу <текстовой> Нейросети-1 придумать Промт-1 на определенную тему.
  
  Полученный Промт-1 отдаем "картиночной" Нейросети-2
  (генерация изображений по промту, соответственно)
  - получаем Изображение-1.
  
  Полученное Изображение-1 загружаем уже в Нейросеть-3,
  которая распознает содержимое данной картинки,
  и возвращает текстовый Промт-2.
  
  И вот тут самое главное и интересное!
  Полученный Промт-2 отдаем опять в Нейросеть-2, генерируя Изображение-2.
  
  Цель эксперимента:
  проверить, насколько Изображение-1 совпадет по своему содержимому
  с Изображением-2?
  Насколько задача человека в п.1 будет верно,
  без искажений, реализована в виде Изображения-2,
  пройдя цепочку нейрогенераторов?
  
  Использованные инструменты\сервисы:
  
  Нейросеть-1:
  чат-бот на "движке" ChatGPT-4 OpenAI,
  сервис МашаGPT - https://mashagpt.ru ,
  мне удобно из РФ - без VPN и иностранных симок,
  оплата с любой ру-карты, пользую последние 2 месяца.
  
  Нейросеть-2:
  легендарная и фотореалистичная нейросетка Midjorney
  - https://www.midjourney.com,
  через традиционный бот в Дискорде
  (заюзал акк знакомого).
  
  Нейросеть-3:
  "реверсивная" картиночная нейросеть
  - распознает содержимое картинки и возвращает текстовый промт.
  Бесплатная, найдена в Сети по рекомендациям: Clip Interrogator-2:
  https://huggingface.co/spaces/fffiloni/CLIP-Interrogator-2
  
  Начинаем! Будет 3 попытки.
  
  Попытка ?1
  
  Задание для GPT-4. Классика офисной жизни:
  
  .......
  
  Ну что ж... Вот вообще неплохо!
  Да, поменялся ракурс.
  Да, от устройства на столе в стиле "Макбук" ничего не осталось.
  Где-то восход, а где-то и закат.
  Но ведь смысл содержимого остался!
  Офис и мебель, окно, вид на город.
  Достаточно четко.
  "4 с минусом", итоговая субъективная оценка.
  
  Поехали дальше. Попытка ?2
  
  Даю задание GPT-4 - придумай-ка что-то нечто про природу. И пусть будет гриб:
  
  .........
  
  Нуууу... Опять почти в десятку!
  Да, гриб поменял цвет, на исходном изображении цвет гриба другой
  (зеленые оттенки), а на конечном - в основном коричневая палитра цветов у грибов.
  
  Но смысл изображения не поменялся - лес, грибок, солнышко.
  Размытый задний фон, кстати - тоже на месте.
  А так как всё по смыслу сохранилось, то это отлично, твердая "4+"!
  
  Попытка ?3
  
  А тут я задумался - первые 2 задания были эдакие материальные,
  про предметы, окружающую обстановку и т.п.
  А если задать ещё и эмоции, или что-то про чувства?
  Это ведь бездушные нейросети не поймут <между собой>,
  в цепочке генераций потеряют интент, запутаются же?! Поехали!
  
  GPT-4 - давай-ка про любовь! )
  
  ........
  
  И тут я подумал - "Всё! Сейчас в ответной генерации будет что угодно,
  но не влюбленные у моря-океана - а будет 2 столба, два пловца, и т.п.".
  Про чувства и любовь вообще не рассчитывал что-то увидеть, и...!
  Ничоси!
  
  .........
  
  Сохранено и соблюдено - практически всё!
  Картинка ?4 - вообще попадание "в десятку!".
  Да, чуть крупнее передний план стал.
  Ребята местами поменялись, но это всё достаточно незначимые детали.
  
  Неспокойное море. Парень и девушка.
  Платье развивается на ветру.
  Чувства? Есть! И они те же - они про любовь!
  
  И даже палитра колористики осталась практически без изменений!
  Как так!?! Легкий шок...
  //// Приятно, хотя бы виртуально присутствовать рядом с моментом,
  //// когда человек встречается с "неведомым", граничащим с Чудом.
  
  Коротко говоря, на этом результате генерации я так опешил,
  что первые секунд 5 лицо моё было примерно вот таким:
  
  .......
  
  Итого. Эмоции долой, делаем выводы.
  
  А глобальный вывод один, и он достаточно простой
  - генеративные нейросети, работающие, по сути,
  на разных технологиях и имеющие разный функционал
  - все-таки достаточно четко и детально
  могут передавать между собой информацию.
  Даже зацикливая исходную информацию
  - на выходе контекст мы не особо-то и потеряли.
  Практически не потеряли.
  И это круто!
  
  Эпилог
  
  Эксперимент вышел слегка спонтанный, всё произошло внезапно - от мысли и идеи,
  до получения результатов.
  
  Появилось понимание некоторых моментов - нейросети "понятливые",
  они достаточно могут легко взаимодействовать между собой,
  а еще точнее - нейросети достаточно легко объединять
  в более сложные по функционалу,
  скажем так, <сообщества>.
  И уже на таких, гибридных продуктах - можно производить многие вещи,
  что так или иначе будет контентом и информацией, само собой.
  
  Если смотреть на всю цепочку движения информации,
  то начинается, на минутку, всё с человека,
  который просит придумать промт для генерации изображения.
  И этот "мысленный" контент, пройдя даже такой замысловатый нейропуть,
  дает отличный, валидный и релевантный конечный результат.
  
  Элементарно, тоже быстромысль - для веб-маркетинга или некоего SEO
  можно отбирать топовый контент
  (некие статьи, тексты с изображениями),
  и отдавать в работу такой связке нейросетей,
  чтобы произвести подобный контент же
  - по сути интересный и полезный, раз он топовый.
  И тут фишка не в том, что контент такой можно сгенерировать в новом виде
  (это же не новость - сгенерировать можно),
  а фишка в том, что все эти процессы можно сильно автоматизировать.
  
  И так далее. Идей много.
  
  Надеюсь, было хоть сколько-то познавательно,
  ибо для меня сий эксперимент действительно был интересен,
  с достаточно неожиданными
  (если не сказать изумительными)
  результатами.
  
  Выслушаю любые мысли и предложения, конструктивные,
  по поводу всего этого.
  Пишу тут впервые, тапками и нейросетями прошу сильно не кидаться :-)
  
  Успехов!
  
  //// Из комментариев.
  
  ........
  
  GrimAnEye
  1 час назад
  
  На примере последнего набора - ничего оригинального придумано не было,
  а нейросети на подобных изображениях и обучались.
  Если бы в задаче реально были описаны некие абстрактные чувства,
  то результаты могли бы быть различными
  
  +1
  
  ........
  
  //// Конец цитирования.
  
  Любопытно, что никто из комментаторов то ли не заметил,
  то ли не счел нужным обращать внимание на главное в этой заметке.
  Возможность соединения в различные структуры различных нейросетей
  на базе действительно общего элемента в них "обучению естественному языку"
  в той или иной степени "продвинутости".
  Т.е. появляется в качестве возможного стандарта "универсального интерфейса"
  между различными ИИ-системами использовать, некое подмножество
  "естественного языка" в виде промптов.
  
  Причем, в такие структуры могут быть включены не только ИИ-системы,
  достаточно высого уровня, но и любые ИТ-системы, лишь бы их ввод/вывод
  был бы ТЕКСТОВЫЙ или ГРАФИЧЕСКИЙ, даже в очень ограниченном диапазоне.
  Ведь можно использовать ИИ-системы, тот же ChatGPT-4
  как дополнительный транслятор/"переводчик" в нужный формат промпта.
  Это тот момент, который автор статьи немного упустил из вида,
  что может существенно ограничить полет фантазии о применимости такого подхода.
  
  Интересно, что практически одновременно, там же на Хабре появилась,
  казалась бы, совершенно несвязанная с этим материалом
  статья о новой технологии борьбы с галлюцинациями,
  которая тоже представляет собой систему взаимосвязанных нейросетей,
  причем взаимосвязь между ними реализуется через изображения (графические образы)
  и ПРОМПТЫ. Подробнее см.:
  "Еще один инструмент и новые вопросы".
  
  Можно сказать, почти цитатой из классика,
  что "призрак бродит по Европе.
  Призрак "универсального естественно-языкового интерфейса всех систем",
  включая ИИ-системы, ИТ-системы и ... самого человека.
  Тут ключевое, что отработана технология обработки промптов
  большими языковыми моделями, и есть возможность трансформации
  промптов к различному формату (более широкому/узкому)
  и в графическую форму и обратно.
  А все остальное уже зависит от запросов и фантазии разработчиков.
  
  Но даже такой естественно-языковой интерфейс не "конечное слово"
  в информационных технологиях, за ним видится уже даже следующий шаг,
  названный ИИ-системой Bing, "синтетическое программирование",
  
  \\\ ...подход, который позволяет создавать программы
  \\\ на основе естественного языка и примеров ввода-вывода,
  \\\ без необходимости писать код.
  
  Вот такие мне представляются перспективы
  "стандарта универсального интерфейса между ИИ-системами",
  на базе естественно-языков промптов и графических образов.
  
  Но предсказатель из меня - так себе,
  так что, "поживем - будем посмотреть".
  
  04.11.2023 16:57
  
  Посмотрел свежие новости и вот оно подтверждение:
  
  "От идеи до реализации: создание игры с помощью нейросетей"
  Автор: feodosia_mia
  https://habr.com/ru/articles/771908/.
  1 час назад
  
  Автор оригинала: Javi Lopez
  https://twitter.com/javilopen/status/1719363262179938401?s=20
  
  \\\ В эпоху быстро развивающихся технологий и искусственного интеллекта
  \\\ мы стоим на пороге новой эры творчества.
  \\\ Инструменты, такие как Midjourney, DALLE 3 и GPT-4,
  \\\ предоставляют уникальные возможности для творцов различных направлений.
  \\\ Было решено исследовать этот потенциал, создав игру "Angry Pumpkins"
  \\\ в качестве эксперимента.
  \\\ Весь код был написан с помощью GPT-4,
  \\\ в то время как для графической части были использованы Midjourney и DALLE.
  
  .......
  
  \\\ Итог:
  
  \\\ Игра была создана за 10-13 часов и насчитывает 600 строк кода.
  \\\ Целью было поставить эксперимент и проверить как пользователь,
  \\\ который не обладает серьезными знаниями программирования,
  \\\ сможет справиться с подобной задачей.
  \\\ А также насколько хорошо справятся с этим нейросети.
  
  И в который раз вспоминается пророческая фраза фантаста Артур Кларк:
  "Любая достаточно продвинутая технология неотличима от магии".
  
  "синтетическое программирование"
  Создано с помощью искусственного интеллекта Bing на платформе DALL-E.
  
синтетическое программирование:  OIG.misn3DkAEEojigvMNSEw.jpg синтетическое программирование:  OIG.dEz68VXQRqaYShDn9IMd.jpg
синтетическое программирование:  OIG.bXYtdFvKiCrOWnPMAiFK.jpg синтетическое программирование:  OIG.8bwbs3oVtYLeZpU2lhR0.jpg
  
  
  ========
  
  24.11.2023 23:06
  
  Когда мультимоделей становится слишком много.
  В оглавление.
  
  Последние несколько месяцев практически нет ни одной недели,
  чтобы не появилась очередная разновидность мультимоделей.
  Все, начался бум внедрения различных мультимодальных функций
  в самые разные системы. Так сказать "процесс пошел",
  точно так, как и предполагалось практически каких-то полгода назад, см.
  "Предчувствие мультимодальной революции."
  Так что, практического нет смысла отслеживать все новинки,
  за исключением чего-то принципиально нового,
  или очень хорошо описанного.
  
  Но проделанную работу абсолютно не считаю бесполезной,
  отслеживание того, как стремительно раскручивался
  "торнадо мультимодальности" в ИИ-системах
  с одной стороны, было очень полезно для расширения кругозора,
  знакомства с возможностями и перспективами ИИ-систем,
  а с другой стороны, помогло сформулировать для себя,
  те вопросы, которые стоит рассмотреть по-глубже.
  
  В первую очередь это вопрос естественно-языкового интерфейса,
  а во вторую - попытаться разобраться с тем, как приспособить "метод диффузии"
  для обучения больших, а лучше не очень больших языковых моделей.
  И в связи с этим "курс" этого модуля стоит немного скорректировать,
  уделить больше внимания "конструктивным особенностям" и принципам обучения
  генеративных моделей, использующих "метод диффузии".
  
  24 ноября 2023 года Андрей Павлович Митасов, Минск, РБ, Порт приписки Земля.
  
  
  ========
  
  26.11.2023 9:05
  
  Информация к размышлению:
  или материалы к следующей части данного модуля.
   Попытка "диффузионного" анализа анонса "Модели Kandinsky 3.0".
   А чем занимаются партнеры разработчиков из Сбера?
   Введение в метод диффузии для "чайников".
   Еще о реализации диффузии для "чайников".
   Метод "потока Пуассона" для "чайников".
   Еще одно описание метода "диффузии" для "чайников".
   Новое направление в работе с мультимодальными эмбеддингами.
   "Дистилляция диффузионки" для "чайников".
   Симулятор реальности Sora.
   Диффузионные текстовые модели.
   Анонс "Модели Kandinsky 3.1".
   Сеанс поэтапной "дистилляции".
   Больше латентов "хороших и разных".
   Обучение матрицами вращения.
   "Небольшая" деталь к пониманию работы "диффузионок".
   Попытка понять суть метода "обратной дистилляции".
  
  
  ========
  
  24.11.2023 14:02
  
  Попытка "диффузионного" анализа анонса "Модели Kandinsky 3.0".
  В оглавление.
  
  И опять, спустя всего лишь четыре месяца, ребята из команды Сбера
  выкатили даже не одну а две новых "Модели Kandinsky",
  теперь это уже "Модель Kandinsky 3.0" и "Kandinsky Video",
  с новыми возможностями, улучшенным, как заявляют, разработчики качеством,
  и как всегда с отсутствующим "хелпом".
  А еще туманно намекнули, что скоро нас ждет еще какой-то сюрприз.
  
  Такая результативность/продуктивность очень похвальна,
  но что делать Вашему покорному слуге?
  По традиции надо прокомментировать анонсы этих ИИ-систем,
  а еще лучше сопроводить их личными впечатлением и опытом применения.
  Но времени катастрофически не хватает, реально нет возможности выделить денек,
  чтобы обстоятельно посмотреть, что и как изменилось.
  Да и фокус интересов за последние пару месяцев существенно изменился.
  
  Уже понятно, что такого рода продуктов/версий/моделей будет все больше и больше,
  какие-то характеристики будут улучшаться, но при этом не дотягиваясь,
  до аналогичных показателей по всему спектру лидирующих/конкурирующих ИИ-систем.
  И, самое главное, такие анонсы становятся рядовым событием,
  на которые обращают внимание все меньше и меньше.
  Кому кроме разработчиков, интересны конкретные "метрики"
  на каком-то промежуточном этапе разработки?
  
  Так что же пропустить это очередное эпохальное событие,
  или попытаться изменить подход к его освещению?
  Попробую второй вариант, и вот под каким углом.
  
  За развитием линейки "Модели Kandinsky N.x" (МК)
  я достаточно внимательно наблюдаю по нескольким причинам,
  одна из которых, практическое сопоставление результатов работы МК,
  с информацией, предоставляемой о ней разработчиками.
  В том числе по каким-то "недокументированными" особенностями ее поведения,
  с точки зрения попытки понять, как это может быть связано
  с описанными/умалчиваемыми разработчиками технических деталей.
  Но делал я это не очень системно, так как рассматривал МК
  как доступный и вполне себе подходящий для моих целей генератор иллюстраций.
  
  Но где-то в последние месяцы меня увлекла идея возможности
  применить "метод диффузии", используемый сейчас в обучении ИИ-систем,
  ориентированных на изображения, для обучения языковых моделей.
  И для этих целей стал "приглядываться" к конструкциям/структурам/методам,
  используемыми в диффузионных моделях.
  Но "Модель Kandinsky N.x" начиная с версии "2.0" как раз и является "диффузионкой",
  и идеально подходит для такого направления исследования.
  Тем более, что разработчики в своих анонсах уделяют большее внимание
  техническим деталям, чем пользовательскими аспектами.
  
  Вот в таком ракурсе я попытаюсь прокомментировать последние анонсы.
  
  Kandinsky 3.0 - новая модель генерации изображений по тексту
  Автор: ddimitrov (Денис Димитров)
  https://habr.com/ru/companies/sberbank/articles/775590/.
  22 ноя 2023 в 11:54
  
  //// Начало цитирования.
  
  <Без чувства современности художник останется непризнанным>,
  Михаил Пришвин, русский и советский писатель, прозаик и публицист
  
  В прошлом году на АI Journey мы представили модель Kandinsky 2.0
  - первую диффузионную мультиязычную модель генерации изображений по тексту,
  которая может генерировать изображения на основе русскоязычного текста.
  За ней последовали новые версии - Kandinsky 2.1 и Kandinsky 2.2,
  которые значительно отличались по качеству и своим возможностям от версии 2.0,
  и стали для нашей команды серьёзными вехами на пути
  к достижению лучшего качества генерации.
  //// Т.е. заявленная цель качество генерации, которая состоит,
  //// как минимум, качества самого изображения и соответствия картинки промпту.
  
  .......
  
  Итак, спустя год после релиза нашей первой диффузионной модели
  мы представляем новую версию модели генерации изображений по тексту
  - Kandinsky 3.0!
  Это результат длительной работы нашей команды,
  которую мы вели параллельно с разработками версий Kandinsky 2.1 и 2.2.
  Мы провели много экспериментов по выбору архитектуры
  и проделали большую работу с данными,
  чтобы сделать понимание текста и качество генераций лучше,
  а саму архитектуру - проще и лаконичнее.
  Также мы сделали нашу модель более <отечественной>:
  теперь она значительно лучше ориентируется
  в российском и советском культурном поле.
  //// Судя по комментариям к статье это не очень заметно.
  //// И интересно почему. Ладно, надо проверять самому.
  
  В этой статье я кратко опишу ключевые моменты новой архитектуры,
  стратегию работы с данными
  и, конечно, продемонстрирую возможности нашей модели на примере генераций.
  
  Архитектура модели и обучение
  
  Kandinsky 3.0 представляет собой диффузионную модель
  для генерации изображений по тексту
  (как и все модели линейки Kandinsky 2.X).
  Цель обучения любой диффузионной модели заключается в том,
  чтобы при обратном процессе диффузии научиться восстанавливать
  реальное изображение,
  которое было зашумлено во время процесса прямой диффузии
  (подробнее можно прочитать, например, тут).
  https://habr.com/ru/companies/sberbank/articles/701162/
  При обучении Kandinsky 3.0 мы отошли от концепции двухстадийной генерации,
  которая использовалась в предыдущих версиях.
  Напомню, что её суть заключалась в том, что мы обучаем две модели:
  
  Diffusion Mapping (Image Prior) - генерирует латентный картиночный вектор,
  //// Латентный вектор это промежуточное сильно сжатое представление картинки,
  //// в котором скрыты все выученные нейросетью свойства.
  полученный кодированием картинки визуальной частью модели CLIP,
  принимающей на вход латентный текстовый вектор,
  закодированный текстовой частью модели CLIP.
  
  Decoder (U-Net) - генерирует картинку (если быть более точным, то )
  по латентному картиночному вектору CLIP.
  
  Подробнее про устройство архитектуры версии Kandinsky 2.2 можно прочитать,
  например, вот тут.
  https://habr.com/ru/companies/sberbank/articles/701162/
  
  В Kandinsky 3.0 генерация изображения происходит
  непосредственно из закодированных текстовых токенов.
  Такой подход позволяет упростить обучение,
  так как теперь необходимо обучать лишь одну часть модели (а именно Decoder).
  Также этот подход сильно улучшает понимание текста,
  ведь теперь мы можем использовать не текстовый энкодер CLIP,
  который обучался на довольно примитивных текстах
  (по факту описаниях изображений из сети Интернет),
  сильно отличающихся от естественного языка,
  а взять мощную языковую модель, обученную
  на большом корпусе качественных текстовых данных.
  //// Т.е предполагается более мощная языковая модель,
  //// но без специального дообучения, во всяком случае, на начальном этапе.
  
  Помимо обновления подхода к кодированию текста
  мы провели очень большое исследование архитектуры U-Net,
  отвечающей за удаление шума с картинки.
  Главная дилемма состояла в том,
  какой тип слоёв будет содержать основную часть параметров сети:
  трансформерные или свёрточные.
  При обучении на больших объёмах данных трансформеры
  показывают лучшие результаты при работе с изображениями,
  однако U-Net-архитектуры практически всех диффузионных моделей
  преимущественно свёрточные.
  Чтобы разрешить эту дилемму,
  мы проанализировали различные архитектуры
  и отметили для себя следующие модели:
  
  ResNet-18, ResNet-50 - всем известная архитектура,
  //// Ну, я к этим всем точно не отношусь.
  но с одной примечательной особенностью.
  Свёрточные блоки в маленькой версии отличаются
  от свёрточных блоков в большой наличием bottleneck,
  отвечающего за сжатие числа каналов
  перед обработкой тензора свёрткой 3x3.
  Это позволяет уменьшить количество параметров,
  а следовательно увеличить глубину сети,
  что на практике даёт лучшие результаты при обучении.
  //// Т.е. глубокие сети (с большим количеством слоев)
  //// и в диффузионных моделях учатся лучше.
  //// А что значит лучше? Быстрее или качественнее?
  //// Интересно есть где-то работы по сопоставлению
  //// ширина "слоя" vs количество "слоев".
  
  Рис. Характерные блоки ResNet-18 (слева) и ResNet-50 (справа)
  
  CoAtNet - архитектура, совмещающая в себе как свёрточные блоки,
  так и блоки внимания.
  Основная её идея состоит в том,
  что на начальном этапе картинку стоит обрабатывать локальными свёртками,
  а уже сжатое её представление - слоями трансформера,
  обеспечивающими глобальное взаимодействие элементов изображения.
  
  Рис. Архитектура CoAtNet
  
  MaxViT - архитектура, уже практически полностью основанная трансформаторных блоках,
  но адаптированная для работы с картинками
  путём уменьшения квадратичной сложности self-attention.
  
  Рис. Архитектура MaxViT
  
  Идея использовать модели классификации была навеяна тем,
  что много хороших архитектурных решений берутся из моделей,
  которые показывают высокое качество на бенчмарке ImаgeNet.
  Однако в ходе наших экспериментов выяснилось,
  что перенос качества работает неоднозначно.
  Лучшая на задаче классификации, из представленных выше, архитектура MaxViT
  показывает уже не столь хорошие результаты в задаче генерации
  (после <превращения> её в U-Net).
  Исследовав таким образом все вышеперечисленные архитектуры,
  мы остановились на блоке ResNet-50 как основном блоке U-Net.
  При этом мы дополнили его ещё одним свёрточным слоем с ядром 3x3,
  позаимствовав эту идею из статьи BigGAN.
  
  В итоге архитектура Kandinsky 3.0 получилась из трёх основных частей:
  
  FLAN-UL2 - языковая Encoder-Decoder-модель.
  Для кодирования текста мы брали только Encoder,
  составляющий половину параметров всей архитектуры.
  Помимо предобучения на корпусе текстов,
  эта версия была также дообучена в стиле SFT
  на большом корпусе языковых задач.
  //// Все-таки языковая модель как-то дообучалась.
  Наши эксперименты показали, что такое дообучение
  существенно улучшает генерацию картинок.
  Во время обучения картиночной части модели
  языковая модель была полностью заморожена.
  //// Опять не понял когда и как дообучалась языковая часть.
  
  U-Net с архитектурой, проиллюстрированной ниже,
  состоящий преимущественно из блоков BigGAN-deep.
  Это позволило сделать архитектуру в два раза глубже
  в сравнении с иными диффузиями, основанными на обычных блоках BigGAN,
  при сохранении того же количества параметров.
  
  Рис. Архитектура U-Net (Kandinsky 3.0)
  //// Н-да. Рисунок трудночитаемый и, еще более, труднопонимаемый.
  //// Но похоже другого способа понять эти "алхимические рецепты",
  //// кроме как постоянное всматривание в такие картинки, найти не так просто.
  
  В качестве автоэнкодера мы использовали Sber-MoVQGAN,
  который хорошо зарекомендовал себя в предыдущих версиях.
  Подробнее про него прочитать можно в отдельной статье.
  https://habr.com/ru/companies/sberbank/articles/740624/
  При этом была взята самая большая версия модели с 270 млн параметров,
  которая показывала лучшие результаты в задаче восстановления изображения.
  
  ......
  
  Данные
  
  В ходе обучения (как обычно) использовался большой датасет
  пар <текст-картинка>, собранных в интернете.
  Эти данные проходили многочисленные фильтры:
  эстетичности картинки, соответствия картинки тексту,
  наличия дубликатов, фильтры разрешения и соотношения сторон.
  По сравнению с Kandinsky 2.2 мы расширили используемые наборы данных,
  обогатив их новыми данными, добавили изображения,
  содержащие российские сущности,
  а также изображения, описания к которым были сгенерированы
  при помощи современных мультимодальных моделей.
  
  Процесс обучения был разделён на несколько стадий,
  что позволило использовать больше обучающих данных,
  а также генерировать изображения различного размера.
  
  На первой стадии модель училась на изображениях
  с разрешением 256 ? 256 - это 1,1 млрд пар текст-картинка
  (размер батча 20, 600 тыс шагов, 100 Tesla A100).
  
  Затем для обучения использовались изображения
  в разрешении 384 ? 384 - это 768 млн пар текст-картинка
  (размер батча 10, 500 тыс шагов, 100 Tesla A100).
  
  После брались изображения
  в разрешении 512 ? 512 - это 450 млн пар текст-картинка
  (размер батча 10, 400 тыс шагов, 100 Tesla A100).
  
  Далее аналогичным образом - в обучение попадали изображения
  в разрешении 768 ? 768 - это 224 млн пар текст-картинка
  (размер батча 4, 250 тыс шагов, 416 A100).
  
  На финальной стадии обучения модель училась
  на изображениях в смешанном разрешении:
  768 ? ширина, высота ? 1024 - таких пар набралось 280 млн
  (размер батча 1, 350 тыс шагов, 416 A100).
  
  //// Вот интересно: такая последовательность обучения
  //// от простого к сложному, это находка авторов статьи,
  //// чье-то предложение, или сложившаяся практика
  //// именно для "диффузионок", а я просто "не в курсе".
  
  Результаты и примеры генераций
  
  .....
  
  //// Интересные примеры промптов. Но, как всегда, никакого хелпа.
  
  ......
  
  Результаты сравнения Kandinsky 3.0
  с другими известными text-to-image моделями.
  
  ......
  
  Одно из основных преимуществ модели Kandinsky 3.0 состоит
  в улучшенном понимании текстового запроса
  (заметная разница с Kandinsky 2.2).
  Кроме того, кратно улучшилось качество понимания запросов
  на темы отечественного культурного кода, например:
  
  ......
  
  Модель Kandinsky Inpainting
  
  Наша команда провела отдельную работу по разработке inpainting-модели,
  с помощью которой можно было бы редактировать изображения:
  менять в них необходимые объекты и целые области внутри изображения
  (непосредственно режим inpainting)
  или расширять границы изображения,
  тем самым создавать целые панорамы (режим outpainting).
  Задача inpainting намного сложнее, чем стандартная генерация,
  потому что модели нужно научиться генерировать полноценное изображение
  не только с учётом текста,
  но и с учётом известной части этого изображения (и дополнять его).
  
  Для обучения inpainting-части модели за основу взяли подход из GLIDE,
  который уже был ранее реализован в моделях семейства Kandinsky 2.X,
  а также в семействе моделей Stable Diffusion:
  входной слой U-Net модифицируется так,
  чтобы на вход дополнительно можно было подать image latent и mask.
  Таким образом, U-Net принимает на вход целых 9 каналов:
  4 для исходного latent, 4 для latent-изображения
  и дополнительный канал для маски.
  С точки зрения модификаций, в целом, это всё
  - далее обучение ничем не отличается от обучения
  стандартной диффузионной модели.
  
  Важной особенностью задачи является то,
  как генерируются маски и какой текст используется для обучения.
  Пользователи могут нарисовать либо маску кисточкой,
  либо новое изображение через outpаinting.
  Чтобы учесть то, как работает пользователь,
  при обучении мы создали специальные маски,
  которые имитируют его поведение:
  маски произвольной формы, маски, нарисованные кисточкой,
  маски различных реальных объектов,
  а также разные формы масок,
  использованные исследователями Adobe при разработке Generative Fill.
  С коллегами, которые разрабатывали последнюю модель,
  мы даже консультировались и смогли переняли их лучшие практики :)
  
  Как результат, модель хорошо справляется с заменой изображения,
  а также с его дополнением (см. примеры ниже).
  
  Примеры Inpainting
  
  .......
  
  Kandinsky Animation
  
  Мы также адаптировали модель Kandinsky 3.0
  для использования в пайплайне Deforum
  - таким образом, с помощью Kandinsky 3.0 теперь можно генерировать
  не только изображения, но и анимации.
  Подробнее с принципом работы режима анимаций можно познакомиться
  в одной из наших недавних статей.
  https://habr.com/ru/companies/sberbank/articles/766968/
  
  Основной сложностью интеграции новой модели
  стало различие в режимах добавления шума в процессе диффузии:
  у Kandinsky 2.2 шум добавляется по линейному закону (картинка сверху),
  в то время как у Kandinsky 3.0 - по косинусному (картинка снизу).
  Эта особенность потребовала некоторого количества экспериментов
  для успешной адаптации.
  //// Еще один интересный и загадочный момент.
  //// Известно, что "закон диффузии" может быть в принципе любым,
  //// но нигде не встречались исследования по их сопоставлению,
  //// а также объяснения причин, почему это приводит к "дополнительным усилиям".
  //// Ладно, запомним этот момент и будем искать дальше.
  
  Примеры анимаций
  
  ..........
  
  Вывод и планы
  
  Мы представили нашу новую архитектуру генерации изображений по тексту
  - Kandinsky 3.0.
  Значительно улучшили понимание текста и отечественного культурного кода
  в сравнении с нашими предыдущими моделями
  и обязательно будем продолжать двигаться в этом направлении.
  Что касается научной стороны,
  в наши планы входит создание ещё одной новой модели генерации,
  которая должна будет сказать своё новое слово на международной AI-арене.
  
  Область искусственного интеллекта и генеративного обучения
  открывает широкие просторы для дальнейшего развития
  (в частности, с точки зрения генерации полноценных видео- и 3D-сцен).
  При этом мы уверены, что это развитие в любом случае
  будет очень интересным со всех сторон,
  и, возможно, потребует смены взглядов
  на многие окружающие нас вещи.
  Нам, всему человечеству,
  ещё только предстоит познать всю силу генеративного обучения.
  Оставайтесь на нашей волне,
  чтобы не пропустить то, как будет меняться этот мир,
  в том числе нашими усилиями!
  
  Авторы и их вклад
  
  Модель Kandinsky 3.0 разработана командой Sber AI
  при партнёрской поддержке учёных из Института искусственного интеллекта AIRI
  на объединённых датасетах Sber AI и компании SberDevices.
  
  Коллектив авторов:
  Владимир Архипкин, Андрей Филатов, Анастасия Мальцева, Арсений Шахматов,
  Саид Азизов, Вячеслав Васильев, Игорь Павлов, Михаил Шойтов, Юлия Агафонова,
  Сергей Нестерук, Анастасия Лысенко, Илья Рябов, Ангелина Куц, Татьяна Паскова,
  София Кирилова, Михаил Мартынов, Сергей Марков, Андрей Кузнецов
  и Денис Димитров.
  
  ......
  
  //// Конец цитирования.
  
  24.11.2023 21:38
  
  И какие выводы можно сделать в отношении особенностей "диффузионок".
  Первый более менее понятный - структуры наиболее подходящие для них,
  пока еще только активно ищутся. Но ищутся в основном "на ощупь".
  Интересно, что процесс обучения почему-то желательно разделять на этапы,
  причем предыдущие этапы в чем-то проще, чем последующие.
  Было бы интересно узнать какие есть объяснения этому.
  В общем, придется более пристально разбирать различные диффузионные модели,
  чтобы хоть как-то закрыть пробелы в знаниях в этой области.
  
  Хорошо, попробуем с этой целью взглянуть на следущий анонс,
  связанный с предыдущим. Может быть какую-то крупицу знаний удастся ухватить:
  
  "Kandinsky Video - первая российская модель генерации видео по тексту".
  Автор: kuznetsoff87 (Андрей Кузнецов)
  https://habr.com/ru/companies/sberbank/articles/775554/.
  22 ноя 2023 в 12:00
  
  //// Начало цитирования.
  
  "Если несколько предметов, постоянно меняющих форму и положение,
  будут последовательно возникать перед глазами
  через очень короткие промежутки времени
  и на маленьком расстоянии друг от друга,
  то изображения, которые они вызывают на сетчатке,
  сольются, не смешиваясь,
  и человеку покажется, что он видел предмет,
  постоянно меняющий форму и положение."
  Жозеф Плато, август 1833 года
  
  В недавней статье
  https://habr.com/ru/companies/sberbank/articles/766968/
  мы рассказали о возможности создания анимированных видеороликов
  на основе комбинации синтеза изображений
  и различных способов преобразования этих изображений
  (сдвиги в стороны, масштабирование и т. д.).
  Сегодня же речь пойдёт про нашу новую технологию синтеза
  полноценного видео по текстовому описанию,
  которую мы назвали Kandinsky Video
  (для затравки пара примеров приведена на рисунке 1).
  
  Результатом проведённых за последние полгода исследований
  стала единая двухэтапная архитектура синтеза видео по текстовым описаниям,
  о которой я и расскажу далее.
  Сразу предупрежу, что сейчас мы находимся на первом витке
  развития таких способов генерации видео
  (как когда-то были на одной ступени Kandinsky 1.0 и DALL"E),
  поэтому о высоком качестве результата речь пока не идёт.
  Тем не менее, степень согласованности кадров на видео,
  визуальное качество объектов на ключевых кадрах,
  а также автоматические метрики позволяют утверждать,
  что наше решение сейчас является одним из лучших в мире.
  Более того, Kandinsky Video - первая в России архитектура
  полного цикла синтеза видео по тексту.
  
  Архитектура
  
  Архитектура Kandinsky Video основана на латентной диффузии,
  //// Опять "латентность". Вроде как это понятие относится
  //// к чему-то внутреннему/сокрытому представлению,
  //// но тогда причем тут "диффузия". Опять надо разбираться.
  о чём подробно описано в статье на arXiv.
  https://arxiv.org/abs/2311.13073
  Разработанная модель представляет из себя двухэтапную процедуру:
  
  Генерация ключевых кадров для управления основной сюжетной линией видео.
  
  Синтез интерполяционных кадров
  позволяет улучшить плавность движений объектов
  благодаря генерации дополнительных кадров.
  
  Такое разделение на этапы позволяет
  сохранять согласованность с текстовым описанием на протяжении всего видео
  как по содержанию, так и по динамике.
  В итоге наша модель способна генерировать по тексту
  согласованное по времени видео в разрешении 512 ? 512 пикселей.
  
  Рисунок 2. Общая схема модели Kandinsky Video.
  //// Ну, эта схема вроде понятна.
  //// Особенно проясняет структуру название ключевого блока:
  //// "Key Latents Generator UNet3D".
  
  На рисунке 2 первый этап выделен зелёным цветом, а второй - оранжевым.
  Чтобы сосредоточиться на ключевых особенностях,
  я исключил из описания текстовый энкодер и декодер
  на основе хорошо зарекомендовавшего себя декодера изображений MoVQ-GAN
  (используем его со времён Kandinsky 2.1, даже есть отдельная статья).
  https://habr.com/ru/companies/sberbank/articles/740624/
  
  ......
  
  Этап 1. Генерация ключевых кадров
  
  Генерация ключевых кадров основана на предобученной
  латентной диффузионной модели text-to-image Kandinsky 3.0.
  При синтезе ключевых кадров мы используем веса модели
  для инициализации пространственных слоёв.
  При этом в архитектуру добавляются специальные блоки
  для учёта темпоральных связей.
  Во всех экспериментах мы замораживаем веса U-Net Kandinsky 3.0
  и обучаем только темпоральные компоненты.
  //// Собственно, вот такие "компоненты" и являются "ключом"
  //// для добавления требуемых свойств.
  //// И весь вопрос в том, какую структуру для них выбрать, и как их "обучать".
  В рамках общей архитектуры нам удалось исследовать
  два принципиально различных способа учёта корреляции кадров во времени:
  
  с помощью темпоральных свёрточных слоёв и слоёв темпорального внимания;
  
  с помощью темпоральных блоков.
  
  Первый тип работы с темпоральной размерностью
  был широко представлен в предыдущих зарубежных работах по text-to-video.
  А второй подход, который собственно и позволил
  добиться высоких качественных показателей,
  является нашей оригинальной разработкой.
  Мы рассмотрели три типа темпоральных блоков,
  и все они, спойлер, превзошли по качеству традиционный подход со слоями,
  но об этом далее.
  Схемы всех методов изображены на рисунке 3.
  
  Рисунок 3. Традиционный подход ко внедрению обучаемых темпоральных блоков
  между замороженными пространственными блоками (слева).
  Подход Kandinsky Video для выделения темпоральных компонентов
  в отдельные блоки (в центре).
  Разные типы темпоральных свёрток и внимания (справа):
  в 1D-слоях (справа вверху) модель видит значение текущего пикселя
  в разные моменты времени,
  в 3D-слоях (справа снизу) модель видит соседние пиксели для текущего.
  
  Этап 2. Генерация интерполяционных кадров
  
  Синтез интерполяционных кадров позволяет добиться плавности генерируемых движений.
  В противном случае после первого этапа мы получили бы просто слайд-шоу.
  Мы применяем интерполяцию в латентном пространстве,
  чтобы предсказать набор из трёх кадров
  между каждой парой последовательных ключевых кадров.
  Если кратко: входные свёрточные слои принимают
  три зашумлённых латентных тензора,
  соответствующих интерполированным кадрам,
  и пару ключевых кадров по бокам.
  На выходе свёртки расшумляют интерполированные кадры.
  Приходится адаптировать базовую модель генерации изображений
  с помощью добавления темпоральных свёрток
  после каждой пространственной свёртки (рисунок 4).
  
  Рисунок 4. Архитектура модели синтеза интерполяционных кадров
  на примере пары ключевых кадров.
  
  Данные
  
  Для обучения моделей генерации ключевых и интерполяционных кадров
  мы собрали набор из 220 тысяч пар текст-видео.
  Тестировали разрабатываемую модель на двух бенчмарках:
  UCF-101 (набор видео, содержащих различные действия
  и полнотекстовые описания этих действий)
  и MSR-VTT (набор описаний видеороликов).
  Для обучения декодера мы используем 80 тысяч видео
  из внутреннего набора данных,
  а тестируем модель на одной из частей набора Vimeo90k.
  В задаче обучения на этапе интерполяции
  мы прореживаем кадры со случайным количеством пропускаемых кадров.
  Для обучения декодера используются последовательности,
  состоящие из 8 кадров.
  
  ......
  
  Метрики и количественные результаты
  
  ........
  
  Из таблицы 2 видно, что темпоральные блоки превосходят по качеству
  темпоральные слои, внедрённые в блоки предобученных пространственных слоёв.
  Кроме того, наша лучшая модель заняла второе место с точки зрения CLIPSIM и FVD
  и первое место среди open source-решений.
  
  .......
  
  Эффективность
  
  Основную нагрузку на вычислительные ресурсы возлагает этап интерполяции
  
  .......
  
  Заключение
  
  В этой статье мы описали нашу новую архитектуру Kandinsky Video
  на основе модели Kandinsky 3.0 для генерации видео по тексту.
  Наша модель побеждает с точки зрения FVD и CLIPSIM среди моделей
  с открытым исходным кодом.
  Безусловно, сейчас путь в области синтеза видео только начинается,
  но первый шаг, на мой взгляд, получился достаточно широким.
  Можно представить, что в скором будущем мы уже будем смотреть фильмы,
  синтезированные с помощью AI,
  часть спецэффектов может быть заменена на генеративные,
  актёры могут быть созданы с точностью до деталей,
  которые хочет видеть режиссёр,
  и многое другое.
  Самые сложные сцены в кинематографе
  (свободное падение, замедленная съёмка и др.)
  можно будет реализовывать на домашнем ПК с доступом в интернет.
  С точки зрения исследований,
  впереди у нас огромный ряд задач,
  связанных как с повышением качества кадров,
  так и с улучшением динамичности и плавности движений,
  в том числе за счёт исследования способов обучения модели физике движения тел.
  В недалёком будущем мы расскажем о ещё одном исследовательском направлении,
  которое удалось успешно прокопать за последние пару месяцев.
  
  .......
  
  Авторы и их вклад
  
  Модель Kandinsky Video разработана и исследована командой Sber AI
  при партнёрской поддержке учёных из Института искусственного интеллекта AIRI
  на объединённом наборе данных Sber AI и компании SberDevices.
  
  Коллектив авторов:
  Владимир Архипкин, Зейн Шахин, Вячеслав Васильев, Анастасия Мальцева,
  Игорь Павлов, Михаил Шойтов, Юлия Агафонова, Арсений Шахматов, Саид Азизов,
  Сергей Нестерук, Анастасия Лысенко, Ангелина Куц, Татьяна Паскова,
  Сергей Марков, Андрей Кузнецов и Денис Димитров.
  
  .......
  
  //// Конец цитирования.
  
  Не знаю как Вы, но я совсем не понял из этой презентационной статьи
  два принципиальных вопроса.
  Во-первых, как получается обеспечить генерацию последовательности "опорных" кадров?
  Во-вторых, как влияет на интерполяцию промежуточных кадров
  изначально "диффузионная" природа используемой text-to-image модели?
  
  Первый вопрос вроде как описан, что в модель добавляются
  не специализированные слои, а специализированные темпоральные блоки,
  но почему и как именно они работают, осталось "за кадром".
  Кстати, что-то сходное было и в предыдущей статье.
  Там тоже была сделана ставка не на слои, а на блоки,
  и тоже без объяснения, почему и как это работает.
  Настоящая "ML-алхимия" считает бестактным вопрос "почему это работает?".
  "ML-алхимия" предполагает, что нужно просто верить
  или экспериментировать самому.
  Но конкретно в данном вопросе, "слои vs блоки" похоже
  "общественное мнение" начинает склоняться в сторону "блоков".
  
  По второму вопросу есть предположение, что "диффузионная природа"
  основной "рабочей лошадки", все-таки,
  как-то способствует более качественной интерполяции.
  "Но это не точно".
  
  В общем, какой-то новой информации получилось немного.
  "В грамм добыча, в годы труды".
  Но с чего-то начинать надо, может быть собственно из-за незнания
  и не смог уловить что-то нетривиальное.
  Ладно, будем дальше "грызть гранит ИИ-науки".
  
  
  ========
  
  25.11.2023 18:03
  
  А чем занимаются партнеры разработчиков из Сбера?
  В оглавление.
  
  В предыдущем материале рассматривались последние работы
  команды разработчиков из Сбера,
  в которых упоминались и их партнеры из Института искусственного интеллекта AIRI.
  Думаю, что не безинтересно поинтересоваться, чем и как занимается этот институт,
  особенно если выясняется, что и он ориентирован на мультимодальные системы,
  но немного под другим ракурсом.
  Если команда из Сбера акцентируется на "графических" вопросах мультимодальности,
  и, соответственно, ищет лучшие структуры/решения в области "видеопредставления",
  то команда из AIRI ищет более эффективные пути стыковки больших языковых моделей
  с различными "модальностями".
  
  "OmniFusion: выходим за границы текста"
  Автор: Razant (Anton Razzhigaev)
  https://habr.com/ru/companies/airi/articles/775108/.
  22 ноя 2023 в 14:30
  
  Заметка не очень большая и достаточно информативная,
  так что приведу ее почти полностью
  
  /// Начало цитирования.
  
  Кто-то ещё сомневается, что в мире машинного обучения происходит революция?
  Уверен, мы являемся свидетелями преобразования
  привычного взаимодействия с данными, поиска информации,
  да и вообще работы как таковой.
  Ведь умные ассистенты (ChatGPT, GigaChat, Bard)
  готовы взять на себя даже самые сложные задачи.
  //// Естественно, за "некоторую мзду".
  
  Но не всегда возможно сформулировать проблему в виде текстового запроса,
  иногда требуется информация из других <модальностей> - картинка, звук, 3D и тд.
  //// Но текстовое описание этой информации практически всегда не бесполезно.
  Ниже я разберу какие именно есть способы соединения больших языковых моделей (LLM)
  с дополнительными форматами данных,
  а также опишу как устроена наша новая модель OmniFusion.
  
  Мультимодальные модели
  
  Принципиально, я бы выделил две развилки
  в создании мультимодальных умных ассистентов:
  
   Мультимодальная архитектура,
   которая сразу обучается на разнообразных форматах данных
   (Kosmos-1, RUDOLPH, ONE-PEACE)
  
   Сильная языковая модель, предобученная исключительно на тексте,
   затем обучается понимать дополнительные модальности.
  
  Наиболее перспективен, да и в целом более простой в реализации,
  именно второй вариант.
  Поэтому про такие подходы, базирующиеся на сильных языковых моделях,
  я расскажу подробнее.
  
  Как языковую модель сделать мультимодальной
  
  Идейно все решения тут очень похожи
  - есть некоторая большая языковая модель,
  которая берёт на себя роль главного мыслительного центра,
  и есть энкодеры дополнительных модальностей,
  например: для картинок - ViT, для звука Wav2Vec и тп.
  Информация из новой модальности при помощи таких
  (обычно предобученных и замороженных) энкодеров
  попадает в текстовую модель через обучаемые адаптеры (FROMAGe, LLaVA)
  или обучаемый cross-attention (Flamingo).
  //// Надо будет поискать внятное описание этих решений.
  При этом в некоторых решениях языковая модель
  может быть заморожена (FROMAGe),
  либо дообучаться вместе с адаптером (miniGPT-4, Shikra, LLaVA).
  
  Забавно, но даже в случае,
  когда языковая модель НЕ дообучается,
  в ней всё равно просыпаются <мультимодальные нейроны>,
  которые связывают текстовые и визуальные (не только) концепты.
  //// Это не "забавно", а интересно в плане направления исследований.
  //// Как такие "мультимодальные нейроны" формируются, и как они себя проявляют.
  То есть большие LM очень хорошо подходят для такого сетапа,
  так как они выучивают внутри себя структурированную картину мира,
  а не просто запоминают тонны текста в режиме стохастического попугая.
  //// Вот интересный акцент, который пока "отвергается"
  //// большинством "дата-сатанистов", так сказать, по определению.
  //// Но "ничто не вечно под луной".
  Но это только косвенное свидетельство,
  а однозначно ответить,
  почему это работает и как
  пока никто не может.
  Но от этого даже интереснее!
  //// Приятно видеть мысли, схожие со своими.
  
  OmniFusion
  
  Для создания своей мультимодальной модели
  мы решили взять самые лучшие и наиболее стабильные практики
  - сильная LLM, мощный адаптер, спецтокены новых модальностей
  и многоступенчатое инструктивное обучение
  с постепенной разморозкой LLM.
  
  Рисунок 1 - Архитектура модели OmniFusion
  //// Картинка полностью "англифицирована" - четкий маркер,
  //// для какой аудитории она предназначена, впрочем, как и вся статья.
  
  Устройство модели
  
  Мозговое ядро OmniFusion - это последняя версия GigaChat-7B.
  Для начала мы решили сосредоточиться только на картинках,
  поэтому в качестве визуального энкодера взяли CLIP-ViT-L,
  т.к. по нашим тестам он показал наиболее полную передачу информации
  из картинок в языковую модель
  (возможно из-за бoльшего количества эмбеддингов).
  //// Интересно, почему не взята модель партнеров от Сбера?
  //// Ориентация на "open source" или что-то другое?
  //// Или по критериям в используемых тестах энкодер от МК пока проигрывает?
  
  Из визуального энкодера мы берём все эмбеддинги до пуллинга,
  кроме CLS-токена (576 штук) и отображаем их
  в 576 текстовых эмбеддингов подающихся на вход языковой модели
  вместе с текстовым запросом.
  Для такого отображения мы используем однослойный, четырехголовый трансформер
  - это даёт результаты лучше, чем всего лишь один линейный слой
  как в Shikra и Fromage, либо MLP как в LLaVa.
  Для более качественного выделения визуальной <инъекции>
  в последовательности текстовых эмбеддингов LLM
  и в качестве задела на добавление большего количества модальностей
  мы используем обучаемые спецтокены начала и конца картинки.
  //// Ничего не понимаю в этом сленге.
  
  Процесс обучения
  
  Размораживать языковую модель считается крайне рискованной операцией,
  так как это неизбежно приводит к деградации в текстовом домене
  (да и в целом к ослабеванию модели в смысле качества генерации,
  если делать это слишком резко).
  Учитывая сказанное выше, обучение OmniFusion делится на 2 этапа:
  
   Предобучение адаптера на задаче Image Captioning.
   Перед тем как приступить к дообучению LLM,
   нужно максимально качественно подготовить адаптер,
   связывающий модальности, поэтому тут обучается только он
   (и эмбеддинги спецтокенов).
   На этом этапе мы использовали большое количество
   НЕ инструктивных данных из фильтрованных датасетов
   Conceptual Captions-4M и LAION.
   OmniFusion на данном этапе учится предсказывать описания картинок,
   а лосс функция - это обычная кросс-энтропия.
   Гиперпараметры: 1 эпоха, ?600k примеров (bs = 128),
   ?45 часов на 2x Tesla A100 (80Gb)
  //// Опять "спецтермины". Но общий смысл угадывается в формулировке
  //// "OmniFusion на данном этапе учится предсказывать описания картинок".
  
   После того, как адаптер научился отображать визуальные эмбеддинги ViT
   в пространство текстовых эмбеддингов языковой модели
   пришла пора разморозить GigaChat,
   чтобы он лучше понимал диалоговый формат, сложные запросы и даже OCR.
   На данном этапе помимо адаптера целиком размораживается
   и сама языковая модель (но с маленьким LR).
  //// LR - (learning rate) - скорость обучения.
   При этом лосс мы учитывали только для ответных реплик,
  //// "лосс" - оценка ошибки реакции модели (жаргон).
   иначе модель будет учиться задавать вопросы, а не отвечать на них.
   Состав датасетов второго этапа обучения представлен на диаграмме.
   Гиперпараметры: 1 эпоха, ?620k примеров (bs = 128),
   ?52 часов на 2 ? Tesla A100 (80Gb)
  
  Рисунок 2 - Графики лосса на обеих фазах обучения
  //// Интересен момент очень резкого/скачкообразного уменьшения ошибки
  //// буквально на самых первых шагах обучения,
  //// что для обычных графиков обучения достаточно НЕ характерно.
  //// Обычно зависимости в лучшем случае экспоненциальные.
  //// Возможно, именно эта трудно интерпретируемая особенность графиков
  //// и вызвала предположение о "мультимодальных нейронах",
  //// которые активизируются при таком обучении/функционировании.
  /////// Ой, как это интересно. Но где найти подробности?
  /////// А ведь это может открыть очень неожиданные направления дообучения.
  
  Рисунок 3 - Состав текстово-картиночного датасета для второй стадии обучения
  //// Используются общедоступные библиотеки датасетов,
  //// а представляется, что имеет смысл еще и делать
  //// какие-то свои специализированные датасеты,
  //// чтобы лучше оценить восприимчивость такой структуры
  //// к специализированным задачам.
  //// Ведь очевидно, что для задач "общего назначения" данная система
  //// не выдержит никакой конкуренции просто по "организационным причинам".
  
  Результаты
  
  Мы сравнили OmniFusion с последними мультимодальными SOTA моделям.
  Наша модель получилась довольно сильной,
  обходит QWEN-VL-7b, LLaVa-1.5-7b и LLaVa-13b
  не только на генеративных метриках (см. круговую диаграмму),
  но и на классификационном бенчмарке VisualDialog (см. таблицу).
  Но ещё есть куда расти:
  например, LVIS победить пока не получилось.
  Также немного проседают OCR возможности нашей модели,
  но мы над этим уже работаем.
  
  ......
  
  Планы
  
  В ближайшее время мы выложим публичную версию OmniFusion,
  базирующуюся на открытой языковой модели.
  Также мы начали готовить версию,
  которая понимает русский язык,
  //// Т.е. сейчас она "великий и могучий" "не разумеет"?
  работает на энкодерах ImageBind
  и принимает большее количество модальностей (звук, 3D, видео).
  Следите за обновлениями на GitHub!
  
  Авторы
  
  Обучением модели занималась научная группа FusionBrain Института AIRI
  при участии учёных из Sber AI.
  
  Колле?тив авторов:
  Антон Разжигаев, Елизавета Гончарова, Матвей Михальчу?, Ма?сим Кур?ин,
  Ирина Абдуллаева, Юлия Агафонова, Денис Димитров и Андрей Кузнецов.
  
  ......
  
  //// Конец цитирования.
  
  Наверно, главное, что лично я вынес из этой заметки,
  что идея построения обучения на оценке "предсказания" весьма продуктивна,
  в самых разных структурах ИИ-систем, и схемах обучения.
  Это первое.
  
  А второе, есть возможность, соединить ее с "диффузионным обучением"
  и обучением "от простого к сложному"
  Авторы ничего такого не озвучивают, но учитывая,
  что команды, разрабатывающие "Модели Kandinsky" и OmniFusion,
  во многом "пересекаются", то очевидно,
  что такие "банальные" идеи или уже тестируются, или вот-вот будут озвучены.
  
  И в-третьих, если хорошо задуматься о "спящих мультимодальных нейронах",
  то и в части "направленного дообучения" могут открыться
  очередные "зияющие перспективы".
  Ведь если есть "мультимодальные нейроны", точно также могут быть
  и "антимультимодальные свойства" у конкретной структуры.
  
  В общем, будем продолжать наблюдение "на этом фланге",
  и прорабатывать темы "жаргонизмов"/"спецтерминов" -
  приходится привыкать, что такого рода статьи в технической части
  рассчитаны на очень узкую аудиторию, хотя такие подробности,
  могут быть интереснее основной части материала.
  "Дьявол кроется в деталях".
  
  
  ========
  
  07.12.2023 20:08
  
  Введение в метод диффузии для "чайников".
  В оглавление.
  
  Если уж пытаться разобраться с методом диффузии, то надо начинать с "азов",
  или с какого-то хорошего вводного материала.
  
  "Введение в диффузионные модели для генерации изображений
  - полное руководство".
  Автор: dimanosov007
  https://habr.com/ru/articles/713076/.
  26 янв 2023 в 17:14
  
  Автор оригинала: Vaibhav Singh, Sovit Rath
  https://learnopencv.com/image-generation-using-diffusion-models/#Image-Search-&-Reverse-Image-Search
  
  //// Начало цитирования.
  
  Недавние достижения в области генерации изображений
  на основе искусственного интеллекта,
  возглавляемые диффузионными моделями,
  такими как Glide, Dalle-2, Imagen и Stable Diffusion,
  взяли мир "искусственного интеллекта" штурмом.
  Создание высококачественных изображений на основе текстовых описаний
  - сложная задача.
  Это требует глубокого понимания основного значения текста
  и способности генерировать изображение,
  соответствующее этому значению.
  В последние годы диффузионные модели стали мощным инструментом
  для решения этой проблемы.
  
  .......
  
  В этой статье рассмотрим следующие темы в понятной и простой форме,
  понятной для любого новичка
  в захватывающем мире диффузионных моделей для генерации изображений.
  
   Кратко обсудим пространство моделей генерации изображений
   на основе глубокого обучения,
   а также плюсы и минусы различных используемых методов.
  
   Объясним в простых терминах, что такое "диффузия"
   и как работают диффузионные модели.
  
   Представим высокоуровневый обзор четырех
   наиболее популярных диффузионных моделей:
  
   Dall-E 2 от OpenAI
  
   Imagen от Google
  
   StabilityAI's Stable Diffusion
  
   Midjourney
  
   Наконец, обсудим некоторые приложения и веб-сайты,
   которые предоставляют услуги, связанные с диффузионными моделями,
   или используют диффузионные модели в качестве сервиса.
  
  .......
  
  Что такое генеративные модели?
  
  Большинство задач машинного обучения и глубокого обучения, которые вы решаете,
  концептуализируются из Генеративных и дискриминационных модели.
  Проще говоря, "генеративные модели"
  - это статистические модели, предназначенные для "генерации / синтеза данных".
  Их задача состоит в том,
  чтобы "преобразовать шум в репрезентативную выборку данных".
  //// Вот это формулировка о превращении ШУМА во что-то конкретное,
  //// лично у меня, и вызывает наибольшую трудность в понимании метода "диффузии".
  
  .....
  
  Четыре хорошо известные модели генерации изображений,
  основанные на глубоком обучении::
  
   Вариационные автоэнкодеры (VAE)
  
   Flow-based models
  
   Генеративные состязательные сети (GAN).
  
   Diffusion (недавняя тенденция)
  
  Рис. Изображение на высоком уровне отражает механизмы всех 4 алгоритмов.
  Источник: https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
  
  Эти модели сначала обучаются,
  чтобы научиться моделировать "распределение данных" (обучающих данных).
  После обучения модель знает,
  как аппроксимировать исходное распределение данных,
  и может использовать его для генерации новых данных (изображений) по желанию.
  
  ------------
  
  Предшественником понимания "Variational Autoencoders" являются "Autoencoders".
  Основной задачей автоэнкодеров является сжатие данных.
  Архитектура автоэнкодеров довольно проста.
  Оно содержит три компонента:
  
   Кодировщик
  
   Узкое место (ответственное за сжатие)
  //// Как часто отмечается в текстах по структурам нейронок,
  //// такое "сжимание размерности внутреннего представления"
  //// "почему-то" существенно повышает качество работы нейронок.
  
   Декодер
  
  Дополнительным преимуществом этой конструкции является то,
  что мы можем использовать Автоэнкодеры для шумоподавления изображения.
  
  В автоэнкодерах распределение сжатых данных / скрытых данных "без ограничений".
  Данные сжимаются таким образом, что ошибка восстановления минимальна.
  Это приводит к серьезному недостатку,
  т.е. потому, что у нас нет представления / информации
  о распределении скрытого,
  поэтому генерировать новые выборки (используя только декодер)
  сложно.
  //// Не могу пока "расшифровать" смысл этого абзаца.
  
  В вариационных автоэнкодерах это больше не проблема.
  К уровню узких мест добавляется ограничение,
  поэтому сжатые данные кодера должны максимально точно имитировать
  (простое, подобранное вручную) распределение вероятностей
  (обычно стандартное гауссово).
  Чтобы сгенерировать новые выборки,
  мы можем просто выбрать точку из выбранного распределения вероятностей
  и передать ее в декодер.
  //// И этот тоже. Нужно искать разъяснения где-то еще.
  
  -----------
  
   На момент написания статьи мы все еще не определились
   с единой моделью для всех задач,
   связанных с генеративным моделированием,
   и это справедливо.
   В каждой области применения есть свои проблемы,
   и люди обычно используют различные методы для их решения.
   Все четыре вышеперечисленные модели имеют проблемы,
   которые хорошо иллюстрируются на gif ниже.
  
  Рис. Решение трилеммы генеративного обучения
  Источник: https://nvlabs.github.io/denoising-diffusion-gan/
  
  ......
  
  -----------
  
  Созданные в 14 году Иэном Гудфеллоу генеративные состязательные сети (GAN)
  были в значительной степени нормой для генерации образцов изображений.
  
  Было создано множество вариаций оригинального GAN, таких как:
  
   Условный GAN (cGAN):
   управление классом / категорией генерируемых изображений.
  
   Глубокая сверточная GAN (DCGAN):
   архитектура значительно улучшает качество GAN
   с использованием сверточных слоев.
  
   Преобразование изображения в изображение с помощью Pix2Pix:
   преобразование изображений из одного домена в другой
   путем изучения сопоставления между входом и выходом.
  
  Сейчас, в эпоху диффузионных моделей,
  исследователи обязательно используют знания,
  накопленные за годы работы над GaN.
  Это одна из основных причин такого быстрого прогресса в диффузионных моделях
  за такой короткий промежуток времени.
  
  -----------
  
  Что такое диффузия?
  
  Прежде чем мы разберемся с диффузионными моделями,
  давайте быстро разберемся в значении термина "диффузия".
  Диффузия (или диффузионный процесс) является хорошо известной
  и изученной областью неравновесной статистической физики.
  
  В неравновесной статистической физике процесс диффузии относится к:
  
   "Перемещение частиц или молекул из области высокой концентрации
   в область низкой концентрации,
   обусловленное градиентом концентрации".
  
  Рис. Источник:
  https://chem.libretexts.org/Under_Construction/Purgatory/Kinetic_Theory_of_Gases
  
  Процесс диффузии обусловлен случайным движением частиц или молекул,
  описываемым законами термодинамики и статистической механики.
  
  Что такое диффузионные модели?
  
  В простых терминах
  - "Диффузионные модели представляют собой класс
  вероятностных генеративных моделей,
  которые превращают шум в репрезентативную выборку данных".
  
  Используя диффузионные модели,
  мы можем генерировать изображения как условно,
  так и безоговорочно.
  
   Безусловная генерация изображений просто означает,
   что модель преобразует шум
   в любую "случайную репрезентативную выборку данных".
   Процесс генерации не контролируется и не управляется,
   и модель может генерировать изображение любого характера.
  
   Условная генерация изображений
   - это когда модели предоставляется дополнительная информация
   с помощью текста (text2img)
   или меток классов (как в CGANs).
   Это случай управляемой или управляемой генерации изображений.
   Предоставляя дополнительную информацию,
   мы ожидаем, что модель будет генерировать
   определенные наборы изображений.
   Например, вы можете обратиться к двум изображениям в начале сообщения.
  
  В этом разделе мы сосредоточимся на процессе
  "безусловной генерации изображений".
  
  Рис. Безусловная генерация изображений с использованием диффузионной модели
  на этапе вывода.
  
  Немного истории:
  
  Диффузионные модели в глубоком обучении были впервые представлены
  Соул-Дикштейном и др. в оригинальной статье 2015 года
  "Глубокое неконтролируемое обучение
  с использованием неравновесной термодинамики".
  К сожалению, это оставалось за кулисами некоторое время.
  
  Но в 2019 году Сонг и др. опубликовал статью
  "Генеративное моделирование путем оценки градиентов распределения данных",
  использующую тот же принцип, но другой подход.
  В 2020 году Хо и др. опубликовал популярную в настоящее время статью
  "Вероятностные модели рассеяния шума"
  (сокращенно DDPM).
  
  После 2020 года исследования в области диффузионных моделей начались ??.
  За относительно короткое время был достигнут значительный прогресс
  в создании, обучении и улучшении генеративного моделирования
  на основе диффузии.
  
  Как работают диффузионные модели генерации изображений?
  
  Общий принцип работы диффузионных моделей действительно прост для понимания.
  
  Метод диффузии можно резюмировать следующим образом:
  
  \\\ ... систематически и медленно разрушать структуру в распределении данных
  \\\ посредством итеративного процесса прямого распространения.
  \\\ Затем мы изучаем процесс обратной диффузии,
  \\\ который восстанавливает структуру данных,
  \\\ создавая очень гибкую и послушную генеративную модель данных.
  \\\ Этот подход позволяет нам быстро изучать, отбирать и оценивать
  \\\ вероятности в глубоких генеративных моделях ...
  \\\
  \\\ - Глубокое неконтролируемое обучение
  \\\ с использованием неравновесной термодинамики, 2015
  
  Давайте сделаем шаг назад и посмотрим на GIF-изображение газовой диффузии выше.
  Когда банку открывают, молекулы зеленого газа быстро выходят из банки
  и попадают в окружающую среду.
  По сути, это диффузия.
  С течением времени концентрация молекул зеленого газа внутри и снаружи сосуда
  выравнивается.
  Распределение молекул газа полностью изменилось по сравнению с тем,
  как банка была открыта.
  Обратить вспять этот процесс - непростая задача;
  именно здесь на сцену выходит неравновесная статистическая физика.
  
  Идея, используемая в неравновесной статистической физике,
  заключается в том,
  что мы можем постепенно преобразовывать одно распределение в другое.
  //// Вот, наверно, первая ключевая фраза, которую раньше не встречал.
  //// Т.е. преобразуется РАСПРЕДЕЛЕНИЕ в первую очередь,
  //// а преобразование самого изображения - это следствие.
  В 2015 году Sohl-Dicktein и др., вдохновленные этим,
  создали "Диффузионные вероятностные модели"
  или, короче говоря, "диффузионные модели",
  основываясь на этой важной идее.
  
  Они строят "генеративную цепочку Маркова,
  которая преобразует простое известное распределение
  (например, гауссово)
  в целевое (данные) распределение с использованием процесса диффузии".
  //// А вот это, на мой взгляд, раскрытие ключевого тезиса.
  
  Цепочка Маркова просто означает,
  что состояние объекта / объектов в любой точке цепочки
  зависит исключительно от предыдущего объекта / объектов.
  //// А это механизм реализации метода диффузии. И где тут шум?
  
  Теперь мы можем сделать это двумя способами,
  т. е. мы также можем преобразовать (неизвестное) распределение
  наших обучающих данных в другое распределение.
  И, чтобы добавить вишенку на вершине,
  оба (преобразование данных в шум и преобразование шума в данные)
  могут быть смоделированы с использованием одной и той же функциональной формы.
  Это именно то, что делается в диффузионных моделях.
  //// Но это же означает, что цепочка преобразований как раз не случайная,
  //// просто она приводит к такой "записи" исходного изображения,
  //// что по статистическим характеристикам это преобразованное изображение
  //// очень похоже на шум. Точно также как "цветовые пятна"
  //// на голографической пластинке тоже выглядят как случайный "шум",
  //// до тех пор пока их не "осветили" лазером с той же длиной волны,
  //// что и при записи.
  //// Т.е. "цепочка Маркова" вполне может считаться математическим аналогом
  //// голографической записи/воспроизведения.
  //// Т.е. Диффузия это на самом деле "цифровая голография"?
  
  Авторы описывают, что -
  
  \\\ "Наша цель - определить прямой (или логический) процесс распространения,
  \\\ который преобразует любое сложное распределение данных
  \\\ в простое, понятное распределение,
  \\\ а затем изучить обращение этого процесса распространения за конечное время,
  \\\ которое определяет наше генеративное распределение модели".
  \\\
  \\\ - Глубокое неконтролируемое обучение
  \\\ с использованием неравновесной термодинамики, 2015
  
  Структура (распределение) исходного изображения постепенно разрушается
  путем добавления шума,
  //// "Добавлением шума" или "преобразованием Маркова"
  //// с использованием требуемого "вероятностного распределения"?
  а затем с использованием модели нейронной сети для восстановления изображения,
  т. е. удаления шума на каждом шаге.
  //// Т.е., наверно, надо уточнить "диффузия" не "простая голография"
  //// а "вероятностная".
  //// Это мне даже больше нравится. Потенциал больше,
  //// И когерентностью можно не заморачиваться.
  //// Кстати, некогерентная голография тоже существует.
  Выполняя это достаточное количество раз и с хорошими данными,
  модель в конечном итоге научится оценивать
  базовое (исходное) распределение данных.
  Затем мы можем просто начать с простого шума
  //// А вот этот момент мне пока не очень ясен. Действительно с любого шума?
  //// Или все-таки что-то нужно еще чтобы получилось хотя бы просто похожее,
  //// и тем более что-то конкретное?
  и использовать обученную нейронную сеть
  для создания нового изображения,
  представляющего исходный обучающий набор данных.
  
  Рис. Иллюстрация процесса прямой и обратной / обратной диффузии
  
  Мы только что описали два основных процесса / этапа,
  выполняемых каждой диффузионной моделью.
  Не вдаваясь в математические подробности,
  давайте рассмотрим их немного подробнее
  и воспользуемся приведенным выше изображением в качестве ссылки.
  
   Прямое распространение:
  
   Исходное изображение (x 0) медленно итеративно искажается
   (цепочка Маркова)
   путем добавления (масштабированного гауссова) шума.
  
   Этот процесс выполняется для некоторых временных шагов T, т.е. x T.
  
   Изображение на временном шаге t создается: xt-1 + ?t-1 (шум)  xt
  
   На этом этапе модель не задействована.
  
   В конце этапа прямой диффузии Xt,
   из-за итеративного добавления шума,
   мы остаемся с (чистым) зашумленным изображением,
   представляющим "изотропный гауссовский".
  //// Ключевой вопрос в том, что сохраняются ли какие-то "свернутые признаки"
  //// исходного изображения в "зашумленной картинке", так сказать
  //// в голографической форме, с общим распределением, похожим на "изотропный гауссовский"?
  //// Или это действительно "белый шум"?
   Это просто математический способ сказать,
   что у нас есть стандартное нормальное распределение,
   и дисперсия распределения одинакова по всем измерениям.
   Мы преобразовали распределение данных в гауссово распределение.
  //// Т.е. все что мы можем сказать об этой картинке
  //// это "стандартная дисперсия", но является ли это гарантией
  //// отсутствия внутренней структуры - большой математический вопрос.
  //// В общем есть над чем подумать, и поскать соответствующую инфу.
  
   Обратная / Обратная диффузия:
  
   На этом этапе мы отменяем процесс пересылки.
   Задача состоит в том, чтобы удалить шум,
   добавленный в прямом процессе,
   снова итеративным способом
   (цепочка Маркова).
   Это делается с использованием модели нейронной сети.
  
   Задача модели заключается в следующем:
   учитывая временной интервал t и зашумленное изображение xt,
   спрогнозируйте шум (?), добавленный к изображению на шаге t-1.
  //// Если можно спрогнозировать "шум" то это не ШУМ, а искажение/преобразование.
  //// Чего-то я здесь не понимаю. Нужно поднимать детали и математику
  //// этого "таинства", понятного только "посвященным".
  //// Вот и тема консультаций с Bing определилась.
  
   xt  Модель  ? (прогнозируемый шум).
   Модель предсказывает (аппроксимирует) шум,
   добавленный к x t-1 при прямом проходе.
  
  Сравнение с GaN:
  
   Из-за итеративного характера процесса распространения
   процесс обучения и генерации, как правило, более стабилен, чем GAN.
  
   В GaN модель генератора должна перейти от чистого шума к изображению
   за один шаг Xt  x0,
   что является одним из источников нестабильного обучения.
  
   В отличие от GAN, где для обучения требуются две модели,
   в диффузиях требуется только одна модель.
  
   Одно из наблюдений из приведенного выше изображения
   заключается в том,
   что "размер изображения остается неизменным"
   на протяжении всего процесса,
   в отличие от GaN,
   где скрытый тензор может иметь разные размеры.
   Это может быть проблемой при создании высококачественных изображений
   из-за ограниченной памяти графического процессора.
   Однако авторы "Стабильной диффузии"
   (точнее, "скрытой диффузии")
   обходят эту проблему, используя вариационный автоэнкодер.
  
  Некоторые моменты, на которые следует обратить внимание в процессе диффузии:
  
   Еще одним преимуществом итеративного характера является то,
   что мы проводим контролируемое обучение на каждом временном шаге.
  
   В диффузионных моделях популярной архитектурой выбора является UNet
   (с вниманием),
   который обучается с использованием функции потерь MSE
   контролируемым образом.
  
   На каждом временном шаге шум, добавляемый к изображению,
   контролируется с помощью "планировщика дисперсий"
   или просто "планировщика".
   Задача планировщиков
   - определить, сколько шума следует добавить,
   чтобы во время прямого процесса изображение в конце xt
   было изотропным гауссовым.
  
   В документе DDPM авторы использовали "линейный планировщик".
   Это означает, что добавляемый шум при каждом временном шаге
   линейно увеличивался.
  
   Количество временных шагов T было установлено равным T=1000.
   Итак, учитывая гауссовский шум,
   модели потребуется 1000 итераций для получения результата.
   Это проблема низкой частоты дискретизации,
   упомянутая в предыдущем разделе.
   Но в недавних работах,
   благодаря внедрению новых методов и различных планировщиков,
   исследователи могут создавать художественные изображения
   всего за T = 4 временных шага.
  
  Хорошо известные диффузионные модели для генерации изображений
  
  .......
  
  DALL-E 2
  
  .......
  
  Imagen
  
  ......
  
  Stable Diffusion
  
  ......
  
  Midjourney
  
  ......
  
  Популярные варианты стабильной диффузионной модели
  
  ......
  
  Применение диффузионных моделей
  
  ......
  
  Текстовая инверсия
  
  Используя текстовую инверсию, мы можем точно настроить диффузионную модель
  для создания изображений с использованием личных объектов или художественных стилей,
  используя всего 10 изображений.
  Это не приложение само по себе,
  а хитрый трюк для обучения диффузионных моделей,
  которые можно использовать для создания более персонализированных изображений.
  
  От авторов статьи о текстовой инверсии:
  
  \\\ "Мы учимся генерировать конкретные концепции,
  \\\ такие как личные объекты или художественные стили,
  \\\ описывая их с помощью новых "слов"
  \\\ в пространстве встраивания предварительно подготовленных
  \\\ моделей преобразования текста в изображение.
  \\\ Их можно использовать в новых предложениях,
  \\\ как и любое другое слово. "
  \\\
  \\\ - Изображение стоит одного слова, 2022
  
  ......
  
  Text To Videos
  
  ......
  
  Text To 3D
  
  ......
  
  Text To Motion
  
  ......
  
  Image To Image
  
  ......
  
  Image Inpainting
  
  ......
  
  Image Outpainting
  
  ......
  
  Infinite Zoom In & Zoom Out
  
  ......
  
  Image Search & Reverse Image Search
  
  .......
  
  Инструменты
  
  В этом разделе мы перечисляем известные и новые инструменты и онлайн-сервисы,
  созданные сообществом, которые наши пользователи могут изучить
  и использовать для своих задач.
  
  .......
  
  Краткие сведения
  
  Диффузионные модели остаются здесь навсегда!
  
  Диффузионные модели могут значительно расширить мир творческой работы
  и создания контента в целом.
  За последние несколько месяцев они уже доказали свою эффективность.
  Количество диффузионных моделей растет с каждым днем,
  а старые версии быстро устаревают.
  На самом деле, существует очень высокая вероятность того,
  что к тому времени, когда вы прочтете эту статью,
  некоторые из упомянутых выше моделей будут иметь свои более новые версии.
  
  В любом случае, создателям и компаниям пора начать использовать
  диффузионные модели для создания изображений и контента.
  Даже если они не являются конечным продуктом,
  диффузионные модели могут служить средством вдохновения
  для мира творческих работников.
  
  .........
  
  //// Конец цитирования.
  
  В общем для меня этот текст был полезен, хотя много вопросов остались неясными.
  Общее представление получено, вроде как совпадающее с прежним.
  А вот "преобразование распределений" это для меня оказалось новостью.
  И как следствие, сразу же "с порога",
  гипотеза о "фиффузионной вероятностной голографии".
  Ничего не могу с собой поделать, всегда ищу какую-то интересную аналогию.
  Но посмотрим дальше, что будет с этой гипотезой,
  найдутся ли еще в ее пользу аргументы.
  
  
  ========
  
  15.12.2023 20:29
  
  Еще о реализации диффузии для "чайников".
  В оглавление.
  
  Еще один очень хороший текст как практически реализуется
  метод диффузии в популярной системе.
  Лично я для себя из него узнал много нового и интересного:
  
  "Как работает Stable Diffusion: объяснение в картинках".
  Автор: PatientZero
  https://habr.com/ru/articles/693298/.
  17 окт 2022 в 09:42
  
  Как работает Stable Diffusion: объяснение в картинках
  
  Автор оригинала: Jay Alammar
  https://jalammar.github.io/illustrated-stable-diffusion/
  
  //// Начало цитирования.
  
  Генерация изображений при помощи ИИ
  - одна из самых новых возможностей искусственного интеллекта,
  поражающая людей (в том числе и меня).
  Способность создания потрясающих изображений
  на основании текстовых описаний похожа на магию;
  компьютер стал ближе к тому, как творит искусство человек.
  Выпуск Stable Diffusion стал важной вехой в этом развитии,
  поскольку высокопроизводительная модель оказалась доступной широкой публике
  (производительная с точки зрения качества изображения, скорости
  и относительно низких требований к ресурсам и памяти).
  
  ......
  
  Компоненты Stable Diffusion
  
  Stable Diffusion - это система, состоящая из множества компонентов и моделей.
  Это не единая монолитная модель.
  
  Изучая внутренности, мы первым делом заметим,
  что в модели есть компонент понимания текста,
  преобразующий текстовую информацию в цифровой вид,
  который передаёт заложенный в текст смысл.
  
  ......
  
  Мы начнём с общего обзора, а позже углубимся в подробности машинного обучения.
  Однако для начала можно сказать, что этот кодировщик текста
  - это специальная языковая модель Transformer
  (технически её можно описать как текстовый кодировщик модели CLIP).
  Она получает на входе текст и выдаёт на выходе список чисел (вектор),
  описывающий каждое слово/токен в тексте.
  
  Далее эта информация передаётся генератору изображений,
  который состоит из двух компонентов.
  
  ......
  
  Генератор изображений выполняет два этапа:
  
  1- Создание информации изображения.
  
  Этот компонент является секретным ингредиентом Stable Diffusion.
  Именно благодаря нему возник такой рост качества
  по сравнению с предыдущими моделями.
  
  Этот компонент выполняется в несколько шагов (step),
  генерируя информацию изображения.
  Это параметр steps в интерфейсах и библиотеках Stable Diffusion,
  который часто по умолчанию имеет значение 50 или 100.
  
  Этап создания информации изображения действует полностью
  в пространстве информации изображения
  (или в скрытом пространстве).
  Подробнее о том, что это значит, мы расскажем ниже.
  Это свойство ускоряет работу по сравнению с предыдущими моделями диффузии,
  работавшими в пространстве пикселей.
  Этот компонент состоит из нейросети UNet и алгоритма планирования.
  
  Слово <диффузия> (diffusion) описывает происходящее в этом компоненте.
  Это пошаговая обработка информации,
  приводящая в конечном итоге к генерации высококачественного изображения
  (при помощи следующего компонента - декодера изображений).
  
  ......
  
  2- Декодер изображений.
  
  Декодер изображений рисует картину на основе информации,
  которую он получил на этапе создания информации.
  Он выполняется только один раз в конце процесса
  и создаёт готовое пиксельное изображение.
  //// Вот это новая для меня информация.
  //// Надо обдумать.
  
  .......
  
  На изображении выше мы видим три основных компонента
  (каждый со своей собственной нейросетью),
  из которых состоит Stable Diffusion:
  
   ClipText для кодирования текста.
  
   Входные данные: текст.
  
   Выходные данные: 77 векторов эмбеддингов токенов, каждый в 768 измерениях.
  //// А вот это интересная деталь. 77 * 768 = 59136
  //// Почему-то я думал что это единый вектор, а это получаются группы векторов.
  //// Интересно, как с этим работают?
  //// Но вообще мысль с группировкой векторов интересна и перспективная.
  //// Надо будет по-разбираться.
  
   UNet + Scheduler для постепенной обработки/диффузии информации
   в пространстве информации (скрытом пространстве).
  
   Входные данные: эмбеддинги текста и исходный многомерный массив
   (структурированные списки чисел, также называемые тензором),
   состоящий из шума.
  
   Выходные данные: массив обработанной информации
  
   Декодер автокодировщика, рисующий готовое изображение
   при помощи массива обработанной информации.
  
   Входные данные: массив обработанной информации (размеры: (4,64,64))
  
   Выходные данные: готовое изображение (размеры: (3, 512, 512)
   - (красный/зелёный/синий, ширина, высота))
  
  ......
  
  Что такое диффузия?
  
  Диффузия - это процесс, выполняемый внутри розового компонента
  
  (этапа создания информации изображения).
  Имея эмбеддинги токенов, описывающие введённый текст,
  и случайный начальный массив информации изображения
  (также они называются latent),
  процесс создаёт массив информации,
  который декодер изображения использует для рисования готового изображения.
  
  ......
  
  Это процесс выполняется поэтапно.
  Каждый шаг добавляет больше релевантной информации.
  Чтобы представить процесс в целом,
  мы можем изучить массив случайных latent,
  и увидеть, что он преобразуется в визуальный шум.
  В данном случае визуальное изучение
  - это прохождение данных через декодер изображений.
  //// Что-то непонятное в формулировках.
  
  ......
  
  Диффузия выполняется в несколько шагов,
  каждый из которых работает с входным массивом latent
  и создаёт ещё один массив latent,
  ещё больше напоминающий введённый текст,
  а вся визуальная информация модели собирается из всех изображений,
  на которых была обучена модель.
  
  ......
  
  Мы можем визуализировать набор таких latent,
  чтобы увидеть, какая информация добавляется на каждом из шагов.
  
  ......
  
  Наблюдать за этим процессом довольно увлекательно.
  
  В данном случае нечто особо восхитительное происходит между шагами 2 и 4.
  Как будто контур возникает из шума.
  //// Любопытно. Т.е. в какой-то момент, практически близком к самому началу,
  //// происходит "чудо" - качественный скачок.
  //// Почему-то я думал, что это происходит более постепенно.
  //// Тем более интересно в этом разобраться.
  //// Чем-то это напоминает экспоненциальный процесс,
  //// характерный для всего "машинного обучения".
  //// Есть ли здесь какая-то связь?
  
  Как работает диффузия
  
  Основная идея генерации изображений при помощи диффузионной модели
  использует тот факт,
  что у нас есть мощные модели компьютерного зрения.
  Если им передать достаточно большой массив данных,
  эти модели могут обучаться сложным операциям.
  //// Но каким именно - не очень понятно.
  Диффузионные модели подходят к задаче генерации изображений,
  формулируя задачу следующим образом:
  
  Допустим, у нас есть изображение,
  сделаем первый шаг, добавив в него немного шума.
  
  .......
  
  Назовём <срез> (slice) добавленного нами шума .
  Сделаем ещё один шаг, добавив к шумному изображению ещё шума ().
  
  .......
  
  На этом этапе изображение полностью состоит из шума.
  Теперь давайте возьмём их в качестве примеров
  для обучения нейронной сети компьютерного зрения.
  Имея номер шага и изображение,
  мы хотим, чтобы она спрогнозировала,
  сколько шума было добавлено на предыдущем шаге.
  
  .......
  
  Хотя этот пример показывает два шага от изображения к полному шуму,
  мы можем управлять тем, сколько шума добавляется к изображению,
  поэтому можно распределить его на десятки шагов,
  создав десятки примеров для обучения на каждое изображение
  для всех изображений в обучающем массиве данных.
  
  .......
  
  Красота здесь в том, что после того,
  как эта сеть прогнозирования шума начнёт работать правильно,
  она, по сути, сможет рисовать картины,
  удаляя шум на протяжении множества шагов.
  
  Примечание:
  это небольшое упрощение алгоритма диффузии.
  На ресурсах по ссылкам в конце статьи
  представлено более подробное математическое описание.
  
  Рисование изображений устранением шума
  
  Обученный предсказатель шума может взять шумное изображение
  и количество шагов устранения шума,
  и на основании этого способен спрогнозировать срез шума.
  
  ........
  
  Срез шума прогнозируется таким образом,
  что если мы вычтем его из изображения,
  то получим изображение,
  которое ближе к изображениям, на которых обучалась модель.
  
  .......
  
  Если обучающий массив данных состоял из эстетически приятных изображений
  (например, LAION Aesthetics, на котором обучалась Stable Diffusion),
  то получившееся изображение будет иметь склонность к эстетической приятности.
  
  ........
  
  В этом по большей мере и заключается описание
  генерации изображений диффузионными моделями,
  представленное в статье Denoising Diffusion Probabilistic Models.
  https://arxiv.org/abs/2006.11239
  Теперь, когда мы понимаем, что такое диффузия,
  нам понятно, как работают основные компоненты не только Stable Diffusion,
  но и Dall-E 2 с Google Imagen.
  
  Обратите внимание,
  что описанный выше процесс диффузии генерирует изображения
  без использования текстовых данных.
  В последующих разделах мы расскажем,
  как в процесс внедряется текст.
  
  Увеличение скорости:
  диффузия сжатых (скрытых) данных, а не пиксельного изображения
  
  Для ускорения процесса генерации изображений Stable Diffusion
  (по информации из исследовательской статьи)
  выполняет процесс диффузии не с самими пиксельными изображениями,
  а со сжатой версией изображения.
  В статье это называется <переходом в скрытое пространство>.
  https://arxiv.org/abs/2112.10752
  
  Это сжатие (и последующая распаковка/рисование)
  выполняется при помощи автокодировщика.
  Автокодировщик сжимает изображение в скрытое пространство
  при помощи своего кодировщика,
  а затем воссоздаёт его при помощи декодера на основе только сжатой информации.
  //// Стоп-стоп-стоп. Интересный момент.
  //// Как-то по предыдущим статьям это было совсем неочевидно.
  //// Правильно ли я понимаю сказанное:
  //// "шум добавляется/удаляется в СЖАТОМ образе изображения"?
  //// Но ведь это совсем другой "коленкор".
  
  ......
  
  Далее со сжатыми latent выполняется прямой процесс диффузии.
  Используются срезы шума, применяемые к этим latent,
  а не к пиксельному изображению.
  То есть предсказатель шума
  на самом деле
  обучается прогнозировать шум в сжатом описании
  (в скрытом пространстве).
  //// Да так и есть. И это радует, так как открывает интересные перспективы,
  //// в понимании диффузии.
  
  .......
  
  При помощи прямого процесса
  (с использованием кодировщика автокодировщика)
  мы генерируем данные для обучения предсказателя шума.
  После его обучения мы можем генерировать изображения,
  выполняя обратный процесс
  (при помощи декодера автокодировщика).
  
  //// Ага. Еще один момент понятен.
  //// Для диффузионной модели используется, как минимум на этапе обучения,
  //// именно пара "кодировщик - декодировщик", под названием "автокодировщик".
  
  ......
  
  Эти два потока показаны на рисунке 3 статьи про LDM/Stable Diffusion:
  
  //// Очень красивый и совершенно загадочный рисунок.
  //// можно только какие-то элементы опознать.
  //// Это наверно стоит называть "научной/авторской диффузией" нужных иллюстраций,
  //// процесс восстановления (удаление шума) которых - то еще занятие.
  
  .......
  
  Также на этом рисунке показаны компоненты <согласования>,
  которые в данном случае являются текстовыми строками,
  описывающими изображение,
  которое должна генерировать модель.
  Поэтому давайте рассмотрим эти текстовые компоненты.
  
  Текстовый кодировщик: языковая модель Transformer
  
  Языковая модель Transformer используется в качестве компонента понимания языка,
  она получает текстовую строку и создаёт эмбеддинги токенов.
  В опубликованной модели Stable Diffusion используется ClipText
  (модель на основе GPT), а в статье применяется BERT.
  https://jalammar.github.io/illustrated-gpt2/
  https://jalammar.github.io/illustrated-bert/
  
  В статье, посвящённой Imagen, показано, что выбор языковой модели важен.
  Замена на более объёмные языковые модели сильнее влияет
  на качество генерируемого изображения,
  чем более объёмные компоненты генерации изображений
  
  Рис. Улучшение/увеличение языковых моделей существенно влияет
  на качество моделей генерации изображений.
  Источник: Статья про Google Imagen, написанная Saharia и соавторами.
  Рисунок A.5.
  https://arxiv.org/abs/2205.11487
  
  В первых моделях Stable Diffusion просто подключалась
  предварительно обученная модель ClipText, выпущенная OpenAI.
  Возможно, будущие модели перейдут на новые и гораздо более объёмные
  OpenCLIP-варианты CLIP.
  В эту новую группу входных векторов включены текстовые модели
  размерами до 354 миллионов параметров,
  в отличие от 63 миллионов параметров в ClipText.
  
  Как обучается CLIP
  
  CLIP обучается на массиве изображений и подписей к ним.
  Массив данных выглядит примерно так,
  только состоит из 400 миллионов изображений и подписей:
  
  ......
  
  CLIP - это сочетание кодировщика изображений и кодировщика текста.
  Обучающий процесс модели можно упрощённо представить
  как кодирование изображения и его подписи кодировщиками изображений и текста.
  
  ......
  
  Затем мы сравниваем получившиеся эмбеддинги при помощи косинусного коэффициента.
  В начале процесса обучения схожесть будет низкой,
  даже если тест описывает изображение правильно.
  
  ......
  
  Мы обновляем две модели так,
  чтобы в следующий раз при создании эмбеддингов
  получившиеся эмбеддинги были схожими.
  //// Йес!! Я понял!
  //// Мы "выравниваем" два РАЗНЫХ энкодера,
  //// так чтобы они генерировали равные/близкие эмбеддинги,
  //// на как-то связанных между собой РАЗНЫХ наборах данных.
  //// Классная идея!
  //// Надо будет запомнить и использовать.
  //// Интересно, что сходу не могу вспомнить,
  //// какому приему ТРИЗ соответствует такое решение.
  Вспомнил - "согласование".
  
  ........
  
  Повторяя этот процесс со всем массивом данных
  и группами входных векторов большого размера,
  мы получаем кодировщики, способные создавать эмбеддинги,
  в которых изображение собаки и предложение схожи.
  Как и в word2vec,
  https://jalammar.github.io/illustrated-word2vec/
  процесс обучения также должен включать в себя
  отрицательные примеры изображений и подписей,
  которые не совпадают,
  а модель должна присваивать им низкую оценку схожести.
  
  Передача текстовой информации в процесс генерации изображений
  
  Чтобы сделать текст частью процесса генерации изображений,
  нам нужно модифицировать предсказатель шума так,
  чтобы он использовал в качестве входных данных текст.
  
  .......
  
  Теперь наш массив данных содержит закодированный текст.
  Так как мы работаем в скрытом пространстве,
  то входные изображения и прогнозируемый шум
  находятся в скрытом пространстве.
  //// Чуток непонятная формулировка. Откуда взялись "входные изображения",
  //// и как именно "массив данных содержит закодированный текст"?
  
  .......
  
  Чтобы лучше понять, как текстовые токены используются в Unet,
  давайте глубже разберёмся с Unet.
  
  Слои предсказателя шума Unet (без текста)
  
  Для начала рассмотрим диффузионную Unet,
  не использующую текст.
  Её входы и выходы выглядят так:
  
  ......
  
  Внутри мы видим следующее:
  
   Unet - это последовательность слоёв,
   работающая над преобразованием массива latent.
  
   Каждый слой обрабатывает выходные данные предыдущего слоя.
  
   Часто выходных данных подается (через остаточные соединения)
  //// Наверно, все-таки, не "часто", а "часть".
  //// это, на мой взгляд, аналог механизмов "внимания",
  //// используемых в трансформерах.
   для обработки на дальнейших этапах сети.
  
   Шаг времени преобразуется в вектор эмбеддингов шага времени,
   который используется в слоях.
  //// Еще один важный "нюанс". Передача/использование "шага времени"
  //// в той же "нотации", что и основная информация/данные,
  //// т.е. тоже в виде эмбеддингов (дополнительных векторов).
  
  ........
  
  Слои предсказателя шума Unet с текстом
  
  Давайте посмотрим, как изменить эту систему,
  чтобы уделить внимание тексту.
  
  ......
  
  Основное изменение системы,
  которое необходимо для добавления поддержки текстового ввода
  (техническое название: text conditioning)
  - добавление слоя attention между блоками ResNet.
  
  Обратите внимание, что блок resnet не смотрит непосредственно на текст.
  Слои attention объединяют эти текстовые описания в latent.
  И теперь следующий ResNet может использовать
  эту встроенную текстовую информацию в своей обработке.
  
  Заключение
  
  Надеюсь, это даст вам поверхностное понимание работы Stable Diffusion.
  В ней задействовано множество других концепций,
  но я считаю, что их проще понять,
  если вы знаете описанные выше строительные блоки.
  Для дальнейшего изучения можно воспользоваться
  представленными ниже полезными ресурсами.
  
  Ресурсы
  
   У меня есть одноминутный клип на YouTube по использованию Dream Studio
   для генерации изображений при помощи Stable Diffusion.
  
   Stable Diffusion with ?? Diffusers
   https://huggingface.co/blog/stable_diffusion
  
   The Annotated Diffusion Model
   https://huggingface.co/blog/annotated-diffusion
  
   How does Stable Diffusion work? - Latent Diffusion Models EXPLAINED
   [Видео]
  
   Stable Diffusion - What, Why, How?
   [Видео]
  
   High-Resolution Image Synthesis with Latent Diffusion Models
   [Статья про Stable Diffusion]
   https://ommer-lab.com/research/latent-diffusion-models/
  
   Более подробное изучение алгоритмов и математики представлено
   в статье Лилиан Венг
   What are Diffusion Models?
   https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
  
  Благодарности
  
  Благодарю Робина Ромбаха, Дэнниса Сомерса, Яна Сидякина
  и сообщество Cohere For AI
  за отзывы о ранних версиях этой статьи.
  
  //// Из комментариев.
  
  ........
  
  e-zig
  19 окт 2022 в 10:55
  
  \\\ ... после того, как эта сеть прогнозирования шума начнёт работать правильно,
  \\\ она, по сути, сможет рисовать картины,
  \\\ удаляя шум на протяжении множества шагов.
  
  Слишком резкий скачок для понимания.
  (Почему удаление шума равно рисованию (новой?) картины?).
  
  freeExec
  19 окт 2022 в 17:20
  
  Потому что если из шума постепенно стирать не нужное
  и дорисовывать нужное
  - можно получить любое изображение.
  
  Все же помню шутку:
  
   У вас в слове кот 3 опечатки, должно быть слон
  
  //// Конец цитирования.
  
  Не знаю как Вам, но мне было очень полезно почитать такой
  подробный и хорошо иллюстрированный текст.
  Для лучшего понимания какой-то технологии одинаково нужны
  и обзорные/академические и детальные/практические материалы.
  Ну и самостоятельные работы тоже необходимы.
  Только так можно достичь какого-то более глубокого понимания
  какой-то не совсем тривиальной концепции.
  А метод диффузии как раз из таких.
  
  Не могу сказать, что во всех вопросах, связанных с данной реализацией
  метода диффузии разобрался досконально
  - слишком много оказалось новой информации,
  которая, вроде как, была раньше не такой уж важной,
  типа "скрытого пространства" "энкодера CLIP" и др.
  Но сейчас это заиграло совершенно новыми "красками",
  и требует какого-то более глубокого осмысления.
  
  Но ощущение того,
  что существующее объяснение того
  как и почему работает "метод диффузии"
  еще далеко от полного объяснения,
  почему-то только усилилось.
  Какого-то существенного "ингредиента" в этом объяснении не хватает.
  Но вот где?
  Есть ощущение, что это как-то связано с предсказанием "удаления шума".
  "Но это не точно".
  
  Ладно, будем искать дальше.
  
  
  ========
  
  09.01.2024 19:17
  
  Метод "потока Пуассона" для "чайников".
  В оглавление.
  
  А это просто замечательный текст о методе генерации картинок
  близкий к методу диффузии, но, в тоже время, принципиально другой,
  и понимание того в чем собственно отличие, что это означает,
  и как это может быть использовано в совершенно иных задачах
  очень много стоит.
  Хотя название совершенно невразумительное,
  и просто так его можно и не заметить:
  
  "PFGM++: буст генеративных моделей с применением электростатики".
  Автор: Lithium_vn (Катя)
  https://habr.com/ru/companies/bothub/articles/785192/.
  9 янв 2024 в 12:39
  
  Автор: Черенковская Анастасия
  
  Текст урезать совершенно не хочется,
  хотя лучше его, конечно читать в оригинале
  - там просто замечательно понятные иллюстрации.
  Но у меня при чтении этого текста появилось
  несколько "плодотворных дебютных идей",
  и очень хочется отметить те места, в которых они возникли.
  
  //// Начало цитирования.
  
  Развитие генеративных моделей ИИ продвигается семимильными шагами
  и будоражит сознания миллионов людей во всем мире.
  Все больше скандалов, интриг и расследований связаны с ними,
  мы становимся свидетелями действительно революционного прорыва технологий
  в этой сфере.
  Однако сегодня именно модель PFGM ++ станет объектом нашего внимания,
  потому что она в 10-20 раз быстрее знакомых всем диффузионных моделей
  справляется с задачами генерации изображений
  при сопоставимой производительности.
  //// А как насчет скорости и качества обучения?
  
  Важно отметить, что основоположницей модели PFGM ++
  (генеративной модели потока Пуассона ++) 2023 года
  https://arxiv.org/abs/2302.04265
  //// Коллектив авторов просто впечатляет
  //// Илун Сюй, Цимин Лю, Юнлун Тянь, Шанъюань Тонг,
  //// Макс Тегмарк, Томми Яаккола
  //// А вот содержательная часть этого сообщения ну очень краткая
  //// и практически неинформативная,
  //// кроме вывода, который без вот этой статьи просто не понять.
  стала модель PFGM, представленная годом ранее,
  поэтому ссылаться мы будем на нее.
  
  На данном этапе уже можно сделать выводы,
  что работать мы будем со следующими физическими законами:
  
   диффузией,
   непосредственно лежащей в основе стандартных генеративных моделей;
  
   полем Пуассона,
   ставшим ключевым явлением в создании новых технологий.
  
  Если рассматривать генеративные модели ИИ со стороны физики,
  то диффузионные основываются на термодинамике,
  беря за основу то, что, например,
  любое локализованное распределение газа в конечном итоге
  равномерно заполнит все пространство
  просто за счет случайного движения
  (непосредственно явление диффузии).
  
  Таким образом, формулируется постулат
  - случайное начальное распределение
  преобразуется в равномерное распределение с течением времени.
  Исходя из этого, диффузионные модели искажают изображения случайным шумом.
  
  Тут пиксели рассматриваются как локализованное облако частиц,
  которые со временем "рассеиваются" в тот самый случайный шум
  (который, на самом деле, называется гауссовским).
  
  В данном случае основной целью машинного обучения
  становится возможность вернуться к начальной точке
  (или к чему-то максимально похожему),
  обращая вспять этот процесс искажения.
  
  Следовательно, открывается возможность генерировать данные,
  просто делая выборку из гауссовского распределения
  и применяя изученное преобразование.
  //// А какое именно преобразование и как именно изучено "преобразование"?
  //// Впрочем в материалах специально посвященных "методу диффузии"
  //// этот вопрос тоже слабо освещен - мол и так все понятно
  //// достаточно математической формулы с вероятностью.
  
  Генеративные модели пуассоновского потока
  в свою очередь основываются на электростатике.
  Тут же центральная идея заключается в том,
  что любое распределение электронов в гиперплоскости
  генерирует электрическое поле,
  которое преобразует распределение в равномерное угловое,
  //// Интересно, что значит "равномерно угловое".
  /////// В картинах ниже этот вопрос четко прояснен.
  в соответствии с динамикой, определяемой полем.
  //// Ключевое, не "динамика, определяемой полем"
  //// - она вообще-то может быть не "пуассоновским полем" -
  //// а вот это "равномерно угловое", точно просто "равномерное",
  //// а "угловое" именно из-за привязки к "пуассоновскому полю".
  //// Но в принципе эта "равномерность" может быть привязано
  //// и к другому типу "преобразования", "процесса", "представления" или "проекции",
  //// важно, чтобы это "преобразование" на определенном "масштабе"
  //// выглядело "равномерным" или "квазислучайнвм".
  
  .....
  
  Таким образом, если нам известно электрическое поле
  (оно же поле Пуассона),
  создаваемое данным распределением,
  то мы можем начать с точек,
  равномерно отобранных на полусфере,
  и запустить динамику вспять,
  чтобы восстановить исходное, начальное распределение.
  //// Тут сразу не понять о чем собственно речь.
  //// но это тоже прояснится чуть позже.
  //// А по смыслу, что если известно "прямое преобразование",
  //// то можно запустить и обратное преобразование,
  //// от "вроде бы" случайного/равномерного представления,
  //// чтобы вернуться к исходному.
  //// А это означает, что наше "равномерное" представление,
  //// на самом деле является "квазислучайным",
  //// как-то сохраняющим связь с исходным явно НЕравномерным представлением.
  
  Далее, хочу подробнее рассмотреть этот принцип работы PFGM
  со стороны физической модели
  (эта часть может показаться чрезмерно перегруженной для пользователей,
  в меньшей степени заинтересованных в физике генеративных моделей ИИ,
  поэтому можно сразу перейти к части "генерация изображений с помощью PFGM")
  //// А вот это ни в коем случае делать не рекомендую,
  //// так можете пропустить момент "озарения".
  //// когда из физических моделей появляется
  //// новая нейросетевая модель/концепция.
  
  Генеративные модели пуассоновского потока - подробный обзор
  //// Очень подробный обзор, именно такой, какой нужен такому "чайнику",
  //// как Ваш покорный слуга.
  
  Рассмотрим электрическое поле,
  генерируемое произвольным распределением заряда.
  Очень близко к распределению электрическое поле будет достаточно сложным
  и, в общем случае, иметь большую кривизну.
  
  Рис. Распределение заряда (фиолетовый) и создаваемые им
  линии электрического поля (черный).
  
  Однако на очень большом расстоянии d от распределения заряда
  поле гораздо проще.
  Это означает, что можно считать, что распределение заряда
  "сворачивается" до определенной точки,
  концентрируя весь свой заряд в ней.
  Электрическое поле для точечного заряда довольно простое
  - оно имеет радиальное направление и величину,
  обратно пропорциональную квадрату расстояния от точки:
  
  Учитывая, что на очень большом расстоянии электрическое поле радиально,
  поверхность, касательная к полю, на этом расстоянии сферическая.
  
  При этом, авторы PFGM доказывают,
  что эта поверхность не только сферическая,
  но и ее плотность потока равномерна.
  Ниже мы видим распределение заряда в форме сердца в плоскости z = 0
  вместе с линиями электрического поля (черные стрелки),
  которые оно генерирует.
  Плотность потока через окружающую полусферическую поверхность
  (почти) равномерна.
  //// Вот в этом "почти" "собака и зарыта".
  
  Если мы рассмотрим поле Пуассона в многомерном пространстве,
  например, для распределения данных изображения,
  то мы можем просто равномерно отбирать точки
  из многомерной полусферы
  и запускать динамику в обратном времени
  для генерации изображений из распределения данных:
  
  Изучение поля Пуассона
  
  Смоделируем динамику частиц под влиянием поля Пуассона,
  генерируемого распределением данных.
  
  1. Дополнение данных
  
  ......
  
  Важно отметить, что распределение данных лежит в двумерной плоскости,
  но отображается на трехмерную полусферу.
  Это верно в общем случае для всех PFGM моделей
  - N-мерные данные дополняются измерением z
  и помещаются в гиперплоскость z= 0 нового (N+1)-мерного пространства.
  Затем данные отображаются в (N+1)-мерную полусферу.
  //// Вот это, на мой взгляд, ключевой момент не только в этой технологии,
  //// а вообще в концепции нейросетей.
  //// В принципе это уже давно используется, но как частный случай,
  //// для решения каких-то конкретных задач,
  //// для построения эмбеддингов текстов с учетом позиции/расстояния
  //// между токенами.
  //// А здесь это принципиальное решение вынести "решение" в "надпространство".
  
  Причина этого пространственного увеличения
  заключается в необходимости недопущения "коллапса режима".
  Ниже мы видим (отрицательное) Поле Пуассона,
  генерируемое однородным диском в плоскости XY.
  Процесс выборки заключается в случайном отборе точек в пространстве
  и следовании по полю до места распределения данных.
  Как мы видим, все траектории сходятся к началу координат,
  а это значит, что наша модель будет генерировать изображения,
  которые не имеют разнообразия
  и, следовательно, страдают от коллапса режимов.
  //// Объяснение, вообще-то, "так себе".
  //// просто кажется, что авторы не до конца понимают,
  //// что же они собственно сделали, почему это работает,
  //// и представили хоть какое-то "физическое объяснение",
  //// учитывая что вся концепция строится на "физической аналогии".
  //// А то что это "не совсем" так можно будет заметить,
  //// когда начнется иллюстрация применения метода
  //// уже не с одной дополнительной размерностью,
  //// а с сотней, тысячей и даже больше.
  
  ......
  
  Добавление к данным дополнительного измерения
  позволяет обойти эту проблему.
  Ниже мы видим тот же двумерный однородный диск сверху,
  теперь в плоскости XY с добавленной размерностью Z.
  
  Хотя, по сути, у нас все еще есть двумерное распределение данных,
  теперь оно встроено в трехмерное пространство,
  таким образом генерируя 3-мерное поле Пуассона.
  Если мы теперь выберем точки в этом трехмерном пространстве,
  например, из плоскости YZ,
  и проследим их траектории через поле до XY,
  нам будет предоставлен ряд новых траекторий,
  которые больше не сворачивают к началу координат,
  а вместо этого пересекают разные точки в распределении данных.
  То есть, наша модель больше не страдает от коллапса режимов.
  //// Нет не так, происходит преобразование/проекция исходного изображения,
  //// точнее, массива данных, на пространство большей размерности,
  //// ПРИЧЕМ, в этом преобразовании фактически происходит "свертка"
  //// всего отображения в отдельные точки,
  //// примерно так как это происходит в голографии.
  //// Но это еще не полная голография, так как используемое преобразование
  //// - поле Пуассона - не имеет свойств "интерференции",
  //// или чего подобного.
  
  2. Вычисление эмпирического поля
  
  Для выборки с помощью модели PFGM мы должны знать поле Пуассона.
  Чтобы изучить поле Пуассона,
  нам нужно было бы точно знать распределение данных,
  но распределение данных
  - это то, из чего мы стремимся сделать выборку.
  Если бы мы уже изначально знали аналитическую форму распределения,
  нас бы не волновало пуассоновское поле, которое оно генерирует.
  
  Вместо того чтобы пытаться изучить точное поле Пуассона,
  мы будем рассматривать эмпирическое поле,
  которое генерируется обучающими данными,
  рассматриваемыми как точечные заряды.
  //// А вот это уже что-то похожее на "магические потенциалы".
  /////// Была у такая идея, когда исследовал "Модель Kandinsky 2.0".
  /////// Там это четко проявлялось в виде различного влияния отдельных токенов
  /////// в комбинации с другими токенами. И уже тогда было понятно,
  /////// что если и строить такую "модель/ландшафт магических потенциалов",
  /////// то размерность пространства такой модели/ландшафта должна быть
  /////// куда больше не только двух, но и двух сотен,
  /////// Точнее как минимум столько же сколько есть отдельных токенов.
  /////// Но одновременно он долен как-то сворачиваться в двухмерную картинку.
  
  ......
  
  Выше приведен пример распределения (светло-фиолетовый),
  для которого мы стремимся сгенерировать данные,
  а также несколько точек данных,
  выбранных из этого распределения (фиолетовые точки).
  Кроме того, существует случайно выбранная точка в пространстве (красная точка),
  в которой мы стремимся оценить поле Пуассона
  (или, что эквивалентно, вычислить эмпирическое поле).
  
  Чтобы вычислить эмпирическое электрическое поле,
  мы суммируем поля, генерируемые каждым точечным зарядом,
  что эквивалентно полному эмпирическому полю в этой точке
  благодаря принципу суперпозиции.
  Вклад поля каждой отдельной точки данных можно увидеть ниже
  в виде фиолетовой стрелки,
  а чистое поле представлено красной стрелкой.
  
  //// "Сложение векторов", наверно, одна из самых простых операций свертки
  //// изображения в точку, но далеко не единственной,
  //// практически все алгоритмы архивации, включая фрактальные",
  //// точно также могут для такой свертки использоваться.
  //// Причем это первое, что пришло в голову, но далеко не единственное,
  //// если не зацикливаться только на физических аналогиях/прототипах.
  
  ......
  
  *Согласно принципу суперпозиции, электрическое поле,
  создаваемое системой зарядов,
  равно векторной сумме электрических полей,
  создаваемых каждым отдельным зарядом в отсутствие остальных.
  //// Это если использовать только одну модель - "поле Пуассона",
  //// А ведь есть и другие модели - тот же спектральный анализ,
  //// или ... Ладно потом найдется более понятная аналогия.
  //// Главное, чтобы была возможность как-то ПО РАЗНОМУ учитывать ВСЕ данные,
  //// в каждой точке НАДпространства решения.
  
  Мы вычисляем эмпирическое поле
  для многих случайно выбранных точек в пространстве,
  отдавая предпочтение близким к точкам данных,
  поскольку кривизна поля будет более значительной в этих областях,
  поэтому для достаточной аппроксимации требуется большее разрешение.
  
  3. Вычисление потери и обновление аппроксиматора функции
  
  Для выполнения выборки с помощью PFGM
  нам требуется непрерывное аналитическое представление пуассоновского поля,
  а не значения только в дискретных точках,
  подобные тем, которые мы рассмотрели выше.
  Поэтому мы должны построить аппроксиматор функции
  для эмпирического поля в этих точках.
  
  Как должен выглядеть этот аппроксиматор?
  
  Аппроксиматор функции должен принимать N + 1-мерный вектор,
  представляющий точку в нашем расширенном пространстве,
  и возвращать N + 1-мерный вектор,
  представляющий эмпирическое поле в этой точке.
  Наилучшим выбором для такого отображения является архитектура U-Net,
  которую и реализуют авторы PFGM.
  //// Вот опять "палочка-выручалочка" в виде структуры U-Net,
  //// только теперь это U*-Net, так как исходное "пространство решений"
  //// расширено, чтобы иметь возможность "складывать магические потенциалы"
  //// в "виртуальном пространстве", чтобы затем это представление
  //// "сжать" в "скрытое"/"свернутое"/латентное пространство.
  //// И затем из этого латентного пространства "восстановить"/"аппроксимировать"
  //// снова расширенное пространство.
  //// С точки зрения обычной логики совершенно непонятное действие,
  //// но ссылка на "поле Пуассона" отметает все сомнения.
  //// Пример когда хорошая аналогия, обосновывает фактически эвристику,
  //// но, в тоже время, может заслонить необходимость анализа/понимания
  //// того что происходит. Ведь может быть полезно увеличивать размерность
  //// не на единицу, а больше, использовать не векторное сложение потенциалов,
  //// а что-то другое, ну и так далее.
  //// И смазывает возможность такого подхода не только для картинок,
  //// но и, например, для текстов.
  //// Но идея действительно хороша.
  
  ......
  
  Таким образом,
  U-Net (блок-схема) принимает точку в пространстве (синий вектор)
  и возвращает приблизительное эмпирическое поле в этой точке (красный вектор),
  сгенерированное точками данных,
  выбранными из распределения данных / зарядов (фиолетовый).
  
  Чтобы обучить U-Net,
  мы просто вычисляем средние потери L2,
  а затем обучаем с помощью оптимизатора на основе градиента,
  такого как Adam.
  Вот и все!
  
  Выборка с помощью PFGM
  
  Повторю,
  что траектории пуассоновского поля представляют собой биекцию
  (взаимно однозначное отображение одного множество в другое)
  между распределением данных и равномерной полусферой.
  Поэтому, чтобы выбрать точки из распределения данных,
  мы выбираем их из равномерного углового распределения,
  а затем заставляем двигаться в обратном направлении вдоль поля Пуассона,
  пока не достигнем гиперплоскости z=0.
  Соответствующее дифференциальное уравнение имеет вид:
  
   dx = -E(x)dt
  
  В соответствии с данным уравнением,
  в каждый момент времени точка должна смещаться
  в направлении отрицательного поля Пуассона
  (следовательно, соответствующим решением будет траектория,
  которая прослеживается в обратном направлении вдоль этого поля
  до гиперплоскости z=0)
  //// Вот как это замысловато объясняется и в этом тексте,
  //// и в текстах про "метод диффузии".
  //// А ведь описание практической реализации этой "магии" или "алхимии"
  //// куда более понятно.
  
  На практике для генерации данных с использованием
  генеративной модели поля Пуассона мы должны:
  
   осуществляем равномерную выборку данных (точек) на полусфере;
  
   прибегаем к решению ОДУ для перемещения точек в обратном направлении
   вдоль поля Пуассона;
  
   двигаемся в обратном направлении до тех пор,
   пока не достигнем гиперплоскости z = 0,
   после чего мы сгенерируем новые данные из обучающего распределения.
  
  //// Вот никак из этого не понять, в каком месте происходит
  //// запоминание изображения и его восстановления.
  //// Про U*-Net уже нет ни слова. Все внимание, как у фокусника,
  //// обращается на "поле Пуассона", а где находится "кролик"
  //// пусть зрители сами замечают.
  //// Но если можно легко заменить "поле Пуассона",
  //// каким-то иным преобразованием, пусть даже с более низким качеством,
  //// то какой можно сделать вывод?
  //// Что первично в результате "поле Пуассона" или U*-Net и процесс обучения?
  
  //// Ведь по сути процесс обучения распадается на последовательное обучение
  //// отдельных кадров трансформированных изображений, но связанных между
  //// собой "преобразованием Пуассона".
  //// Т.е. обучение не на одной картинке, а на последовательности.
  //// И если в "методе диффузии" это может быть не так очевидно,
  //// то в данной концепции это явно/наглядно/очевидно.
  
  В визуальном пространстве обратная эволюция в процессе выборки
  выглядит следующим образом:
  
  https://www.assemblyai.com/blog/content/images/2022/10/celeba_movie_50.gif
  
  Генерация изображений с помощью PFGM
  
  Рассмотрим основные шаги и части
  непосредственного процесса генерации изображений,
  предоставленные авторами PFGM в Google Colab.
  
  1. Смена аппаратного ускорителя на GPU
  
  ......
  
  2. Настройка среды
  
  ......
  
  3. Создание изображений
  
  ......
  
  И после ввода Image('cifar10_ddpmpp/eval/ode_images_10.png')
  выводится изображение:
  
  .....
  
  А более подробно все процессы можно рассмотреть здесь.
  https://colab.research.google.com/drive/1neY6OovzZELul9t2OTdThUitptNVnuHR?usp=sharing&ref=assemblyai.com#scrollTo=Fr7zLuJTYNbv
  
  Результаты
  
   PFGM достигает лучших показателей Inception score (9,68) и FID score (2,35)
   среди нормализующих моделей потока для CIFAR-10.
  
   PFGM работают в 10-20 раз быстрее, чем SDE-методы,
   использующие аналогичную архитектуру,
   при сохранении сопоставимого качества выборки.
  
   Обратное ОДУ в случае PFGM позволяет использовать
   множество различных архитектур.
  //// Что есть такое ОДУ?
  
   PFGM демонстрируют масштабируемость для создания изображений
   с более высоким разрешением.
  
  PFGM ++
  
  Вернемся к идее о создании (N+1)-мерного пространства
  для дальнейшего отображения точек в (N+1)-мерную полусферу (в моделях PFGM).
  
  Модель PFGM++ также предполагает создание (N+D)-мерного пространства.
  //// Ну вот, размерность можно увеличить и больше,
  //// но вопрос, что это дает и почему это происходит?
  
  Тут параметр D и является ключевым.
  //// Из рисунка видно стандартные диффузионные модели это модели фактически,
  //// точнее теоретически модели N+бесконечность размерности.
  //// Хотя не очень понятно почему, но вывод очень интересный и интригующий.
  //// придется где-то еще почитать об основании такого вывода.
  /////// В самой указанной заметке объяснений нет, есть просто такое утверждение.
  /////// Наверно, это очевидно для любого истинного "дата сатаниста",
  /////// и нет нужды пояснять такие "очевидные вещи" очередному "чайнику".
  
  Модель PFGM и стандартная диффузионная модель
  находятся на противоположных концах спектра:
  одна надежна, но сложна в обращении,
  другая проще, но менее надежна.
  
  PFGM ++ позволяет исследователям точно настраивать D,
  который управляет поведением модели.
  Этот параметр позволяет контролировать баланс
  между надежностью и ее способностью
  генерировать высококачественные изображения.
  
  Исследовательская группа провела обширные эксперименты,
  чтобы продемонстрировать эффективность PFGM ++.
  Они сравнили модели, обученные с различными значениями параметра D,
  включая D -> бесконечность (представляющие диффузионные модели),
  D = 64, D = 128, D = 2048 и даже D = 3072000.
  
  Модели с определенными значениями D,
  такими как 128 и 2048,
  неизменно превосходят современные диффузионные модели
  на эталонных наборах данных,
  таких как CIFAR-10 и FFHQ.
  В частности, модель с параметром D=2048
  достигла впечатляющей минимальной оценки FID в 1,91 балла на CIFAR-10,
  что значительно превосходит предыдущие диффузионные модели.
  
  Таким образом, PFGM++ представляет собой
  мощное обобщение диффузионных моделей,
  позволяющее пользователям генерировать изображения
  более высокого качества за счет повышения
  устойчивости генерации изображений
  к возмущениям и ошибкам обучения.
  
  Будем ждать Вас в комментариях! Спасибо за прочтение :)
  
  Автор: Черенковская Анастасия
  
  //// Жалко не могу поставить пять с плюсом.
  
  //// И ни одного комментария за 8 часов при почти тысяче просмотров.
  //// Очень показательно.
  
  //// Конец цитирования.
  
  В общем, для меня этот текст как "бальзам на душу",
  вполне согласуется и с давней концепцией "магических потенциалов",
  и "скрытым НАДпространством решения" с его последующей сверткой
  в латентное "сжатое" представление, с последующим расширением
  для целей обучения и конфигурация U*-Net
  и применение для расширение пространства представлений различных алгоритмов,
  включая фрактальное и обыкновенное сжатие,
  а не только каких-то "избранных физических процессов",
  и еще что-то - уже не помню.
  
  В общем, на мой взгляд, авторы этой работы приоткрывают
  целое новое направление в ПОНИМАНИИ того как МОГУТ работать нейросети,
  не только в задачах генерации изображений,
  но и с любыми другими данными.
  Ведь по сути предлагается дополнять исходные данные
  какой-то их сверткой/связкой/обобщением в явном виде,
  а не ждать "милостей от природы", то бишь что это как-то сделает сама нейросеть.
  Т.е. облегчить нейросети задачу, выполнив определенное "обобщение"/"связку"
  предварительно/принудительно, а нейросети оставив задачу поиска уже
  неявных/скрытых закономерностей/обобщений.
  
  Кстати, конструкцию трансформера, даже без позиционного кодирования,
  тоже ведь можно рассматривать как расширение пространства Q - query/запроса
  еще и дополнительными пространствами K - key/ключа и V - value/значения,
  которые можно рассматривать как своеобразные преобразования,
  в чем-то аналогичных "полю Пуассона".
  Может быть в этом кроется тайна успеха трансформеров?
  
  И, самое главное, что подтверждает этот текст,
  что возможность обучения нейросетей на последовательных примерах,
  трансформированных по определенным правилам весьма перспективна, см.
  "Диффузия" применительно к языковым моделям."
  
  Ах да, идея что бесконечномерное пространство представления/решения
  почему-то эквивалентно чисто случайному "диффузионному методу".
  Тут пока не понятно. И в тексте это не раскрыто,
  и в указанной ссылке информации не больше.
  Ну да ладно, мысль зафиксировалась, будем искать инфу где-то еще.
  Может быть это как-то связано с "Законом больших чисел",
  или еще с чем-то и статистики и теории вероятностей.
  
  "Все тайное когда-то станет явным",
  все скрытое станет ясным.
  
  P.S.
  Вот первый результат "мозгового штурма" по использованию
  обобщенного метода диффузии к совершенно иной задаче,
  не связанной с генерацией изображений:
  "Применение "потока Пуассона" для эмбеддингов."
  
  Уверен, что это далеко не последняя "конструкция",
  которая может вырасти из творческого осмысления
  метода "потока Пуассона", схемы U*-Net и обучения "методом диффузии",
  т.е. обучением на связанных каким-то преобразованием
  различных представлений одних и тех же данных.
  
  
  ========
  
  29.01.2024 9:05
  
  Еще одно описание метода "диффузии" для "чайников".
  В оглавление.
  
  Несмотря на кликбейтный заголовок достаточно неплохая статья
  полезная для проверки понимания того, что есть такое метод "диффузии":
  
  "Руководство по Stable Diffusion для начинающих (порнозвезд)".
  Автор: Squirrelfm (Igor Novikov)
  https://habr.com/ru/companies/raft/articles/789588/.
  29 янв 2024 в 7:59
  
  //// Начало цитирования.
  
  ......
  
  Снаружи вся эта генерация изображений искусственным интеллектом
  выглядит как черная магия.
  Как компьютер может генерировать настолько реалистичные изображения
  и делать это так быстро?
  Еще несколько лет назад это казалось совершенно невозможным.
  Неужели они просто наняли кучу художников в стране третьего мира,
  которые сидят где-то в ангаре в Камбодже
  и рисуют эти картинки с огромной скоростью?
  
  Нет, они этого не сделали (я надеюсь).
  Технология, которая стоит за всеми этими инновациями,
  называется Stable Diffusion,
  и в основе она довольно проста.
  Не нужно иметь степень мага из Хогвартса,
  чтобы понять ее на базовом уровне.
  Единственная магия здесь, как всегда, в ее простоте.
  
  В этой статье я собираюсь объяснить основные концепции,
  а следующая статья будет посвящена глубокому погружению в эту тему.
  
  .......
  
  Давайте начнем с небольшого экскурса в историю.
  Первые попытки генерировать изображения
  с помощью искусственного интеллекта относятся к нескольким десятилетиям назад
  и значительно эволюционировали со временем.
  Вычислительные мощности и количество данных были весьма ограничены в то время.
  Путь от простой генерации пары прямых линий
  до сложного, реалистичного синтеза изображений, который мы видим сегодня,
  включает несколько ключевых этапов:
  
  Каменный век (1950-е - 1980-е)
  
  Эра пещерных рисунков ИИ.
  Ранние нейронные сети были похожи на малышей с карандашами,
  рисующих простые каракули.
  Результаты были настолько удручающи,
  что Скайнет, дабы избежать позора, отправил Терминатора в прошлое,
  чтобы убить всех первых исследователей,
  и это вызвало Первую зиму ИИ
  https://en.wikipedia.org/wiki/AI_winter
  (подробнее об этом смотрите в предстоящем приквеле Терминатора от Джона Кэмерона).
  
  Неловкие подростковые годы (1980-е - 2000-е)
  
  После первой зимы ИИ интерес к нейронным сетям был возрожден
  благодаря работе таких исследователей, как Джон Хопфилд и Дэвид Румельхарт.
  Сети Хопфилда (1982) и машины Больцмана (1985) были значительным прорывом.
  
  Введение алгоритма обратного распространения (backpropagation) ошибки
  Румельхартом, Хинтоном и Уильямсом
  позволило нейронным сетям эффективно корректировать свои внутренние параметры
  и стало основой всего машинного обучения.
  
  Рекуррентные нейронные сети (Recurrent Neural Networks or RNN)
  и сети долговременной кратковременной памяти (Long Short-Term Memory or LSTM) (1990-е):
  RNN, предназначенные для обработки последовательностей данных,
  а не отдельных точек данных,
  стали прорывом в работе с зависимостями в последовательностях,
  что было критически важно для задач, таких как распознавание речи.
  В каком то смысле это был аналог человеческой памяти
  при обработке последовательностей.
  
  Несмотря на все это, вычислительной мощности все еще было недостаточно,
  и эти системы были практически бесполезны обычному человеку.
  
  Бум глубокого обучения (2000-е - 2010-е)
  
  Наступила эра сверточных нейронных сетей (Convolutional Neural Networks or CNN),
  что можно сравнить с появлением Фотошопа для художников.
  Основная идея заключалась в использовании небольших операций (подпрограмм),
  называемых "convolutions", для обработки изображений
  путем их применения к частям изображения
  для выявления определенных особенностей
  (features, например, колеса у автомобиля)
  до тех пор, пока не будет обработана каждая часть,
  вместо попытки обработать все изображение сразу.
  
  Это значительно снизило вычислительную сложность
  и сделало возможным использование нейронных сетей для полезных вещей.
  ИИ, вдруг, смог создавать изображения,
  которые не просто выглядели как абстрактные пятна.
  Коты выглядели как коты, а не как криво нарисованные картофелины.
  Но опять вычислительные ограничения не позволили широко использовать эти наработки.
  
  Этот период также ознаменовался разработкой
  и популяризацией фреймворков глубокого обучения,
  таких как TensorFlow (разработанный командой Google Brain),
  Keras и PyTorch (за что им большой респект).
  
  Появление роботов художников (2014)
  
  На сцену вышли генеративно-состязательные сети
  (Generative Adversarial Networks или GAN),
  и это было как будто ИИ поступил в художественную школу.
  
  Иан Гудфеллоу и его коллеги представили GAN,
  что стало крупным прорывом,
  несмотря на несколько пугающее название.
  GAN состоит из двух частей:
  генератора и дискриминатора.
  Генератор создает изображения из случайного шума,
  а дискриминатор оценивает их по сравнению с реальными изображениями.
  Генератор был увлеченным художником,
  рисующим вовсю, а дискриминатор - строгим, носящим очки критиком,
  постоянно говорящим: "Мда.. ты можешь лучше".
  
  Две сети обучаются одновременно в виде своего рода соревнования:
  генератор учится производить более реалистичные изображения,
  а дискриминатор учится лучше различать реальные изображения от подделок.
  GAN использовались для создания высокореалистичных изображений,
  создания искусства и даже дизайна одежды.
  
  Примерно в то же время на вечеринку пришли вариационные автокодировщики
  (Variational Autoencoders или VAE).
  VAE предназначены для создания новых образцов данных,
  изучая представление входных данных в скрытом пространстве.
  Они кодируют входные данные в сжатое представление,
  а затем декодируют это представление обратно в исходный формат данных
  (я знаю, сейчас это звучит как бред, не волнуйтесь - я объясню это подробно).
  
  Ренессанс (конец 2010-х - сейчас)
  
  С развитием продвинутых моделей, таких как DeepDream от Google,
  ИИ начал производить изображения, которые выглядели так,
  как будто Сальвадор Дали и Ван Гог зачали ребенка в киберпространстве.
  DALL-E от OpenAI начал превращать случайные тексты
  вроде "кресло в форме авокадо" в настоящее искусство.
  А StyleGAN от NVIDIA?
  Он начал производить лица людей, которых не существует,
  заставляя вас задуматься,
  не является ли ваш следующий матч на Tinder просто плодом воображения ИИ.
  
  Первая модель Stable Diffusion, аналогичного типа генеративной модели ИИ,
  была выпущена в публичное пространство компанией Stability AI
  в августе 2022 года.
  
  Stable Diffusion
  
  Как вы знаете из моих предыдущих статей,
  в мире ИИ именованием вещей заведуют какие то маньяки.
  По лучшим традициям масонов все называется так,
  чтобы никто не догадался, что означает что,
  и разработчики в AI могли оправдать свои огромные зарплаты.
  Я рад сообщить, что Stable Diffusion
  - счастливое исключение: название полностью логично.
  
  Stable Diffusion - это название,
  отражающее основные технологии и принципы этой архитектуры ИИ:
  
  Стабильность (Stable):
  Этот термин относится к стабильности генерируемых изображений
  и процесса их создания,
  что означает, что модель производит последовательные полезные результаты
  и менее склонна к непредсказуемому поведению.
  Это избыточная часть названия - конечно, она стабильна,
  зачем бы я использовал нестабильную?
  Это как назвать автомобиль "стабильным автомобилем".
  Но, по крайней мере, это логично.
  
  Диффузия (Diffusion): Это ключ к пониманию магии.
  Термин "диффузия" происходит от процесса диффузии
  (растекания, растворения),
  используемого в архитектуре модели.
  Модели диффузии учатся генерировать данные,
  обращая вспять процесс диффузии.
  Этот учебный процесс обычно начинается с реального изображения,
  к которому постепенно добавляется случайный шум,
  пока исходные данные полностью не размываются (diffuse) в нем.
  Затем модель учится обращать этот процесс,
  начиная со случайного шума
  и постепенно формируя оригинальное изображение,
  соответствующее данному вводу или запросу.
  
  Вот аналогия:
  скульптор смотрит на бесформенный кусок мрамора (чистый шум),
  но видит в нем прекрасную скульптуру.
  Поэтому он удаляет лишние части (излишний шум),
  чтобы проявить скульптуру.
  Таким образом, в некотором смысле,
  он де-ноизирует кусок камня в скульптуру.
  А как он увидел скульптуру в куске камня?
  Он был обучен видеть это
  (опять же, никакой магии ??).
  В некотором смысле, он видит скульптуры во всем,
  как человек с молотком везде видит гвоздь.
  
  Рис. Cгенерировано с использованием Stable Diffusion
  
  Таким образом, "Stable Diffusion" как название охватывает
  идею генеративной модели ИИ,
  которая стабильно производит высококачественные изображения
  через процесс диффузии.
  
  Теперь давайте посмотрим, как это происходит внутри.
  
  Обучающий набор
  
  Модели диффузии учатся генерировать данные, обращая процесс диффузии.
  Модель учится превращать случайный шум в связное изображение,
  соответствующее данному запросу.
  //// Формально вроде верно - действительно начало генерации
  //// стартует с картинки заполненной шумом.
  //// Но говорить, что она "превращает" шум в "связное изображение",
  //// это та самая "простота", которая зачастую хуже "воровства".
  //// В данном случае такое представление лишает ситуацию возможности "понимания".
  
  Так что нам действительно нужно, чтобы это сделать возможным,
  - это разработать процесс обучения такой модели.
  Чтобы обучить модель, нам нужны данные для обучения. Какие данные?
  
  Ну, как указано выше, нам нужно много пар изображений,
  где первое изображение - просто шум,
  а второе - осмысленное изображение,
  которое можно получить из этого шума,
  используя заданный промпт,
  что-то вроде такого:
  
  Рис. Промпт: сгенерировать логотип компании Raft в виде осьминога-диджея
  
  Итак, имея промпт и изображение с случайным шумом - и желаемый результат,
  мы можем обучать модель,
  используя стандартные методы Машинного Обучения,
  такие как градиентный спуск,
  чтобы предсказать изображение из данного шума.
  Легко, правда?
  Ну, не совсем так.
  
  Во-первых, где, черт возьми, мы возьмем этот обучающий набор.
  Обучающие наборы часто первоначально создаются людьми.
  Но в этом случае, как человек должен решить,
  что какое-то конкретное шумное изображение,
  например, как-то напоминает осьминога-диджея?
  Это довольно сложно, если вы не находитесь под воздействием веществ.
  
  Но исследователи были действительно изобретательны:
  они решили - а почему бы нам не сделать наоборот?
  Почему бы нам не взять реальное изображение и добавить к нему шум.
  Таким образом, мы знаем желаемый результат с самого начала
  и знаем точное количество добавленного шума.
  Это же гениально...
  
  И используя это шумное изображение,
  мы можем легко предсказать,
  как оно должно быть преобразовано в реальное изображение.
  Как удобно...
  
  Таким образом, мы можем генерировать сотни, тысячи обучающих изображений
  за секунду.
  //// Т.е. нейронка обучается не "шуму", а "тысячам обучающих изображений"
  //// полученных в результате "зашумления" исходной картинки.
  //// И при этом, самое главное, СВЯЗАННЫХ с ОДНИМ И ТЕМ ЖЕ промптом.
  
  -------
  
  Обучение
  
  Теперь, когда у нас есть наш обучающий набор,
  как мы его используем?
  Нам нужно обучить модель, которая, имея шумное изображение и запрос,
  будет предсказывать добавленный к изображению шум,
  чтобы мы могли затем вычесть (удалить) шум с изображения
  и раскрыть оригинал:
  //// И вот опять все же та "простота", которая сильно "зашумляет понимание",
  //// не позволяя "вычесть шум" из самого описания процесса генерации.
  
  Рис. Предсказание шума и удаление его из изображения
  
  Таким образом, нам нужна модель, которая говорит
  - для этого случайного шумного изображения вам нужно сделать эти пиксели темнее,
  а эти светлее, чтобы получить осьминога-DJ.
  //// А вот это уже более понятно, особенно если задуматься,
  //// на основании чего возникают такие корректировки.
  
  Модели не работают с пикселями, поэтому нам нужно преобразовать изображения
  в форму, которую модель может понять.
  К счастью, изображение - это просто матрица с цветами пикселей,
  где цвет - это просто число:
  
  И модель - это просто огромная функция с множеством параметров,
  которая работает с матрицами
  (технически с тензорами, которые являются матрицами с N измерениями).
  
  Мы обучаем модель, предоставляя ей входные данные (изображение c шумом),
  заставляя ее предсказывать вывод (она будет предсказывать добавленный шум)
  //// Да не "шум" она предсказывает, а корректировку одного "зашумленного изображения"
  //// к чуть менее "зашумленному".
  и рассчитывая ошибку (потери) для этого вывода.
  Потери будут разницей между выводом модели
  и фактическим добавленным шумом (поскольку мы знаем, что мы добавили).
  //// Уф кажется понял, почему это называется "предсказанием шума",
  //// так построена модель обучения, а на самом деле это "инверсия"/"проекция"
  //// от внесенных изменений. И по факту является как-бы
  //// "дифференциальным негативом" зашумленной картинки.
  //// Т.е. можно учить нейронку и так.
  //// Так это вроде понятно, а теперь надо понять как это используется.
  Упрощенно,
  это среднее разницы всех пикселей в выводе модели и фактическом шуме:
  
  function loss_for_images(image_bytes1, image_bytes2):
   var result:Float = 0;
   for (i=0; i < image_bytes1.Length; i++):
   result = image_bytes1[i] - image_bytes2[i];
   return result/image_bytes1.Length;
  
  Эта функция - это показатель того,
  насколько хорош наш предсказанный шум.
  Теперь, когда у нас есть функция оценки,
  мы можем поочередно подавать обучающие шумные изображения
  нашей нейросетевой модели и улучшать потери на каждой итерации,
  используя различные техники, такие как градиентный спуск.
  
  Одна вещь, которую нужно отметить - мы не делаем это за один шаг.
  Мы де-ноизируем маленькими итеративными шагами
  (концепция, аналогичная скорости обучения learning rate в NLP).
  Если вы читали мою статью о градиентном спуске,
  вы помните это изображение:
  
  Рис. Перепрыгнул
  
  Если двигаться слишком быстро, обычно это приводит
  к не очень хорошим результатам
  из-за природы используемых под капотом техник оптимизации.
  Вместо этого используются такие приемы как временные шаги (t или timesteps).
  Это не имеет ничего общего со временем (как и следовало ожидать),
  вместо этого происходит следующее:
  //// Понятно. Именно последовательность обучения одной и той же нейронки
  //// на разных шагах "зашумления" и есть "корень магии диффузии",
  //// а вовсе не "предсказание шума".
  //// Т.е. нейронка обучается какому-то обобщенному представлению картинки,
  //// устойчивой к "шуму", точнее имеющей возможности "прорасти" из любого
  //// начального состояния.
  
  Мы берем эту функцию, где на каждом шаге есть некоторое количество шума.
  Для шага t номер 3 шума много, а для t = 40 - гораздо меньше.
  Этот t сообщает модели, сколько шума было добавлено
  (но только сколько, а не точный шум, который был добавлен).
  Мы будем использовать t во время обучения и генерации изображений.
  В моделях диффузии есть двухфазный процесс:
  фаза добавления шума (шумопроизводящая)
  и фаза удаления шума (де-ноизирующая).
  
   Процесс добавления шума:
  
   В процессе добавления шума модель обучается постепенно добавлять шум
   к оригинальным изображениям на протяжении ряда дискретных шагов.
   Этот процесс превращает изображение в состояние чистого шума
   к последнему шагу.
  
   На каждом временном шаге к данным добавляется небольшое количество шума.
   К концу процесса добавления шума исходные данные полностью преобразуются в шум.
   Это преобразование осваивается контролируемым образом,
   позволяя модели понять переход от данных к шуму.
  
   Процесс удаления шума:
  
   В процессе удаления шума модель обучается обращать процесс добавления шума:
   начиная с шума и постепенно удаляя его,
  //// Да не "шум" удаляется, а "зашумленная" картинка корректируется так,
  //// чтобы следующая картинка выглядела менее "зашумленной",
  //// в соответствии с теми закономерностями, которые были выучены
  //// на ПОСЛЕДОВАТЕЛЬНОСТИ СВЯЗАННЫХ "зашумленных изображений".
  //// Это можно представить как последовательное все более и более
  //// "контрастных фильтров".
   чтобы воссоздать оригинальные данные.
   Это более критическая часть для генерации новых данных.
  
   Во время обучения модель учится предсказывать
   менее шумную версию изображения на каждом временном шаге,
   эффективно обучаясь обращать добавление шума.
  //// Это еще один самостоятельный этап обучения нейронки.
   Модель делает предсказания на каждом временном шаге,
   чтобы постепенно воссоздать исходные данные из шума.
  
  Модель, по сути, учится наблюдая за тем,
   как данные деградируют со временем (как добавляется шум),
  модель учится важным особенностям данных на разных уровнях шума.
  //// Вот с этим полностью согласен.
  //// Т.е. фактически на искусственно созданных "зашумленных данных".
  //// В других методах обучения это называется аугментация данных,
  //// а здесь "зашумление", что более точно отражает способ "аугментации".
  
  Ключ к обучению - научить модель обращать этот процесс.
  Она должна предсказывать, как данные выглядели на один шаг ранее
  в процессе добавления шума,
  постепенно 'де-ноизируя' их обратно к их оригинальной форме.
  Временные шаги предлагают контролируемый путь для модели,
  чтобы научиться этому сложному преобразованию.
  Они разбивают процесс на более мелкие, управляемые шаги,
  делая процесс обучения легче для модели,
  чтобы она могла освоить сложные паттерны данных.
  //// Понятное и доступное объяснение.
  //// Не "предсказывать вероятностный шум", а предсказывать данные,
  //// с учетом их вероятностной зашумленности.
  //// Мне такая формулировка более понятна,.
  
  Рис. Обычно процесс происходит за несколько итераций
  
  Если вы когда-либо использовали Midjourney,
  то уже наблюдали этот итеративный процесс.
  
  --------
  
  Это базовая идея, но есть несколько технических трудностей.
  При обучении модели, как вы помните,
  мы должны как-то учитывать вторую часть входных данных модели - промпт.
  То есть, как обучить модель так,
  чтобы она генерировала изображения, связанные с запросом,
  а не то, что она сама хочет сгенерировать?
  //// А вот этот тезис стоило бы поместить выше,
  //// ДО описания "диффузионного обучения",
  //// так как, по факту, обучение нейронки "зашумленным картинкам"
  //// происходит в комплекте с промптом, а не просто сама по себе.
  //// Хотя может быть я и не прав, и процессы обучения "картинке"
  //// и текстовому промту можно как-то провести раздельно,
  //// а потом их как-то "скрестить".
  //// Хотя представляется, что это менее "прозрачно" для понимания.
  
  Изображение шума случайно (в начале процесса генерации),
  так что если мы не обучим модель следовать инструкциям,
  она будет генерировать красивые, но случайные изображения.
  Как она понимает, как нарисовать текстовое описание,
  особенно странные вещи как осьминог-диджей?
  
  Настало время слону прыгнуть через обруч,
  так как тут появляется второй гениальный трюк:
  
  CLIP
  
  Термин "кодировщик CLIP" относится к
  Контрастному Языковому-Изобразительному Предобучению
  (Contrastive Language-Image Pretraining).
  Он предназначен для работы с двумя типами данных:
  изображениями и текстом,
  и преобразования этих двух типов данных в общее,
  общее векторное представление (embedding),
  где они могут быть сравнены и сопоставлены.
  
  Кодировщик CLIP обычно состоит из глубокой нейронной сети,
  часто основанной на архитектуре сверточной нейронной сети (CNN)
  для обработки изображений и архитектуре,
  основанной на трансформере, для обработки текста.
  Эти компоненты объединяются для создания мультимодального кодировщика
  (т.е. кодировщика , понимающего несколько модальностей,
  как мы например можем понимать русский и английский язык).
  
  А теперь простыми словами:
  
  Нам нужна модель, которой если вы дадите изображение
  (скажем, нашего Осьминога)
  - она вернет вам embedding или вектор чисел,
  представляющий это изображение:
  
  И если вы дадите ей текстовую строку, скажем "Осьминог DJ",
  она даст вам тот же вектор
  
  Как она решает, каким должен быть вектор, не важно,
  //// А вот для меня очень интересно это понять.
  пока она возвращает тот же вектор для изображений
  и текстового представления этих изображений
  (технически это не так,
  они не будут точно такими же,
  просто достаточно близкими в векторном пространстве - см. ниже).
  //// И опять же в этом месте у меня куча вопросов.
  Если у вас есть это, вы можете затем передать этот вектор в нашу первую модель
  (ту, что предсказывает шум) как параметр для обучения.
  Тогда модель научится,
  что определенные векторы на входе соответствуют определенным изображениям
  (Осьминог в нашем случае).
  //// Да но как она оформит в виде ди-джея. Вот в чем вопрос.
  //// Как синтезируются различные "концепты" в единое изображение,
  //// если обучение было только на картинках чистых осьминогов из "аквариума",
  //// и чистых ди-джеев с молодежной тусовки?
  
  Как получить модель CLIP?
  Она на самом деле состоит из двух пар:
  текстового кодировщика и кодировщика изображений:
  
   Текстовый кодировщик кодирует текст в векторное представление (embedding).
  
   Кодировщик изображений кодирует изображения в векторное представление (embedding).
  
   Текстовый кодировщик кодирует текст в векторное представление (embedding).
  
   Кодировщик изображений кодирует изображения в векторное представление (embedding).
  
  //// Не понял при чем здесь повтор строчек. Так надо или это "очепятка"?
  
  Теперь мы берем много пар текста и изображений,
  представляющих этот текст, и преобразуем их в встраивания
  с помощью двух вышеупомянутых кодировщиков.
  Затем мы подаем их в нашу модель CLIP,
  которая будет учиться, используя функцию контрастной потери
  (contrastive loss function).
  //// Интересная "деталь" о которой раньше в текстах про "дииффузионки"
  //// не упоминалось.
  Эта функция побуждает модель размещать соответствующие
  пары изображений и текста ближе друг к другу
  в векторном пространстве и отталкивать
  несоответствующие пары дальше друг от друга.
  //// С этим надо будет еще по-разбираться, так как тут похоже есть
  //// интересные "детали".
  По сути, функция потери в этом случае рассчитывает число (оценку) того,
  насколько похож данный текст на данное изображение
  (оба передаются как параметры).
  Если они похожи - оценка хорошая,
  и эти два должны быть близки в векторном пространстве:
  
  ......
  
  Как вы можете видеть, наше изображение и текст "Осьминог DJ" близки,
  в то время как "Белка DJ" и просто картинка осьминога далеки друг от друга
  в нашем 2D-пространстве.
  
  Если поразмыслить, это как бы тот же процесс,
  который происходит в вашей голове.
  Если вы думаете о слове "кролик" и если вы представляете
  себе изображение кролика -
  примерно та же область вашего мозга активируется.
  Где-то в вашем разуме есть представление о кролике.
  Модель CLIP возвращает представление этой идеи в виде эмбеддинга,
  и мы обучаем нашу модель работать в пространстве идей,
  а не в пространстве изображений или текста.
  //// А что такое "расстояние" в "пространстве идей"?
  //// Как функция "контрастной потери" оперирует этими расстояниями,
  //// для которых у нас нет даже представления?
  И поэтому она затем может сочетать авокадо и стул в идее авокадового стула.
  
  Или на псевдокоде:
  
  def clip_embedding(image or text)
   ...
   return result_embedding # возвращает похожие встраивания для похожих текстов и изображений
  
  Если вы действительно хотите знать, как это происходит внутри,
  вот ниже немного математики
  (не важно для понимания, так что вы можете спокойно пропустить):
  
  Сontrastive loss function
  
  Контрастная потеря
  
  Основная идея контрастной потери
  - обеспечить, чтобы похожие или "положительные" пары
  точек данных приближались друг к другу
  в пространстве встраивания,
  в то время как непохожие или "отрицательные" пары
  отталкивались друг от друга.
  Вот как это обычно работает:
  
  Где:
  
  ......
  
   (i, j) - представляет пару точек данных.
  
   y - это бинарная метка, указывающая на то, похожа ли пара (1) или нет (0).
  
   D(i, j) - это мера расстояния между встраиваниями точек i и j
   (часто это евклидово расстояние,
   но в моделях диффузии чаще используется косинусное сходство).
  
   m - это граница, определяющая, насколько далеко должны быть друг от друга
   непохожие точки.
   Если расстояние между непохожими точками больше m,
   их вклад в потерю равен нулю.
  
  Как используется контрастная потеря:
  
   Для каждого изображения в обучающем пакете
   соответствующее текстовое описание формирует положительную пару.
   Цель модели - приблизить встраивания этих пар друг к другу.
  
   Одновременно каждое изображение сопоставляется с текстами,
   которые его не описывают (и наоборот),
   формируя отрицательные пары.
   Модель пытается оттолкнуть встраивания этих пар друг от друга.
  
   Расчет потерь:
   Контрастная потеря вычисляется путем измерения того,
   насколько хорошо модель выполняет эту задачу по всем парам в пакете,
   а затем запускается обратное распространение.
   Цель - минимизировать эту потерю,
   эффективно обучая модель правильно ассоциировать тексты
   с соответствующими им изображениями.
  
  И теперь мы можем передать это встраивание в нашу модель де-ноизации выше,
  чтобы она знала, что, по нашему мнению,
  скрывается в этом изображении со случайным шумом.
  
  Latens и VAE
  
  Как я обещал, вот объяснение вариационных автоэнкодеров
  (Variational Autoencoders или VAE).
  Авто-энкодер - это архитектура нейронной сети,
  состоящая из кодировщика и декодера.
  Кодировщик берет входную точку данных
  и сжимает ее в представление скрытого (latent) пространства (кодирование).
  Затем декодер берет это кодирование
  и пытается воссоздать исходный ввод.
  
  Скрытое пространство (latent space)
  - это пространство с меньшей размерностью,
  куда кодировщик отображает входные данные.
  Его часто называют "скрытым представлением".
  
  А теперь простыми словами:
  
  Кодировщик сжимает изображение в скрытое (меньшее) пространство,
  а декодер восстанавливает его до оригинального размера.
  Вот и все.
  За исключением того, что это делается не с помощью сжатия jpeg,
  а с помощью нейронной сети, обученной делать это.
  
  Это сжатие с потерями, что означает,
  что восстановленное изображение не будет точно таким же, как оригинальное
  - некоторые детали будут потеряны!
  Но для наших целей это не важно.
  Важно то, что (в отличие от jpeg)
  сеть будет уменьшать исходное изображение,
  сохраняя все важные особенности
  (вещи, важные для этого изображения, например, что это колесо автомобиля,
  а это бампер, и глобальная композиция частей тоже).
  Фактически, она создаст отдельные слои на выходе
  для этих особенностей (features).
  Она способна улавливать как локальные,
  так и глобальные особенности изображения,
  поэтому она сжимает очень по умному!
  //// А вот как именно и за счет чего происходит это "умное сжатие"
  //// как-то все "стесняются рассказать". А ведь это "сердцевина" этой "магии".
  
  .....
  
  Зачем нам это нужно?
  Ну, как вы помните, чтобы обучить модель де-ноизации,
  нам нужно подавать ей изображения.
  Если мы подаем реальные изображения,
  которые обычно имеют огромное разрешение (1024x1024 и выше)
  - нам понадобится слишком много вычислительной мощности для обучения!
  Оказывается, мы можем обучаться на данных меньшего размера
  (если они захватывают все важные особенности)
  с аналогичными результатами!
  Это имеет смысл, ведь не размер изображения важен -
  важно, насколько точно изображение отображает то, что на нем изображено.
  
  Итак, результирующая архитектура выглядит так:
  
   Кодировщик:
   Часть кодировщика отвечает за извлечение высокоуровневых особенностей
   и пространственной информации из входного изображения.
   Обычно он состоит из нескольких сверточных слоев,
   часто расположенных таким образом, чтобы уменьшать пространственные размеры,
   увеличивая количество каналов (особенностей).
  
   Декодер:
   Часть декодера отвечает за увеличение размера карт особенностей.
   Он зеркально повторяет архитектуру кодировщика,
   но в обратном порядке.
   Он состоит из нескольких слоев, которые постепенно увеличивают
   пространственные размеры, уменьшая количество каналов.
  
  Эта архитектура называется UNet, и Stable Diffusion основана на UNet.
  
  .......
  
  //// Конец цитирования.
  
  В целом достаточно понятно, но многие ключевые вопросы
  так и остались за гранью рассмотрения.
  
  
  ========
  
  04.02.2024 15:40
  
  Новое направление в работе с мультимодальными эмбеддингами.
  В оглавление.
  
  С учетом текущей ориентации проекта "Металоция" на анализ "эмбеддингов",
  не могу пройти мимо хоть и не очень информативной,
  но примечательной заметки по работе с эмбеддингами мультимодальных моделей:
  
  "YOLO-World: распознавание произвольного числа объектов
  с высокой точностью и скоростью".
  Автор: vladoossss (Владислав)
  https://habr.com/ru/articles/791154/.
  03 фев 2024 17:32
  
  //// Начало цитирования.
  
  Буквально несколько дней назад была представлена новая модель семейства Yolo.
  Ее основная фишка заключается в том,
  что в отличие от своих старших братьев,
  она способна распознавать на изображении фактически любые объекты
  (которые интересуют человека)
  без предварительного обучения
  и делает она это в real-time режиме!
  Звучит неплохо, не так ли?
  
  В этой статье мы попробуем разобраться,
  что же за магия скрывается внутри новой архитектуры.
  Сразу оговорюсь, что статья будет носить
  скорее ознакомительный характер с моделью,
  поэтому любителям строгой математики после прочтения
  я рекомендую ознакомиться с оригинальной статьей.
  https://arxiv.org/pdf/2401.17270.pdf
  Но перед тем, как начать обзор,
  давайте узнаем/освежим в памяти основные типы задач
  детекции объектов на изображении.
  
  Типы задач детекции
  
  Думаю, многие из читателей,
  которые уже немного знакомы со сферой Computer Vision,
  представляя задачу детекции,
  подразумевают традиционный object detection.
  При таком подходе модель способна детектировать на изображениях
  строго заданный заранее список объектов,
  на котором она обучалась:
  
  .......
  
  Другим типом, который в последние годы набирает популярность
  в виду большей гибкости,
  а также зачастую отличной работы без предварительного дообучения,
  является, так называемый open vocabulary object detection.
  Основная идея детекторов, решающих задачу распознавания с "открытым словарем",
  является использование не самих целочисленных меток классов,
  а эмбеддингов (векторных представлений)
  названий этих классов.
  Благодаря этому они могут находить даже те классы,
  которые не были явно заданы заранее,
  а также хорошо работать с фразами.
  Например, мы можем заставить модель искать не просто котов,
  а конкретную породу, даже если ее не было в обучении.
  Такие детекторы способны находить практически
  неограниченное число классов объектов на изображении:
  
  .......
  
  Здесь стоит отметить, что, говоря неограниченное,
  мы подразумеваем, что человек в любом случае должен определить
  список объектов, которые он хочет распознавать,
  но этот список может быть сколь угодно большим (фактически конечным).
  К примеру, таким детекторам можно передать
  21 тысячу наименований классов
  из полного датасета ImageNet
  и они действительно будут пытаться распознать каждый из них!
  
  Как уже было отмечено в начале,
  герой данной статьи Yolo-world как раз-таки относится
  к детекторам, способным решать более интересную вторую задачу.
  Но авторы статьи пошли дальше
  и предложили использовать так называемый prompt-then-detect подход.
  Это означает, что если ранее мы один раз создавали
  большой список интересующих нас слов
  (online vocabulary, векторы в котором статичны),
  то теперь мы формируем так называемые промты,
  которые кодируются в offline vocabulary
  и уже эти эмбеддинги идут далее по пайплайну.
  Такой подход позволяет уменьшить количество вычислений для каждого ввода,
  а также обеспечивает гибкость, корректируя словарь по мере необходимости.
  
  ..........
  
  Итак, осознав потенциал новой модели,
  думаю многим не терпится перейти к разбору самой архитектуры
  и понять, в чем же ее основные особенности.
  Скорее приступим!
  
  Архитектура
  
  Как и многие современные нейросетевые архитектуры,
  YOLO-World можно разбить на множество отдельных блоков.
  Давайте подробнее остановимся на некоторых из них.
  
  .......
  
  YOLO Detector
  
  Здесь все просто:
  для извлечения фичей изображения используется относительно новая YOLOv8.
  Она же в свою очередь содержит backbone Darknet в качестве кодировщика
  и сеть PAN для формирования multi-scale фичей.
  
  Text Encoder
  
  Для получения эмбеддингов текста используется
  уже хорошо зарекомендовавший себя CLIP,
  а именно его трансформер для кодировки текста.
  Кодировщик CLIP формирует векторы текстов так,
  чтобы их можно было хорошо сопоставить с соответствующими им
  векторными представлениями изображений
  (высокое косинусное сходство).
  
  Re-parameterizable Vision-Language PAN
  
  Пожалуй, основной и главный строительный блок всей архитектуры.
  Состоит он из top-down и bottom-up частей,
  внутри которых производится сопоставление
  ранее извлеченных текстовых эмбеддингов
  и multi-scale фичей изображения.
  
  Блок внутри себя включает 2 основных компонента:
  CSPLayer и Image-Pooling Attention.
  Говоря обывательским языком,
  первый пытается добавить языковую информацию в элементы изображения,
  а второй наоборот, заложить информацию с изображения в текстовые эмбеддинги:
  //// Интересный подход - двухпоточная трансформация эмбеддингов.
  
  После RepVL-PAN следуют блоки Box Head и Text Contrastive Head.
  Если первый, очевидно, предсказывает ограничительные рамки объектов,
  то второй их эмбеддинги (на основании близости объект-текст).
  
  Таким образом, в конце пайплайна мы имеем ограничительные рамки
  и эмбеддинги объектов на изображении,
  а также векторы текстов классов,
  которые хотим обнаружить.
  С помощью своего рода мэтчинга,
  сравнивая попарные близости полученных векторов в рамках боксов,
  на выходе получим список найденных классов
  с соответствующими вероятностями
  (при заданном пороге близости).
  
  В первом приближении это все про саму модель!
  Для того, чтобы не усложнять изложения обзора,
  я не стал приводить формул и строгих математических выкладок.
  Желающих разобраться во всех деталях и тонкостях
  я отправляю к прочтению оригинальной статьи.
  
  Там же можно ознакомиться с тем, как все это обучается
  с помощью Region-Text Contrastive Loss,
  а также найти описание множества экспериментов
  по дообучению под конкретные задачи на разных датасетах
  для сравнения с предыдущими решениями.
  
  Точность и скорость работы
  
  Конечно, архитектура - это хорошо,
  но какие же метрики показывает новая SOTA в распознавании объектов?
  Здесь авторы не оставили нас без Speed-Accuracy графика,
  который без лишней скромности заявляет
  о повышении производительности в 20 раз,
  при как минимум сопоставимой точности(mAP),
  измеренной на датасете LVIS:
  
  Такое существенное улучшение в производительности,
  в первую очередь связано с легковесным Yolo backbone,
  который необходим для извлечения фичей изображения,
  в то время как предыдущие архитектуры для этих целей
  использовали более тяжелые трансформеры (например, Swin).
  
  Качество распознавания вполне объяснимо главным блоком (RepVL-PAN),
  который использует многоуровневое кросс-модальное объединение фичей
  (тексты и картинки).
  
  Заключение
  
  В конце хочется отдельно обозначить особенности нового YOLO-World детектора:
  
  Способен распознавать неограниченное число объектов
  (в том числе фразы) из коробки
  
  Самая большая large модель показывает real-time скорость на инференсе
  (первая сеть с таким показателем для задачи OVD)
  
  Использует под капотом как устоявшиеся архитектуры (Yolov8, CLIP),
  так и потенциально многообещающие новые (RepVL-PAN).
  
  От себя могу дополнить,
  что если вас интересует хорошее решение для распознавания объектов
  любой природы
  и при этом вы не располагаете большим объемом данных для обучения
  традиционных детекторов
  (или данных нет совсем),
  смело можете смотреть в сторону использования данной модели!
  
  Ну и конечно же, у тех, кто дочитал до конца, мог остаться вопрос:
  а есть ли открытый код?
  К счастью, ответ положительный!
  Правда на момент написания статьи код с инференсом еще не доступен,
  https://github.com/AILab-CVC/YOLO-World
  да и тот, что есть может быть еще сыроватым.
  Но веса моделей уже выложены в открытый доступ,
  так что особо любопытные могут смело экспериментировать)
  
  Полезные ссылки:
  
  Оригинальная статья
  https://arxiv.org/pdf/2401.17270.pdf
  
  Гитхаб репозиторий
  https://github.com/AILab-CVC/YOLO-World
  
  Демо на huggingface
  https://huggingface.co/spaces/stevengrove/YOLO-World
  
  ........
  
  //// Из комментариев.
  
  Dynasaur
  4 фев в 20:57
  
  Всё же она ищет среди знакомых ей классов (чуда не случилось).
  В чём идея обнаружения незнакомых классов и как это должно работать?
  
  vladoossss
  5 фев в 10:32
  
  В конце пайплайна модель пытается сопоставить
  эмбеддинги отдельных боксов на изображении
  c эмбеддингами текстов из офлайн словаря.
  По факту, для того чтобы с высокой вероятностью
  правильно классифицировать объект,
  она должна сформировать эти векторы так,
  чтобы они относительно точно определяли друг друга.
  Но этого эффекта можно достичь,
  если модель в ходе обучения видела хотя бы примерно похожие сопоставления.
  
  Например, для класса "колесо" ей нужно видеть
  не только колеса классических авто,
  но и какие-то конструкции, хотя бы отдаленно напоминающие колеса марсохода.
  
  Таким образом, однозначно заявлять о работе модели
  с совсем неизвестными классами нельзя.
  В ходе обучения, она, как минимум, должна усвоить
  основные паттерны сопоставления.
  Но уникальность таких OVD моделей как раз в том,
  что они способны формировать эти паттерны,
  в то время как традиционные детекторы работают
  со строго фиксированной выборкой классов.
  
  Касательно данного примера,
  то если вы точно знаете наименования классов, которые хотите искать,
  то имеет смысл оставить только их,
  формируя тем самым "максимально" подходящий офлайн словарь.
  
  ......
  
  Dynasaur
  6 фев в 00:27
  
  Ну, то есть, она ищет среди фиксированного набора известных ей классов
  (а как иначе?).
  А раньше, в какой-нибудь yolo5 или yolo8 было как-то иначе?
  Что принципиально поменялось?
  
  \\\ Благодаря этому они могут находить даже те классы,
  \\\ которые не были явно заданы заранее
  
  Давайте на каком-нибудь примере посмотрим как она найдёт некий класс,
  который не был явно задан заранее.
  Я думал, марсоход, как раз такой пример.
  
  
  ilye
  8 фев в 08:49
  
  Чуда ожидать не стоит, но все же...
  
  Вас же не удивляет, что всякие диффузеры генерят осмысленную картинку?
  Значит в целом нейросети уже научились определять,
  что именно на картинке изображено.
  В случае stable diffusion этим занимается сетка clip
  - она по картинке делает эмбеддинг,
  и по фразе делает эмбеддинг
  и сличает, насколько эти эмбединги похожи.
  При генерации меняет картинку так,
  что бы ее эмбединг был сильнее похож на текстовый.
  
  Тут собственно почти тоже самое,
  что мешает натренировать сеть искать кусок изображения,
  который при свертке clip даст эмбеддинг максимально похожий на текстовый?
  
  Clip при этом тренировалась не на классах,
  а на картинках с описанием.
  Конечно, если нигде в этом наборе объект который вы ищете не встречался,
  то clip и yola из статьи не сработает.
  И сейчас все сетки с открытым множеством находят много лишнего,
  но думаю еще не много и это доделают.
  
  Вот тут еще пример такой сетки
  https://ashkamath.github.io/mdetr_page/
  
  ......
  
  //// Конец цитирования.
  
  В этой статье меня больше всего заинтересовала
  возможность "двухпоточной" работы с мультимодальными эмбеддингами.
  Заставляет задуматься о возможности работать с эмбеддингами
  в разных "проекциях" и соответственно с разными его представлениями,
  но имеющими какую-то общую основу.
  
  А если посмотреть на этот "мультимодальный эмбеддинг",
  как на способ реализации СИСТЕМЫ знаний/возможностей ИИ-системы,
  то ощущается какая-то связь с рассматриваемым комплексным обучением нейронок в
  "Еще одна "безумная идея" о мультимоделях."
  Только отличие в том, что обучение в таком направлении
  оказалось, по факту, реализованным не в универсальных больших языковых моделях,
  а в специализированных нейронках обработки изображений.
  Хотя это и не очень удивительно
  - так чаще всего и происходит в реальной технике -
  что-то имеющее общезначимый потенциал первоначально проявляется
  в каком-то узкоспециализированном решении.
  
  В общем, вырисовалось еще одно направление поиска
  - способы объединения и, наоборот, разделения текстовых и графических эмбеддингов
  в общем внутреннем "пространстве эмбеддингов",
  которое ни фига не простое геометрическое/евклидово, подробнее см.:
  "Каково же оно "пространство эмбеддингов" нейронки?"
  
  И тут, наверно, сначала надо поискать и проработать информацию
  об особенностях конструкции, структуры и методов обучения
  неизвестной для меня сейчас семейства моделей YOLO.
  Ладно, будем искать и анализировать.
  
  
  ========
  
  24.02.2024 15:12
  
  "Дистилляция диффузионки" для "чайников".
  В оглавление.
  
  Еще одно интересное развитие мультимодальных моделей это использование
  их в "методе дистилляции", т.е. обучении более эффективных нейросетей,
  используя предыдущую версию системы или вообще модель иной архитектуры
  в качестве учителя для улучшения качества обучения.
  Вот, наверно, самое короткое описание этого метода
  на примере "дистилляции диффузионки":
  
  "Магическое ускорение работы моделей с помощью самогонного аппарата".
  Автор: Squirrelfm (Igor Novikov)
  https://habr.com/ru/companies/raft/articles/795749/.
  23 фев 2024 в 12:12
  
  //// Начало цитирования
  
  Вы когда-нибудь задумывались о том,
  что у человеческого мозга есть ограниченная емкость
  и вы можете выучить этот чертов английский просто
  потому что в детстве запомнили слишком много покемонов?
  Или почему обучение с учителем гораздо эффективнее, чем самостоятельное?
  
  Эти вопросы вполне применимы и в области машинного обучения.
  Для обучения модели диффузии требуется много данных и вычислительной мощности,
  а затем для создания изображений требуется значительное количество вычислений
  и серьезное оборудование.
  Исследователи (у которых обычно нет денег и на доширак)
  задали очень хороший вопрос
  - можно ли достичь тех же результатов с меньшими усилиями?
  
  Ответ - да.
  Есть простой трюк, который мы можем использовать - дистилляция модели.
  
  Чтобы понять, как это работает,
  давайте сначала посмотрим на обычный процесс обучения модели.
  
  Модели диффузии учатся генерировать данные,
  обращая процесс диффузии вспять,
  т.е. модель учится превращать случайный шум в согласованное изображение
  (обычно соответствующее заданному промпту).
  //// С этим согласен.
  
  Обычно происходит что-то вроде этого:
  
   мы берем кучу маркированных изображений
   и постепенно добавляем к ним шум в соответствии с графиком шума
  
   затем мы обучаем модель предсказывать добавленный нами шум.
  //// А вот с этим нет. Мы обучаем модель пытаться восстановить
  //// из более зашумленного состояния в менее зашумленное,
  //// а то что это реализуется якобы "предсказанием шума",
  //// так то просто особенность реализации и "дань традиции"
  //// - так было сформулировано в первой статье по данному методу,
  //// и теперь это "отлито в граните".
  
  Во время вывода:
  
   мы генерируем начальное изображение с чистым случайным шумом
  
   модель предсказывает шум
  //// Модель пытается "подсказать", где во фразе "казнить нельзя помиловать",
  //// следует по ее представлениям "добавить запятую".
  
   мы постепенно удаляем предсказанный шум
  //// Это "особенность реализации" - так используется "выход модели".
   из начального случайного зашумленного изображения,
   используя данный запрос, и таким образом создаем конечное изображение.
  
  Более подробное описание можно найти здесь.
  https://habr.com/ru/companies/raft/articles/789588/
  
  Визуально это выглядит следующим образом:
  
  Модель предсказывает шум на изображении,
  который мы вычитаем,
  чтобы получить четкое изображение
  
  Рис. Модель предсказывает шум на изображении,
  который мы вычитаем, чтобы получить четкое изображение
  
  Рис. Но это происходит на самом деле множеством маленьких шагов
  
  Проблема здесь в слове постепенно.
  Это требует сотен шагов,
  и каждый из них требует большого количества вычислений.
  
  Почему мы делаем это таким образом?
  Ну, мы не можем просто перейти от шума к согласованному изображению,
  это привело бы к абстрактным сюрреалистическим результатам.
  Шум случаен и не содержит изображение как таковое (как правило).
  Постепенное удаление шума позволяет раскрыть общий контур изображения,
  который затем может быть детализирован шаг за шагом,
  используя предыдущие шаги в качестве базы.
  //// А представить, что модель выполняет только то чему ее обучали,
  //// а именно последовательному переходу от одной более зашумленной картинки
  //// к менее зашумленной, без "перепрыгивания через ступеньку",
  //// наверно, тоже можно.
  То же самое с людьми - вы не можете написать целое приложение на Python
  за один раз - обычно вы пишете код по частям,
  и он как бы эволюционирует.
  
  Но почему нам нужно так много шагов?
  По-видимому, это больше результат начального математического описания проблемы,
  чем что-либо еще.
  //// Нет, на мой взгляд, это результат процесса обучения.
  Это напоминает мне, как часто формулировка проблемы и используемый язык
  диктуют решение.
  
  Вот как это было постулировано:
  
  Рис. forward-diffusion
  
  Изображение из статьи Denoising Diffusion Probabilistic Models.
  
  Прямой процесс или процесс диффузии фиксируется в Марковской цепи,
  которая постепенно добавляет гауссовский шум к данным
  в соответствии с графиком дисперсии ?1,...,?T.
  //// Да именно так "зашумляется изображение".
  //// Но почему считается, что модель запоминает "шум",
  //// а не "зашумленное изображение"?
  //// Может быть, потому, что мы вообще не понимает, что и как запоминает модель,
  //// и пытаемся "математическими формулами" прикрыть "концептуальное незнание"?
  Учитывая точку данных x0?, выбранную из реального распределения данных q(x) (x0??
  q(x)),
  мы можем определить прямой процесс диффузии, добавляя шум.
  Конкретно, на каждом шаге мы добавляем гауссовский шум с дисперсией ?t? к xt?1?,
  создавая новую скрытую переменную xt? с распределением q(xt??xt?1?).
  Этот процесс диффузии может быть сформулирован следующим образом:
  
  Этот процесс требует множества шагов для работы.
  
  Вот и трюк.
  Мы берем предварительно обученную модель,
  которая была обучена старым способом, используя миллионы долларов,
  и используем ее как учителя для обучения другой модели,
  которую мы называем учеником,
  и эта модель будет обучаться предсказывать не шум на изображении.
  Мы обучаем ее предсказывать следующий шаг родительской модели,
  используя среднеквадратичное отклонение между их результатами
  в качестве функции потерь и градиентного спуска.
  Эта модель все еще не так эффективна,
  потому что мы все равно собираемся предсказывать то же количество шагов,
  что и родительская модель,
  и она собирается использовать то же количество вычислительной мощности.
  Так как мы можем оптимизировать это?
  //// Но это та же модель и УЖЕ другая, в том смысле,
  //// что предыдущая "предсказывала шум",
  //// а новая модель тоже "предсказывает шум"?
  
  Идея здесь в том,
  что мы не делаем это вышеописанным способом.
  Если подумать, а зачам нам нужно предсказывать каждый шаг выборки ???.
  Мы можем предсказывать каждый второй шаг,
  пропуская шаг в обучении и в выводе,
  //// Стоп, стоп, стоп. А вот тут не надо "мухлевать",
  //// Если "на каждом шаге предсказывается шум",
  //// то на каждом втором шаге, чтобы достигать того же результата,
  //// нужно предсказывать уже сумму "двух предсказаний шума".
  //// А вот если предсказывается как раз изображение,
  //// то вполне возможно пропустить один шаг,
  //// предсказывать уже следующий "менее зашумленный рисунок".
  потому что родительская модель уже знает, что делает.
  Ученик больше не удаляет шум из случайного зашумленного изображения.
  Он удаляет шум из изображения, которое было обработано родительской моделью,
  а родительская модель уже обучена и знает,
  что делает (вот вам и польза учителей).
  //// Нет, все-таки догматический подход к описанию "удалению шума",
  //// наверно, уже неистребим. Очередной канонический "ритуальный танец",
  //// как в свое время были "эпициклы Птолемея".
  
  Таким образом, в модели ученика у нас будет вдвое меньше шагов,
  чем у родительской модели,
  и оказывается, что качество почти точно такое же.
  Затем мы берем эту модель ученика и используем ее в качестве учителя
  и создаем новую модель ученика.
  Затем мы обучаем нового ученика с использованием этой новой учительской модели
  и снова во время обучения пытаемся предсказывать только каждый второй шаг
  и так далее.
  В конце концов, мы повторяем этот процесс много раз,
  сжимая модель и количество шагов,
  уменьшая их вдвое каждый раз.
  Мы делаем этот процесс до тех пор,
  пока результаты все еще хороши.
  Таким образом, мы эффективно сокращаем требования
  к вычислениям на каждой дистилляции наполовину,
  и на данный момент кажется,
  что можно действительно иметь только четыре-шесть шагов,
  и выход все еще работает так же хорошо,
  как и начальная учительская модель с сотнями шагов.
  Это называется процессом дистилляции.
  
  Вот диаграмма:
  
  Рис. Процесс дистилляции
  
  Визуализация двух итераций алгоритма прогрессивной дистилляции.
  Сэмплер f(z; ?), отображающий случайный шум ? в образцы x
  в 4 детерминированных шагах,
  дистиллируется в новый сэмплер f(z; ?), выполняющий только один шаг.
  
  Рис. диаграмма качества в зависимости от использованного количества шагов
  
  Как видно на диаграмме, дистиллированная модель
  имеет такое же качество всего за 8 шагов,
  как старая модель имеет за 256 шагов на наборе данных CIFAR-10.
  //// И никаких сомнений, что все 8 шагов "удаляется предсказанный шум"?
  //// Очень интересное получается "вероятностное распределение".
  
  Подход описан здесь: https://arxiv.org/abs/2202.00512.
  
  .......
  
  //// Конец цитирования.
  
  В комментариях это названо "метасистемным подходом",
  а в другой статье упоминается,
  что при использовании "метода дистилляции" очень полезно
  дополнительно использовать в качестве "учителя" еще и систему/модель
  с "другим принципом действия".
  В общем, есть простор для фантазии и поиска новых удачных решений,
  особенно если их как то подкрепить какой-то концепцией того,
  что именно происходит в "мозгах нейронки",
  т.е. "пространстве эмбеддингов",
  в процессе обучения ИИ-моделей.
  И тогда "магия дистилляции" тихо и незаметно превратится просто
  в "продвинутую технологию" целенаправленного многоэтапного обучения.
  
  
  ========
  
  01.03.2024 21:35
  
  Симулятор реальности Sora.
  В оглавление.
  
  Идея использовать мультимодальные модели для обучения других ИИ-систем
  для существенного повышения уровня и качества этого обучения,
  похоже, успешно претворяется в жизнь.
  Во всяком случае, последнее достижение OpenAI модель SORA
  вполне может претендовать на титул чемпиона
  в "забеге" симуляторов реаальности:
  
  "Настоящее предназначение OpenAI SORA:
  как и зачем симулировать <Матрицу> для ChatGPT".
  Автор: stalkermustang (Котенков Игорь)
  https://habr.com/ru/articles/794566/.
  28 фев 2024 в 07:55
  
  Текст очень большой, урезал как мог, оставляя только самое интересное для себя.
  Если есть время то рекомендую читать в оригинале,
  а не эту достаточно пространную выжимку.
  
  //// Начало цитирования.
  
  .....
  
  В середине февраля в мире AI произошло много событий (1, 2, 3),
  https://ai.meta.com/blog/v-jepa-yann-lecun-ai-model-video-joint-embedding-predictive-architecture/
  https://blog.google/technology/ai/google-gemini-next-generation-model-february-2024/
  https://openai.com/blog/memory-and-new-controls-for-chatgpt
  но все они были затмлены демонстрацией новой модели OpenAI.
  https://openai.com/sora
  На сей раз калифорнийская компания удивила всех качественным прорывом
  в области генерации видео по текстовому запросу (text-2-video).
  Пока другие исследователи старались довести количество пальцев на руках
  сгенерированных людей до пяти (а члены гильдии актёров противостояли им),
  в OpenAI решили замахнуться на короткие (до минуты),
  но высококачественные и детализированные ролики
  - и, чёрт возьми, у них получилось!
  
  ......
  
  Немного контекста: о чем мы будем говорить
  
  ......
  
  SORA - это попытка компании обучить нейросеть пониманию физического мира,
  умению моделировать его, а также симулировать объекты и действия людей.
  И всё это - в динамике, отличающей модели работы с фотографиями от видео.
  
  Цель такого симулятора - помочь решить проблемы,
  требующие взаимодействия с реальным миром.
  Не верите?
  Звучит слишком фантастично?
  Но даже официальный блогпост OpenAI называется
  <модели генерации видео как симуляторы мира>
  ("Video generation models as world simulators")!
  Сам же пост заканчивается следующей фразой:
  
  ......
  
  Рис. Ведущий разработчик проекта SORA 2 на рабочем месте.
  
  .......
  
  Да кто такие эти ваши <модели мира>?
  
  .......
  
  Итак, модель мира - это выработанное внутреннее представление
  процессов окружающей среды,
  используемое агентом для моделирования последствий действий и будущих событий.
  Агентом в данном случае называется некоторая сущность,
  способная воспринимать мир вокруг и воздействовать на него
  для достижения определенных целей
  - человек или кот подпадают под это определение.
  
  .......
  
  В 1976 году британский статистик Джордж Бокс написал знаменитую фразу:
  <Все модели неправильны, но некоторые из них полезны>.
  Он имел в виду, что мы должны сосредотачиваться на пользе моделей
  в прикладных сценариях,
  а не бесконечно спорить о том, является ли модель точной (<правильной>).
  
  .......
  
  Латентные пространства неизведанных миров: ныряем внутрь мозга
  
  .......
  
  Всё дело в том, что эта модель уже обучена реконструировать изображения
  из так называемого <латентного представления>
  (это промежуточное состояние, с которым работает модель).
  //// Я использую термин "пространство эмбеддингов",
  //// но и термин "латентное", т.е. скрытое/внутренне состояние
  //// тоже, наверно, возьму "на вооружение".
  
  .......
  
  То, что в нейронных сетях давно используются декодеры
  (и в том числе для реконструкции из сигналов сенсорной системы),
  мы уже поняли.
  Но что тогда является аналогом сенсорной системы,
  переводящей наблюдения в латентное пространство?
  Это кодировщик, или энкодер:
  он как бы <сжимает> исходные данные
  в специальное представление,
  хранящее ключевую информацию,
  и при этом опускающее ненужные детали и шум.
  //// Точнее, он кодирует их таким образом,
  //// который пока не научились расшифровывать.
  
  Рис. Латент может хранить некоторые очертания исходных наблюдений,
  но несёт совершенно другую информацию.
  Вместо указания на цвета пикселей там записан <смысл> региона фотографии.
  И так как латент имеет размерность меньше, чем исходная картинка,
  то реконструкция будет слегка отличаться (смотрите на зрачок).
  
  Только наш мозг умеет делать это практически с самого рождения
  (спасибо эволюции),
  а нейронные сети нужно тренировать.
  Такие модели будут называться автокодировщиками,
  и для обучения используется следующий трюк:
  модель каждый раз пытается сделать так,
  чтобы последовательное применение энкодера и декодера
  (см. визуализацию выше) к изображению
  приводило к результату, близкому к оригиналу
  - при этом в серединке остаётся вектор чиселок (латент),
  который хранит в себе информацию.
  И его размер куда меньше, чем входное изображение,
  что заставляет модель компактно сжимать данные
  - однако благодаря умному декодеру выходная картинка
  почти неотличима от оригинала.
  
  .......
  
  Добавляем агентности
  
  .......
  
  И что, это и есть картина мира?
  
  Само по себе сжатие данных с целью дальнейшей реконструкции
  не всегда приводит к появлению качественной модели мира.
  Как мы обсуждали выше, важно,
  чтобы эта модель помогала принимать решение о будущих событиях
  и потенциальных развязках
  - именно тогда она становится полезной.
  
  .......
  
  Рис. Берём картинку, получаем латент, добавляем действие
  - и пытаемся угадать, что будет дальше (новый латент).
  Затем перемещаемся немного в будущее,
  смотрим, что получилось,
  совпала ли новая реальность с ожиданием.
  Если нет - корректируем нашу картину мира.
  
  Итого в системе есть 3 отдельных части:
  
   автокодировщик с энкодером и декодером (2 половинки одного целого),
   помогающие сжимать изображение и производить деконструкцию из латента;
  
   модель предсказания следующего латента.
   Хоть это и не отображено на картинке, но сам латент немного изменился
   - к нему добавился вектор внутреннего состояния
   (к 15 числам приписали ещё несколько).
   Он выступает в роли накопителя опыта, или подсознательной памяти,
   помогая разбираться, что происходило в предыдущие пару секунд.
   Мы не задаём ему никаких ограничений,
   лишь просим быть максимально полезным в задаче предсказания ближайшего будущего
   - что <запомнить> модель решает сама.
   В данном случае логично предположить,
   что туда сохраняется скорость, динамика её изменения
   (тормозим или разгоняемся), совершался ли недавно поворот, и так далее
   - всё то, что поможет угадать будущее;
  
   обучаемый бот, который видит только латенты и делает по ним выводы.
  
  Ииии... предложенный метод моделирования будущего позволил двум учёным,
  Дэвиду Ха и Юргену Шмидхуберу, обучить пачку ботов,
  которые являлись лучшими в разных играх - от гонок до стрелялок.
  Такие модели мира, как они их назвали,
  опираются на наблюдения за процессом работы мозга человека,
  и все эти предисловия и примеры были приведены не для красного словца.
  
  ......
  
  В предыдущей статье мы рассказывали о том, как тренируется ChatGPT
  https://habr.com/ru/companies/ods/articles/716918/
  - предсказывая по цепочке каждое следующее слово в длинном тексте.
  Упрощенно можно сказать, что похожим образом действует и SORA,
  предсказывая каждый следующий кадр в видео-последовательности.
  
  ......
  
  Мечтает ли машинка о поворотах?
  
  ......
  
  Опускаемся на уровень глубже: Дум - крута!
  
  ......
  
  Plot twist: пересаживаемся в <реальный мир>
  
  .......
  
  Но не всё так радужно с симуляциями
  
  .......
  
  Причин неидеальности симуляции можно выделить две:
  недостаток данных для конкретной ситуации
  (из-за чего возникает <дырка> в логике симулятора)
  и недостаточная <ёмкость> обучаемой модели мира.
  
  Про решение первой проблемы поговорим совсем вкратце
  (оно достаточно техническое, и не вписывается в рамки статьи).
  Один подход заключается в уменьшении предсказуемости среды в симуляторе,
  когда из одного и того же состояния игра может перейти
  в совершенно разные фазы на следующем шаге.
  Причём, можно управлять степенью случайности,
  находя баланс между реализмом и эксплуатируемостью
  (абсолютно случайную среду не получится обмануть
  - ведь она не зависит от твоих действий).
  Другое решение - привить обучаемому боту любопытство.
  Сделать это можно, например, если штрафовать его за то,
  что он слишком слабо меняет состояние среды (засиживается на месте),
  или же наоборот поощрять за новые свершения.
  Вы не поверите, но один из ботов в таком эксперименте
  начал залипать в аналог <телевизора>, щёлкая каналы.
  В конце концов, мы не так уж сильно и отличаемся друг от друга :)
  
  .......
  
  А что делать с ёмкостью модели?
  На данный момент известен лишь один гарантированный способ,
  который даст результат при любых обстоятельствах:
  масштабирование.
  Это означает, что мы можем увеличить размер нейросети,
  пропорционально увеличить размер корпуса тренировочных данных,
  и как следствие потратить больше ресурсов на обучение.
  
  Все остальные способы, хоть иногда и могут сработать
  (взять более чистые данные/выбрать другую архитектуру модели/и т.д.),
  но имеют свои ограничения,
  а главное - могут перестать работать.
  Для больших нейронных сетей (в том числе и языковых моделей вроде ChatGPT)
  уже пару лет как вывели эмпирический закон,
  который показывает, насколько вырастет качество
  при увеличении потребляемых при тренировке ресурсов.
  Это называется <закон масштабирования>.
  
  Нужно БОЛЬШЕ ВИДЕОУСКОРИТЕЛЕЙ!
  
  И масштабирование сейчас - одна из самых главных причин,
  по которой вы всё чаще и чаще в последнее время слышите про AI,
  и почему наблюдается рост качества.
  Если раньше модели обучали на одном, ну может на двух серверах
  в течении пары недель,
  то теперь компании арендуют целые датацентры на месяцы.
  По сути, появился способ закидать проблему шапками,
  покупай больше видеокарточек - и дело в шляпе шапке.
  Это одновременно и хорошо, и плохо
  - с одной стороны мы точно знаем,
  что можно получить нейросеть получше,
  а с другой - она будет стоить дороже.
  
  ......
  
  Есть ли модели мира у LLM?
  
  ......
  
  Примерно 95-98% ресурсов тренировки больших языковых моделей
  тратится на обучение задаче предсказания следующего слова в некотором тексте.
  Под <некоторым> здесь подразумевается почти любой текст на сотне языков,
  доступных во всём интернете.
  Там есть и Википедия (как база знаний и фактов),
  и учебники по физике, описывающие принципы взаимодействия объектов
  (включая силы гравитации),
  есть детективные истории, и много чего вообще.
  Каждый раз модель смотрит на часть предложения и угадывает следующее слово.
  Если она сделает это правильно, то обновит свои параметры
  так, чтобы закрепить уверенность в ответе;
  в противном случае она извлечет уроки из ошибки
  и в следующий раз даст предсказание получше.
  
  ......
  
  OpenAI в этом плане двигались постепенно
  - первые проверки гипотезы о том,
  что языковая модель при обучении строит модель мира,
  помогающую ей успешно предсказывать следующее слово, были ещё до GPT-1.
  Исследователи предположили,
  что если взять достаточно большую по тем временам модель,
  и обучить её на 40 Гигабайтах отзывов с Amazon
  (при этом не показывая, какой рейтинг оставил пользователь - только текст),
  то скорее всего нейросеть сможет сама <изобрести> внутри себя
  концепцию сентимента.
  Иными словами, она сможет определять,
  является ли отзыв позитивным или негативным.
  С учётом того, что в явном виде мы никак эту информацию не сообщаем
  - было неочевидно, получится ли разобраться
  со столь сложной и абстрактной вещью,
  которая существует только у нас в голове:
  сентимент текста.
  Ведь это не природное явление, не закон физики
  - это то, как мы, люди, придумавшие свои искусственные языки,
  воспринимаем информацию.
  
  Сказано - сделано.
  В OpenAI обучили модель, а затем рассмотрели её латент
  https://openai.com/research/unsupervised-sentiment-neuron
  (да, там тоже модель сначала сжимает текст в понятные ей сигналы,
  а затем переводит его обратно в текст)
  под микроскопом.
  Так же, как мы пытались крутить 15 чиселок латента
  на гифке с игрушечной трассой,
  исследователи пытались найти такой параметр
  (из 4096 разных, если вам интересно),
  который был бы связан с сентиментом.
  И, как уже должно быть понятно,
  нашли!
  
  Но как для текста можно понять, что вот,
  скажем, семнадцатая цифра в нашем латенте отвечает за сентимент?
  Пробуется два способа:
  это анализ зависимости значения от входной последовательности (текста отзыва),
  и сентимента генерируемого текста (= <фантазии> модели) от этого же значения.
  Мы как бы отвечаем на два вопроса:
  <Правда ли значение предсказуемо меняется из-за отзыва?>
  и <Правда ли, что модель опирается на это значение,
  то есть, сгенерированный отзыв меняется из-за значения в латенте?>
  
  Сначала про первое.
  Давайте возьмём тысячи отзывов, но уже не с Amazon,
  а с американского аналога Кинопоиска, IMDB.
  Для каждого из них определим, являются ли они позитивными или негативыми.
  Затем будем подавать эти отзывы в модель
  (грубо говоря использовать энкодер для получения латента,
  хоть в языковых моделях это устроено чуть иначе)
  и смотреть, как меняется найденная цифра.
  Можно сделать визуализацию в виде гистограмы,
  на которой отзывы с разным сентиментом окрашены в разные цвета.
  
  Рис. Если объяснять по-простому, то синий горбик
  - это условные рецензии на фильмы Сарика Андреасяна,
  а оранжевый - это кинохи от Тарантины.
  Горизонтальная шкала при этом показывает,
  как эти отзывы распределились по значениям найденного нами
  внутри модели параметра, отвечающего за сентимент.
  
  По графику видно, что для негативных отзывов
  модель зачастую показывает значения ниже нуля
  (аналог с визуализацией гоночной трассы - один ползунок выкручен влево),
  а для позитивных - выше.
  И <горбики> распределений почти заметно отличаются.
  Те отзывы, что попадают на пересечение, скорее всего имеют смешанный сентимент:
  может, там фильм и хвалят, и ругают?
  Таким образом, мы можем сказать,
  что состояние модели меняется в зависимости от сентимента конкретного отзыва
  - становится больше или меньше.
  
  Но опирается ли нейронка на эту модель мира?
  Считается ли конкретно этот латент важным во время запуска симуляции
  (в которую мы можем подсмотреть уже не визуально, а по сгенерированному тексту)?
  Давайте зафиксируем все остальные значения латента
  (через установку одинакового начала отзыва),
  и сначала сгенерируем отзыв о фильме,
  указав большое положительное значение,
  а затем - отрицательное.
  По идее, если для модели этот признак важен,
  мы ожидаем увидеть очень положительный, хвалебный отзыв,
  а за ним - негативный.
  
  И ровно это учёные и обнаружили
  - при генерации ответ модели существенно меняет свой окрас
  в зависимости от лишь одной цифре в латенте.
  Но главная фишка в том, что мы не давали модели никакого понимания,
  что такое сентимент, и какими словами он выражается
  - вообще ничего, кроме кучи текстов.
  И всё же для модели мира оказалось удобнее (выгоднее?) кодировать данные так,
  чтобы сентимент легко разделялся, и им можно было управлять.
  
  Этот игрушечный пример послужил толчком для OpenAI
  к развитию идей в модели GPT-1, а GPT-2 и 3 были дальнейшим масштабированием:
  больше модель, больше текстов, и как следствие более полная картина мира,
  выработанная внутри нейросети.
  Поскольку теперь кроме отзывов мы показываем тексты вообще про всё на свете,
  от комментариев на Дваче до учебника по физике,
  то модель выучивает огромное количество вещей,
  не только простой сентимент.
  
  Очень сложно оценить наперёд,
  насколько комплексной и многогранной будет модель,
  и что будет зашито в её модель мира.
  
  ......
  
  И даже у столь мощной GPT-4 модель мира всё еще не идеальна,
  и то и дело приводит к глупым ошибкам.
  <Все модели неправильны, но некоторые из них полезны>, помните?
  
  OpenAI SORA: эмулятор Вачовски или симулятор мира?
  
  Наконец, переходим к десерту.
  Такое длинное вступление было необходимо для того,
  чтобы наглядно продемонстрировать читателю крайне важные
  в контексте новой модели OpenAI тезисы:
  
   Модели мира помогают агенту принимать решение
   с учётом информации о возможном будущем
  
   Для того, чтобы успешно предсказывать будущее состояние,
   важно понимать лежащие в основе формирования среды процессы
  
   Модели мира строят предсказания не в привычном нам виде,
   а в понятном им мире преобразованных сигналов (латентное пространство)
  
   Мы можем заглянуть внутрь, но реконструкция не будет идеальной
  
   Бот, обученный в симулируемой моделью мира сцене,
   может проявлять навыки и в реальной среде
  
   Масштабирование модели всегда приносит улучшения,
   при этом многие из них неочевидны и сложнопредсказуемы
  
  И вот теперь, когда мы разобрали концепцию моделей мира и посмотрели,
  для чего они могут использоваться,
  мы будем смотреть на примеры и пытаться понять,
  а в чём же именно ВАУ-эффект модели SORA.
  Она, как и GPT-4, выработала внутри себя какую-то модель мира,
  помогающую предсказывать следующий кадр
  в огромной разнообразной выборке всевозможных видео.
  Рендеринг финального изображения - это лишь реконструкция того,
  что предсказывает модель (потому что мы смотрим на это через призму декодера;
  хоть он и достаточно мощный, но имеет свои недочёты)
  
  .......
  
  Во-первых, сложно не заметить точнейшее соблюдение всех деталей промпта
  в сгенерированном видео.
  
  .......
  
  Во-вторых, общий визуал существенно превосходит ожидания от моделей
  на данный момент.
  В Твиттере даже шутят, что <это был невероятный год прогресса AI... за один час>.
  
  .......
  
  В-третьих, давайте поговорим про недостатки
  
  ......
  
  Важно отметить, что часть этих проблем наверняка лежит
  на неидеальности реконструкции декодера,
   а часть - на проблемах с моделью мира.
  А может быть, собака зарыта где-то ещё,
  мы не знаем.
  Дело осложняется тем, что ни у кого, кроме OpenAI и их доверенных лиц,
  нет доступа к нейросети,
  чтобы это можно было проверить.
  Помните, как в эксперименте с числом в латенте, влияющим на генерацию отзыва?
  Тогда исследователи могли однозначно проверить,
  что будет, если его дёргать туда-сюда,
  здесь же подобного анализа не производилось.
  
  .......
  
  Поразительное качество рендеринга
  
  ........
  
  Другие неожиданные сюрпризы SORA
  
  ........
  
  Но почему бы просто не создать игру?
  
  ........
  
  Опускаемся с небес на землю
  
  ........
  
  Но в то же время мы уже видели, что даже моделирование простой игры неидеально,
  и бот может научиться эксплуатировать симуляцию.
  Одно из решений - это чередование виртуального и реального мира,
   с постоянным итеративным дообучением из самых свежих собранных данных.
  Как только алгоритм определяет, что его модель мира
  слабо предсказывает происходящее и уж очень ошибается
  - эти данные кладутся в выборку с пометкой <первый приоритет>.
  Чтобы, наблюдая ситуацию из видео ниже,
  модель <удивлялась>, и исправляла неточность:
  
  В данном примере нейронка (и, вероятнее всего, выработанная ею модель мира)
  не точно воспроизводит физику многих основных взаимодействий
  - таких, как разбивание стекла или опорожнение стакана.
  Другие сложные взаимодействия (вроде потребления пищи)
  не всегда приводят к правильным изменениям состояния объектов.
  В длительных сценах возникает несогласованность,
  а также спонтанные появления или исчезновения объектов.
  Модель также может путать пространственные аспекты промпта
  (и даже право-лево не отличать).
  
  Но зачем же тогда OpenAI сделали анонс и выложили кучу демок?
  Технология как будто бы не готова для производства видеоконтента,
  а модель мира у неё пока... не ясно,
  будет ли достаточной для обучения ботов в аналоге Матрицы.
  Во-первых, как написано на официальной странице:
  <мы делимся результатами нашего исследования на раннем этапе,
  чтобы начать обсуждение и получать отзывы от людей,
  не входящих в состав OpenAI,
  а также чтобы дать общественности представление о том,
  какие возможности искусственного интеллекта ожидают нас в будущем>.
  А теперь и вы, прочитав эту статью, имеете более полную картину мира,
  понимаете, что и как делается,
  и к чему стоит готовиться.
  Компания пока не планирует предоставлять доступ к модели всем подряд
  - но уже начался период закрытого тестирования
  на предмет безопасности и байесов
  (устойчивых искажений в какую-либо сторону)
  генераций.
  
  Во-вторых, OpenAI в очередной раз пофлексили превосходством
  над другими игроками - только посмотрите на генерации моделей конкурентов
  (открытых и закрытых) по тем же самым промптам, что и у SORA.
  Даже не близко!
  Но впереди нас ждёт только развитие.
  
  А что, собственно, впереди?
  
  И тут мы переходим на территорию осторожных, но спекуляций.
  В OpenAI уверены, что продемонстрированные возможности указывают на то,
  что продолжение масштабирования моделей генерации видео
  является многообещающим путем к разработке
  очень проработанных симуляторов физического и цифрового мира,
   а также объектов, животных и людей, которые населяют их.
  Эта фраза повторяется дважды в этой статье
  - и точно также в блоге OpenAI,
  уж настолько сильно компания хотела задать акцент.
  
  Но как такой симулятор нашего мира можно использовать,
  и чем он полезен?
  Кроме детально разобранного плана обучения ботов внутри виртуального мира,
  видится два ключевых направления работы.
  Первое - это обучение GPT-N+1 поверх (или совместно) с видео-моделью,
  чтобы те самые латенты,
  характеризующие состояние мира и механики взаимодействий в нём,
  были доступны языковой модели.
  Без углубления в технические детали отмечу,
  что существуют способы обучения нейросетей одновременно
  и на тексте, и на изображениях/видео
  - так, что сам <предсказательный движок> будет общий,
  а энкодер и декодер свои для каждого типа данных.
  Тогда даже при генерации текста GPT будет опираться на модель мира,
  выученную в том числе по видео,
  получит более полную картину взаимодействий объектов и агентов.
  Это своего рода <интуиция>,
  которая также, как и латент в случае гоночек/DOOM,
  будет нести в себе неявное описание потенциального будущего,
  что в свою очередь повлияет на навыки рассуждений
  с далёким горизонтом планирования.
  Именно это является одной из основных проблем современных LLM
  - они могут выполнить какую-то одну простую задачу,
  но не могут взять целый кусок работы, декомпозировать, распланировать
  и выполнить.
  
  Второе направление работы - это непосредственно симуляция,
  когда модель при генерации как бы берёт паузу,
  и проигрывает несколько разных симуляций будущего:
  а что будет, если сделать вот так или эдак?
  Происходить это будет в пространстве сигналов (латентов),
  так же, как мы в голове размышляем,
  что будет при таких-то и таких-то действиях
  - поэтому проблема неидеальной реконструкции снова уходит на второй план.
  На основе анализа результата десятков-сотен прокручиваний ситуации
  можно скорректировать поведение модели/агента.
  Вероятно, мы увидим первые эксперименты в рамках компьютерных игр
  - зря что ли OpenAI в прошлом году купили компанию,
  разрабатывавшую аналог Minecraft,
  но с упором на социальные взаимодействия?
  Тем более, что это не будет их первым опытом в игрушках:
  ещё до GPT-1 проводились эксперименты с популярной игрой DotA 2,
  где в итоге команда скооперировавшихся ботов дважды обыграла чемпионов мира.
  
  Но у SORA для таких симуляций нет одной важной детали:
  возможности учитывать действия агента.
  Ведь вспомните: модель мира работает не только с сигналом от окружения,
  но и с командой, предсказываемой ботом.
  Если из одного и того же кадра гонки делать поворот налево или направо
  - то очевидно, что будущее будет разным.
  Так что к системе обучения на видео к SORA придётся приделать сбоку модуль,
  который как бы угадывает, что происходит между кадрами.
  Тем более что у OpenAI есть опыт подобной работы
  (опять совпадение? не думаю)
  - летом 2022 года они обучали нейросеть играть в Minecraft по видео с YouTube.
  Для того, чтобы сопоставить картинку на экране с действиями,
  по малому количеству разметки была натренирована отдельная модель,
  предсказывающая вводимую игроком команду.
  Правда, на видео общего спектра такой подход применить сложнее
  - какая вот команда отдаётся на съемке процесса завязывания галстука?
  А на записи футбольного матча?
  А как это увязать?
  
  Вполне возможно, что ответ
  - как и всегда -
  будет следующим:
  <ну дай машине, она разберётся, главное чтоб данных хватило>.
  Пока писался этот блогпост,
  Google DeepMind выпустили статью с описанием модели Genie,
  предназначенной для... генерируемых интерактивных окружений.
  Такой подход принимает на вход кадр и действие
  и предсказывает, как будет выглядеть мир
  (и какие потенциально действия можно сделать).
  И, конечно же, тестируется это на настоящей робо-руке,
  ведь игрушек нам мало!
  
  Обратите внимание на реалистичную деформацию пакета чипсов.
  Это не реальный объект, кадры полностью сгенерированы выученной моделью мира.
  Контроллер робо-руки может принять решение
  после многократной симуляции будущего для более аккуратного обращения с объектами.
  
  Скорее всего, и на обучение, и тем более на применение моделей
  на масштабе всего YouTube потребуется огромное количество ресурсов,
  заточенных под работу с нейросетями.
  Уже сейчас ведущие в AI-гонке компании сталкиваются с проблемами:
  видеокарт Nvidia не хватает на всех,
  а список закупок заполнен на год вперёд.
  Даже если есть денежные средства масштабировать модели в 10, в 100 раз
  - может просто не хватить GPU.
  При этом, нейронки легче и меньше становиться пока не планируют.
  Вот например SORA, по слухам,
  требует часа вычислений на генерацию минутного FullHD ролика.
  Это может быть похоже на правду
  - сразу после анонса команда OpenAI генерировала в твиттере
  видео по запросам людей,
  и минимальное время от твита до генерации составило 23 минуты.
  Но и ролик был 20-ти секундный!
  
  В общем, как спайс занимает центральное место в мире Дюны,
  так и вычислительные мощности играют ключевую роль для AI
  - наравне с данными.
   Вероятно, поэтому начали появляться слухи о желании Сэма Альтмана
  привлечь инвестиции на реорганизацию индустрии
  (не компании, а всей индустрии!) производства полупроводников и чипов,
  создав глобальную сеть фабрик.
  Слухи какие-то совсем дикие - мол, нужно привлечь от 5 до 7 триллионов долларов.
  Это, на минуточку, 4-5% от мирового ВВП!
  Капитализация самой дорогой компании в мире,
  Microsoft (лол? напродавали винду),
  составляет 3 триллиона.
  Да на 7 триллионов можно и весь Тайвань прикупить, чего уж
  - главное, чтоб Китай позволил.
  
  Рис. Нет, это не оценка компании или всего рынка,
  это именно необходимые инвестиции. Да.
  
  Лично я не верю в такие суммы,
  но порядок двух-трёх триллионов инвестиций на горизонте десятилетия
  считаю посильным.
  Знаете, запускать Матрицу для того, чтобы погрузить в неё 8 миллиардов людей
  - дело всё же недешевое!
  В общем, поживём - увидим.
  
  ......
  
  //// И нескоkько страниц с комментариями различной степени "алярмности".
  
  .......
  
  //// Конец цитирования.
  
  С одной стороны, этот материал полностью согласуется
  с концепцией Model-Based в обучении с подкреплением, см.:
  "Model-Based алгоритм для "чайников".
  
  И в этом отношении никаких замечаний не вызывает.
  Наоборот, рождает ощущение все более и более ускоряющегося времени.
  
  А с другой стороны, описание того, что представляет собой "латент",
  и какие методы работы с ним представляются автору наиболее перспективными,
  рождает жгучее желание заочно поспорить с ним
  практически в каждом втором абзаце.
  Но это явно "неформат" и для данного модуля,
  и "неформат" в части объяcнения свой позиции "на полях"
  достаточно информативного самого по себе материала.
  Да и слишком пространными будут эти "заметки на полях".
  
  Наверно лучше будет вынести их в отдельный материал или,
  вообще, в отдельный модуль посвященный эмбеддингам.
  
  
  ========
  
  16.03.2024 12:41
  
  Диффузионные текстовые модели.
  В оглавление.
  
  Приятно видеть, что идеи диффузионного подхода к генерации текстов,
  хоть и не очень бурно, но все-таки не остаются без внимания.
  И можно надеяться, что какие-то новые идеи и соответствующие значимые успехи
  уже не "за горами":
  
  "Диффузионные текстовые модели - между двух миров".
  Автор: derunat (Natalia Deryugina)
  https://habr.com/ru/companies/ntr/articles/797963/.
  13 мар 2024 в 15:05
  
  //// Начало цитирования
  
  Диффузионные текстовые модели
  
  Диффузионные модели и большие языковые модели прочно заняли
  и информационное поле, и исследовательское.
  Диффузионные модели генерируют прекрасные картинки, видео и аудио,
  а LLM отлично справляются с генерацией текста.
  Но где-то посередине остается область диффузионных текстовых моделей.
  Нельзя сказать, что она забыта
  - нет, исследования ведутся, и есть хорошие локальные успехи -
  но сравниться с успехам нашумевших LLM и DM пока не получается.
  
  Рис. arXiv:2308.12219
  Diffusion Language Models Can Perform Many Tasks
  with Scaling and Instruction-Finetuning
  
  Первая проблема, которая здесь возникает,
  - это, конечно, дискретная природа языка.
  В принципе, эта проблема решаема и даже не одним способом.
  Можно по-разному перевести диффузию на дискретное пространство
  https://arxiv.org/abs/2210.16886
  или наоборот, получать дискретные токены округлением
  из некоего уже результирующего дискретного пространства.
  //// Интересные идеи. Стоит подумать, что может быть аналогом
  //// такого дискретно-непрерывного преобразования в отношении текста.
  Но и после этого остается другая проблема.
  LLM, работающие на авторегрессии, дают локальную согласованность,
  но не смогут выдать длинный качественный текст
  - согласованность будет экспоненциально убывать
  https://www.dialog-21.ru/media/5915/mikhaylovskiynpluschurilovi031.pdf
  и в результате получится что-то вроде испорченного телефона,
  где соседи друг с другом связаны,
  а вот с начальным сигналом уже не очень.
  Диффузионные модели одновременно и равномерно восстанавливают результат
  из зашумленных данных,
  то есть уже по своей природе дают глобальную согласованность.
  Это одновременно и плюс, и минус.
  С одной стороны,
  можно генерировать результат параллельно, а значит быстрее.
  С другой стороны
  - локальной согласованности у этого результата может не быть.
  //// Интересное наблюдение.
  
  .....
  
  Но всё-таки диффузионные текстовые модели продолжают появляться.
  На это есть весомые причины.
  Во-первых, по самой своей архитектуре диффузионные модели
  позволяют "отмотать" на несколько шагов назад и уточнить.
  Так как процесс восстановления из шума итеративный,
  //// Ох, как же мешает, на мой взгляд, пониманию диффузионных методов
  //// эта устоявшаяся догма "восстановление из шума".
  //// Не "шум" это, а сильно "прореженный" "негатив"/"контур"/"пунктир"...
  //// Ой, как не хватает хорошего термина/аналога.
  то на выходе должен получиться результат получше.
  Во-вторых, как уже было сказано,
  теоретически такие модели могут быть быстрее LLM просто потому,
  что допускают параллельный декодинг.
  В-третьих, глобальная согласованность в перспективе
  поможет генерировать длинные связные тексты.
  Поэтому задел для прогресса здесь есть,
  и на это рассчитывают много интересных проектов.
  
  Одна из успешных попыток подружить диффузионные модели и авторегрессию
  - AR-DIFFUSION.
  https://arxiv.org/abs/2305.09515
  Она с одной стороны позволяет параллельное декодирование,
  а с другой - как и авторегрессионная модель
  в большей степени отвечает последовательной природе языка.
  Диффузия в модели происходит на двух уровнях
  - на уровне слов и предложений.
  Токены слева восстанавливаются за меньшее число шагов и генерируются раньше,
  чем токены справа.
  Таким образом есть некоторое приближение к локальной согласованности.
  Что важно, при сохранении присущей диффузионной модели
  глобальной согласованности.
  
  Можно сделать по-другому.
  https://arxiv.org/abs/2302.05737
  Создать дискретный вариант диффузии в вспомогательном пространстве
  возможных переменных,
  //// Тоже интересное предложение.
  а обратный ход репараметризовать.
  //// А вот этого не понял.
  На каждом шаге восстановления из шума каждый токен
  или проходит через шумоподавление,
  или возвращается к шуму,
  в зависимости от заданного стохастического маршрутизатора.
  Этот фреймоворк порождает целое семейство моделей.
  Пока такие модели ограничены фиксированной длиной предложений
  (которая прогнозируется отдельным модулем),
  но задел на предложения произвольной длины есть.
  
  Еще один удачный пример:
  диффузионные языковые модели можно настроить на осмысленное решение задач.
  Например, взять предобученную маскированную модель
  https://arxiv.org/abs/2308.12219#:~:text=Diffusion%20Language%20Models%20Can%20Perform%20Many%20Tasks%20with%20Scaling%20and%20Instruction%2DFinetuning,-Jiasheng%20Ye%2C%20Zaixiang&text=The%20recent%20surge%20of%20generative,capabilities%20of%20large%20language%20models.
  (авторы этой статьи показали, что предобученные MLM
  можно использовать как предобученную диффузионную модель).
  Затем провести диффузионную адаптацию MLM
  //// А это что за методика?
  и донастроить ее на конкретных задачах или на инструкциях.
  В последнем случае модель будет понимать даже неизвестные ранее задачи.
  Важно, что тут по сути удалось масштабировать диффузионную модель
  и, возможно, приблизить появление больших диффузионных языковых моделей.
  
  .......
  
  //// И ни одного комментария.
  //// Судя по всему, мало кто считает это направление развития языковых моделей
  //// действительно перспективным/актуальным.
  
  //// Конец цитирования.
  
  В общем, работа в направлении языковых диффузионок по-тихоньку идет,
  но без особого ажиотажа или хайпа.
  Много непонятных вопросов, но и перспектив не мало.
  Будем продолжать наблюдение, за этой,
  на мой взгляд, потенциально очень прорывной темой.
  
  
  ========
  
  05.04.2024 12:46
  
  Анонс "Модели Kandinsky 3.1".
  В оглавление.
  
  Ровно год назад "канула в Лету" ИИ-система модель "Модели Kandinsky 2.0",
  со знакомства с которой и началось мое восхищение возможностями
  моделей "машинного обучения" и глубокое погружение в тематику ИИ-систем.
  И вот анонсирована еще одна новая версия этой системы "Модель Kandinsky 3.1",
  которую попытались реализовать "методом дистилляции" из "Модели Kandinsky 3.0".
  (Про основы "метода дистилляции" можно посмотреть в более раннем материале:
  "Дистилляция диффузионки" для "чайников".)
  
  А вот как реально это сделано в данном конкретном случае "Модель Kandinsky 3.1"
  имеет смысл разобрать по подробнее,
  тем более, что тут кроме "дистилляции" еще "кое-что" наворочено:
  
  "Kandinsky 3.1 - новая быстрая модель генерации изображений по тексту".
  Автор: ddimitrov (Денис Димитров)
  https://habr.com/ru/companies/sberbank/articles/805337/.
  04 апр 2024 в 12:54
  
  В общем-то, этот материал вряд ли можно отнести к "дружелюбным"
  для не специалистов. Но судя по истории анонсов других "Моделей Kandinsky"
  вряд ли можно рассчитывать на что-то более вменяемое в будущем.
  Разработчики МК не утруждают себя "просветительством",
  и этот то материал, судя по всему больше "для галочки".
  Так что попробую оставить только более-менее понятные тезисы,
  сопроводив их первыми впечатлениями от знакомства с этой моделью.
  
  И хотя в интерфейсе эта модель вроде как идентифицируется по прежнему как МК 3.0,
  но поведение ее точно серьезно изменилось.
  Так что есть большие основания считать, что как и с моделью МК 2.0,
  "движок" уже заменили, а до интерфейса еще "руки не дошли".
  Очень не хотелось бы, чтобы как МК 2.0 модель МК 3.0 ушла "в небытие".
  Как-то это не очень красиво/этично.
  
  //// Начало цитирования.
  
  Введение
  
  2023 год можно смело называть годом бурного развития
  генеративного искусственного интеллекта.
  Это касается не только привычной нам модальности изображений
  (Kandinsky 2.1, 2.2, 3.0, Stable Diffusion XL, IF, Шедеврум и др.),
  но и текстовой (ChatGPT, GPT-4, LLaMA, Falcon, GigaChat и др.),
  аудио (VALL-E, MusicLM и др.), 3D (Magic3D и др.),
  и даже модальности видео (Kandinsky Video, Gen-2, CogVideo и др.).
  В 2024 всё движется ещё более впечатляющими темпами:
  картинки (SD3), видео (Sora), музыка (Suno) и т. д.
  При этом все основные игроки стараются равномерно двигаться вперёд
  и повышать качество синтеза.
  Текстовые чат-боты научились взаимодействовать с внешними системами
  посредством плагинов, синтез изображений вышел на уровень фотореалистичных генераций,
  длина генерируемых видео постепенно увеличивается
  с сохранением сюжетной связности между кадрами.
  И такой прогресс обусловлен уже не только наращиванием вычислительных мощностей,
  но и большим числом неординарных архитектурных решений,
  которые позволяют добиваться лучшего качества,
  а также сложными технологиями инженерии данных,
  позволяющими создавать огромные и в то же время
  очень качественные наборы данных для обучения моделей.
  
  В ноябре прошлого года, на конференции AI Journey,
  наша команда также представила
  новое поколение text-to-image-модели Kandinsky 3.0.
  В целом упростив архитектуру и взяв более мощный текстовый кодировщик
  по сравнению с семейством моделей Kandinsky 2.x,
  нам удалось добиться значительного роста в качестве изображений
  с точки зрения реалистичности и детализации,
  улучшить понимание текста и побить качество модели SDXL
  на side-by-side-сравнении с точки зрения человеческих предпочтений,
  что является наиболее показательной метрикой качества в задаче генерации.
  Подробнее о модели Kandinsky 3.0 можно прочитать в этой статье.
  https://habr.com/ru/companies/sberbank/articles/775590/
  Также, на базе этой модели в том же ноябре мы выпустили
  первую российскую модель генерации видео по тексту Kandinsky Video,
  о которой можно больше узнать здесь.
  https://habr.com/ru/companies/sberbank/articles/775554/
  
  Сегодня мы представляем модель Kandinsky 3.1
  - идейное продолжение модели Kandinsky 3.0,
  которую мы улучшили и обогатили набором различных полезных функций и режимов
  для того, чтобы предоставить пользователям больше возможностей
  полноценно использовать всю силу нашей новой модели.
  В этой статье мы опишем ключевые изменения, которые мы внесли в нашу модель.
  
  Ускорение модели
  
  Серьезной проблемой модели Kandinsky 3.0, как и всех диффузионных моделей,
  была скорость генерации.
  Для получения одного изображения было необходимо пройти 50 шагов
  в обратном процессе диффузии, то есть 50 раз пропустить данные через U-Net
  с размером батча 2 для classifier free guidance.
  //// Очень "понятное" и "нужное" для неспециалистов уточнение.
  Для решения этой проблемы мы использовали подход
  Adversarial Diffusion Distillation,
  впервые описанный в статье от Stability AI,
  https://stability.ai/research/adversarial-diffusion-distillation
  но с рядом существенных модификаций:
  
  В случае использования предобученных пиксельных моделей
  в качестве дискриминатора, возникла бы необходимость
  декодировать сгенерированную картинку при помощи MoVQ
  и пробрасывать через него градиенты,
  что привело бы к огромных затратам памяти.
  Данные затраты не позволяют обучать модель в разрешении 1024 x 1024.
  Поэтому в качестве дискриминатора мы использовали
  замороженную downsample-часть U-Net от Kandinsky 3.0
  с обучаемыми головами после каждого слоя понижения разрешения.
  Это связано с желанием сохранить возможность генерировать картинки
  в высоком разрешении.
  
  Мы добавили Cross Attention на текстовые эмбеддинги от FLAN-UL2
  в головы дискриминатора вместо добавления текстового CLIP эмбеддинга.
  Это позволило улучшить понимание текста дистиллированной моделью.
  //// Подтверждаю. Действительно некоторые элементы текста промпта в МК 3.1
  //// стали лучше идентифицироваться и отображаться.
  //// Но зато вылезла другая проблема:
  //// если элементы промпта существенно противоречивы,
  //// то результат генерации мало предсказуем.
  
  В качестве лосс функции мы использовали Wasserstein Loss.
  В отличие от Hinge Loss он является ненасыщаемым,
  что позволяет избежать проблемы зануления градиентов на первых этапах обучения,
  когда дискриминатор оказывается сильнее генератора.
  //// Авторы текста по-видимому предполагают, что этот параграф
  //// кристально понятен любому читателю.
  //// Особенно тем, кто могут легко вспомнить,
  //// как работает вся схема модели с дискриминатором.
  
  Мы убрали регуляризацию в виде Distillation Loss,
  так как по нашим экспериментам она не оказывала влияние на качество модели.
  //// Ох. Где найти "справочник" по этому "зоопарку лоссов"?
  
  Мы обнаружили, что довольно быстро генератор становится сильнее дискриминатора,
  что приводит к нестабильности обучения.
  Чтобы решить эту проблему мы значительно увеличили learning rate
  у дискриминатора.
  У дискриминатора он равнялся 1e-3, в то время как у генератор 1e-5.
  Для предотвращения расходимости мы также использовали gradient penalty,
  как и в оригинальной работе.
  
  Рис. Архитектура дискриминатора в Kandinsky 3.1 Flash.
  Блоки, выделенные серым цветом, наследуют веса Kandinsky 3.0
  и остаются замороженными при обучении.
  //// Просто замечательная картинка, особенно в тех местах,
  //// где совершенно непонятно куда идут выходы обучаемых блоков.
  //// И как обычно для русскоязычной аудитории все надписи на "англицком".
  
  Обучение происходило на эстетическом датасете размером
  100 тысяч пар изображений-текст,
  который является подсетом датасета для претрейна Kandinsky 3.0.
  
  В результате этого подхода получилось ускорить Kandinsky 3.0 почти в 20 раз,
  сделав возможным генерировать изображение за всего 4 прохода через U-Net.
  Также на скорость повлиял тот факт,
  что теперь нет необходимости использовать classifier free guidance.
  Kandinsky 3.0 из диффузионной модели по факту превратился в GAN,
  обученный с хорошей начальной инициализацией весов после претрейна.
  
  Однако за серьёзное ускорение пришлось пожертвовать качеством понимания текста,
  что показывают результаты side-by-side сравнения.
  
  Сравнение Kandinsky 3.1 с предыдущими версиями:
  
  .....
  
  Сравнение Kandinsky 3.1 с другими моделями:
  
  .....
  
  Эволюция моделей Kandinsky:
  
  .....
  
  Бьютификация запроса
  
  Если вы пользовались прошлыми версиями Kandinsky
  или другими картиночными генеративными моделями,
  то скорее всего заметили, что чем подробнее напишите запрос,
  тем красивее и детальнее получится картинка.
  Однако, большинство запросов пользователей очень короткие
  и содержат мало подробностей об объекте генерации.
  Не у всех пользователей есть время долго подбирать нужный им промпт
  - в большинстве случаев достаточно получить просто красивую генерацию
  по введенному запросу.
  
  Для решения этой проблемы была встроена функция бьютификации запроса
  - способ улучшения и добавления деталей к запросу пользователя
  с помощью большой языковой модели (LLM).
  Бьютификация работает очень просто:
  на вход языковой модели подаётся инструкция с просьбой улучшить запрос,
  и ответ модели подается на вход Kandinsky для генерации.
  
  //// Интересное решение. И, похоже, оно действительно работает.
  //// Во всяком случае, у меня на коротких запросах количество деталей
  //// явно увеличилось и даже иногда появлялись соверщенно новые композиции.
  //// Но вот на длинных запросах эта "бьютификация" похоже не сильно влияет.
  //// Разве, что МК 3.1 стала значительно больше игнорировать
  //// заказанный стиль изображений.
  
  В качестве LLM мы использовали neural-chat-7b-v3-1 от Intel
  со следующим системным промтом:
  
  ### System:\nYou are a prompt engineer.
  Your mission is to expand prompts written by user.
  You should provide the best prompt for text to image generation in English. \n
  ### User:\n{prompt}\n
  ### Assistant:\n
  
  Тут {prompt} - это запрос, который написал пользователь.
  
  Примеры генераций на один и тот же запрос,
  но с бьютификацией и без нее представлены ниже.
  
  ......
  
  Также мы провели side-by-side сравнение качества генераций,
  сделанных Kandinsky с использованием функции бьютификации запроса и без него.
  Мы провели тестирование и для Kandinsky 3.0, и для Kandinsky 3.1,
  чтобы оценить как сильно влияет языковая модель на генерируемые изображения.
  SBS проводится на фиксированной корзине запросов.
  Каждая генерация оценивается по визуальному качеству
  (какое из двух изображений вам больше нравится)
  и по соответствию тексту
  (какое из двух изображений лучше соответствует запросу).
  
  Результаты SBS для модели Kandinsky 3.0:
  
  .......
  
  //// В целом какой-то однозначных негативных последствий этой "бьютификации",
  //// вроде как, особо не заметил. Так что это похоже явный "плюс" этой модели.
  
  Редактирование изображений и Text-Image Guidance
  
  По сравнению с моделью Kandinsky 3.0,
  в версию 3.1 мы внедрили функционал генерации изображения
  не только с помощью текстового запроса,
  но и/или с помощью визуальной подсказки в виде подаваемого на вход изображения.
  Это позволяет редактировать уже имеющееся изображение,
  изменять его стиль и добавлять к нему новые объекты.
  Для этого мы использовали IP-Adapter
  - подход, продемонстрировавший хорошие результаты
  в сравнении с традиционным дообучением.
  //// В интерфейсе https://rudalle.ru каких-то подсказок как пользоваться
  //// этой возможностью нет от слова "абсолютно".
  //// Ну, а про отсутствие вообще какой-то пользовательской документации
  //// уже просто смешно напоминать "небожителям из Сбера".
  
  Для реализации IP-Adapter-а на основе нашей базовой модели генерации
  и её имплементации в библиотеке diffusers
  мы использовали адаптеры внимания.
  В качестве модели CLIP мы использовали ViT-L/14.
  С его помощью мы получаем эмбеддинги размера batch_size x 768,
  которые потом, посредством линейного слоя,
  преобразуются в тензоры размером batch_size x 4 x 4096.
  Добавив пару новых слоев для key и value изображений
  в механизме cross attention,
  мы складываем выход обычного текстового cross attention
  с выходом cross attention для изображений.
  Обучение производилось на датасете COYO 700m с размером батча 288
  в течение 800 тысяч итераций.
  //// Очень важная для пользователей информация.
  //// И ведь есть же время на написание такого рода параграфов.
  //// Просто слов нет, о том для кого рассчитан этот текст.
  
  Поддерживаемые варианты инференса:
  
  Вариация изображения.
  Чтобы сделать вариацию изображения мы просто считаем эмбеддинги изображения
  с помощью CLIP и подаем их в модель.
  
  .......
  
  Смешивание изображений.
  Здесь мы считаем эмбеддинги для каждого изображения
  и складываем их с заданными весами,
  после чего результат подается в модель.
  
  ........
  
  Смешивание изображения и текста.
  Мы считаем эмбеддинги изображения и подаем их в модель вместе с текстом,
  поскольку мы сохранили стандартный cross attention на текст.
  
  ........
  
  Редактирование в режиме ControlNet
  
  Мы обнаружили, что подход на основе IP-адаптера
  не сохраняет форму объектов на изображении,
  поэтому мы решили обучить ControlNet в дополнении к нашей модели генерации
  для консистентного изменения внешнего вида изображения,
  сохраняющего больше информации в сравнении с исходным.
  В качестве модели для получения границ на изображении,
  подающихся на вход ControlNet,
  мы использовали HED detector.
  Обучение длилось 5 тысяч итераций на датасете COYO 700m на 8 GPU Tesla A100
  с размером батча 512.
  
  Inpainting
  
  В Kandinsky 3.1 inpainting мы сфокусировались
  на улучшение качестве модели генерации объектов.
  В Kandinsky 3.0 мы учили модель восстанавливать изображение
  по ее исходному описанию
  - из-за этого модель очень хорошо восстанавливает исходное изображение,
  но когда дело доходит до генерации другого объекта на месте старого,
  то модель может не справиться.
  Чтобы исправить эту проблему один из подходов
  это дообучение на масках с датасетов для задачи object detection
  (например, Paint by Example или SmartBrush).
  При использовании bounding box масок модель учится генерировать изображения
  четко по текстовому запросу,
  таким образом, избегая случаев, когда генерация не срабатывает.
  Чтобы модель не разучилась и в обычный inpainting,
  то мы сбалансировали наши сеты обучения
  - 50% масок приходят с bounding boxes, 50% случайных масок.
  
  ......
  
  Поскольку в качестве текстовых запросов мы используем только имена классов,
  то модель может разучится генерировать по длинным запросам.
  Поэтому мы решили доразметить наш датасет с помощью LLaVA 1.5.
  Для этого, после выбора bounding box,
  который мы использовали в качестве маски,
  мы подавали crop изображения в LLaVA,
  чтобы получить текстовое описание изображения,
  которое дальше использовалось как текстовый запрос.
  
  ......
  
  Также мы провели сравнение с другими моделями,
  чтобы проверить качество нашего нового метода inpainting-а.
  Для этого мы взяли датасет COCO и случайным образом отобрали из него
  1000 изображений и один объект с каждого объекта,
  который мы перегенерировали.
  Далее на полученных картинках мы прогнали модель,
  обученную на датасете детекции YOLO-X,
  и посчитали её метрики качества детекции.
  Если детектор, обученный на реальных изображениях
  сможет задетектировать сгенерированный объект,
  то можно сделать вывод,
  что объект сгенерирован достаточно естественно.
  Ниже мы приводим метрики
  
  .......
  
  Наша модель хорошо справляется с большими объектами
  и в целом ее качество при добавлении объектов намного лучше.
  
  Kandinsky SuperRes
  
  В новой версии Kandinsky 3.1 появилась возможность получать
  генерации изображений в разрешении 4K.
  Для этого была обучена диффузионная модель повышения разрешения KandiSuperRes.
  //// Вроде как в прошлой версии было и 8K.
  //// Это судя по приведенным в прошлых анонсам примерах.
  //// А так как документация отсутствует,
  //// то теперь можно и 4K повышением разрешения.
  //// И где найти инфу о реальных возможностях МК?
  
  За основу была взята архитектура Kandinsky 3.0, но с некоторыми модификациями.
  
  Вместо латентной диффузии была реализована пиксельная диффузия,
  чтобы исключить потерю качества
  при кодировании и декодировании картинки автоэнкодером.
  Помимо этого, в ходе экспериментов было выявлено,
  что пиксельная диффузия сходится быстрее и лучше,
  чем латентная для этой задачи.
  //// Ничего не понял. Кроме того, что эксперименты как-то противоречат
  //// достаточно часто встречающимся утверждением,
  //// что латентное пространство более удобно для многих задач.
  
  Вместо обычного Unet был реализован EfficientUnet подобно подходу,
  описанному в статье Imagen.
  https://arxiv.org/pdf/2205.11487.pdf
  В сравнении с U-Net Kandinsky 3.0, EfficientUnet потребляет меньше памяти
  и также имеет лучшую сходимость.
  Отличие в том, что вместо 3 Residual блоков на каждом понижении разрешения,
  в EfficientUnet используется большее количество блоков на низких разрешениях,
  и меньшее количество блоков на высоких.
  Также изменяется порядок выполнения свертки и downsampling/upsampling операций
  относительно исходного U-Net.
  Кроме этого, мы убрали обусловливание на текстовый промт,
  т.к. он не вносит вклад в генерации в высоком разрешение 4К.
  В итоге EfficientUnet KandiSuperRes содержит 413M параметров.
  
  Во время обучения EfficientUnet предсказывает не уровень шума
  в данный момент времени t,
  как это обычно принято при обучении диффузионных моделей,
  а x_0 (т.е. исходную картинку),
  что позволило избежать проблем,
  связанных с изменением цвета сгенерированной SR картинки.
  
  Обучение осуществлялось в 2 этапа
  - сначала модель училась на датасете Laion на 32 A100
  в течении 1,570 тысяч шагов с размером батча 2 на разрешение из 256 в 1024.
  Затем модель училась на эстетичных сетах высокого разрешения,
  используемых при обучении Kandinsky 3.0, в течении 1,500 тысяч шагов.
  На втором этапе обучения было добавлено JPEG сжатие подобной той схеме,
  которая описана в статье Real-ESRGAN.
  https://arxiv.org/pdf/2107.10833.pdf
  
  Модель KandiSuperRes позволяет работать с изображениями различного разрешения,
  однако основной целью являются генерации в высоком разрешении 4K.
  //// Особой разницы при использовании в промпте 4K и 8K и вообще без них,
  //// честно говоря, при разрешении 1024 x 1024 не увидел.
  //// Возможно, это следствие "бьютификации".
  Т. к. модель KandiSuperRes обучалась на разрешение 256  1024,
  а на большем разрешение обучить не было возможности
  из-за переполнения памяти A100,
  для генерации в 4К использовался алгоритм MultiDiffusion,
  позволяющий генерировать панорамы.
  Суть алгоритма заключается в том,
  что изначально изображение делится на перекрывающиеся патчи,
  и затем на каждом шаге диффузии удаляется шум,
  а значения пикселей / латентов перекрывающихся областей усредняются.
  И таким образом, пройдя все шаги диффузии,
  мы получаем бесшовное изображение любого разрешения.
  В итоге на инференсе модель KandiSuperRes работает за 5 шагов,
  используя DPMSolverMultistepScheduler.
  Время инференса для генерации изображения в 4К занимает 13 секунд,
  а в 1К - 0,5 секунды.
  
  В таблице ниже приведено сравнение KandiSuperRes с моделями Real-ESRGAN
  и Stable Diffusion x4 Upscaler по метрикам FID, SSIM, PSNR и L1
  на датасетах Wikidata 5К, RealSR(V3) и Set14.
  Wikidata 5К содержит 5 тысяч изображений, собранных из википедии, в разрешении 1К.
  RealSR(V3) содержит 100 тестовых изображений в разрешениях 1K и 2K.
  Set14 содержит 14 изображений в низких разрешениях с JPEG артефактами.
  В итоге модель KandiSuperRes показала наилучшие результаты.
  
  Сравнение моделей Real-ESRGAN, Stable Diffusion и KandiSuperRes:
  
  .......
  
  На рисунке 1 приведены примеры генераций моделей
  KandiSuperRes, Stable Diffusion и Real-ESRGAN на разрешение 1024.
  На рисунке 2 приведены примеры генераций KandiSuperRes в разрешение 4К.
  
  Код и веса KandiSuperRes выложены на Github и HuggingFace.
  
  ........
  
  Маленькие версии модели (1B)
  
  Чтобы сделать нашу модель более доступной для запуска и дообучения
  при малых вычислительных ресурсах мы решили обучить маленькую версию модели.
  Для нее мы взяли U-Net, содержащий 1 миллиард параметров,
  и текстовый энкодер от FLAN-T5 XL.
  Обучение происходило в течение 1-го миллиона итераций на датасете COYO 700m
  с размером батча 2048.
  Внизу представлены примеры генераций с помощью этой модели.
  
  .......
  
  Вывод
  
  В этой статье мы представили новую версию
  нашей диффузионной модели генерации изображений по тексту Kandinsky 3.1,
  которую мы сделали более эффективной
  с помощью современных методов дистилляции
  и дополнили новыми режимами работы,
  которых не было в версии Kandinsky 3.0
  - возможностью редактирования изображений и переносом стиля.
  Дополнительно мы улучшили качество работы inpainting-а,
  метода повышения разрешения для перехода в пространство пикселей
  из пространства скрытых представлений,
  а также, помимо доступа к основной большой модели,
  мы предоставили пользователям возможность работы
  с версиями нашей модели с меньшим числом параметров,
  что гораздо удобнее для локального запуска
  и дообучения при малых ресурсах для своих целей и задач.
  Можно сказать, что наше основное достижение это то,
  что мы сделали творческую генерацию гораздо более удобной для пользователя,
  который теперь может полноценно использовать весь потенциал нашей модели.
  
  Как и всегда, мы ценим открытые исследования и охотно делимся ими с вами,
  чему вновь стала примером данная статья.
  //// Да уж данная статья точно может служить просто образцом
  //// "открытых исследований", но только для "посвященных".
  
  ......
  
  Авторы и их вклад
  
  Модель Kandinsky 3.1 разработана командой Sber AI
  при партнёрской поддержке учёных из Института искусственного интеллекта AIRI
  на объединённых датасетах Sber AI и компании SberDevices.
  
  Коллектив авторов:
  Владимир Архипкин, Андрей Филатов, Вячеслав Васильев, Анастасия Мальцева,
  Игорь Павлов, Михаил Шойтов, Юлия Агафонова, Николай Герасименко,
  Анастасия Лысенко, Илья Рябов, Саид Азизов, Антон Букашкин,
  Елизавета Дахова, Татьяна Никулина, Сергей Марков, Андрей Кузнецов
  и Денис Димитров.
  
  ........
  
  //// Конец цитирования.
  
  В общем, хорошо, что развитий "Моделей Kandinsky" хоть как-то продолжается,
  и их качество реально улучшается.
  И за это большое спасибо команде разработчиков.
  А вот отношение разработчиков к "популяризации" своей работы
  явно оставляет желать много лучшего.
  
  
  ========
  
  24.05.2024 13:16
  
  Сеанс поэтапной "дистилляции".
  В оглавление.
  
  Очень любопытный метод последовательной "дистилляции" цепочки моделей,
  совмещающий в себе и поэтапное обучение моделей требуемым новым свойствам,
  и такое же последовательное "снятие лишнего жирка" со структуры модели.
  Не проходите мимо - это действительно очень перспективно
  именно для мультимодальных нейронок:
  
  "Опыт дистилляции моделей распознавания речи".
  Автор: limpwinter
  https://habr.com/ru/articles/816789/.
  24 мая 2024 в 11:16
  
  //// Начало цитирования.
  
  В области распознавания речи, если смотреть на SOTA решения,
  то заметно, что эти модели хоть и не сопоставимы по размерам
  с современными языковыми моделями на десятки миллиардов параметров,
  но инферить и тем более обучать эти модели на локальном устройстве
  без нормального железа довольно проблематично.
  А маленькие модели, хоть и летают на устройствах,
  но похвастаться хорошим качеством распознавания не могут.
  
  Для решения такой пробемы нам может помочь дистилляция,
  хотя есть и другие техники ускорения обучения и уменьшения затрат памяти
  типа квантизации, прунинга и др. подходы,
  но в этой статье речь пойдет именно про неё.
  
  Дистилляция по своей сути представляет процесс переноса "знаний"
  от модели "учителя" к модели "ученика".
  И даже не обязательно, чтобы ученик был меньше учителя.
  Более подробно и формально про дистилляцию можно почитать здесь.
  https://education.yandex.ru/handbook/ml/article/distillyaciya-znanij
  В этой же статье по большей части будет рассказана
  небольшая история моего проекта,
  в которой очень важное место играла дистилляция.
  Если очень вкратце про дистилляцию,
  то в результате её мы хотим, чтобы наш ученик выучил то же распределение,
  что и учитель, чтобы он учился подражать учителю,
  выучивая то, что самостоятельно выучить бы не смог.
  Большому учителю проще выучивать сложные и не очень зависимости,
  а затем мы эти выученные зависимости передаём ученику.
  //// Интересным остается вопрос: почему "ученик" не может
  //// самостоятельно выучить требуемые зависимости,
  //// но при этом может их воспроизводить?
  //// Что не так в методах обучения?
  
  В ходе нашего проекта дистилляцию мы использовали аж два раза,
  в первый раз мы обучали большую модель учителя,
  для переноса знаний от другой большой модели.
  Во второй уже модель ученика была действительно маленькой моделью
  (меньше в 161 раз, и которая работает приблизительно в 500 раз быстрее).
  //// Интересный подход.
  //// В том смысле, что "промежуточная" система может и должна,
  //// в чем-то быть своеобразной/специализированной.
  //// Тут надо подумать, что такая последовательная "дистилляция" реализует.
  
  Дистилляция 1
  
  Какая была задача:
  
  Нам нужно было иметь отличное качество распознавание на своём датасете,
  и не просесть по метрикам WER и CERна датасете общего назначения
  (в качестве таких можно взять Common Voice или Golos.
  
  Изначально мы имели довольно хорошую модель для распознавания речи,
  которую можно взять в открытом доступе
  и с которой не нужно было устраивать танцы с бубном,
  чтобы инферить или дообучать её.
  В качестве одной из таких моделей можно взять например эту.
  https://huggingface.co/bond005/wav2vec2-large-ru-golos-with-lm
  Мы использовали модель типа Wav2Vec2 .
  Ее довольно несложно дообучать, в сравнении с тем же виспером
  (и к тому же у нас на начало проекта
  уже был неплохо обученный экземпляр такой модели).
  
  Чтобы получить модель, которая хорошо игнорирует шумы,
  нами был написал аугментатор с тремя типами шумов:
  речеподобные, домашние шумы и звуки животных.
  Аугментатор можно найти по ссылке.
  https://github.com/dangrebenkin/audio_augmentator
  Шумы накладывались в 2 режимах,
  либо шум накладывался в случайное место на аудио файле,
  либо он повторялся во время всего аудио сигнала.
  Чтобы понять на сколько запись зашумлена и на сколько её нужно зашумлять
  мы использовали SNR
  
  snr = 10 \log_{10}\frac{P_{signal}^2}{P_{noise}^2}
  
  где P_{signal}- мощность чистого звукового сигнала,
  а P_{noise}- мощность шума.
  Чем ниже эта величина, тем более зашумлен сигнал.
  Нулевое значение означает, что мощность сигнала равна мощности шума
  и если это речеподобный шум,
  то вне контекста понять, где шум, а где речь нельзя.
  
  На первых этапах у нас возникала проблема,
  что нельзя просто так взять и дообучить модель на новых данных с шумами.
  Модель просто не могла ничего выучить,
  мы посчитали, что это из-за того,
  что мы заставляем модель прыгать с места в карьер
  давая ей слишком сложные сигналы,
  или если она выучивала что-то на наших данных,
  то качество на датасете общего назначения падало.
  Поэтому нами было принято решение попробовать дистилляцию.
  
  В качестве учителя и ученика изначально была взята одна и та же модель.
  Только модель учителя мы зафиксировали, а модель ученика обучали.
  В качестве distillation_loss мы взяли KLDivLoss.
  Часто в качестве бейзлайна используют MSE лосс для дистилляции,
  но мы решили сразу использовать дивергенцию Кульбака Лейблера,
  т.к. те минусы, которые есть у этой функции потерь нам либо не страшны,
  либо не интересуют.
  Распределения у обоих моделей находятся близко друг к другу
  (в начале так они вообще совпадают),
  а отсутствие св-ва симметричности нам не вредит,
  (ну и на практике KLDivLoss показывает себя лучше).
  
  Ну и в качестве таргетной лосс функции мы взяли CTCLoss,
  который хорошо знаком всем, кто занимается распознаванием речи.
  Суть её в том, что мы после того как получили наши логиты
  (распределения символов для каждого момента времени)
  матчим таргетную последовательность,
  фиксированной длины со всеми возможными последовательностями
  (они могут иметь разные длины),
  которые могут получиться из логитов.
  Также к слову, мы пробовали использовать подход с выравниванием таргетов
  (force alignment),
  чтобы для каждого фрейма по времени у нас была метка класса(символа),
  и рассматривали задачу классификации используя CrossEntropyLoss.
  Но потом поняли, что этот подход был некорректен
  из-за того, что мы фиксировали только одну цепочку
  и говорили модели предсказывать именно её,
  лишая модель возможности пропускать градиенты по другим цепочкам.
  
  Следующий шаг включал в себя подготовку и подачу данных в модель.
  Изначальная модель (или модель учителя, на всех этапах)
  хорошо распознавала чистую речь,
  но с шумами справлялась крайне плохо.
  Метрика WER на чистых сигналах была 20%,
  а на зашумленных она возрастала до 60%,
  что было, мягко говоря, неприемлемо.
  Главной фичей, которую мы провернули,
  чтобы модель ученика все-таки научилась распознавать шумы,
  был подход, когда мы на модель учителя подаем чистые данные,
  а на модель ученика точно такие же данные,
  но с наложенными поверх шумами.
  //// Отличная идея. Но, наверно, это уже надо называть не "дистилляцией",
  //// а как-то по-другому.
  //// Ладно, оставим право "наименования" авторам такого подхода.
  Таким образом мы заставляем модель выучивать распределение чистых данных,
  игнорируя шумы.
  
  Рис. Схема обучения "промежуточной" модели "с шумами".
  
  Но и это ещё не всё.
  Нами была выдвинута гипотеза о том,
  что модель должна учиться поэтапно,
  переходить от более простых сигналов к более сложным.
  //// Люто аплодирую.
  //// Поэтапное обучение - это практически гарантированное соблюдение
  //// рекомендаций ТРИЗ.
  //// А тут оно еще и сопровождается возможностью создания "поэтапных" моделей.
  //// Это как последовательная обработка "заготовки"/болванки
  //// в требуемую конфигурацию детали.
  Конечно, определение что такое сложность аудио сигнала
  - тема для отдельного обсуждения,
  но мы пошли самым простым путём и меняли значение SNR.
  Начинали с 30 и постепенно уменьшали этот показатель,
  тем самым увеличивая мощность шума по отношению к чистому сигналу.
  //// А вот это уже практически какое-то использование метода диффузии,
  //// но пока только применительно к аугментации обучающих данных.
  //// А ведь можно "диффузию" использовать и как метод обучения.
  //// Выше был материал об этом, см.:
  //// "Дистилляция диффузионки" для "чайников".
  
  И результат не заставил себя долго ждать.
  При таком обучении нам удалось достичь следующих результатов:
  
  Таблица результатов.
  
  .....
  
  Т.е. нам удалось приблизиться к показателям изначальной модели на общем домене,
  но на очень шумных данных.
  Нас этот результат полностью устроил и мы пошли дальше.
  А дальше нам нужно было эту модель как-то уменьшить?
  Как её можно уменьшить?
  Конечно ещё одной дистилляцией!
  //// Ну, молодцы. Что еще можно сказать.
  
  Дистилляция 2
  
  После того, как нами была получена мощная
  и вообще самая классная (лично по нашему мнению) модель,
  мы приступили ко второй части.
  В качестве ученика уже брать модель типа wav2vec2 не было возможности.
  Она не подходила нам ни по вычислительным соображениями, ни по архитектуре,
  т.к. мы хотели в будущем допилить стриминговый инференс.
  А для стриминга есть модели и по лучше, например конформер!
  
  Доступна из коробки в торче.
  
  Модель типа трансформер.
  
  Может быть очень маленькой.
  
  Легко обучать. (для меня, наверное, самый важный пункт)
  
  С точки зрения дистилляции обучение конформера
  выглядело очень похоже на обучение учителя другим учителем.
  
  Также чистый сигнал подаем на учителя
  (решили повторить этот мув,
  хотя модель учителя уже достаточно хорошо справляется с шумами),
  а ученик получает зашумленный
  
  Постепенно уменьшали SNR.
  
  В качестве distillation_loss также брали KLDivLoss.
  
  В результате обучения мы получили следующие результаты:
  
  Еще одна Таблица результатов.
  
  .....
  
  Что сопоставимо с результатами,
  которые были получены большой моделью на базе wav2vec2.
  Победа!
  
  Заключение и перспективы
  
  По итогу, изначально имели
  необученную модель на 315млн. параметров весом в 1.2гб,
  а получили маленькую, быструю модель весом 8мб,
  //// Два ПОРЯДКА. Это что-то почти невероятное. Это КРУТО.
  которая полностью устраивает нас по качеству.
  
  Возможно, у вас возникли вопросы о том,
  как мы можем говорить, что наша модель такая крутая,
  если мы её толком не протестировали,
  но я вам отвечу, что согласен с вами).
  Наша главная задача была получить не универсальную модель,
  устойчивую к сдвигу данных,
  а спроецировать те знания, которые мы считаем важными в большой модели
  в маленькую модель,
  чтобы выиграть по скорости и качеству.
  И это у нас очень даже получилось.
  Остается ещё очень много вопросов,
  касательно различных гипотез,
  которые мы выдвигали в ходе экспериментов,
  которые мы обязательно проверим,
  но уже не в этот раз.
  А что касается дистилляции,
  то это очень крутая техника,
  в которой и по сей день остается куча не решенных вопросов.
  Но, лично для меня, самое главное в ней,
  что её можно попробовать не только для исследовательских целей,
  но для практических нужд.
  
  ........
  
  //// Конец цитирования.
  
  Практически, нет сомнений, что этот метод/подход можно еще дальше развить
  и даже как-то автоматизировать.
  И, "почему-то", он представляется на порядок более перспективным
  чем тот "апофигей", что творится сейчас в ИИ-индустрии
  с автоматизированным подбором гиперпараметров при обучении нейросетей, см.:
  "Таинства подбора гиперпараметров обучения нейросетей."
  
  Т.е. вместо бесчисленного и полуслепого перебора гиперпараметров,
  стоит задуматься о последовательном, поэтапном обучении/выращивании нейромодей,
  причем не зацикливаться при этом только на методе "дистилляции",
  но и добавить к арсеналу используемых средств и "метод диффузии",
  хотя бы как способ управляемой аугментации/синтеза обучающих данных.
  А ведь есть еще и методы "обучения с подкреплением".
  Они тоже ждут своего часа и соответствующего "методического обрамления".
  
  В любом случае, хочется поздравить авторов этого материала
  с несомненным успехом
  в прокладывании "новых фарватеров" в машинном обучении.
  
  
  ========
  
  10.08.2024 19:26
  
  Больше латентов "хороших и разных".
  В оглавление.
  
  Интересное направление параллельного использования разнородных латентов
  обнаружилось для меня почти случайно -
  вроде как, статья про конкретный инструмент редактирования изображений,
  а на самом деле о новом подходе с использованием нескольких
  "видоизмененных копий" внутренних пространств - просто "классика ТРИЗ":
  
  "Без компромиссов.
  Как добиться одновременно высокого качества в редактировании
  и инверсии изображений с помощью StyleGAN".
  retir (Денис Бобков)
  https://habr.com/ru/companies/airi/articles/829004/.
  26 июл 2024 в 15:18
  
  Не хочется в этой статье ничего "усекать", даже не смотря на большой объем
  - уж больно хорошо написана, и концентрация описанных идей/концепций
  тоже впечатляет. Очень рекомендую читать ее в оригинале и не "по диагонали".
  
  //// Начало цитирования.
  
  Всем привет! Меня зовут Денис Бобков,
  я сейчас обучаюсь на совместной магистерской программе ВШЭ и ШАД
  под названием <Современные компьютерные науки>,
  а также работаю исследователем в AIRI в команде Controllable Generative AI
  лаборатории FusionBrain.
  Область моих исследований касается методов редактирования изображений.
  
  Захотелось добавить на фото улыбку или очки?
  Поменять причёску или её цвет?
  Современные инструменты, которые делают это,
  не способны одновременно изменить именно то, что тебе нужно,
  не испортив всё остальное,
  причём так, чтобы изменение выглядело реалистично,
  а сам процесс изменения не выполнялся слишком долго.
  Нашей же команде удалось довольно сильно приблизиться к тому,
  чтобы выполнить все три условия сразу.
  
  Совсем недавно нашу статью приняли на одну из топ-конференций
  по компьютерному зрению CVPR 2024
  (эта конференция недавно стала самой цитируемой!).
  Наша статья про то, как можно редактировать лица в высоком качестве
  с помощью генеративной модели StyleGAN.
  Почитать её целиком можно на архиве,
  https://arxiv.org/abs/2406.10601v1
  а здесь же я хотел кратко рассказать о том, что именно мы сделали.
  
  Недавно, а именно 10 июня, исполнилось ровно 10 лет
  с момента выхода статьи Яна Гудфеллоу и его коллег,
  в котором были впервые описаны генеративно-состязательные нейросети
  или просто GANs - generative adversarial networks.
  Эта такая архитектура, в которой две независимые сети
  - генератор и дискриминатор - бьются друг с другом ради того,
  чтобы качество генерации было на высшем уровне.
  О них уже написано довольно много
  (например, рекомендую вот эту статью моего руководителя Айбека Аланова),
  https://habr.com/ru/companies/airi/articles/747038/
  поэтому останавливаться на них я не стану.
  
  Рис. 1. Схема работы GAN. Источник: Angelo Garangau Menezes.
  
  В конце 2017 года спецы из NVIDIA открыли новую страницу в использовании GAN,
  представив модель StyleGAN,
  которая в своё время стала фундаментальной базой для задания SOTA-планки
  в области генерации изображений, в особенности человеческих лиц.
  Чем же StyleGAN так хороша?
  
  Кратко про StyleGAN
  
  Для начала стоит отметить, что в основе генератора StyleGAN
  лежат свёрточные нейронные сети.
  Генерация начинается с блока, отвечающего за разрешение 4 х 4,
  потом увеличивается до 8 х 8, потом до 16 х 16 и так далее до 1024 х 1024.
  Таким образом формируется 9 блоков,
  каждый из которых состоит из 2 специальных свёрточных слоёв.
  
  Рис. 2. Сравнение генерации в традиционных GAN'ах и в StyleGAN.
  Картинка взята из статьи NVIDIA.
  https://openaccess.thecvf.com/content_CVPR_2019/papers/Karras_A_Style-Based_Generator_Architecture_for_Generative_Adversarial_Networks_CVPR_2019_paper.pdf
  
  В обычных GAN на вход в генератор подаётся нормальный шум,
  выбранный из так называемого латентного или, по-другому,
  Z-пространства в форме вектора некоторого размера, например, 512.
  В StyleGAN всё хитрее:
  z-вектор сначала прогоняется через специальную MappingNetwork,
  и становится w-вектором того же размера - 512.
  W-пространство нужно,
  поскольку пространство нормальных шумов Z слишком простое.
  В нём сложно найти такое смещение (направление),
  которое, будучи добавленным к исходному латенту,
  добавляет на изображение, например, улыбку (см. Рис. 3).
  W-пространство, напротив, выучивается быть достаточно сложным,
  за счёт чего искать в нём направления для редактирования сильно легче.
  //// Четкий пример ТРИЗ-приема "используем измененную копию".
  
  Рис. 3. Можно видеть, что траектория редактирования улыбки в Z-пространстве
  очень кривая (в идеале хочется, чтобы она была линейная),
  из-за чего сложно находить подобные направления редактирования.
  Источник. https://arxiv.org/abs/2109.13357
  
  Далее этот w-вектор попадает в каждый из блоков StyleGAN
  с помощью специальной операции AdaIN
  (в более поздних версиях StyleGAN немного по другому, но суть такая же).
  Ключевое здесь то, что в обычных GAN вектор входит только в первый слой сети,
  в то время как в StyleGAN он скармливается каждому слою,
  поэтому поздние слои не забывают информацию
  об атрибутах синтезируемого изображения, которая содержится в w-векторе.
  
  А что с реальными картинками?
  
  Мы в общих чертах разобрали, как работает StyleGAN,
  и понимаем, как генерируется изображение,
  и как управлять его атрибутами - круто!
  Но как же работать с реальными картинками?
  Тут-то и вступает в дело задача инверсии
  - когда у нас есть реальная картинка
  и мы хотим найти какие то внутренние представления StyleGAN (латенты),
  из которых предобученный генератор синтезирует эту самую картинку.
  
  Рис. 4. Общая схема редактирования реальных картинок с помощью StyleGAN.
  Наша задача - найти латенты внутри StyleGAN,
  из которых сгенерируется исходная картинка.
  Тогда определённым способом меняя найденные латенты,
  мы сможем получать различные изменения на синтезируемой картинке.
  
  В самых первых работах по инверсии авторы искали именно w-латенты.
  Это удобно, т.к., чтобы редактировать изображения,
  достаточно соответствующим образом поменять найденные w-вектора
  (а для этого мы знаем кучу направлений из W-пространства,
  каждое из которых отвечает за свой атрибут),
  и синтезировать результат из изменённых латентов.
  
  Однако всё не так просто.
  Если наша картинка довольно большая - скажем, 1024 x 1024 x 3,
  - то при попытке запихать её в вектор размерности 512
  потеряется много информации.
  Чтобы уменьшить этот негативный эффект,
  предлагается работать в так называемом W+-пространстве.
  https://arxiv.org/pdf/1904.03189
  В нём для каждого свёрточного слоя StyleGAN
  ищется свой собственный w-вектор.
  Так как в StyleGAN у нас 9 х 2 = 18 слоёв,
  то размерность W+ будет 18 x 512,
  что в 18 раз увеличивает количество информации о картинке,
  которую мы можем сохранить.
  
  Рис. 5. Здесь можно видеть разницу между инверсией в W- и W+-пространствах.
  На (а) - оригинальное изображение;
  (b), (c), (d) - различные способы инвертировать в W;
  (e), (f), (g) - аналогичные способы инверсии в W+.
  Видно, что правые способы получаются сильно удачнее.
  Источник. https://arxiv.org/pdf/1904.03189
  
  Но даже этого мало, чтобы учесть все детали сложных изображений.
  Поэтому было придумано расширить W+-пространство
  https://arxiv.org/pdf/2108.08998
  с помощью дополнительного F-пространства.
  //// А вот и еще одна "измененная копия".
  //// Точнее не "копия", а "образ". "Копия" это просто такой ТРИЗ-термин.
  Идея следующая: давайте помимо маленьких w-векторов,
  мы также будем искать большой F-тензор,
  составленный из выходов k-го слоя генератора.
  То есть мы начнём синтез в генераторе не с константы размера 512 х 4 х 4,
  а прямо с предсказанного тензора
  (в нашей работе мы использовали размерность 512 x 64 x 64).
  Этот тензор настолько большой,
  что в него уже помещается достаточно много информации об исходной картинке,
  и это позволяет сохранить много деталей.
  
  Однако при решении задачи о редактировании стиля
  важно научиться правильно менять этот тензор желаемым образом.
  И если тому, как менять w-латенты, чтобы получилось желаемое редактирование,
  посвящено много работ,
  то манипуляции в F-пространстве далеко не так очевидны.
  Именно этой проблеме и посвящена наша статья.
  
  А как инвертировать?
  
  Прежде чем перейти к сути, отмечу,
  что современные подходы к инверсии изображений можно разделить
  на две большие группы:
  основанные на оптимизации и на энкодерах.
  В первых веса искомых латентов делают обучаемыми,
  и ищут их напрямую через процесс оптимизации - отсюда и название.
  За счёт прямого поиска латентов такие методы
  позволяют находить достаточно хорошие представления в латентом пространстве,
  что даёт хорошее качество и инверсии, и редактирования.
  Однако, недостаток такого подхода в том,
  что для каждого нового изображения нам необходимо
  весь процесс запускать заново.
  Обучение может длиться достаточно долго, вплоть до нескольких минут,
  что делает такие методы неприменимыми на практике.
  
  В противовес методам оптимизации существуют энкодеры
  - методы, основанные на нейросети,
  которая принимает на вход реальную картинку
  и учится для неё предсказывать искомые латенты.
  Для новых картинок такой подход требует лишь одного прогона нейросети,
  что обычно занимает меньше 0.1 секунды.
  Однако обучить единую нейросеть,
  которая будет работать с любыми картинками гораздо сложнее,
  чем для каждой картинки обучать свои латенты,
  поэтому качество подходов с энкодерами может быть сильно ниже.
  
  Разница между энкодерами и методами оптимизации предоставляет нам выбор:
  хотим ли мы быстрый, но не очень точный метод,
  либо медленный, но довольно хороший.
  Однако, это не единственный выбор, который стоит перед нами.
  
  Какие латенты искать?
  
  Как я уже писал выше, существуют разные латентные пространства,
  в которых мы можем искать представления для наших картинок,
  в частности W+ и F.
  Ещё при создании StyleGAN W+-пространство подразумевалось
  как пространство, в котором будут производиться все редактирования,
  поэтому с этим там всё хорошо.
  Однако маленький размер пространства не помогает сохранить
  все детали большого исходного изображения.
  
  Рис. 6. Пример редактирования в W+-пространстве.
  Само редактирования по перекраске волос в фиолетовый прошло неплохо,
  однако мы потеряли кучу деталей, вроде текстуры кожи и тату.
  
  F, напротив, за счёт предсказания большого тензора
  позволяет перенести все детали в инверсию.
  Но тут возникает проблема:
  бoльшая часть информации об изображении находится в F-тензоре,
  а во время редактирования мы знаем, как изменять только w-латенты.
  Если менять w, но не менять F,
  то редактирования просто перестанут работать,
  либо создадут кучу артефактов.
  И тогда мы сталкиваемся с ещё одним tradeoff'ом:
  между качеством инверсии
  (количеством сохраняемых деталей исходного изображения)
  и возможностями к редактированию полученной инверсии.
  
  Рис. 7. Пример редактирования в F-пространстве.
  Здесь, напротив, получается довольно неплохо сохранить татушки,
  но само редактирование применяется некорректно
  - перекрашивается будто бы вся картинка, причём довольно слабо.
  
  Как получить всё и сразу
  
  И вот теперь мы наконец добрались до того,
  что же удалось сделать в нашем исследовании,
  и как полученные результаты удостоились попадания на CVPR.
  
  Нам удалось получить несколько профитов сразу:
  
  быстрое время работы,
  
  высокое качество реконструкции,
  
  хорошую редактируемость.
  
  Для этого мы придумали фреймворк,
  в котором обучение энкодера делится на две фазы.
  Сначала мы просто учим наш энкодер выучивать представления в F-пространстве
  - модуль, отвечающий за это, мы назвали Inverter
  (ведь он занимается инверсией).
  При этом теряется редактируемость:
  чтобы её восстановить, во второй фазе мы вводим и обучаем новый модуль
  под названием Feature Editor,
  чья задача - модифицировать F-тензор таким образом,
  чтобы добиться желаемого изменения стиля.
  //// А это ТРИЗ-прием "разделить на части".
  
  Рис. 8. Пример редактирования в F-пространстве,
  где F-тензор также редактируется.
  Такой подход позволяет сохранить и оригинальные детали изображения,
  и правильно применить желаемое редактирование.
  
  На словах просто, но как учить такой модуль?
  Это можно было бы сделать,
  будь у нас множество пар с исходным и модифицированным изображениями.
  Например: реальное лицо и ровно оно же, но с улыбкой,
  или ровно оно же, но с другой причёской и т. п..
  Однако на практике у нас нет таких данных,
  а собирать подобный датасет было бы ООООЧЕНЬ затратно и долго.
  
  В нашей статье для решения этой проблемы мы предлагаем трюк:
  а давайте для получения таких пар сгенерируем данные.
  Основная проблема w-энкодеров в том, что они не сохраняют деталей.
  Однако если мы посчитаем, что инверсия w-энкодера
  - это реальная картинка,
  то её редактирование w-энкодером выглядят вполне себе реалистично (см. Рис. 9).
  Так давайте использовать инверсию, полученную от w-энкодера,
  как вход для нашего пайплайна,
  а какое-то случайное редактирование,
  полученное также от этого w-энкодера, как таргет для нашего пайплайна.
  Внутри обучаемого пайплайна как раз будем проводить то же самое редактирование.
  
  Рис. 9. Пример работы w-энкодера (e4e),
  который мы использовали для генерации данных для обучения пайплайна:
  метод не сохраняет деталей,
  но если посчитаем, что инверсия это и есть исходное изображение,
  то редактирования работают вполне неплохо.
  
  Таким способом мы выучим FeatureEditor,
  чтобы его редактирования работали хотя бы на не слишком сложных данных.
  Однако реальные картинки обычно действительно содержат сильно больше деталей,
  чем те, что используются у нас в обучении.
  Чтобы избежать потери деталей (которые Inverter успевает собрать),
  мы предложили параллельно с задачей редактирования
  обучать Feature Editor на задачу инверсии,
  но уже с реальными картинками.
  Таким образом, мы показываем Feature Editor как редактировать простые
  (синтетические) данные,
  как инвертировать сложные (реальные) данные,
  и, о чудо, он сам начинает понимать
  как достаточно хорошо редактировать сложные данные!
  
  Итого, мы получаем:
  
  Отличное качество инверсии за счёт того,
  что Inverter предсказывает F-тензор достаточно большого размера;
  
  Хорошее качество редактирования благодаря применению
  хитрой техники обучения на синтетических данных,
  которую описали выше;
  
  Быструю скорость работы, за счёт использования энкодерного подхода
  с достаточно легковесными нейросетями.
  
  Эксперименты
  
  Весь фреймворк целиком получил название StyleFeatureEditor (SFE).
  Мы сравнили его с существующими энкодерными
  (e4e, psp, StyleTransformer, ReStyle, PaddingInverter, HyperInverter,
  Hyperstyle, HFGI, Feature-Style, StyleRes)
  и оптимизационным (PTI) методами на датасетах с лицами и автомобилями.
  Наш подход не только успешно справляется с добавлением новых стилевых элементов,
  но и бережно относится к деталям исходных изображений.
  Продемонстрируем это на примере лиц с большим числом необычных деталей:
  грим, татуировки и т. п..
  
  Рис. 10. Сравнение работы SFE с другими методами
  на наборе лиц с большим числом деталей.
  
  Можно заметить, что для простой инверсии (первый ряд)
  SFE аккуратно воспроизвёл шляпку,
  в то время как большинство других методов её практически потеряло.
  Или обратите внимание на третий ряд:
  мы решили надеть на Ло'ака очки.
  С этим справилось большинство подходов,
  но только наш сохранил его глаза жёлтыми.
  
  А вот как выглядят результаты эксперимента в домене с машинами:
  
  Рис. 11. Невооруженным глазом видно,
  как SFE сохраняет исходную форму и раскраску автомобиля и даже тени.
  
  Впрочем, количественные оценки мы тоже делали.
  Для измерения качества инверсии всё довольно просто
  - достаточно измерить похожесть оригинальной картинки и её инверсии.
  Для оценки похожести мы измеряли достаточно классические L2, LPIPS и MS-SSIM.
  Также, чтобы проверить, насколько наши данные в целом похожи на реальные
  (по распределению),
  мы считали FID между датасетом исходных картинок, и датасетом их инверсий.
  По таблице сравнения видно, что наш метод
  с довольно неплохим отрывом побивает всех конкурентов!
  
  Рис. 12. Таблица метрик для измерения качества реконструкции изображений.
  
  Однако, инверсия, это конечно хорошо, но наша основная задачу
  - редактирование картинок,
  а инверсия без редактирований не особо то и нужна.
  И тут уже встаёт более сложный вопрос
  - а как оценивать то, насколько хорошо редактирует наш метод?
  Как уже обсуждалось выше, реальных отредактированных данных для сравнения
  у нас нет.
  Использовать синтетические - не объективно, они слишком простые.
  И тут, нам на помощь приходит разметка!
  
  Давайте считать, что у нас есть датасет,
  где для каждой фотки мы знаем какой-то набор атрибутов
  - есть ли на лице очки, есть ли улыбка, молодой или пожилой человек и т. п.
  (такие данные уже есть, скажем, Celeba).
  И давайте предположим, что мы хотим проверить,
  насколько хорошо наш метод добавляет улыбку.
  С помощью разметки разделим наш датасет на две части:
  лица с улыбкой, и лица без неё.
  К лицам без улыбки применим наш метод, который добавит улыбку.
  Теперь мы можем сравнить распределения реальных данных с улыбкой,
  и тех, которые получились у нашего метода - посчитаем между ними FID.
  
  FID подходит как нельзя лучше,
  т.к. не сравнивает конкретные две картинки,
  а старается смотреть на распределение обоих наборов данных целиком.
  Логично, что, если в одном датасете (реальном) везде есть улыбка,
  а во втором её нет (или она с артефактами),
  то распределения будут отличаться!
  
  Таким, немного хитрым образом, мы и можем оценить,
  насколько хорошо редактирует наш метод.
  И тут всё также довольно неплохо!
  Мы редактируем практически не хуже,
  а иногда и лучше прошлой SOTA StyleRes,
  при этом за счёт инверсии явно сохраняем больше деталей.
  И всё это при том, что, запускаясь на TeslaV100,
  SFE требует всего 0.07 секунды на редактирование одного изображения!
  Более подробные результаты и сравнение с другими методами можно посмотреть
  в таблице ниже:
  
  Рис. 12. Таблица метрик.
  
  Рис. 13. Таблица метрик для измерения качества различных редактирования изображений.
  
  Возможно, кому-то удобнее будет воспринять проведённые нами сравнения
  в виде диаграммы:
  
  Рис. 14. Здесь по оси ординат отложен усредненный FID
  для редактирований из таблицы выше,
  а по оси абсцисс - классическая метрика инверсии LPIPS.
  Размер точки прямо пропорционален времени инференса метода.
  
  И ещё немного примеров работы SFE на датасете с лицами знаменитостей:
  
  Рис. 15. Работа SFE с лицами знаменитостей.
  
  Спасибо всем, кто дочитал до конца.
  Надеюсь, вам стало чуть понятнее, как работает StyleGAN,
  а также понравился наш фреймворк.
  Можете сами опробовать демо нашего метода на HuggingFace,
  мы также будем рады вашим звёздам и форкам к нашему репозиторию.
  
  Список авторов: Денис Бобков, Вадим Титов, Айбек Аланов, Дмитрий Ветров
  
  Для сотрудничества можно обращаться к руководителю лаборатории Fusion Brain
  Андрею Кузнецову
  
  ...........
  
  //// Из комментариев.
  
  Tarzan3668
  26 июл в 18:53
  
  Добрый вечер, спасибо за статью.
  
  Что вы думаете о преобразованиях в F пространстве,
  когда переносится одно вероятностное распределение в другое?
  
  Какие геометрические законы и инварианты стоит там рассматривать?
  
  В упомянутой в тексте статье, вижу лосс несколько напоминающий MSE,
  но для латента...
  
  retir
  26 июл в 19:48
  
  \\\ Добрый вечер, можете пояснить, что вы имеете в виду
  \\\ под преобразованиями в F пространстве,
  \\\ где одно распределение переносится в другое?
  
  Что касается различных геометрических преобразований,
  в этой статье в 3 главе показали,
  как подобные преобразования в F-пространстве
  влияют на синтезируемую картинку.
  Если говорить вкратце,
  то в F-пространстве сохраняется относительная позиционность признаков
  - если на исходной картинке в правом верхнем углу находится красный бант,
  то признаки из F-пространства, отвечающие за этот бант
  будут также находится в правом верхнем углу F-тензора.
  Это также значит, что все базовые геометрические преобразования
  в F-пространстве также соответствующим образом переносятся
  на генерируемую картинку.
  
  Для тренировки SFE мы действительно использовали MSE лосс
  - как для картинок (между синтезированной и ground truth),
  так и в качестве регуляризации для F-латентов
  (в качестве лосса использовали норму предсказанного F-латента).
  Второе нужно, чтобы больше информации об исходной картинке
  проходило именно через W пространство,
  и F-латенты были более податливы редактированиям.
  
  //// Конец цитирования.
  
  Что еще хочется добавить к тому, что тема "расщепления" латентов
  на подпространства разной размерности со своей специализацией
  и при этом как-то скоррелированных друг с другом,
  показалась мне очень "плодотворной дебютной идеей".
  Конечно, тут нужно еще много и подумать и пособирать информацию,
  но само направление использования разнородных,
  но согласованных по конечной цели латентов,
  причем, обученных принципиально по разному,
  наверняка, будет развиваться.
  
  
  ========
  
  10.08.2024 20:43
  
  Обучение матрицами вращения.
  В оглавление.
  
  Так уж получилось, что предыдущий рассмотренный материал практически сразу же
  совпал по времени и по тематике с другим материалом,
  на автора которого я обратил внимание за целый ряд очень смелых гипотез,
  относительно возможности согласованного изменения/обучения
  эмбеддингов/латентов разной природы, используя матрицы вращений, подробнее см.:
  "А что будет, если немного повращать эмбеддинги?"
  
  В предлагаемой статье рассмотрен немножко "самопальный",
  но тем не менее весьма интересный подход к согласованному
  обучению/формированию эмбеддингов разной природы/модальности:
  
  "Как оживить Кандинский матрицами вращений для генерации видео
  - модель Splitter (часть 2-я)"
  Автор: Tarzan3668 (Пузицкий Михаил)
  https://habr.com/ru/articles/831816/.
  27 июл в 2024 11:10
  
  Опять почти ничего не сокращаю, так как тема для меня просто интригующая,
  даже если не все сразу отчетливо понимаю.
  
  //// Начало цитирования.
  
  В первой части, я познакомил вас c подходом для генерации видео,
  https://habr.com/ru/articles/830366/
  который основан на матрицах вращений.
  К нему меня привела интуиция,
  а затем я начал работать на формализацией идеи,
  после первичного погружения в теорию групп.
  Далее я уже был готов двигаться в решение задачи на основе машинного обучения.
  
  Гипотеза
  
  За основу методики был взят подход, используемый в видеокодеках.
  
  опорный кадр
  
  алгоритм, описывающий изменения,
  от опорного кадра далее на определенную глубину.
  
  Рис. I-Frame
  
  Широко применяемый подход I-Frame,
  который использует опорный кадр и последующие кадры изменений,
  подталкивает к мысли, что нужно научиться передавать в модель,
  работающей на границе двух латентных пространства,
  информацию об изменениях в латентном пространстве изображений!
  
  На слайде далее представлены схематично 2 латентных пространства
  разной модальности.
  
  Рис. латентные пространства разной модальности
  
  Кроме основных векторов, есть вектора изменений.
  Так как прошлые опыты строились на изменениях, то возникла гипотеза.
  
  Гипотеза для задачи text2video
  
  Можно построить обучение модели,
  предсказывающей вектор для генерации i - го кадра
  через передачу в модель информации только об изменениях
  от 0-го кадра посредством функции потерь.
  
  Функция потерь
  
  Проведенные ранее эксперименты, показали,
  что имеет смысл построить обучение нейронной сети на изменениях.
  Сами изменения могут быть разными,
  и с точки зрения векторного пространства это могут быть
  угловые изменения вектора,
  так и сама длина вектора.
  Изменения в пикселях в кадрах,
  через преобразование энкодером будут отражаться в эмбеддингах изображений.
  Поэтому для обучения условной модели этим малым изменениям
  в эмбеддингах кадров,
  как основной вариант,
  взята комбинация двух функций ошибки.
  Основываясь на предварительных экспериментах
  и анализе изменений векторов в латентном пространстве,
  было решено использовать комбинированный подход,
  включающий две различные метрики потерь:
  CosineEmbeddingLoss и MSEloss.
  
  На слайде ниже представлена функция потерь,
  связывающая изменения в пространствах через угловые и метрические данные.
  
  Рис. Комбинированная функция потерь
  
  С виду, простая формула, но с особенностью
  - выходом функции потерь для подсчета градиентов должно быть не число,
  а вектор размерности латентного пространства.
  По сути, при обучении, мы обращаемся не к среднему градиентов в точке,
  а к полю градиентов.
  И мы будем учить на изменениях в разных пространствах,
  то есть изменения изменений поля.
  //// Вот как бы это даже не понять, а четко себе представить
  //// этот переход от градиента к "изменению изменений поля".
  
  Тут есть также схожесть с подходом "Компенсация видео" в видеокодеках.
  Там картинка разбивается на блоки, и ищутся изменения блоков,
  при переходах между кадрами, которые кодируется как вектора изменений.
  
  Рис. "Компенсации видео"
  
  Модель, которую нужно применить к латентному пространству текстов,
  будет учится на в чем-то подобных векторах изменений,
  но уже в латентном пространстве изображений.
  
  Splitter - что за зверь?
  
  Для реализации обучающего алгоритма я решил использовать модель Kandinsky 2.2 ,
  которую уже использовал для первых тестов (см. часть 1).
  Kandinsky 2.2 построена на подходе схожим с unclip,
  который применяется в некоторых версиях Stable Diffusion и DALL-E2 .
  Если точнее, то в Kandinsky 2.2 используется подход diffusion_mapping,
  для преобразования высокоразмерных текстовых эмбеддингов
  в латентные эмбеддинги
  с сохранением геометрических свойств и связности.
  На выходе этого процесса эмбеддинги такого же размера,
  что и эмбеддинг от энкодера изображений.
  
  Рис. Kandinsky 2.2
  
  Генерация в диффузионной модели Кандинского 2.2 построена по принципу
  Image-2-Image,
  в ней вторая часть - Decoder,
  содержит диффузионную модель Unet Image-2-Image
  и модель MOVQ для перевода изображения в более высокое разрешение.
  Первая часть модели содержит модель Prior,
  которая обучена сближать unclip эмбеддинги текстов и эмбеддинги изображений.
  Они имеют высокую косинусную близость,
  а Unet в декодере учится хорошо восстанавливать из шума картинки
  из эмбеддингов изображений.
  Эта функциональность модели Kandinsky 2.2 в задачах,
  где необходимо соблюдение непрерывности и динамики изменений сцен,
  может обеспечивать более глубокое понимание
  преобразования текста в слегка изменяющихся кадрах
  и крайне удобна для экспериментирования в моем подходе.
  
  Близость unclip эмбеддингов текстов и эмбеддингов изображений
  позволят, в том числе, и комбинировать картинки
  и тексты для создания новых изображений с помощью Kandinsky 2.2.
  Структура модели, возможность раздельного обучения
  и использования модулей, качество генерации картинок
  - оказались вполне удобным тестовым алгоритмом
  для моих экспериментов по добавлению своего модуля,
  который я назвал Splitter (сплиттер)
  для получения из модели Kandinsky 2.2 составной модели Kandinsky 2.2 + Splitter,
  которая будет способна уже создавать видеоряд.
  
  Рис. Kandinsky 2.2 + Splitter
  
  Для ее адаптации под задачу Text2Video между Prior и Декодером
  применяется модель Splitter,
  которая должна изменять вектора,
  используемые для генерации изображений Декодером.
  Тут важно заметить, что модель Splitter учится
  только в латентном пространстве,
  а Декодер для обучения не нужен.
  
  Splitter принимает на вход:
  
  порядковый номер предсказываемого вектора,
  
  полные текстовые эмбедденинги от модели CLIP-ViT-G используемой в Кандинском
  
  и стартовый эмбедденинг из модели Prior.
  
  Рис. Базовый сценарий обучения Splitter
  
  Если предполагаемый сценарий - рабочий,
  то первые результаты должны быть и на простой модели.
  
  Splitter имеет простую конфигурацию из входных эмбеддинг слоев
  и далее каскад понижающих линейных слоев
  и слоев регуляризации и нелинейности.
  На выходе предсказываемый измененный эмбеддинг,
  который может быть использован в последствии
  для генерации изображения декодер модели Кандинский 2.2.
  
  Сценарий обучения самописный и о нем будет далее.
  Все учится на карте T4, что существенно для того объема экспериментов,
  который нужно было провести.
  
  Датасет
  
  Для создания требуемых в обучении данных,
  использован простой и удобный датасет TGIF.
  
  плюсы - это удобство, разнообразие, большое количество роликов и длина роликов
  в пределах 100 кадров.
  
  минусы - в основном низкое разрешение,
  попадаются частично статичные ролики и короткое текстовое описание.
  
  Для фильтрации проблем, набор данных для будущего обучения модели Splitter
  готовился отдельным скриптом.
  Получаемые скриптом данные представляет собой пайторч датасет
  уже векторизованных данных.
  Ввиду ограниченности ресурсов, для первичных тестовых обучений,
  автоматически было отобрано 200 отфильтрованных и векторизованных скриптом роликов.
  
  Первичные обучения и тесты
  
  Обучение ведется путем случайного выдергивания батча кадров из фильма,
  если фильм длиннее размера батча,
  или берутся все кадры, если фильм короче размера батча.
  
  Кадры перемешиваются
  
  Также перемешиваются фильмы на каждой эпохе
  
  Рис. Схема инференса модели от номера генерируемого кадра
  
  Рис. примеры первых генераций за счет простой модели Splitter
  
  Первые результаты простого подхода,
  которые вдохновили меня для дальнейших исследований.
  И особенно это заметно в танцующей паре,
  где при наличие неустойчивости фона и одежды,
  все же имеется сложная связь в их совместных движениях.
  
  Поиски улучшений
  
  Вроде данных много, в каждом ролике от 15 до 100 кадров,
  но текст один на все кадры.
  
  Если проиграть ролик назад - то часто подойдет тоже описание.
  Будем учить модель в обе стороны,
  от начального кадра и конечного,
  дав модели на вход лейбл направления.
  
  Рис. добавление в датасет и модель лейбла направления
  
  Другая гипотеза - НОЖНИЦЫ.
  
  Рис. Новый стартовый кадр
  
  От ролика можно сначала или с конца отрезать кадры
  и стартовать уже с нового кадра.
  И описание часто подойдет тоже.
  
  Но для корректной работы и обогащения данных,
  мы должны изменить стартовые текстовые вектора,
  через матрицы вращений,
  полученные от векторов изображений первоначального стартового кадра
  и нового стартового кадра.
  
  Рис. Применение матриц вращений для аугментации
  
  Так в обучения появляются матрицы вращений.
  Для работы в процессе обучения потребовалось реализовать скрипт их применения
  на тензорах,
  чтобы все подсчеты велись на видеокарте.
  В первой части статьи, где не было обучения,
  матрицы вращений были реализованы на numpy.
  
  Рис. Подсчет матриц вращений
  
  Полученной матрицей вращений от старого и нового опорного кадра
  //// Вот это, по моему, ключевой момент в этом подходе
  //// интерпретация изменения в эмбеддингах как согласованные вращения.
  //// Понятно, что тут можно использовать и какие-то иные "инвариантные преобразования".
  мы действуем на изначальный unclip вектор
  для получения измененного unclip вектора.
  Так же поступаем и для изменения полных текстовых векторов
  //// Любопытно бы было бы получить "текстовый образ"
  //// трансформированного таким образом текстового эмбеддинга.
  //// Может быть, это было не менее эффектно, чем графические изменения.
  на основе матрицы вращения получаемой из старого и нового unclip вектора.
  
  Так как обучение происходит на случайных кадрах из фильма,
  то нужно на лету учитывать номер "нового нулевого" кадра
  и выбирать только те кадры,
  что есть в случайной выборке далее в фильме,
  так как те, что до "нового нулевого" кадра будут использоваться
  для обучения при развороте направления.
  Был дополнен класс по учету порядка кадров
  и их перемешивания и контроль места кадра в батче после перемешивания.
  Учет и контроль места и расстояния от опорного кадра
  и псевдоопорного кадра до кадра в случайном батче очень важный момент,
  так как при ошибке происходит усреднение и <замораживание>
  вместо выучивания особенностей в изменениях.
  
  Рис. пример после первичного дополнения обучения
  
  Марковская цепочка
  
  Выходом модели Splitter является вектор той же природы, что приходит на вход.
  Поэтому возникла идея дополнительного регрессионного шага модели при обучении,
  то есть сделать предсказание от предсказания,
  подав предсказанный эмбеддинг вновь в модель Splitter.
  
  Цель:
  
  обогащение данных для обучения.
  
  научить модель создавать более глубокие вектора.
  
  Рис. авторегрессионный шаг
  
  Тут также применяются матрицы вращений для передачи изменений
  в текстовое пространство от изменений первоначального стартового кадра
  на предсказанный стартовый кадр.
  
  Рис. возможности модели к авторегрессии
  
  На слайде выше представлены примеры генераций от векторов модели
  полученных авторегрессионно, в зависимости от того, как модель учили.
  
  Видно, что возможности у модели разные,
  от того был ли в ее обучении шаг с вращением матриц и регрессионный шаг.
  
  Трейнер обучения
  
  Схематичное представление кастомного трейнера обучения,
  который сочетает в себе:
  
  работу со случайной малой выборкой роликов на каждой эпохе,
  для более устойчивого и обобщенного обучения модели.
  
  случайный батч кадров из ролика, для устойчивости к разнородностям в кадрах.
  
  шаг обычного обучения в обе стороны.
  
  шаг обучения с ножницами в обе стороны.
  
  авторегрессионный шаг в обе стороны.
  
  применение матриц вращений реализовано для работы на видеокарте.
  
  периодическое обновление модели лучшими весами,
  на основе разных слагаемых в функции потерь,
  от застревания в локальном минимуме.
  
  каждый сохраняемый чекпоинт модели имеет историю обучения модели
  для возможности использования статистики
  при новом обучении с измененными параметрами.
  
  Рис. расширенный трейнер обучения модели Splitter
  
  Построенный трейнер позволяет комфортно обучать и дообучать модель
  на больших объемах данных, используя карту Т4.
  Причем длина роликов может быть разной.
  Для обучения отбиралось уже 500 примеров.
  
  Сравнение обученных весов Splitter
  
  Рис. Сравнительные генерации с одним seed
  
  Сравнительные генерации с одним шумом на основе векторов
  полученных от моделей с разными типами обучений и их сочетаниями.
  
  Вполне заметно, что дополнительные шаги в обучении,
  как просто с матрицами вращений, так с регрессионным шагом
  вносят дополнительную информацию в модель
  и она делает генерацию интереснее.
  
  Интересные результаты
  
  Интересные примеры генерации от векторов по номеру шагу от стартового вектора.
  Они демонстрируют вполне связанные кадры сгенерированного видеоролика.
  
  Рис. генерация по шагу
  
  На слайде представлены примеры генераций от векторов модели
  полученных авторегрессионно, в зависимости от того, как модель учили.
  
  Видно, что возможности у модели разные,
  от того был ли в ее обучении шаг с вращением матриц и регрессионный шаг.
  
  Рис. генерация авторегрессией
  
  Рис. по номеру шага
  
  Рис. авторегрессионно
  
  Исследования данного этапа также представлены в моем репозитории.
  
  Это был этап предзащиты и по его результатам
  я уже углубился в усложнение самой модели Splitter
  чтобы понять, как улучшить ее генеративные возможности.
  Продолжение следует.
  
  .........
  
  //// Из комментариев.
  
  Tarzan3668
  31 июл в 08:53
  
  Вопрос ко всем. Особенно к опытным участникам Хабр.
  
  О чем говорит отсутствие комментариев?
  
  )))
  
  DarkSold
  2 авг в 00:41
  
  То, что тут мало осталось опытных участников(
  
  ..........
  
  //// Конец цитирования.
  
  Несмотря на то, что этот материал остался практически незамеченным
  авторитетным сообществом "датасатанистов" Хабра,
  для меня, эти и предыдущая публикация этого автора показались
  одними из самых интересных материалов с точки зрения нетривиальности подхода
  и возможных перспектив.
  Гипотеза об инвариантных преобразованиях в латентных пространствах разной природы
  и, самое главное, разной рамерности, на мой взгляд имеет определенный потенциал
  для поиска путей понимания того, что происходит "в мозгах у нейронки".
  И может подсказать совершенно новые методы их обучения.
  
  
  ========
  
  05.10.2024 16:12
  
  "Небольшая" деталь к пониманию работы "диффузионок".
  В оглавление.
  
  Читая материалы по диффузионным моделям, постоянно возникает мысль,
  что какой-то важной "детали" в работе этих систем то ли не понимаю,
  то ли она остается какой-то "всем хорошо известной" моментом,
  и не нуждающейся в каком либо дополнительном объяснении.
  
  Вот, к примеру, читаю такой абзац:
  
  \\\ Представьте, что у нас есть нейросеть,
  \\\ которая на вход принимает зашумленную картинку,
  \\\ а на выходе выдает шум, который необходимо вычесть из изображения,
  \\\ чтобы оно стало менее искаженным.
  \\\ Данная операция называется расшумлением.
  \\\ Чтобы научить модель расшумлять необходимо собрать
  \\\ огромное количество картинок.
  \\\ Сам процесс обучения нейросети заключается в том,
  \\\ что на каждом шаге мы случайным образом выбираем изображения нашего набора данных,
  \\\ зашумляем его и оптимизируем параметры нейросети так,
  \\\ чтобы предсказание нейросети при подаче зашумленного изображения
  \\\ было как можно ближе к исходному.
  
  \\\ Теперь, получая на вход случайный шум,
  \\\ такая модель начнет поэтапно <извлекать> из чистого шума
  \\\ осмысленные изображения в духе обучающего датасета.
  
  \\\ "Путеводитель для диффузионок.
  \\\ Как заставить нейросети качественно редактировать изображения".
  \\\ Автор: macderru (Вадим Титов)
  \\\ https://habr.com/ru/companies/airi/articles/837268/.
  \\\ 06 сен 2024 в 11:17
  
  И в голове крутится образ того, как сеть по заказанному промпту
  строит желаемую картинку, примерно так, как проявляется негатив в фотографии,
  но наложенный не на "чистый белый лист", а на какой-то "загрязненный".
  Но что-то в этом образе не сходится с реальным поведением "диффузионок".
  Ведь на один и тот же промпт модель генерирует
  иногда принципиально отличающиеся изображения, с кучей разных деталей,
  типа композиции, освещения, ракурса и т.д.
  Особенно это хорошо проявляется в режиме "виртуальной лавировки",
  в которой я частенько отвожу душу с каждой новой "Моделью Kandinsky N.x", см.:
  "Металоция неведомого. Модуль К. Корабли."
  
  Т.е. мне непонятно, как из чистого "гауссовского шума" появляется
  что-то далеко не случайное, но одновременно разнообразное,
  и, вот это самое главное, большей частью композиционно связное.
  Простое "проецирование негатива" как-то с этим не очень согласуется.
  А списывать эту "непонятку" на "магию нейросетей" как-то "некомфортно".
  Хочется какого-то понимания, или хотя бы "иллюзии понимания".
  
  И так продолжалось больше года с тех пор,
  когда впервые попытался разобраться с механикой работы "диффузионок".
  И вот только совсем недавно нашел, возможно только для себя,
  какую-то интерпретацию этой "малозначительной детали" диффузионных ИИ-моделей.
  Все началось с проработки цикла материалов по CFG Scale:
  
  [1]"Самое понятное объяснения CFG Scale в нейросетях.
  Как эта штука повлияла на появление Stable Diffusion".
  Автр: dima_yiu (Дмитрий Чаплинский)
  https://habr.com/ru/articles/751718/
  1 авг 2023 в 12:21
  
  [2]"Продолжение статьи про CFG Scale
  | математика, плюсы и минусы метода"
  Автор: dima_yiu (Дмитрий Чаплинский)
  https://habr.com/ru/articles/845746/
  24 сен 2024 в 17:52
  
  [3]"Погружение в Sampling method:
  механизмы работы в моделях диффузии".
  Автор: dima_yiu (Дмитрий Чаплинский)
  https://habr.com/ru/articles/846358/
  26 сен 2024 20:05
  
  Так уж получилось, что в прошлом году стартовую статью я как-то пропустил,
  и весь цикл читал/прорабатывал в обратном хронологическом порядке.
  И только в конце, в последнем комментариях к последнему,
  а хронологически самому первому, материалу,
  который я когда-то обошел вниманием,
  увидел СЛОВО,
  которое, надеюсь, совершенно по новому осветило мою "непонятку" с диффузионками.
  Вот этот комментарий:
  
  \\\ В курсе ИИ графики от kibo про CFG Scale сказано так:
  
  \\\ Если запрос условно представить себе в виде фильтра,
  \\\ через который пропускается начальный шум,
  \\\ то CFG Scale - это контрастность фильтра,
  \\\ причем как в визуальном, так и в смысловом плане.
  
  \\\ Чем ниже CFG Scale, тем больше сторонней информации
  \\\ будет присутствовать в итоговом изображении.
  \\\ Это приводит к более хаотичным образам
  \\\ и к пониженной контрастности изображения.
  
  \\\ Чем выше CFG Scale, тем более активно система ИИ графики
  \\\ выделяет запрос из шума.
  \\\ Это приводит к более явно выраженным образам
  \\\ и к повышенной контрастности изображения.
  
  \\\ MrKibernetik (Mister Kibernetik)
  \\\ 27 мая 2024 в 15:29
  \\\ https://habr.com/ru/articles/751718/#comment_26868351
  ........
  
  //// Ключевое слово "фильтр".
  
  А причем здесь фильтр, или точнее "фильтрЫ" попробую пояснить
  в комментариях у самим этим материалам,
  возможно, Вы найдете и другие варианты объяснение "магии диффузионок".
  
  //// Начало цитирования.
  
  [1] https://habr.com/ru/articles/751718/
  
  Вы не поверите, но я уже и разработчиков Kandinsky 2.2 спрашивал,
  что такое CFG Scale в фундаментальном смысле,
  и нейронщиков всех мастей,
  однако так не получил внятного ответа.
  От обывательских блогов меня вообще теперь тошнит,
  ибо там одно и то же:
  параметр CFG Scale увеличивает силу следования подсказке...
  И все как бы, окей
  - сами разберемся.
  
  Так вот, я начал с базы и открыл научные статьи
  родоначальников метода classifier free guidance scale.
  Прикреплю ссылки на них сразу же,
  чтобы вы тоже могли ознакомиться.
  Вот статья, посвященная именно CFG Scale для диффузионных моделей,
  https://arxiv.org/pdf/2207.12598.pdf
  а вот статейка о применении данного метода в современных языковых моделях.
  https://arxiv.org/pdf/2306.17806.pdf
  
  Для чего это нужно?
  
  Меня поразил тот факт, что метод CFG Scale
  и позволил диффузионным моделям родиться.
  До них были GAN-модели, которые совмещали в себе генератор и дискриминатор.
  Дискриминатор, по-другому, это классификатор.
  Т.е. моделька сначала генерит изображение,
  а потом вторая полноценная модель оценивает его на вшивость
  и корректирует вместе с первой.
  
  Из этого вытекают минусы:
  например, нужно вместе с одной моделью обучать и вторую
  (работы в два раза больше).
  Также нужно, чтобы железо тянуло сразу две модели,
  ибо они задействуются в паре.
  
  Метод же SFG Scale позволил задействовать только одну модель
  - диффузионную,
  т.е. обучать вторую больше не нужно.
  Чтобы вы понимали, механика описывается парой строк кода.
  Думаю, вы смекаете, что это намного проще дополнительной полноценной модели,
  которую еще хранить где-то нужно.
  
  Рис. Взято из оригинальной статьи про classifier free guidance scale
  
  В общем, благодаря CFG Scale мы получили более быстрое
  и стабильное обучение моделей,
  которые еще и по точности не уступают GAN-ам,
  а также могут генерировать изображения в разных разрешениях.
  Плюс дополнительные надстройки в виде LoRA стали доступны.
  
  Как это работает?
  
  Метод Classifier-Free Guidance Scale
  использует безусловную и условную генерации,
  которые перемножаются друг с другом.
  Грубо говоря, сначала создается изображение без учета текстовой подсказки,
  //// Вот этот момент обычно в описании "диффузии" явно не указывается.
  а затем с ней.
  //// А затем они "суммируются"/перемножаются с разными коэффициентами
  //// - этим самым CFG Scale.
  //// ДВА (а то и три) разных процесса/результата,
  //// скрываются под фразой общего типа:
  \\\ Теперь, получая на вход случайный шум,
  \\\ такая модель начнет поэтапно <извлекать> из чистого шума
  \\\ осмысленные изображения в духе обучающего датасета.
  
  Чем выше CFG Scale, тем больше будет доминировать условное изображение.
  
  Это нужно для того, чтобы мы могли получить
  либо больше вариативности генерации, либо больше точности
  - того самого следования текстовой подсказке.
  Получается, что чем ниже CFG Scale,
  тем нейронка свободнее в своих действиях,
  а чем больше - наоборот, скованнее.
  
  Так как формула просчета CFG Scale и перемножения двух генераций простая,
  то и минусы из этого следуют такие же простые и очевидные.
  Всем ясно, что математические формулы можно совершенствовать до бесконечности,
  повышая точность и скорость.
  И это делают, сейчас разберем как.
  
  Вот вам наглядная демонстрация влияния CFG Scale на качество генерации.
  
  Рис. Демонстрация влияния CFG Scale на генерацию
  
  Как вы можете видеть, первое изображение при низком CFG Scale
  близко к безусловному,
  т.е. не учитывающем классы из текстовой подсказки.
  При высоком же значении этого параметра мы получаем те самые минусы математики,
  о которых я говорил выше.
  Нейросеть как бы пытается достать генерацию,
  выдавить ее через трафарет, максимально четко охарактеризовать объект.
  //// Причем тут важный момент, что "трафарет" не постоянный/фиксированный,
  //// а имеющий начальную "случайную инициализацию"
  //// - тот самый начальный "белый шум",
  //// который на каждом шаге последовательной генерации - уточнении кадров -
  //// с одной стороны, сохраняет какое-то "родство" с начальной инициализацией,
  //// за счет безусловной генерации,
  //// а с другой стороны, воспринимает какое-то воздействие от условной генерации.
  //// Так что здесь термин "фильтр" куда лучше подойдет, чем трафарет,
  //// тем более, что "трафарет" нечто "жесткое",
  //// а вот "фильтр" куда более "гибкое", и может быть не только "фиксированным",
  //// но и "гибким", "нелинейным", "адаптивным" и т.п.
  
  Рис. Пример того, как работает CFG Scale
  
  Помните лизуна в сетке?
  Представьте, что когда вы сжимаете его, то увеличиваете тем самым CFG Scale.
  Т.е. вы проталкиваете подсказку через некий трафарет
  (сетка - это безусловное базовое изображение,
  а лизун - это условное изображение, сформированное подсказкой).
  
  Рис. Аналогия с перенасыщенностью и завышенным CFG Scale
  
  Теперь посмотрим на чрезмерное увеличение контрастности изображения в Photoshop.
  Принцип по сути очень похож:
  мы пытаемся усилить цвета и как бы выделить на фоне остальных,
  т.е. выжать, как того самого лизуна.
  
  Рис. Влияние Dynamic CFG Scale
  
  Снова возвращусь к минусам математики и ее бесконечном улучшении.
  Взгляните на примеры выше и сравните с предыдущими.
  Высокие значения уже не так коверкают генерацию, как раньше,
  а помогло в этом расширение CFG Dynamic trashholing,
  которое не выдавливает, а спиливает ненужные части.
  Вместе с лишним уходит и освещенность, но это все же лучше артефактов.
  Суть метода в том, чтобы как бы отодвигать яркие пиксели назад,
  тем самым уменьшая эффект ярких артефактов.
  
  Про данное расширение и другие способы увеличить качество ваших генераций
  в десятки раз у меня, кстати, есть ролик.
  
  Рис. Два негативных промпта в нейросети Kandinsky 2.1
  
  Еще одной иллюстрацией механики CFG Scale можно считать
  два негативных промпта у нейросети Kandinsky 2.1,
  один из которых является безусловным, а другой условным.
  При CFG Scale < 1 отрицательная подсказка игнорируется.
  
  По ссылке вы можете найти официальную документацию Kandinsky 2.1,
  https://huggingface.co/docs/diffusers/main/en/api/pipelines/kandinsky
  а также прочитать буклет Google о classifier-free guidance scale,
  https://arxiv.org/pdf/2205.11487.pdf
  на который ссылаются разработчики Кандинского.
  
  Что по итогу?
  
  Рис. Генерация на CFG Scale = 7
  
  А по итогу мы имеем представление о методе,
  который является одним из родителей диффузионных моделей,
  к примеру, Stable Diffusion или Midjourney.
  
  Теперь нам не нужен дискриминатор,
  а модель генерирует изображение за несколько шагов,
  что дает массу простора в контроле генерации.
  Мы можем и ControlNet подрубать, и LoRA, всякие разные расширения, дополнения.
  
  Но не только ControlNet-ом хороши современные нейронки,
  но и целыми каскадами других, не менее масштабных сетей.
  У Midjourney, к примеру, есть сеть-генератор формы объекта, граней, апскейла,
  раскраски и много чего еще.
  С GAN-моделями такое было бы практически невозможно совместить.
  
  Если вы хотите глубже погрузиться в диффузионные нейросети,
  то советую прочитать этот материал,
  https://habr.com/ru/articles/713076/
  который мне также помог в изучении темы.
  
  ........
  
  [2] https://habr.com/ru/articles/845746/
  
  В этой главе будут рассмотрены все необходимые аспекты
  для понимания механизмов работы CFG Scale,
  а также плюсы и минусы подхода с математическими примерами.
  Решил собрать все самое важное в одном месте без воды.
  
  В предыдущей части с помощью иллюстраций, сравнений, примеров и метафор
  https://habr.com/ru/articles/751718/
  я показал, что такое CFG Scale.
  В этой же части я продемонстрирую вам математический аппарат
  и зайду немного с другой стороны, показав вам внутреннюю математику,
  оказавшуюся довольно-таки простой.
  
  1. Определение
  
  CFG Scale (Classifier-Free Guidance Scale) или (безклассификаторное управление)
  - это метод, разработанный для улучшения качества изображений,
  генерируемых с помощью диффузионных моделей,
  таких как DALL-E 2, Stable Diffusion, FLUX и других.
  Этот метод был предложен исследователями из OpenAI.
  
  Метод получил своё название Classifier-Free Guidance (безклассификаторное управление),
  потому что он позволяет обходиться без традиционного явного классификатора,
  интегрируя функции управления непосредственно в процесс генерации.
  
  Чем выше значение CFG Scale,
  тем более явно модель <вытягивает> и встраивает классы или характеристики,
  указанные в подсказке, в финальное изображение.
  
  Например, если подсказка описывает <красный автомобиль на фоне гор>,
  высокая CFG Scale будет способствовать тому,
  чтобы и автомобиль был ярко-красным,
  и фон четко отображал горы.
  
  Метод пришел на смену <Явным классификаторам>, использующимся в GAN-моделях.
  
  2. Явные классификаторы в GAN
  
  В традиционных моделях Generative Adversarial Networks (GAN)
  используются две основные компоненты:
  
  Генератор - создает изображения из случайного шума.
  
  Дискриминатор - классифицирует изображения как реальные или сгенерированные.
  
  В некоторых вариациях GAN, таких как Conditional GAN (cGAN),
  используется явный классификатор для управления процессом генерации.
  В cGAN генератору и дискриминатору подаются дополнительные метки или условия,
  что позволяет генерировать изображения,
  соответствующие определенным критериям или классам.
  
  Раньше дискриминатор заменял собой текущий метод - CFG Scale.
  Так почему же ему на смену пришел новый алгоритм?
  
  3. Плюсы и минусы явных классификаторов
  
  Плюсы:
  
  Условное управление:
  
  В cGAN генератор и дискриминатор работают
  с дополнительными метками или условиями.
  Генератор создает изображения, соответствующие этим меткам,
  а дискриминатор оценивает,
  насколько хорошо сгенерированные изображения соответствуют заданным условиям,
  помимо различения реальных и сгенерированных изображений.
  
  Повышение точности:
  
  Классификатор (дискриминатор) в cGAN помогает генератору улучшать свои результаты
  через обратную связь.
  Если дискриминатор успешно выявляет,
  что сгенерированные изображения не соответствуют заданным условиям,
  генератор корректирует свои параметры,
  чтобы лучше соответствовать этим условиям.
  Этот процесс итеративно улучшает точность генерации.
  
  Качество и реалистичность изображений:
  
  Дискриминатор в cGAN не только проверяет соответствие условиям,
  но и оценивает качество и реалистичность изображений.
  Это приводит к тому, что генератор создает
  более детализированные и правдоподобные изображения,
  что является важным критерием в задачах генерации.
  
  Минусы:
  
  Сложность тренировки:
  тренировка cGAN может быть сложной задачей,
  требующей балансировки между генератором и дискриминатором.
  
  Вычислительная мощность:
  дополнительные вычислительные ресурсы требуются для тренировки
  и интеграции явного классификатора.
  И ресурсы огромные!
  
  4. Плюсы и минусы метода CFG Scale
  
  Плюсы:
  
  Отсутствие отдельного классификатора:
  
  В традиционных GAN моделях, таких как cGAN,
  используется отдельный дискриминатор (классификатор),
  который требует значительных вычислительных ресурсов для тренировки и оценки.
  CFG Scale устраняет необходимость в этом дополнительном компоненте,
  интегрируя функции управления непосредственно в генеративную модель.
  
  Упрощение архитектуры:
  
  Упрощенная архитектура модели в CFG Scale позволяет сократить
  количество параметров и слоев,
  что приводит к снижению вычислительной нагрузки.
  Это также уменьшает объем данных, обрабатываемых на каждом этапе генерации.
  
  Скорость генерации:
  
  Исключение этапа классификации ускоряет процесс генерации изображений,
  поскольку модель не тратит дополнительное время на оценку и корректировку
  на основе вывода отдельного классификатора.
  
  ?Минусы:
  
  Настройка:
  настройка параметров для достижения оптимального качества
  может быть сложной задачей.
  
  Гибкость:
  модель может быть менее специализированной в сравнении с подходом,
  использующим явные классификаторы.
  
  5. Механизм работы CFG Scale
  
  Три потока генерации:
  
  Безусловный поток:
  Модель генерирует изображение без использования текстовой подсказки,
  основываясь только на случайном шуме.
  //// Т.е. начальная случайная инициализация преобразуется во что-то,
  //// определяемое "незамутненным сознанием диффузионки",
  //// т.е. результатом ее общего обучения.
  //// И это можно представить как первый "глобальный/безусловный фильтр",
  //// применяемый в данном случае к начальному состоянию.
  
  Условный поток:
  Модель генерирует изображение, используя текстовую подсказку,
  чтобы направлять процесс генерации (позитивный промпт).
  //// А вот это уже применение "локального/условного фильтра",
  //// т.е. как-то связанного с "позитивным промптом",
  //// но тоже примененного к начальной случайной инициализации.
  
  В некоторых моделях может быть задействован и третий поток
  - негативное условное изображение (negative prompt).
  //// Ну а это еще один "корректирующий/услосный фильтр"
  //// тоже примененный к начальному состоянию.
  
  Объединение потоков:
  
  На каждом шаге диффузионного процесса оба потока
  (условный и безусловный)
  используются для создания промежуточных изображений.
  //// Вот этот момент нужно постоянно держать "в виду".
  //// Каждый результат такой комплексной фильтрации,
  //// на следующем шаге является исходной точкой
  //// для нового этапа "фильтрации",
  //// в котором что-то дальше усиливается/закрепляется
  //// или, наоборот, еще больше ослабляется/отбраковывается.
  
  Результаты этих двух потоков затем объединяются с использованием CFG Scale.
  
  6. Механизм объединения потоков CFG Scale
  
  В этом случае результирующее изображение формируется
  с учетом всех трёх потоков:
  
  Безусловное изображение:
  ( x_{t, {unconditional}} )
  
  Условное изображение с положительным промптом:
  ( x_{t, \text{positive conditional}} )
  
  Условное изображение с негативным промптом:
  ( x_{t, \text{negative conditional}} )
  
  Формула для комбинирования может выглядеть следующим образом:
  
  x_t = x_{t, \text{unconditional}} + s \cdot (x_{t, \text{positive conditional}} -
  x_{t, \text{negative conditional}})
  
  где (s) - значение CFG Scale.
  
  7. Пример объединения потоков
  
  Изображения в нейронных сетях представляются в виде многомерных массивов чисел,
  которые описывают интенсивности пикселей или активации
  на определенных слоях сети.
  
  В методе CFG линейная комбинация условного и безусловного выводов
  позволяет гибко и эффективно учитывать текстовые подсказки,
  улучшая качество и точность генерируемых изображений.
  Этот процесс не требует перемножения векторов или пикселей,
  а использует простые линейные операции,
  такие как сложение и вычитание.
  
  Представьте, что у вас есть три массива чисел,
  представляющих активации на определенном слое нейронной сети:
  
  x_{t, \text{unconditional}} = \begin{bmatrix} 0.2 & 0.4 \\ 0.6 & 0.8 \end{bmatrix}
  - безусловная генерация
  
  x_{t, \text{positive conditional}} = \begin{bmatrix} 0.3 & 0.5 \\ 0.7 & 0.9 \end{bmatrix}
  - позитивная условная генерация
  
  x_{t, \text{negative conditional}} = \begin{bmatrix} 0.1 & 0.3 \\ 0.5 & 0.7 \end{bmatrix}
  - негативная условная генерация
  
  Если значение ( s ) равно 1, линейная комбинация будет:
  
  x_t = x_{t, \text{unconditional}} + 1 \cdot (x_{t, \text{positive conditional}} - x_{t, \text{negative conditional}})
  
  Подставим значения:
  
  x_t = \begin{bmatrix} 0.2 & 0.4 \\ 0.6 & 0.8 \end{bmatrix} + 1 \cdot \left( \begin{bmatrix} 0.3 & 0.5 \\ 0.7 & 0.9 \end{bmatrix} - \begin{bmatrix} 0.1 & 0.3 \\ 0.5 & 0.7 \end{bmatrix} \right)
  
  Рассчитаем разницу:
  
  x_t = \begin{bmatrix} 0.2 & 0.4 \\ 0.6 & 0.8 \end{bmatrix} + \begin{bmatrix} 0.2 & 0.2 \\ 0.2 & 0.2 \end{bmatrix}
  
  Выполним сложение:
  
  x_t = \begin{bmatrix} 0.4 & 0.6 \\ 0.8 & 1.0 \end{bmatrix}
  
  Таким образом, результирующее изображение ( x_t ) будет:
  
  x_t = \begin{bmatrix} 0.4 & 0.6 \\ 0.8 & 1.0 \end{bmatrix}
  
  В реальных приложениях матрицы, представляющие изображения
  или активации нейронных сетей, гораздо больше тех, что я привел в примере.
  Мы рассмотрели матрицу размерностью 4x4x3.
  
  8. Влияние значений CFG Scale на качество
  
  Предположим, вы хотите сгенерировать изображение <красивого пейзажа>:
  
  CFG Scale = 1: изображение может быть размытым и нечетким,
  так как текстовая подсказка недостаточно сильно влияет на процесс генерации.
  
  CFG Scale = 15: изображение может быть слишком детализированным,
  с артефактами и чрезмерными деталями,
  которые делают его менее реалистичным.
  
  CFG Scale = 7-10: возможно, это оптимальный диапазон,
  где пейзаж будет достаточно детализированным и реалистичным,
  без излишней фокусировки на отдельных элементах.
  
  //// Т.е. можно считать, что "глобальный фильтр",
  //// характеризующий реакцию всей нейросети на начальную инициализацию,
  //// отвечает за общую композицию, стиль, ракурс, цветовую гамму и т.п.
  //// А "локальные/условные фильтры", связанные с конкретным промптом,
  //// пытаются проявить/развить/подавить конкретные детали в этой
  //// достаточно "случайной" композиции.
  
  9. Почему высокие значения CFG Scale портят генерацию
  
  При высоких значениях CFG Scale теряется детализация и реалистичность
  из-за того, что модель начинает слишком сильно фокусироваться
  на текстовых подсказках,
  что может привести к переусилению определённых характеристик изображения,
  запрошенных в тексте.
  Вот несколько причин, почему это происходит:
  
  Переусиление признаков:
  
  Высокие значения CFG Scale могут заставить модель
  слишком сильно акцентировать внимание на конкретных аспектах,
  упомянутых в текстовых подсказках.
  Это может привести к искажениям и непропорциональному усилению
  некоторых характеристик изображения,
  что снижает его реалистичность.
  
  Шум и артефакты:
  
  Когда модель слишком сильно ориентируется на текстовую подсказку,
  это может вызвать появление шумов и артефактов,
  так как модель пытается соответствовать всем аспектам подсказки,
  даже если они противоречат друг другу или не сочетаются естественным образом.
  
  Потеря общего контекста:
  
  Слишком сильная зависимость от текстовой подсказки может привести
  к игнорированию общей структуры и контекста изображения.
  Модель может упустить важные детали,
  которые делают изображение целостным и реалистичным.
  
  Ограничение креативности модели:
  
  При высоком значении CFG Scale модель ограничена
  в своей способности <фантазировать>
  и использовать внутренние закономерности и шаблоны,
  которые она выучила из данных.
  Это может привести к менее детализированным и более шаблонным изображениям.
  
  10. Заключение
  
  CFG Scale (Classifier-Free Guidance Scale) улучшает генерацию изображений диффузионными моделями,
  интегрируя текстовые подсказки без использования отдельного классификатора.
  Это снижает вычислительные затраты,
  упрощает архитектуру модели и позволяет гибко контролировать
  влияние условий на финальное изображение.
  Метод обеспечивает высокую точность и качество,
  делая его полезным для различных приложений,
  требующих точного соответствия заданным условиям.
  
  .......
  
  [3] https://habr.com/ru/articles/846358/
  
  Метод выборки (sampling method) в генеративных моделях,
  таких как Stable Diffusion или FLUX,
  определяет способ преобразования случайного шума
  в изображение в процессе диффузии.
  Этот метод напрямую влияет на качество, стиль и скорость генерации изображения.
  
  В предыдущей статье я разбирал, как работает CFG Scale и для чего он нужен.
  https://habr.com/ru/articles/845746/
  Рекомендую ознакомиться, потому что будем его использовать.
  
  1. Зачем нужен Sampling method
  
  Sampling method необходим для нескольких ключевых задач:
  
  Постепенное уменьшение шума:
  
  Основная задача метода выборки - это постепенное уменьшение шума
  и улучшение структуры изображения на каждом шаге.
  //// Вот типовая формулировка описания генерации изображений диффузионками,
  //// которая всегда вызывала у меня "когнитивный диссонанс".
  //// И хотя автор в предыдущих статьях фактически описал
  //// качественно иной процесс, но по прежнему пользуется
  //// "классическими формулировками" типа "уменьшения шума".
  Каждый шаг итерации уменьшает уровень шума и добавляет детали,
  //// Каждый шаг увеличивает согласованность работы
  //// "глобального/безусловного фильтра" и "локальных/условных" фильтров,
  //// из исходного "белошумового состояния".
  приближая изображение к целевому.
  
  Управление процессом диффузии:
  
  Методы выборки управляют процессом диффузии,
  определяя, как модель должна обновлять изображение на каждом этапе.
  Это позволяет контролировать скорость и качество генерации.
  
  Оптимизация качества и скорости:
  
  Различные методы выборки предлагают компромиссы
  между качеством конечного изображения и скоростью его генерации.
  
  Стабилизация процесса:
  
  Методы выборки также помогают стабилизировать процесс генерации,
  чтобы избежать артефактов и нежелательных искажений.
  Это особенно важно при работе с сложными текстовыми подсказками
  или при генерации высококачественных изображений.
  
  ......
  
  5. Алгоритм работы метода выборки на примере DDIM
  
  //// Вот попробуйте взглянуть на описываемый процесс с точки зрения
  //// "фильтрационной концепции"
  //// и почувствуйте разницу между ней и "классическим представлением".
  //// Какой вариант интуитивно более понятен/приемлем?
  
  В данном разделе рассмотрим процесс взаимодействия CFG Scale и метода выборки,
  чтобы понимать механизмы денойза.
  
  Шаг 1: Инициализация
  
  В начале процесса инициализируем случайный шум (x_T),
  который генерируется по нормальному распределению:
  
  x_T \sim \mathcal{N}(0, 1)где T - начальный момент времени.
  
  Шум нужен для того, чтобы модели было что расшумлять
  - это называется обратной диффузией
  и лежит в основе современных генеративных нейросетей.
  
  Шаг 2: Расчет результирующего состояния на основе CFG Scale
  
  Подробнее про CFG Scale.
  https://habr.com/ru/articles/845746/
  
  На этом этапе модель генерирует 3 изображения:
  на основе позитивного и негативного промпта
  + одно безусловное изображение - без какого-либо промпта.
  
  Здесь задействуется модель CLIP для перевода промпта в векторы (язык нейросети)
  и U-Net для непосредственно генерации.
  
  Применяем формулу CFG Scale для получения результирующего состояния (x_t)
  на основе безусловной и условной генерации:
  
  x_t = x_{t, \text{unconditional}} + s \cdot (x_{t, \text{positive conditional}} - x_{t, \text{negative conditional}})
  
  где:
  
  (x_{t, \text{unconditional}})- безусловная генерация (основное изображение).
  
  (x_{t, \text{positive conditional}})- условная положительная генерация
  (с учетом положительного условия).
  
  (x_{t, \text{negative conditional}})- условная негативная генерация
  (с учетом отрицательного условия).
  
  (s)- коэффициент, который регулирует,
  насколько сильно положительные и отрицательные условия влияют
  на итоговое состояние изображения
  (его мы вводим ручками в интерфейсе).
  
  Шаг 3: Вычисление модифицированного шума
  
  На основе результата из шага 2, модель рассчитывает модифицированный шум,
  учитывающий влияние условий:
  
  \epsilon_\text{cfg} = \epsilon_\theta(x_t, t) + s \cdot (\epsilon_\theta(x_t, t, c_\text{pos}) - \epsilon_\theta(x_t, t, c_\text{neg}))
  
  \epsilon_\theta(x_t, t)- предсказанный шум для безусловного процесса
  на основе полученного состояния.
  
  \epsilon_\theta(x_t, t, c_\text{pos})- предсказанный шум
  с учетом положительного условия.
  
  \epsilon_\theta(x_t, t, c_\text{neg})- предсказанный шум
  с учетом отрицательного условия.
  
  (s)- коэффициент, регулирующий степень влияния положительного и отрицательного условий.
  
  (x_t)- это результирующее состояние,
  подающееся на вход модели (получили на шаге 2).
  
  (t)- текущий шаг времени в процессе генерации
  
  c_\text{pos}- позитивный промпт
  
  c_\text{neg}- негативный промпт
  
  В этом шаге, исходя из полученного (x_t),
  модель вычисляет разные предсказанные шумы
  
  (\epsilon_\theta(x_t, t), \epsilon_\theta(x_t, t, c_\text{pos}), \epsilon_\theta(x_t, t, c_\text{neg})),
  а затем получает модифицированный шум \epsilon_\text{cfg},
  
  который используется в формуле DDIM для обновления состояния изображения.
  
  Этот шаг - своего рода <корректировка>
  на основе уже имеющегося состояния изображения и специфических условий.
  Благодаря этому процессу итоговое изображение становится более адаптированным
  к условиям, которые были заданы.
  
  Данный шаг также нужен из-за несовершенства математики
  - для оптимизации вычислений.
  Именно значения из третьего шага взаимодействуют с формулой метода выборки.
  В прошлом же шаге подготавливается база для этого.
  
  Это как 1+1=2, где без одной единицы двойка не получится.
  
  Вычисления на данном шаге также проводятся с помощью U-Net.
  
  Шаг 4: Применение метода выборки (DDIM)
  
  На третьем этапе модифицированный шум подставляется в формулу метода выборки,
  чтобы скорректировать мелкие детали и стабилизировать общий процесс генерации.
  На этом шаге будет решено: где шум добавить, а где убрать.
  
  Зачем добавлять шум?
  Чтобы повысить детализацию.
  Вспомните снимки со своего смартфона ночью - если убрать весь шум,
  то они будут смазанными.
  
  Формула метода выборки DDIM:
  
  x_{t-1} = x_t + \sqrt{1 - \alpha_t} \cdot \left( \epsilon_\text{cfg} \right) \cdot \sqrt{1 - \alpha_{t-1}}
  
  где (x_t) - текущее состояние изображения на шаге (t).
  
  \sqrt{1 - \alpha_t}и \sqrt{1 - \alpha_{t-1}}
  - коэффициенты, контролирующие скорость изменения состояния изображения на каждом шаге.
  Они зависят от заданных параметров шума и времени.
  
  Подставляем значения модифицированного шума в формулу DDIM:
  
  x_{t-1} = x_t + \sqrt{1 - \alpha_t} \cdot \left( \epsilon_\theta(x_t, t) + s \cdot (\epsilon_\theta(x_t, t, c_\text{pos}) - \epsilon_\theta(x_t, t, c_\text{neg})) \right) \cdot \sqrt{1 - \alpha_{t-1}}
  
  Результатом всего процесса будет являться матрица векторов
  - т. е. изображение в скрытом пространстве нейросети, очищенное от части шума.
  
  Обратный диффузионный процесс идет в обратном направлении по времени,
  начиная с шума (x_T) и постепенно очищая его до целевого изображения (x_0).
  
  ( x_{t-1} )обозначает состояние изображения на шаге ( t-1 ),
  которое является результатом применения модифицированного шума
  к текущему состоянию ( x_t ).
  Также на каждом шаге корректируются (\alpha_t) и (\alpha_{t-1}),
  отвечающие за количество шума,
  который будет исключен на текущем и следующем шаге.
  
  ?Шаг 5: Повторение процесса
  
  Теперь все значения будут рассчитываться для (x_{t-1}),
  которое затем нужно подставить в формулу метода выборки DDIM:
  
  x_{t-2} = x_{t-1} + \sqrt{1 - \alpha_{t-1}} \cdot \left( \epsilon_\text{cfg} \right) \cdot \sqrt{1 - \alpha_{t-2}}
  
  После вычисления (x_{t-2}) мы вычисляем (x_{t-3}), и так далее до (x_0).
  
  ......
  
  7. Заключение
  
  Как вы, надеюсь, поняли, sampling method работает
  не в отрыве от всего остального,
  а является звеном в конвейерной цепочки по генерации изображения.
  Он, как и все рассмотренные в статье шаги,
  сделан для корректировки работы основном модели,
  чтобы генерации получались точнее и детальнее.
  
  ........
  
  //// Конец цитирования.
  
  В общем, "концепция фильтров" в работе диффузионок мне нравится
  куда больше "классической концепции денойзинга".
  Но понятно и что необходимо ее хорошенько проработать
  и, может быть, расширить ее и в отношении внутреннего представления
  работы смежных слоев нейросети или еще как.
  Хороший "образ"/"термин" обычно ведет
  к целому спектру направлений исследований/размышлений,
  особенно в части конструирования нетривиальных/"стохастических" фильтров.
  Но это уже вполне рабочие моменты.
  и не это бы хотелось акцентировать в завершение этого
  и так достаточно объемного фрагмента.
  
  А вот на что действительно стоит отметить и обратить особое внимание,
  так это на определенную аналогию между "классической концепцией денойзинга",
  используемой повсеместно для описания работы диффузионок,
  и проблемой понимания работы больших языковых моделей LLM.
  
  Объяснение на базе "денойзинга", т.е. "вычитания шума"
  - это результат попытки описания работы диффузионок
  на основе процесса их обучения,
  когда модель учится на последовательно зашумляемых изображениях.
  Соответственно, самое простое считать что при работе "диффузионок""
  выполняется обратный процесс "расшумление" в форме "вычитания шума".
  И это пока никого "не напрягает" - по формулам все сходится.
  
  Но если посмотреть историю больших языковых моделей,
  которые в основном учатся на предсказании следующего слова в обучающем датасете,
  то достаточно долго можно было считать,
  что LLM это просто "большие статистические попугаи",
  выучившие наиболее вероятное распределение слов.
  Собственно, и сегодня это "решающий аргумент" в спорах
  о возможностях и перспективах этих ИИ-моделей.
  
  Но вот все новые и новые системы
  уже вряд ли "укладываются" в это "попугайно-прокрустово ложе", см:
  Все-таки LLM это не просто "T9 на стероидах".
  "Переход к новой парадигме в ИИ?"
  И даже начинают проявлять какие-то "искры самосознания", см.:
  Об импульсной природе интеллекта LLM.
  И потихоньку приходит понимание, что тут какая-то
  ОЧЕНЬ "хитрая статистика", а может уже и не "статистика"....
  
  Может быть не стоит жестко привязывать объяснение
  принципа работы какой-то системы,
  тем более, претендующей на интеллектуальность,
  с тем, каким образом она создавалась и/или обучалась?
  Насколько это продуктивно для понимания механизма их работы
  на более высоком уровне абстракции?
  Или более конкретно,
  так ли уж обязательно использовать концепцию "денойзинга"
  для объяснения все более и более продвинутых "диффузионок"?
  
  
  ========
  
  06.10.2024 18:25
  
  Попытка понять суть метода "обратной дистилляции".
  В оглавление.
  
  Уже полтора месяца этот материал лежит у меня "в закладках".
  Тема в ней затронута весьма и весьма интересная
  - очень существенное изменение в подходе к обучению методом "дистилляции" -
  Но сам источник настолько "косноязычен", и выполнен в классической парадигме
  "денойзинга"/"шумоподавления" в отношении работы диффузионных моделей,
  что, несмотря на титанические усилия переводчика,
  и большой объем его поясняющих комментариев,
  текст получился очень трудно читаемым.
  И, самое главное, из него очень трудно выловить
  и суть этой "обратной дистилляции" по отношению к диффузионкам
  и тем более возможность использования этого подхода где-то еще.
  
  Я ждал, что может быть кто-то еще затронет эту тему,
  - метод дистилляции достаточно часто упоминается в материалах на Хабре -
  чтобы иметь какую-то еще "проекцию" на эту "обратную дистилляцию".
  Но так ничего и не дождался.
  Судя по всему, очень перспективная идея оказалась так "зашумлена"
  "концепцией расшумления", что, наверно, мало кто обратил
  на этот материал особое внимание.
  Ну еще одна "диффузионка", ну чуть пошустрее других,
  ну и что?
  Завтра будет другая, еще более производительная, а за ней третья...
  Даже переводчик этого материала в названии материала
  делает акцент именно на скорость инференса,
  а не на новый метод обучения.
  
  Что ж, придется работать с тем, что есть
  - "за неимением гербовой пишут на простой".
  Хотя здесь как раз обратная ситуация,
  за неимением возможности работать с простым текстом,
  приходится вчитываться в "академически выверенный текст":
  
  "Ускорили диффузионку в несколько раз?
  - о новой модели ImagineFlash от Meta".
  Автор: The-Founder-1 (The Founder Академия нейросетей)
  https://habr.com/ru/articles/838160/.
  23 авг 2024 в 19:05
  
  Автор оригинала: Written by Jonas Kohler Albert Pumarola Edgar Schoenfeld
  Artsiom Sanakoyeu Roshan Sumbaly Peter Vajda Ali Thabet
  https://ai.meta.com/research/publications/imagine-flash-accelerating-emu-diffusion-models-with-backward-distillation/
  
  //// Начало цитирования.
  
  Важно, что в переводе статьи мы опустили некоторые математические подробности.
  Мы обобщили математические выражения текстом.
  Курсивом выделены комментарии, чтобы новичкам было проще читать,
  //// Чтобы более четко выделить "комментарии переводчика",
  //// далее будет использовать пометка "\\\".
  а выделенный уровень подготовки оправдывал себя
  и под статьей не пришлось ставить графу "сложно".
  
  Чтобы статья не вышла слишком большой, приводится ее основная часть с методом.
  Мы приводим краткий вариант перевода ресерча от Meta.
  
  Внутри оригинала можно ознакомиться с результатами работы.
  И конкретными метриками в таблицах.
  
  Вся статья сохраняет письмо от первого лица.
  
  Резюме статьи:
  
  Диффузионные модели - мощные генеративные нейросети
  с дорогим с точки зрения вычислений результатом.
  Современные методы ускорения ухудшают качество генераций,
  а при сложной генерации с малым числом итераций вообще терпят неудачу.
  
  В этой работе мы (Meta) предлагаем новый подход дистилляции,
  адаптированный под качественную генерацию
  с разнообразием выбором и использованием всего одного-трех "шагов",
  //// Н-да, уж качество перевода практически с самого начала не впечатляет.
  а.к.а итераций.
  
  Наш подход включает три ключевых компонента:
  обратную дистилляция,
  которая смягчает расхождения обучения и вывода
  путем калибровки ученика по его собственной обратной траектории;
  смещенная потеря восстановлений,
  которая динамически адаптирует передачу знаний
  на основе текущего временного шага.
  И коррекцию шума - он повышает качество выборки
  за счет устранения сингулярностей в прогнозировании шума.
  //// Какая-то смысловая/словесная "окрошка".
  //// Практически полная замена устоявшихся терминов.
  //// Думай, что хочешь.
  
  Благодаря экспериментам мы покажем,
  что наш метод уже существующие подходы
  //// Явно пропущено слово. Это вообще кто-то вычитывал.
  //// "У семи нянек дитя без глазу".
  по количественным метрикам и человеческим оценкам.
  
  Примечательно, что он достигает производительности,
  сопоставимой с моделью учителя,
  используя всего три шага шумоподавления.
  
  Введение
  
  Генеративное моделирование претерпело значительный сдвиг
  с появлением моделей диффузионного шумоподавления (DMs).
  
  Эти модели задали новые стандарты в различных областях,
  предлагая беспрецедентное сочетание реализма и разнообразия
  при обеспечении стабильного обучения.
  
  Однако последовательный характер процесса шумоподавления - серьезная проблема.
  
  Отбор образцов из DMs является трудоемким и затратным процессом,
  время выполнения которого в значительной степени зависит от двух факторов:
  (i) задержка оценки нейронной сети на каждом шаге и
  (ii) общее количество шагов шумоподавления.
  
  Значительные исследовательские усилия были направлены
  на ускорение процесса отбора образцов.
  
  Для синтеза текста в изображение предлагаемые методы
  охватывают широкий спектр техник,
  включая "решатели"" более высокого порядка,
  модифицированные диффузионные трансформеры для уменьшения кривизны,
  //// "Кривизны" чего? Точно переводили гуглопереводом.
  а также направляющее, пошаговое и консистентное дистиллирование.
  
  \\\ Направляющее дистиллирование использует обученную модель (наставника)
  \\\ для передачи знаний модели-ученику,
  \\\ сохраняя ключевые характеристики оригинала при уменьшении его сложности.
  
  \\\ Ученик имитирует поведение наставника,
  \\\ достигая более высокой точности или эффективности,
  \\\ чем при традиционном обучении.
  \\\ В отличие от классического подхода,
  \\\ могут применяться дополнительные техники, такие как аугментация данных.
  
  \\\ Пошаговое дистиллирование представляет собой итеративный процесс,
  \\\ где ученик постепенно осваивает усложняющиеся задачи,
  \\\ что способствует лучшей обобщающей способности модели.
  
  \\\ Консистентное дистиллирование ориентировано
  \\\ на стабильность предсказаний модели при изменении входных данных или параметров,
  \\\ снижая риск переобучения и улучшая устойчивость на реальных данных.
  
  Эти методы достигли впечатляющих результатов,
  достигая очень высокого качества,
  используя около всего 10 шагов.
  В последнее время гибридные методы,
  которые используют как дистилляцию, так и адверсариальные потери,
  продвинули границу до пяти шагов и меньше...
  
  \\\ Адверсариальные потери - это функция,
  \\\ измеряющая качество различения между реальными и сгенерированными данными.
  
  Хотя эти методы достигают впечатляющего качества
  для простых запросов и несложных стилей, например, анимации
  - они страдают от ухудшения качества для фотореалистичных картинок,
  особенно на длинных промтах, описаниях.
  
  Общей тема среди упомянутых методов
   - попытка согласовать модель ученика с малым количеством шагов
  со сложными путями учителя.
  //// Что это за "сложные пути учителя".
  //// Какой изысканный стиль у оригинала.
  
  Признавая это как ограничение, мы инвертируем процесс,
  предлагая новую структуру дистилляции,
  которая предназначена для улучшения учителем ученика
  вдоль его собственных диффузионных путей.
  //// Любопытный термин " собственных диффузных путей".
  
  Вкратце, наш (Meta) вклад заключается в трех аспектах:
  
  - Во-первых, наш подход вводит обратную дистилляцию
  - процесс дистилляции, предназначенный для калибровки модели ученика
  на ее собственной восходящей обратной траектории,
  что снижает разрыв между распределениями обучения и вывода.
  Мы получаем нулевую утечку данных во время обучения на всех временных шагах.
  
  - Во-вторых, мы предлагаем смещенную функцию реконструкции,
  которая динамически адаптирует передачу знаний от модели учителя.
  
  В частности, функция предназначена для дистилляции глобальной,
  структурной информации от учителя на высоких временных шагах,
  сосредотачиваясь на рендеринге мелких деталей
  и высокочастотной информации на низких временных шагах
  - все это позволяет эффективно передавать как общие,
  так и точные детали между моделью учителя и моделью ученика.
  
  В заключение, мы предлагаем Noise Correction (корректировку шума),
  модификацию на этапе вывода,
  которая улучшает качество образцов,
  решая проблемы особенностей,
  присутствующих в моделях предсказания шума на начальном этапе выборки.
  
  Эта методика, не требующая обучения,
  снимает проблему понижение контраста и интенсивности цвета,
  которая обычно возникает при работе с малым числом шагов шумоподавления.
  
  Комбинируя эти три новаторских компонента,
  мы применяем нашу систему дистилляции к базовой модели диффузии, Emu [4]
  - получаем Imagine Flash,
  достигающей высококачественной генерации в условиях
  крайне низкого числа шагов
  без ущерба для качества образцов или верности условий (см. рис. 2).
  
  Диффузионные модели, в отличие от предыдущих генеративных моделей
  (например, GANs),
  подходят к оценке плотности и выборке данных итеративным образом,
  постепенно обращая процесс наложения шума.
  
  Эта итеративная природа приводит к многократным запросам
  к основе нейронной сети,
  что приводит к высоким затратам на вывод.
  
  В результате значительное количество работ сосредоточено
  на разработке более быстрых и эффективных способов выборки из диффузионных моделей.
  
  Однако повышение скорости вывода
  без ущерба для качества изображения и точности текстового соответствия
  остается значительной проблемой.
  
  Другие исследования
  
  Ранние подходы сосредотачивались на разработке лучших решений
  для базовой динамики диффузионного процесса.
  В этом направлении несколько работ предлагают
  экспоненциальные интеграторы,
  решения более высокого порядка (надстроечные решения)
  и специализированные методы для конкретных моделей.
  
  Другие исследования рассматривают реформулировки диффузионного процесса
  с целью минимизации кривизны как в прямых (шумовых),
  так и в обратных (шумоподавляющих) траекториях.
  
  Вкратце, эти подходы стремятся линеаризовать путь вывода,
  что позволяет использовать более крупные шаги
  и, следовательно, уменьшить количество шагов на этапе вывода.
  
  \\\ Исправление кривизны в диффузионных моделях (диффузионках)
  \\\ связано с улучшением качества генерации данных
  \\\ путем учета геометрии пространства данных.
  
  \\\ Диффузионки, которые постепенно преобразуют простое распределение
  \\\ (например, нормальное) в сложное целевое распределение,
  \\\ кривизна отражает отклонения траекторий от линейного или плоского пути
  \\\ в пространстве высокой размерности.
  
  \\\ Если не учитывать кривизну, модели могут искажать данные,
  \\\ приводя к ухудшению качества сгенерированных выборок.
  
  \\\ Исправление кривизны позволяет диффузионным моделям
  \\\ учитывать истинную геометрию пространства данных,
  \\\ что приводит к более точному восстановлению целевого распределения.
  
  \\\ Это улучшает реализм и качество сгенерированных данных,
  \\\ делая их более правдоподобными и близкими к оригинальным.
  
  Несмотря на значительное сокращение числа шагов благодаря этим методам "выпрямления кривых",
  существует предел того, насколько большим может быть шаг вывода,
  не снижая при этом качество изображения.
  
  \\\ Здесь авторы хотят акцентировать внимание,
  \\\ что ресерчеры акцентировали внимание на преобразовании алгоритмов
  \\\ и вообще механизма классической диффузии, пытаясь его модифицировать.
  \\\ Но они не стремились абсолютно преобразовать
  \\\ стандартный подход к диффузионкам.
  
  Сокращение размера модели:
  Ряд работ направлены на уменьшение стоимости шага.
  В этом русле несколько ресерчей сосредотачиваются
  на использовании меньших архитектур и воспроизведения "мобильных сетей"
  
  Снижение стоимости за шаг также решается путем
  минимизации стоимости условной генерации на каждой итерации
  или кэширования промежуточных активаций в основаниях сети.
  
  В этом контексте предлагают дистилляцию направляющих,
  в то время как представляют альтернативу без обучения,
  заключающуюся в усечении направляющих.
  Сокращение задержки за шаг приводит к значительному увеличению скорости вывода.
  
  Однако для того, чтобы действительно масштабировать вывод
  для приложений в реальном времени,
  эти достижения должны быть связаны с дальнейшим сокращением количества шагов
  до небольшого числа однозначных цифр.
  
  \\\ Здесь авторы подчеркивают, что уменьшение размера модели,
  \\\ сведение ее к совсем маленьким/мобильным версиям
  \\\ по итогу все равно приводило к увеличению скорости работы нейронки
  \\\ (вывода данных).
  
  Сокращение количества шагов выборки:
  один из способов дальнейшего уменьшения задержки вывода
  - это дистилляция шагов.
  
  В этих работах авторы предлагают прогрессивный подход
  к дистилляции двух или более шагов в один.
  
  Хотя эти подходы достигают значительного сокращения шагов,
  существенное снижение качества наблюдается при малом количестве шагов.
  
  Чтобы компенсировать потерю качества,
  другой "фронт" исследователей предлагает дополнительные улучшения обучения
  во время дистилляции.
  
  А именно, ADD, Lightning и UFOGEN.
  Они добавляют адверсариальные потери для повышения качества образцов.
  
  Хотя вышеперечисленные методы дистилляции,
  безусловно, дают впечатляющие результаты с использованием
  всего одного шага генерации,
  эти улучшения все еще недостаточны для многих практических приложений:
  генерации фотореалистичных изображений,
  генерацию картинок по длинным промтам.
  
  Разумный подход заключается в контроле компромисса между качеством и скоростью.
  
  Практически это переводится в методы,
  позволяющие небольшое увеличение шагов (от 2 до 4 шагов)
  со значительным улучшением качества.
  
  Мы применяем этот подход в нашем методе.
  Для достижения лучшего качества мы предлагаем дистиллировать
  по обратному пути ученика, а не по прямому пути.
  
  Иными словами, вместо того чтобы ученик имитировал учителя,
  мы используем учителя для улучшения ученика на основе его текущих знаний.
  //// Вот как это понять. Наверно, это ключевой момент в этом подходе.
  //// Интересно будут ли к этому предложению хоть какие-то пояснения.
  
  Мы обнаружили, что этот подход приводит к конкурентоспособным результатам
  с одним шагом вывода
  и значительно улучшает качество и точность
  всего с небольшим увеличением до трех шагов.
  
  Метология и Imagine Flash
  
  Мы представляем Imagine Flash, новаторскую технику дистилляции,
  предназначенную для быстрого преобразования текста в изображение,
  основанную на модели EMU, но не ограниченную ею.
  
  В отличие от оригинальной модели Emu,
  которая требует как минимум 50 оценок нейронных функций (NFE)
  для создания крутых картинок,
  Imagine Flash достигает сопоставимых результатов
  всего за несколько таких оценок.
  
  \\\ EMU (Efficient Meta-University)
  \\\ - это модель машинного обучения,
  \\\ разработанная для более эффективного и универсального переноса знаний
  \\\ между задачами.
  
  \\\ Основная идея модели заключается в объединении метаобучения
  \\\ и методов трансфера знаний,
  \\\ что позволяет улучшать производительность на новых задачах
  \\\ с минимальным количеством данных.
  \\\ Она обычно предназначена для универсальных задач
  \\\ с динамическим изменением данных.
  
  Предлагаемый метод дистилляции включает три ключевых компонента:
  
  обратная дистилляция, процесс дистилляции,
  который обеспечивает нулевую утечку данных во время обучения
  на всех временных точках t.
  
  Смещенная функция реконструкции (SRL),
  адаптивная функция потерь,
  предназначенная для максимизации передачи знаний от учителя.
  
  Коррекция шума,
  модификация на этапе вывода, не требующая обучения,
  которая улучшает качество образцов,
  созданных методами с малым количеством шагов,
  обученными в режиме предсказания шума.
  
  В дальнейшем мы предполагаем доступ к предварительно обученной модели диффузии,
  которая предсказывает оценки шума ?.
  
  Эта модель учителя может работать как в пространстве изображений,
  так и в латентном (скрытом) пространстве.
  
  Диффузионные модели, в отличие от предыдущих генеративных моделей
  (например, GANs),
  используют итеративный подход к оценке плотности и выборке данных,
  постепенно изменяя процесс создания шума.
  
  Этот итеративный характер приводит к множественным запросам
  в магистральной нейронной сети,
  что приводит к высоким затратам на логический вывод.
  
  Большой объем работ был сосредоточен на создании
  более быстрых и эффективных способов выборки из диффузионных моделей.
  Однако повышение скорости логического вывода
  без ущерба для качества изображения и точности текста
  по-прежнему представляет собой серьезную
  //// Пропущено, наверно, слово "проблема". Изумительная вычитка текста.
  
  Общие положения о диффузионных моделях и обратная дистилляция
  
  \\\ Здесь авторы расписывают работу диффузионок и дистилляции.
  \\\ Мы не будем писать курсивом,
  \\\ хотя заменили математические формулы естественным языком
  \\\ для упрощения восприятия.
  
  Модели диффузии состоят из двух взаимосвязанных процессов:
  прямого и обратного.
  Процесс прямой диффузии постепенно искажает данные
  путем интерполяции между выборочными точками данных.
  
  Диффузионные модели в машинном обучении функционируют
  на основе постепенного преобразования данных
  через процесс добавления шума
  и последующего восстановления исходных данных.
  
  Математически это представляется как последовательность шагов,
  в ходе которых к исходным данным добавляется шум,
  что постепенно увеличивает их энтропию,
  приближая распределение данных к простому,
  например, нормальному распределению.
  
  Затем модель обучается решать обратную задачу:
  начиная с сильно зашумленных данных,
  шаг за шагом уменьшать шум, восстанавливая исходные данные.
  
  Этот процесс моделируется с помощью
  стохастического дифференциального уравнения,
  которое описывает, как шум эволюционирует во времени,
  и как можно обратить эту эволюцию, чтобы получить исходные данные.
  
  Формула SDE
  
  \\\ SDE - то самое стохастическое дифференциальное уравнение,
  которое описывает эволюцию шума во времени.
  
  В результате модель учится эффективно переходить
  от простого распределения к сложному целевому,
  что позволяет ей генерировать новые данные,
  соответствующие распределению исходных данных.
  
  Процесс дистилляции в машинном обучении, с другой стороны,
  представляет собой метод сжатия информации от более сложной модели,
  называемой наставником, к более простой модели, называемой учеником.
  
  Математически это осуществляется путем минимизации разности
  между выходами наставника и ученика.
  
  Наставник генерирует прогнозы или вероятностные распределения,
  которые ученик пытается воспроизвести.
  
  В процессе обучения ученик использует эти прогнозы
  как дополнительную информацию,
  что помогает ему лучше понять структуру данных,
  нежели если бы он обучался только на исходных метках данных.
  
  Это приводит к тому, что ученик, будучи более простой моделью,
  может достичь производительности, близкой к производительности наставника,
  но с меньшими вычислительными затратами.
  
  Таким образом, дистилляция позволяет перенести сложные знания и представления
  от большой модели к меньшей,
  сохраняя при этом важные характеристики и производительность модели.
  
  И наоборот, процесс обратной диффузии предназначен
  для устранения процесса зашумления и генерации образцов.
  
  Согласно теореме Андерсона, прямое СДУ, введенное ранее,
  удовлетворяет уравнению диффузии в обратном времени,
  которое можно переформулировать с помощью уравнений Фоккера-Планка
  
  \\\ Теорема Андерсона говорит, что если у нас есть прямое СДУ,
  \\\ описывающее этот процесс, то существует соответствующее уравнение диффузии
  \\\ в обратном времени.
  
  \\\ Это означает, что можно сформулировать процесс,
  \\\ который обращает прямую диффузию
  \\\ - то есть, зная, как данные зашумляются,
  \\\ можно описать, как эти зашумленные данные можно восстановить
  \\\ в обратном направлении,
  \\\ удаляя шум и приближаясь к исходному состоянию.
  
  \\\ Этот обратный процесс описывается другим СДУ,
  \\\ которое в определённых условиях может быть найдено
  \\\ и использовано для обучения модели, восстанавливающей данные.
  
  \\\ Теперь, что касается уравнения Фоккера-Планка.
  \\\ Это уравнение описывает эволюцию
  \\\ плотности вероятности распределения состояния системы
  \\\ во времени.
  
  \\\ В контексте диффузионных процессов оно определяет,
  \\\ как распределение вероятности изменения данных
  //// Опять какая-то словесная несогласованность.
  \\\ со временем под воздействием шума (в прямом процессе)
  \\\ или как это распределение должно изменяться,
  \\\ если мы стремимся восстановить данные (в обратном процессе).
  
  \\\ Уравнение Фоккера-Планка связано с СДУ через соотношение
  \\\ между траекторией отдельного состояния (описанного СДУ)
  \\\ и общим поведением всего распределения вероятностей
  \\\ (описанного уравнением Фоккера-Планка).
  
  \\\ Итак, когда говорится, что "прямое СДУ удовлетворяет
  \\\ уравнению диффузии в обратном времени",
  \\\ это означает, что существует обратный процесс,
  \\\ который может быть описан через СДУ,
  \\\ и который формально соответствует обратному уравнению Фоккера-Планка.
  
  \\\ То есть, зная, как изменяется распределение в прямом процессе
  \\\ (добавление шума), мы можем описать и моделировать,
  \\\ как это распределение должно изменяться в обратном процессе
  \\\ (удаление шума).
  
  Авторы предлагают модель альтернативной, обратной дистилляции.
  
  Для получения качественных образцов, Imagine Flash
  достигает сопоставимых результатов с помощью всего нескольких NFE.
  
  Метод дистилляции включает три новых ключевых компонента:
  Обратная дистилляция, процесс дистилляции,
  который обеспечивает отсутствие утечки данных на всех временных точках t;
  //// "Утечка данных" - это обозначение расходения результата генерации
  //// с целевыми данными.
  Смещенная функция потерь восстановления (SRL),
  адаптивная функция потерь,
  предназначенная для максимизации переноса знаний от модели-наставника.
  
  \\\ Смещенная функция потерь (Shifted Reconstruction Loss, SRL)
  \\\ - метод оценки, разработанный для оптимизации процесса дистилляции знаний
  \\\ между моделями.
  
  \\\ В контексте генеративных моделей, таких как диффузионные модели,
  \\\ SRL настраивает функцию потерь таким образом,
  \\\ чтобы лучше соответствовать целям переноса знаний
  \\\ от более сложной модели (наставника) к менее сложной модели (ученику).
  
  \\\ Это смещение позволяет адаптивно корректировать
  \\\ выходные данные модели-ученика,
  \\\ чтобы они более точно отражали предсказания модели-наставника.
  \\\ В результате SRL способствует более эффективному обучению модели-ученика,
  \\\ улучшая качество восстановления данных и ускоряя процесс генерации.
  
  \\\ Процесс работы SRL включает в себя смещение стандартной функции потерь
  \\\ для учета специфики задачи и особенностей генерации данных.
  
  \\\ Но тут SLR работает таким образом,
  \\\ что мы получаем обратный процесс дистилляции.
  
  Широко признано, что традиционные схемы шума
  часто не достигают нулевого конечного соотношения сигнал/шум (SNR)
  на конечном шаге,
  что создает несоответствие между обучением и инференсом.
  
  В частности, схема шума обычно выбирается так,
  что конечное состояние не является чистым шумом,
  а содержит низкочастотную информацию, утекшую из исходных данных.
  
  Это несоответствие приводит к ухудшению производительности во время инференса,
  особенно если используются лишь несколько шагов.
  
  Чтобы решить эту проблему, некоторые исследователи предлагают
  пересчитать существующие схемы шума, чтобы обеспечить нулевое конечное SNR.
  
  Однако мы утверждаем, что это решение недостаточно,
  так как утечка информации происходит не только в конце процесса,
  но и на всех временных шагах в процессе прямой диффузии.
  
  При обучении модель обучается на основе информации от истинного сигнала,
  что приводит к сохранению ошибок на последующих шагах.
  
  Чем ближе к началу процесса, тем больше информации о сигнале сохраняется
  и тем сложнее корректировать ошибки.
  
  Чтобы решить эту проблему, мы предлагаем метод обратной дистилляции,
  который обеспечивает согласованность сигнала между обучением и инференсом
  на всех временных шагах.
  
  Вместо того чтобы начинать обучение с прямого зашумленного латентного кода,
  мы сначала выполняем обратные итерации модели ученика,
  чтобы получить промежуточное состояние,
  а затем используем это состояние в качестве входных данных
  для обучения обеих моделей - ученика и учителя.
  
  Это позволяет избежать зависимости от истинного сигнала во время обучения,
  улучшая согласованность между обучением и инференсом.
  
  Что происходит с SLR?
  
  В процессе генерации изображений через обратную диффузию ранние стадии
  (когда процесс близок к завершению)
  играют ключевую роль в формировании общей структуры и композиции изображения.
  Напротив, поздние стадии
  (когда процесс только начинается)
  важны для добавления мелких деталей.
  //// Почему-то мне представляется, что все с точностью до наоборот.
  //// Или я чего-то не понимаю в этом классификации "ранние/поздние стадии".
  //// Во всяком случае, в тех материалах, которые прорабатывал раньше,
  //// и где были последовательные изображения сгенерированных картинок,
  //// все выглядело совершенно иначе - "от общей композиции к деталям".
  
  Основываясь на этом наблюдении,
  мы разработали улучшения к стандартной функции потерь для дистилляции знаний,
  которые помогают модели ученика освоить как структурную композицию,
  так и детализирование изображения,
  как это делает модель-наставник.
  Мы называем этот метод смещенной функцией потерь восстановления.
  
  В рамках этого подхода, вместо того чтобы начинать работу
  с текущего зашумленного изображения,
  мы создаем целевое изображение на основе предсказания модели ученика,
  которое затем зашумляется до определенного уровня,
  чтобы соответствовать новым условиям.
  
  В результате, градиенты обновляются таким образом,
  чтобы на ранних этапах обучения модель ученика училась сохранять
  общую структуру изображения,
  а на поздних этапах сосредоточилась на улучшении мелких деталей.
  //// Да, но здесь говорится о ранних/поздних этапах обучения,
  //// а не генерации изображения. Разве это одно и тоже?
  //// Ой, придется наверно все-таки смотреть оригинальный текст.
  
  В отличие от традиционных методов,
  где и наставник, и ученик начинают с одного и того же начального изображения,
  в нашем методе смещения
  начальная точка для денойзинга модели наставника
  отличается от начальной точки модели ученика.
  //// А вот это действительно интересно.
  
  Функция смещения проектируется таким образом,
  чтобы для больших значений времени
  (ближе к началу процесса)
  цель, заданная моделью наставника,
  имела глобальное сходство с результатом ученика,
  но с улучшенной текстовой и семантической согласованностью.
  
  Для меньших значений времени
  (ближе к концу процесса)
  целевое изображение содержит более детализированные особенности,
  //// Ну вот это вроде правильное представление "ориентации во времени",
  //// а то что было выше можно списать на "особенности перевода".
  при этом сохраняя общую структуру, предсказанную моделью ученика.
  
  Этот подход помогает ученику сосредоточиться
  на формировании структуры изображения в ранних этапах
  и на создании более тонких деталей на поздних этапах.
  //// Вот так понятно.
  //// Но непонятно все-таки, как именно реализуется эта "обратная дистилляция".
  //// Чего-то в этой "выжимке" из авторского текста либо упущено,
  //// либо не так отражено/акцентировано.
  
  Коррекция шума
  
  В большинстве современных моделей диффузии обучение проводится
  в режиме предсказания шума.
  Это означает, что задача модели заключается в том,
  чтобы отделить шум от сигнала на основе случайно загрязненного изображения.
  Однако процесс генерации изображений начинается с точки,
  где изображение представляет собой чистый шум.
  
  В этой точке нет никакого сигнала,
  и поэтому предсказание шума становится тривиальным
  и не информативным для создания изображений.
  Чтобы решить эту проблему, существующие методы изменяют схему шума так,
  чтобы на начальном этапе обновление было более информативным и нейтральным,
  переходя к предсказанию скорости.
  
  Однако переход к предсказанию скорости требует дополнительных усилий
  при обучении модели.
  В связи с этим, современные методы, которые ориентированы
  на минимальное количество шагов,
  продолжают использовать режим предсказания шума,
  но вычисляют потери на основе оценок, полученных от модели.
  
  Это позволяет обойти проблему тривиальности предсказания шума на начальном этапе,
  но при этом может вносить предвзятости в первый шаг обновления.
  
  Когда модель обучается предсказывать шум,
  её оценка сигнала основывается на самом шуме,
  что приводит к искажению результатов.
  В результате процесс денойзинга может накапливать ошибки,
  поскольку модель не должна просто предсказать шум,
  а должна учитывать текущие результаты.
  
  Мы предлагаем простое решение, не требующее дополнительного обучения,
  которое позволяет использовать модели предсказания шума без этой предвзятости.
  
  Мы рассматриваем случай на начальном этапе
  как особый
  и заменяем шум модели на истинный шум,
  чтобы корректировать процесс обновления.
  Это небольшое изменение значительно улучшает оценку цветов,
  делая их более яркими и насыщенными.
  
  Этот эффект особенно заметен,
  когда количество шагов в процессе генерации невелико.
  Мы подробнее исследуем влияние этой коррекции шума в последующих разделах
  и приводим примеры улучшений в приложении.
  
  Заключение
  
  Мы представили Imagine Flash - новаторскую структуру дистилляции,
  которая позволяет выполнять генерацию изображений с высоким качеством
  всего за несколько шагов с использованием диффузионных моделей.
  
  Наш подход включает три ключевых компонента:
  Обратную Дистилляцию, которая снижает несоответствие
  между обучением и инференсом,
  Потерю Сдвинутой Реконструкции (SRL),
  динамически адаптирующую передачу знаний на каждом шаге времени,
  и Коррекцию Шума, улучшающую качество начального образца.
  
  В результате обширных экспериментов Imagine Flash
  демонстрирует выдающиеся результаты,
  сопоставимые с производительностью предварительно обученной модели-учителя
  при использовании всего трех шагов денойзинга,
  и неизменно превосходит существующие методы.
  
  \\\ Приводим несколько табличек:
  
  \\\ Сравнение методов по ключевым бенчмаркам:
  
  \\\ Сравнение значимости отдельных частей технологии для всего Imagine Flashe
  \\\ (больше всего от обратной дистилляции и SLR)
  
  \\\ Сравнение ImagineFlash с SOTA машинного обучения в этом направлении
  
  Эта беспрецедентная эффективность выборки
  в сочетании с высоким качеством и разнообразием образцов
  делает нашу модель идеально подходящей для приложений генерации в real-time.
  Таким образом, Meta вышла вперед других корпораций,
  как минимум, по скорости.
  
  //// Конец цитирования.
  
  В общем, не смотря на все усилия понять до конца суть "обратного дистиллирования"
  мне по этому переводу так и не удалось.
  Не хватает какой-то важной детали, может быть одного нужного слова,
  или просто правильного акцента.
  Наверно, придется попытаться разбираться с первоисточником самому.
  И идти на сайт Мета, признанной "нежелательной структурой".
  Если конечно будет доступ.
  Ну вроде есть.
  
  10000000_1650715635757274_3499348867570367129_n.pdf
  https://scontent-fra3-2.xx.fbcdn.net/v/t39.2365-6/10000000_1650715635757274_3499348867570367129_n.pdf?_nc_cat=111&ccb=1-7&_nc_sid=3c67a6&_nc_ohc=lE5soNvzf2cQ7kNvgGYIHi4&_nc_ht=scontent-fra3-2.xx&_nc_gid=AZv8nIBb8763u0OJaXacTmW&oh=00_AYDBG_NFRaGeZQA3w9m44xPN5Rex3fNNi4xZaLEzM67-9w&oe=67084F6B
  
  Попробуем найти недостающую деталь.
  
  07.10.2024 10:24
  
  Снова перевел все относящиеся к описанию параграфы гугл-переводчиком.
  Убедился, что в материале полностью сохранены все авторские осмысленные фразы
  и исключены только длиннющие формулы.
  Даже та "непонятка" с "ранними/поздними стадиями" полностью воспроизведена
  из оригинального текста - никакой "отсебятины".
  Т.е. вся проблема в "академическом" стиле исходного матереала,
  ориентированном "на наукообразие", а не "на понимание".
  Так что, все замечания к качеству перевода снимаются,
  и приносятся извинения за отдельные замечания в адрес переводчика.
  
  Но эта вроде как бесполезная работа, все же дала свой эффект.
  Пытаясь сопоставить совершенно корявый "гугло-перевод" с текстом материала,
  кажется, все-таки, удалось уловить суть этого метода.
  Точнее вычленить две основные очень перспективные идеи,
  используемые авторами в связке и запакованные в "многокилометровые" формулы.
  
  Первая идея заключается в том, что обучение ученика учителем по сравнению
  с обычной дистилляцией осуществляется более "мягко"/"избирательно"/"индивидуально"
  - вот не удается подобрать нужное слово.
  Но основная идея этого "индивидуального" обучения в том,
  что "учитель" не просто "ломает об колено" "ученика" "навязывая ему свои оценки",
  а пытается "подстроится" под текущее состояние/"понимание" ученика,
  и дает свои "корректирующие воздействия" более согласованные
  с "потенциалом"/"возможностями"/"представлениями" ученика.
  Реализуется это за счет того что на "вход учителя" подается
  не исходное "случайно инициализированное состояние",
  а уже преобразованное "учеником" до определенного шага это исходное состояние.
  То самое:
  \\\ Иными словами, вместо того чтобы ученик имитировал учителя,
  \\\ мы используем учителя для улучшения ученика на основе его текущих знаний.
  
  Вторая идея, не менее, интересная и перспективная,
  это обучение ученика не какой-то конкретной картинке,
  а сначала "концепции" изображения и только затем "деталям".
  Причем реализуется это на основе предыдущей идеи,
  путем обучения ученика учителем начиная с более "ранних этапов генерации",
  т.е. более близких к начальной случайной инициализации.
  Наверно, сам термин "обратная дистилляция", по задумке авторов этого термина,
  как раз отражает именно эту последовательность обучения,
  которая, как раз, действительно "обратная" к привычному порядку обучения
  в обычных диффузионных моделях, например, для того же "учителя".
  И в таком ракурсе становятся достаточно понятными суть такого подхода:
  
  \\\ В отличие от традиционных методов,
  \\\ где и наставник, и ученик начинают с одного и того же начального изображения,
  \\\ в нашем методе смещения
  \\\ начальная точка для денойзинга модели наставника
  \\\ отличается от начальной точки модели ученика.
  
  \\\ В результате, градиенты обновляются таким образом,
  \\\ чтобы на ранних этапах обучения модель ученика училась сохранять
  \\\ общую структуру изображения,
  \\\ а на поздних этапах сосредоточилась на улучшении мелких деталей.
  
  Вроде, на мой взгляд, это достаточно простые для понимания идеи,
  и вполне применимы для использования не только в диффузионных моделях.
  Причем варианты реализации этих идей могут быть самые разные.
  В данном случае, авторы постарались "упаковать" все эти идеи/подходы
  в одну очень длинную формулу "смещенной функции потерь восстановления (SRL)",
  добавив в нее еще и функционал по "коррекции шума".
  Точнее, пытаясь как-то с другой стороны обосновать
  две основные идеи "обратной дистилляции",
  придав им "каноническую академическую формулировку" "Коррекции шума".
  
  И именно эта форма "подачи материала", на мой взгляд,
  больше всего мешает увидеть истинный потенциал
  очень интересного и перспективного метода "обратной дистилляции".
  Ведь подход, при котором учитель старается учесть
  "индивидуальность"/"самостоятельность" ученика,
  "не диктуя свое видение", а корректируя "мировоззрение" ученика.
  Причем, начиная с концептуального уровня
  и только потом спускаясь до уровне деталей,
  просто не может не быть достаточно успешным и плодотворным.
  
  Просто вспомните своих любимых учителей,
  и попытайтесь понять, почему они "любимые".
  Кстати, вчера был День Учителя.
  А Вы позвонили своему Учителю?
  
  
  ========
  
  Галеон
  
  Галеон Мультимодальность. Модель Kandinsky 2.1 нарисовала: 05bf9cf9c986408d9240bbd443889373_00000
  
  Галеон Мультимодальность. Модель Kandinsky 3.0 нарисовала:  f39baa55a7084dfcb97fdc2ea0d119df_res_00000_image
  
  Галеон Мультимодальность. Модель Kandinsky 3.1 нарисовала:  620e8fa33e5941b8a2ca64c0ecae8a6a_res_00000_image dd>  
  Галеон Мультимодальность. Модель Kandinsky 3.1 нарисовала:  9e544e9e-a3f2-440c-bea4-cae856151ac7
  Flag Counter
  Free counters!
  Flag Counter
  
 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"