Ad-social Bot

Smmok Bot

Vkserfing Bot

Vkstorm Bot

Vktarget Bot

Все программы

Запись опубликована: 11.05.2024

Третья часть «Годзиллы и Конга» уже в работе

[ comments ]

К проекту уже привлекли очень опытного сценариста.
Годзилла и Конг 3

После кассового успеха фильма «Годзилла и Конг: Новая империя» Legendary Pictures и Warner Bros. активно обсуждают триквел. К разработке его сценария уже привлечён сценарист «Шан Чи» Дэйв Каллахэм. Об этом сообщает THR.

Каллахэм давно знаком с «Годзиллой и Конгом». Он писал первые наброски сюжета для «Годзиллы» 2014 года, фильма, положившего начало монстромании Legendary. Он же работал над лентами «Человек-паук: Паутина вселенных», «Мортал Комбат» и «Неудержимыми».

Вернётся ли к триквелу Адам Вингард, снявший первые два фильма серии, пока под вопросом. Ситуация усложняется тем, что режиссёр намерен этой осенью заняться оригинальным фильм под названием «Натиск» (Onslaught) для А24, прежде чем приступить к каким-либо другим проектам.

Блокбастер «Годзилла и Конг: Новая империя» уже собрал в прокате 555 миллионов долларов по всему миру. Это самый успешный фильм франшизы со времён картины «Конг: Остров Черепа» 2017 года, которая заработала 568 миллионов долларов.

кадр из фильма «Годзилла и Конг: Новая империя»

[ comments ]

Метки:





Запись опубликована: 11.05.2024

Используем Gemini для просмотра лекции

Обновить

Рейтинг
BotHub

Доступ к ChatGPT в РФ

veseluha 1 час назад

Время на прочтение9 мин

Количество просмотров318

Обзор

В феврале мы познакомились с Gemini 1.5 Pro и контекстным окном в 1 миллион токенов, позволяющим обрабатывать огромные объемы информации за один раз — 1 час видео, 11 часов аудио, 30 000 строк кода или более 700 000 слов.

Сегодня я бы хотела рассмотреть вопрос обработки видео, а именно просмотра часового видео (вернее сказать 58 м 19 с) и оценить, как хорошо модель будет извлекать информацию.

Начнем с вводных. Модель испытывается на способность работать с обширным контекстом через ряд искусственных и прикладных задач. В частности, в задачах искусственного характера, таких как «поиск иголки в стоге сена», которые проверяют способность модели точно выделять нужные данные на фоне избыточной информации, модель Gemini 1.5 Pro продемонстрировала исключительные результаты, превышающие 99,7% точности. Это касается и поиска при значительном увеличении объема «шума» до нескольких миллионов токенов в разнообразных модальностях, включая текст, видео и аудио.

Из отчета Gemini 1.5 Pro

На рисунке ниже проводится сравнение между Gemini 1.5 Pro и GPT-4V в задаче идентификации скрытого слова в видео разной длительности, достигающей до трех часов. Задача моделей заключается в выявлении слова, замаскированного в тексте на протяжении всего видео. Для анализа используется частота 1 кадр/с. На левой стороне изображения две сетки размерами 10 на 50 отражают эффективность работы Gemini 1.5 Pro и GPT-4V на примере первого часа документального фильма. К примеру, верхняя левая ячейка отображает результаты анализа первых 1.2 минут видео и отбор кадров из первых 10% этого временного отрезка, где было скрыто слово. Зеленый цвет ячейки символизирует успешное обнаружение слова, в то время как серый указывает на ошибку API. В то время как API GPT-4V способно анализировать видео только до трех минут, Gemini 1.5 Pro показывает возможность находить слово на протяжении полного часа видео, что подтверждается полностью зеленой сеткой. Справа расположена сетка 10 на 10, которая иллюстрирует безупречную работу Gemini 1.5 Pro в анализе трехчасового видео.

Из отчета Gemini 1.5 Pro

Поскольку мы говорим про видео, то стоит обратиться к примеру обработки немого кино Бастера Китона «Шерлок-младший», продолжительностью в 45 м. Преобразовав видео в последовательность изображений (2674 кадра) с частотой 1 кадр/с, они создали вводный контекст из 684,000 токенов для модели. Это позволило модели извлекать и обрабатывать информацию из конкретного кадра и предоставлять соответствующую временную метку. На картинке ниже по второму промту модель определяет сцену в фильме по рисунку от руки:

Из отчета Gemini 1.5 Pro

Что ж, звучит заманчиво, потому не будем медлить и проверим самостоятельно.

Потестим?

Вспомним методы коммуникации Мэтта Абрахамса и с ними пройдемся по модели, поскольку целый час времени выделить тяжело, а память освежить хочется.

Ремарка на всякий случай: доступ из России ограничен, поэтому для использования необходим иностранный IP, те еще танцы с бубном.

Качаем mp4 видео и идем в Google AI Studio. При загрузке увидела целый 1,032,500 токенов, не дурно, да? 1 токен примерно равен 0,75 слова или 4-м символам, то есть общее число слов составляет порядка 774,375 или если считать по символам — 4,130,000. (для английского)

Я прикинула пул вопросов, поэтому не будем тянуть и перейдем к каждому по порядку!

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

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

Почему спонтанная речь более распространена?

Первый ответ сгенерировался примерно за 80 с (по завершении — это в принципе среднее время ответа модели в моем случае).

Спикер объясняет, что спонтанная речь встречается чаще, чем запланированная (03:43). Он приводит несколько примеров ситуаций спонтанной речи, с которыми мы сталкиваемся в нашей повседневной жизни:

  • Предисловие: Когда вас просят представить людей на ужине или мероприятии.

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

  • Тосты: Произнесение неожиданного тоста на торжестве.

  • Вопросы и ответы: Ответы на вопросы во время сессии вопросов и ответов после презентации или выступления.

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

Перейдем по таймкоду:

Да, это нужный таймкод, именно в этот момент лектор начинает приводить примеры спонтанной речи.

Тогда двигаемся далее.

Основные темы, освещаемые спикером

Основные темы видео:

  • Управление тревожностью при публичных выступлениях: Спикер подчеркивает важность управления тревожностью при публичных выступлениях, признавая, что это общий опыт для большинства людей (04:41). Он предлагает техники, такие как «приветствие своей тревоги» (07:00) и переосмысление ситуации выступления как беседы (09:19), чтобы помочь людям чувствовать себя более комфортно и уверенно.

  • Структура в спонтанных выступлениях: Видео подчеркивает ценность структуры в спонтанных выступлениях. Спикер представляет две структуры:

    • Проблема-Решение-Выгода: Эта структура включает в себя описание проблемы, предложение решения и выделение выгод от этого решения (40:14).

    • Что-И что из этого-Что дальше: Эта структура фокусируется на объяснении, что такое что-то, почему это важно и какие следующие шаги (41:58).

  • Ориентация на настоящее: Спикер поощряет сосредоточение внимания на настоящем моменте, а не задумываться о потенциальных будущих исходах или ошибках (12:04). Он предлагает техники, такие как обратный отсчет от 100 сложными числами или произношение скороговорок (13:22), чтобы помочь людям оставаться в настоящем и избегать переосмысления.

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

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

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

Идем дальше.

Как мы управляем тревогой при общении?

Управление тревогой при общении

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

  • (07:20 — 07:47) Приветствуйте свою тревогу: Видео предлагает, вместо того чтобы пытаться подавить чувство нервозности, признать его и осознать, что это естественная реакция на ситуацию, воспринимаемую как важную. Принимая эти чувства, вы можете предотвратить их усиление и взятие под контроль.

  • (08:26 — 09:13) Переосмысление ситуации: Измените свою точку зрения, перестав рассматривать выступление как представление и начав видеть его как разговор. Думая о нем как о разговоре с вашей аудиторией, вы уменьшаете давление необходимости сделать все «правильно» и позволяете себе более естественное и расслабленное взаимодействие.

  • (13:34 — 13:40) Сосредоточение на настоящем моменте: Техники, такие как скороговорки или обратный отсчет с 100 по семь, могут помочь сосредоточить ваше внимание на настоящем моменте. Занимая ваш ум простой задачей, вы переключаете внимание с тревог о будущем или потенциальных негативных исходов.

  • (13:40 — 13:46) Разминка голоса: Многие нервные ораторы пренебрегают разминкой голоса, что может усугубить тревогу. Занятия вокальными упражнениями, такими как скороговорки, могут помочь подготовить ваш голос к выступлению и дополнительно способствуют сосредоточению на настоящем моменте.

В целом, все тайминги верные, разве я бы начало третьего интервала переместила с 13:34 на 13:27. Последние два пункта стоило бы поместить внутрь «переосмысления», а также внутри переосмысления должны быть «начните с вопросов» и «используйте разговорный язык». То есть либо должно быть шесть самостоятельных пунктов, либо два основных, где у последнего 4 подпункта.

Переходим к следующему вопросу.

Стоит ли использовать юмор на выступлениях?

Использование юмора в выступлениях

Видео кратко затрагивает тему юмора, выделяя риски и вознаграждения, и предлагая советы по его эффективному включению:

  • (56:14 — 56:21) Риски и вознаграждения: Хотя юмор может быть мощным инструментом для связи с аудиторией и повышения привлекательности вашей презентации, он также несет в себе риски. Шутки, которые не срабатывают или культурно неприемлемы, могут негативно повлиять на вашу достоверность и эффективность вашего сообщения.

  • (56:31 — 56:33) Проверьте ваш юмор: Чтобы снизить риски, докладчик предлагает проверять ваш юмор на других, прежде чем включать его в вашу презентацию. Получите обратную связь от разнообразной группы людей, чтобы оценить, насколько ваши шутки, скорее всего, найдут отклик у вашей целевой аудитории и избежать любых потенциальных культурных промахов.

  • (56:37 — 56:43) Имейте запасной план: Если шутка не сработает как задумано, имейте запасной план для изящного восстановления. Докладчик предлагает самоиронию как «наименее рискованный» вариант, так как это позволяет вам признать ситуацию и потенциально превратить её в юмористический момент.

  • (56:14 — 56:21): Видео подчеркивает, что «самоирония — ваш лучший выбор» при использовании юмора, так как она менее вероятно обидит и может помочь наладить контакт с аудиторией, показав вашу человеческую сторону.

Про юмор спикер начинает говорить на моменте 55:54. В 56:00 он уже говорит о том, что это рискованно и начинает перечислять причины, а в 56:10 начинает говорить о самоиронии. В принципе не критично, поскольку все основные моменты передал, но пометку сделали.

А что еще аудитория спрашивала? Сейчас узнаем!

Какие еще вопросы были заданы во время выступления?

Вопросы, заданные во время презентации

Видео включает два вопроса аудитории, связанных с конкретными ситуациями выступления:

(51:00 — 51:15): Участник аудитории, который часто участвует в удаленных презентациях с географически разбросанной аудиторией через телеконференции, попросил советов по обращению с этим типом выступлений. Докладчик признал сложности удаленных презентаций и предложил включать методы вовлечения, требующие активного участия аудитории, даже когда они физически отсутствуют.

(52:18 — 52:26): Другой участник аудитории, работающий адвокатом, осведомился о стратегиях управления враждебной средой перекрестного допроса во время судебных разбирательств. Хотя докладчик признал отсутствие личного опыта в этой конкретной области, он подчеркнул важность ранее обсуждавшихся техник, таких как управление тревогой, переосмысление ситуации и перефразирование вопросов, чтобы выиграть время и сформулировать эффективные ответы.

Как я понимаю: модель вывела диапазоны именно для заданного вопроса, то есть в какой момент кто-то из аудитории задал вопрос, поскольку по таймингам именно такой вариант подходит. Оба вопроса верно подсвечены, однако не хватает пары вопросов, например, я хотела бы увидеть вопрос про враждебное общение. Всего спикеру было задано 6 вопросов, не учитывая вопрос, когда девушка просила вернуть экран, а также опуская вопрос про юмор, которые мы осветили ранее. То есть суммарно модель проигнорировала 3 вопроса (либо 4, если учитывать вопрос-просьбу), хотя запрос изначально подразумевал все вопросы, заданные о стороны аудитории во время выступления (опуская вопрос про юмор). Думаю, это вполне решаемо уточнением промта. Запомнили и можем идти дальше.

Напиши детализированное резюме лекции

Краткое содержание лекции: Думайте быстро, говорите умно — эффективное спонтанное выступление

Этот интерактивный семинар в Высшей школе бизнеса Стэнфорда был направлен на помощь людям в становлении более эффективными и уверенными коммуникаторами в ситуациях спонтанных выступлений. Докладчик, опираясь на академические исследования и личный опыт, рассмотрел общую проблему тревоги, связанной с публичными выступлениями, и предложил несколько техник для ее управления, включая:

  • Приветствие вашей тревоги: принятие чувства нервозности как естественной реакции.

  • Переосмысление ситуации: изменение перспективы с выступления на разговор.

  • Фокус на настоящем моменте: техники, такие как скороговорки или упражнения на счет, чтобы оставаться в настоящем.

  • Разминка голоса: выполнение вокальных упражнений для подготовки голоса и снижения тревоги.

Лекция подчеркивала важность структуры для эффективной передачи сообщения. Докладчик представил две ключевые структуры:

  • Проблема-Решение-Выгода: эта структура помогает докладчику четко очертить проблему, предложить решение и подчеркнуть выгоды от принятия этого решения.

  • Что? И что из этого? Что дальше?: Эта структура помогает отвечать на вопросы, уточняя проблему, объясняя ее важность и намечая следующие шаги.

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

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

Какие ключевые уроки были выделены?

Основные уроки из лекции:

  • Управление тревогой имеет решающее значение для эффективной коммуникации. Примите свою нервозность, переосмыслите ситуацию и сосредоточьтесь на настоящем.

  • Структурируйте свое сообщение для ясности и воздействия. Используйте рамки, такие как «Проблема-Решение-Выгода» или «Что? И что из этого? Что дальше?»

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

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

  • Практика и подготовка необходимы для развития уверенности и компетентности в спонтанных выступлениях.

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

В общем-то на мой взгляд отлично подойдет для поиска информации из видео конференций, подкастов и лекций (но, опять же — доверяй, но проверяй).

Спасибо за внимание!

Метки:





Запись опубликована: 10.05.2024

Как хоррор стал главным жанром современности

[ comments ]

Без фестивалей и наград, но с преданной аудиторией.
Как хоррор стал главным жанром современности

Постхоррор — одно из главных направлений современного кинематографа. При этом никто не может внятно объяснить, что значит это слово. Сложно сказать, противоречат ли постхорроры обычным хоррорам или наследуют их признаки. Ясно лишь то, что сегодняшнее независимое кино опирается на это направление точно так же, как режиссёры «Нового Голливуда» — на гангстерские истории. При этом каждый автор по-своему трактует рамки и каноны жанра. Но это не значит, что с экранов пропали привычные фильмы ужасов. Разбираемся, что произошло с мировым кинематографом и почему именно хоррор превратился в главный жанр современности.

Парадоксальная гибкость

За последнее столетие сложилось примерное представление о том, что такое хоррор. В стандартном фильме ужасов есть слабая жертва, загадочное зло, саспенс, готовность к открытому финалу, отсутствие счастливого конца, использование детективных элементов. Наличие понятных составляющих упрощало работу сценаристов и создавало надёжную структуру, на которую можно накладывать что угодно.

Удивительно и немного нелогично, но жанр с самым чётким сложившимся каноном даёт художникам больше всего свободы. Режиссёр‑визионер может написать не самый лучший сценарий, но сделать отличный фильм из‑за особого подхода к картинке — так устроены «Зловещие мертвецы». Картины Дарио Ардженто сложно назвать непредсказуемыми, однако он проявлял себя как художник, а не рассказчик, практически не отвлекаясь на сюжет. Хоррор оказался удобной обёрткой для любой истории.

Кадр из фильма «Титан»
Кадр из фильма «Титан»

Современные авторы хорроров (или постхорроров) также не ограничивают себя, а потому снимают совершенно разные фильмы. Комедии с социальной критикой (Джордан Пил), психологические драмы (Ари Астер), стилизация под экспрессионизм и использование мифологических мотивов (Роджер Эггерс), боди‑хорроры (Жулия Дюкурно) — между ними мало общего, но их всё равно можно объединить в одно направление. В отличие от романтических комедий, где рамки давили на авторов, ужастики готовы вбирать в себя что угодно. Можно взять хоррор и с лёгкостью превратить его в драму («Ребёнок Розмари»), комедию («Реальные упыри»), детектив («Звонок»), боевик («Судная ночь»), вестерн («Костяной томагавк»), эротику («Юджени») и даже биографический фильм («Шесть демонов Эмили Роуз»). Нет жанра, с которым нельзя скрестить фильм ужасов.

Усиление эмоций

Может возникнуть логичный вопрос: если режиссёры не хотят пугать зрителя, то зачем они вообще снимают хорроры? Дело в том, что использование сверхъестественных элементов и нагнетание эмоций позволяют добавить фильмам глубины, сделать их более метафорическими.

Самый яркий пример — «Прочь» Джордана Пила. В двух словах это история о темнокожем парне, который знакомится с семьёй своей белой девушки. Это ведёт к проблемам из‑за поколенческих и расовых стереотипов, которыми живут герои. В 2023 году вышел фильм «Что за люди», сюжет которого строится ровно на этом же конфликте. Но разница между лентами огромна: герой «Прочь» находится в шаге от смерти из‑за социальных установок, а герой «Что за люди» рискует всего лишь не понравиться родителям подруги. Меняется уровень угрозы, а потому — важность проблемы.

Кадр из фильма «Прочь»
Кадр из фильма «Прочь»

Схожая ситуация и с картиной «Варвар» Зака Креггера. Его феминистский посыл проявляется в злодее — мужчине, который одержим беременными женщинами. Режиссёр мог снять об этом драму, но он понимает, что через призму и тропы хоррора передать посыл будет проще, а эффект окажется сильнее.

Высокая окупаемость

Хорроры долгое время оставались одним из самых удачных жанров с точки зрения коммерции. У фильмов ужасов были десятилетия жёсткой экономии, которая приучала авторов и продюсеров работать в условиях минимальных бюджетов. По этой причине жанр привлекает начинающих режиссёров. Можно придумать хорошую историческую драму, но никто не даст на неё необходимую сумму. Условный Зак Креггер просто напишет сценарий «Варвара» и снимет его за 4,5 миллиона долларов (кстати, фильм собрал в 10 раз больше). Знаменитая студия Blumhouse почти два десятилетия снимает бесчисленное количество хорроров. Многие из них не добираются до кинотеатра, зато успех одной картины обеспечивает прибыль. Например, «Паранормальное явление» с бюджетом 15 тысяч долларов собрало 193 миллиона. А «Ведьма из Блэр» — 248 миллионов при потраченных 60 тысячах.

Кадр из фильма «Варвар»
Кадр из фильма «Варвар»

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

Сочетание низких бюджетов и потенциальной прибыли, да ещё и при существовании фанатов жанра (а их очень много) позволяет авторам хорроров не беспокоиться о сборах. Как и о фестивалях — с ними режиссёры жанра давно поругались.

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

Кадр из фильма «Маяк»
Кадр из фильма «Маяк»

Вероятно, именно сейчас свежесть и необычность особо ценится аудиторией. Каждую неделю в кинотеатрах появляется либо кинокомикс, либо очередная часть какой‑нибудь франшизы. Зритель, замученный джокерами и доминиками торетто, скорее пойдёт на какое‑нибудь авторское кино, где неизбежно встретится с хоррорами. Придётся полюбить их, если хочется смотреть что‑то новое, но не супергеройское.

При этом не стоит списывать со счетов классические хорроры, ведь и они собирают большую кассу. «Заклятие», «Астрал» и «Оно» чувствуют себя комфортно даже на фоне фильмов Marvel и DC. Выходит, что хоррор — жанр, способный удовлетворить желания как зрителя, идущего в кинотеатр за развлечением, так и запросы киномана.

Кадр из фильма «Заклятие»
Кадр из фильма «Заклятие»

Пожалуй, в последний раз хорроры были такими же актуальными сто лет назад, когда немецкие экспрессионисты экспериментировали с формой и киноязыком. Современная индустрия вывела фильмы ужасов на первый план банально из‑за того, что их авторы не боятся делать что‑то новое, необычное. Гибкость жанра лишь способствует экспериментам, а возможность использовать метафоры и непривычные образы добавляет картинам глубины.

кадр из фильма «Заклятие»

[ comments ]

Метки:





Запись опубликована: 10.05.2024

Насколько реалистична отрицательная масса в контексте современной физики

25 минут назад
179

Напомню, что время от времени я обращаюсь к истории естественнонаучных идей, в том числе, заведомо тупиковых и развенчанных. Три ярких примера исходно неверных допущений, которые привели к великим научным открытиям, я привёл в моей последней февральской публикации «Случай является на помощь тому, кто неустанно ищет». Ещё несколько публикаций такого рода, которые приятно вспомнить — это «Из чего состоит мировой эфир. Последняя теория Менделеева» (+65, 46k просмотров), «Тяжёлое золото Сиборга и алхимические отголоски ядерных реакций» (+25, 4,8k просмотров) и «Не надувайте варп-пузырей, работая на оборонку» (+89, 80k просмотров). В последней из упомянутых публикаций я слегка затрагивал теоретические проблемы (не)существования отрицательной массы и отрицательной энергии. Получение этих субстанций открыло бы нам путь к мгновенным перемещениям в пространстве (пресловутый варп-двигатель и искусственные червоточины) и к антигравитации. В настоящее время существование материи с отрицательной массой считается практически невозможным, так как не согласуется с физикой Эйнштейна, хотя, и здесь есть место для построения моделей и планирования экспериментов. В сегодняшней публикации я хочу рассмотреть новейшую историю поисков отрицательной массы.

Отрицательная масса — это гипотетическая «масса, тождественная массе обычной материи по модулю и противоположная по знаку». Если бы существовала экзотическая материя, обладающая отрицательной массой, то она должна была бы отталкивать как обычную материю, так и материю с отрицательной массой, и такое явление, вероятно, воспринималось бы нами как антигравитация. В настоящее время подобная материя не известна. Более того, её существование плохо согласуется с общей теорией относительности Эйнштейна. Но в некоторых агрегатных состояниях (ниже я упомяну о конденсате Бозе-Эйнштейна) обычная материя — например, атомы рубидия — может проявлять свойства, которые придавала бы ей отрицательная масса. Схожий случай известен с имитацией свойств магнитных монополей.

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

В 2014-2015 году Ману Паранджапе и Сауссен Мбарек, на тот момент работавшие в университете Монреаля, нашли такое решение для общей теории относительности Эйнштейна, которое позволяет вписать в неё отрицательную массу, не нарушая никаких её базовых допущений. Паранджапе и Мбарек предположили, что отрицательная масса во Вселенной существовать может, но пока не известен механизм, который позволял бы производить вещество с отрицательной массой.

Вероятные взаимодействия частиц с положительной и отрицательной массой выглядели бы так:

Как известно, Эйнштейн опубликовал общую теорию относительности в конце 1915 года, и уже в 1916 ею заинтересовался немецкий физик Карл Шварцшильд. Его переписка с Эйнштейном закончилась, не успев начаться, так как Шварцшильд был демобилизован с фронта по состоянию здоровья и вскоре умер от последствий пузырчатки. Тем не менее, именно Шварцшильд, исходя из теории Эйнштейна, сформулировал знаменитую метрику Шварцшильда, которая описывает механизм возникновения чёрных дыр. Тот радиус, при котором объект с некоторой массой превращается в чёрную дыру, называется «радиусом Шварцшильда». В метрике Шварцшильда не учитывается космологическая постоянная, и предложенное им решение демонстрирует, как четырёхмерное пространство-время может замкнуться вокруг точечной массы. В таком случае возникнет область пространства, именуемая чёрной дырой. Сегодня существование чёрных дыр не вызывает сомнений, но при жизни Эйнштейна чёрная дыра казалась «доведённым до абсурда» решением теории относительности применительно к положительной массе. Чёрная дыра казалась объектом, существование которого противоречит здравому смыслу. Примерно в таком же качестве сегодня существует концепция отрицательной массы.

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

Слева - горизонт событий, справа - голая сингулярность

Слева — горизонт событий, справа — голая сингулярность

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

Уравнения поля, описывающие общую теорию относительности, никак не ограничивают количества состояний материи и негравитационных полей, которые могут существовать во Вселенной. Но энергетические условия, в том числе, слабое, вводятся потому, что некоторые состояния во Вселенной не наблюдаются. В частности, не наблюдается веществ и полей, которые обладали бы отрицательной массой или отрицательной энергией. Проверить наличие или отсутствие таких состояний впервые попытались Роберт Форвард и Герман Бонди в конце 1950-х.

Гипотеза Германа Бонди

В 1957 году Герман Бонди подробно проанализировал гипотезу отрицательной массы в контексте ньютоновской физики. Он счёл, что может существовать три вида массы: инертная, пассивная гравитационная и активная гравитационная. Инертная масса определяется по второму закону Ньютона, но проявляться может только под действием негравитационной силы. Знаменитый конденсат Бозе-Эйнштейна, представляющий собой крайне разреженную и холодную взвесь атомов, проявляет такие свойства, как если бы его частицы обладали инертной отрицательной массой. Пассивная гравитационная масса — это коэффициент пропорциональности между силой, прилагаемой к объекту, и внешним гравитационным полем. Согласно ньютоновскому закону всемирного тяготения, гравитационное поле объекта пропорционально его активной гравитационной массе. Теоретически, именно активная гравитационная масса может давать не только притяжение, но и отталкивание (антигравитацию). Бонди указал, что масса в уравнении Шварцщильда может быть не только положительной, но и отрицательной, и такое решение также удовлетворяет теории относительности.  

Несмотря на то, что решение Шварцшильда с отрицательной массой существует, оно представляется мнимым. Логично было предположить, что отрицательной массой обладает антивещество, но в 2023 году эта гипотеза была опровергнута на опыте.

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

Идеальный флюид с отрицательной массой

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

Наиболее интересное следствие из этого результата — отрицательная масса может существовать именно в такой Вселенной, которую мы наблюдаем. Возможно, вся отрицательная масса существует в виде виртуальных частиц, мгновенно аннигилирующих в процессе рождения пар, и поэтому не обнаруживается. Однако, если такая «жидкость» состоит из стабильных частиц, то она может образовывать в пространстве «острова» или «облака», которые были бы непроницаемы для гравитационных волн. В настоящее время мы неспособны создавать гравитационные волны, но уже умеем их обнаруживать. Можно представить себе эксперимент, в ходе которого гравитационные волны отслеживались бы на межзвёздных расстояниях, чтобы мы могли попробовать обнаружить участки, которые они «огибают».

Теория и модель Джейми Фарнса

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

Если тёмная энергия — это воздействие вещества с отрицательной массой на окружающую материю, обладающую положительной массой, то в космологических масштабах мы должны были бы наблюдать это воздействие не как антигравитацию, а как расширение Вселенной. Тем не менее, если допустить, что тёмная энергия — это эффект некой материи, возникшей в самом начале существования Вселенной, и с тех пор не возобновляемой, то постепенно такая «жидкость» должна была бы истончаться, поэтому и расширение Вселенной должно было бы замедляться. Напротив, известно, что наша Вселенная расширяется с ускорением.

В 2018 году Джейми Фарнс из Оксфордского университета предложил показанную здесь компьютерную модель, демонстрирующую, как вокруг галактики может формироваться гало из тёмной материи, и как тёмная энергия, наполняющая межгалактическое пространство, могла бы удерживать галактики в шарообразной или спиральной форме, именно, если бы источником этой энергии была материя с отрицательной массой. Если обратиться к иллюстрации, демонстрирующий принципы притяжения и отталкивания материи с положительной и отрицательной массой, понятно, что тяготение обычной материи с положительной массой стягивает вокруг галактики любую материю, в том числе, обладающую отрицательной массой. В таком случае галактика начинает со всех сторон испытывать антигравитацию со стороны материи с отрицательной массой, что приводит к ускорению вращения галактики с сохранением формы галактического диска и спиральных рукавов. Напротив, вдали от галактик и прочих скоплений обычной материи (например, облаков межзвёздного газа) вещество с отрицательной массой должно взаимно отталкиваться, постепенно пропитывая пространство-время тончайшим слоем и, возможно, заставляя Вселенную расширяться. В таком случае, «острова» материи с отрицательной массой (выше я упоминал о том, как их можно обнаружить при помощи гравитационных волн) образовывались бы только там, где идет постоянное восполнение запасов экзотической материи, либо метрика пространства-времени отличалась бы от привычной нам. Правда, практически ровный анизотропный фон реликтового излучения свидетельствует, что существование обширных областей такой природы практически исключено.

Метки:





Запись опубликована: 10.05.2024

5 фактов о свиньях, которые заставят вас посмотреть на этих животных иначе

[ comments ]

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

1. Свиньи достаточно умны, чтобы играть в видеоигры

Свинья играет в «видеоигру», чтобы получить награду. Видео: Pennsylvania State University

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

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

Тут не над чем смеяться: приматы тоже с палок‑копалок начали, а потом колесо и спутник изобрели.

Но самое интересное, что свиньям под силу видеоигры. Учёные Университета штата Пенсильвания обучили хрюшек играть в нечто вроде пинг‑понга для Atari — нужно завести точку на синее поле, и тогда автомат выдаст «геймеру» порцию корма. Свиньи не только быстро освоили правила, но и начали буквально требовать, чтобы им давали играть ещё и ещё.

Они явно понимали связь между их собственным поведением, джойстиком и тем, что происходило на экране, — а это весьма недюжинное достижение для свиньи. Да, им тяжелее справляться с управлением, потому что у них нет пальцев и приходится манипулировать джойстиком рылом. Но у них всё равно отлично получается.

2. Свиньи принимают грязевые ванны не просто так

Свиньи принимают грязевые ванны
Свиньи принимают грязевые ванны. Изображение: Wikimedia Commons

Когда кого‑то хотят упрекнуть в неряшливости, то называют его «грязным как свинья». Это сравнение весьма оскорбительно по отношению к хрюшкам, потому что на самом деле это довольно чистоплотные создания. Просто поддерживают гигиену по‑своему.

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

Но их почему‑то грязнулями никто не называет. Где в этом мире справедливость?

Помимо защиты от блох, купание в грязи помогает свиньям защищаться от солнечных ожогов и поддерживать нужную температуру тела. Дело в том, что у этих животных потовые железы немногочисленны и расположены только на морде. Поэтому, как и многие другие млекопитающие без шерсти вроде слонов, свиньи не используют потоотделение в качестве механизма терморегуляции, а охлаждаются за счёт валяния в лужах и купания в воде. Да‑да, они любят купаться.

3. Существуют кудрявые свиньи

Мангалица в Будапештском зоопарке, Венгрия
Мангалица в Будапештском зоопарке, Венгрия. Изображение: Wikimedia Commons

Взгляните на эту фотографию. Как вы полагаете, кто на ней запечатлён? Может быть, милая овечка?

Нет, это животное вряд ли будет бекать и мекать — только хрюкать. Потому что это венгерская порода свиньи под названием мангалица. Существует три разновидности этих животных: белые, красные и «ласточки» — с чёрной спиной и белым животом. Раньше были и абсолютно чёрные мангалицы, но они вымерли.

Мало того, на грани вымирания находились все кудрявые овцесвины. Так, в 1990‑х годах в Венгрии осталось меньше 200 особей, но сейчас их снова развели.

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

Кроме мангалиц, была ещё одна порода свиней с длинной вьющейся шерстью — линкольнширская кудрявая свинья из Англии. Но её представителей, увы, не осталось.

4. Свиньи колонизировали остров на Багамах

Свиньи плавают в море. Эксума, Багамы
Свиньи плавают в море. Эксума, Багамы. Изображение: Wikimedia Commons

На Багамах в районе Эксума — это в 143 километрах от столицы Нассау — расположен необитаемый остров Биг‑Мейджор‑Кей. Там обитает 50–60 одичавших хрюшек — а потому место это называют «Свиной пляж». Компанию им составляют несколько кошек и коз. И никто точно не знает, откуда свиньи там взялись.

Некоторые считают, что поросят на Биг‑Мейджор‑Кей давным‑давно высадили проплывавшие мимо моряки (а то и самые настоящие пираты), чтобы потом вернуться и съесть их. Ведь в прошлом холодильников на кораблях не было, а животных в дальние плаванья с собой брали как «живые консервы». Скот высаживали на необитаемые острова, чтобы он там пасся на свободном выгуле, а затем, когда надо было пополнить запасы мяса, возвращались за ним.

Но про свиней на острове забыли, и они там прижились и размножились.

Также есть теории, что свиньи пережили кораблекрушение или приплыли с ближайшего острова Стэниэл‑Кей. Ведь поросята отлично умеют плавать, в том числе и в море.

Как бы то ни было, сейчас Биг‑Мейджор‑Кей привлекает туристов, которые хотят посмотреть на «морских свиней» в их естественной среде обитания. Правда, не всегда такие посетители несут хрюшкам добро. Сердобольные путешественники не только подкармливают свиней всякой малополезной для здоровья всячиной, но и поят их алкоголем, отчего животные на острове иногда умирают. И это очень печально.

5. Свиней цвета датского флага использовали в знак протеста против прусских властей

Датские протестные поросята
Датские протестные поросята. Изображение: Wikimedia Commons

В XIX веке Дания и Пруссия не могли поделить спорную территорию под названием Шлезвиг‑Гольштейн. В 1848 году Дания отвоевала этот регион, но затем, 10 лет спустя, разразилась Вторая Шлезвигская война, и земли перешли под контроль Пруссии.

В 1860‑х годах завоеватели запретили проживавшим там датским фермерам демонстрировать флаги Дании — в те времена это были оранжевые полотнища с белым крестом, — а также ввели ряд законов против датского языка на земле Шлезвиг‑Гольштейн. Местные разозлились и решили испробовать весьма оригинальную методику молчаливого протеста.

Они стали массово разводить свиней породы красно‑пёстрая хузумская, названной в честь города Хузум. Это столица Северной Фризии, расположенная на земле Шлезвиг‑Гольштейн.

Хрюшка эта была окрашена в цвета датского флага — рыжее тело с белой полосой. Породу даже назвали «датской протестной свиньёй» (Dänisches Protestschwein). Правда, животные датчанам особенно не помогли, и Шлезвиг‑Гольштейн до сих пор находится в составе Германии. Однако сама порода получилась красивая.

Датские солдаты возвращаются в Копенгаген после битвы при Фредерисии. Картина Отто Бахе, 1894 г.
Датские солдаты возвращаются в Копенгаген после битвы при Фредерисии. Картина Отто Бахе, 1894 г. Изображение: Wikimedia Commons

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

кадр из мультсериала «Графити Фолз» / Лайфхакер

[ comments ]

Метки:





Запись опубликована: 10.05.2024

Методы оптимизации в машинном и глубоком обучении. От простого к сложному

Обновить

egaoharu_kensei 1 час назад

Время на прочтение29 мин

Количество просмотров188

Туториал

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

Ноутбук с данным материалом можно загрузить на GitHub (rus).

Содержание

Пару слов про функции потерь

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

Классический градиентный спуск

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

Градиентный спуск для выпуклого и невыпуклого случая

Градиентный спуск для выпуклого и невыпуклого случая

Алгоритм строится следующим образом:

  • 1) изначально происходит инициализация весов с нулевыми значениями;

  • 2) далее на основе установленных весов модель делает прогноз;

  • 3) на основе полученного прогноза рассчитывается градиент ошибки, после чего происходит обновление весов в сторону антиградиента функции потерь;

  • 4) шаги 2-3 повторяются до тех пор, пока градиент не станет нулевым, то есть пока алгоритм не сойдётся в минимуме (как правило, в данном случае используется критерий останова, например, пока разность градиентов на текущей и предыдущей итерациях не станет меньше заранее установленного порогового значения).

Если для вычисления градиентов функции потерь используется полный обучающий набор, то такой градиентный спуск называется пакетным. Не смотря на то, что пакетный градиентный спуск (batch gradient descent) практически всегда хорошо масштабируется в отношении количества признаков, данный алгоритм работает очень медленно на больших наборах данных и требует значительных затрат в виде дополнительной памяти для хранения всех градиентов.

Для увеличения производительности на больших датасетах применяются 2 подхода:

  • 1) Мини-пакетный градиентный спуск (mini-batch gradient descent), когда на каждом шаге вычисление градиентов происходит на небольших случайных поднаборах (мини-пакетах). Обычно размер мини-пакета берётся в виде 2^n и может достигать нескольких десятков тысяч образцов: выбор размера зависит от особенностей задачи и применяемой модели.

  • 2) Стохастический градиентный спуск (stochastic gradient descent), когда на каждом шаге из обучающего набора берётся лишь один образец. Очевидно, что такой вариант должен работать гораздо быстрее предыдущего, но с другой стороны, из-за ещё более стохастический природы данный алгоритм менее стабилен и может потребоваться больше итераций для сходимости, а также mini-batch дает прирост в производительности из-за аппаратной оптимизации матричных вычислений на GPU. Стоит также отметить, что на данный момент под стохастическим градиентный спуском очень часто подразумевается mini-batch.

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

Более быстрые и точные оптимизаторы

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

Momentum

Предположим, что со склона с кочками катится мяч, который сначала будет двигаться медленно, но по мере накопления кинетической энергии его скорость будет расти, что ему поможет преодолеть небольшие кочки и остановить своё движение в более глубокой. Именно данный принцип лежит в основе моментной оптимизации. Momentum принимает во внимание значения предыдущих градиентов, которые используются для определения направления и скорости перемещения в пространстве параметров v_t (называется вектором первого момента, поскольку масса в данном случае равна 1), а для предотвращения её быстрого увеличения используется коэффициент ослабления импульса beta, который отвечает за силу влияния предыдущего градиента на текущий, то есть выступает в качестве механизма трения мяча о поверхность: значение 0 означает высокое трение, а 1 его отсутствие. Обычно значение beta устанавливается 0.9.

Алгоритм обновления параметров моментной оптимизации

v_t leftarrow beta v_{t-1} - alpha dw_{t-1}

w_t leftarrow w_{t-1} + v_t

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

Хотя во многих статьях v_t обозначается как m_t, а s_t как v_t, на данный момент нет единого стандарта и в разных статьях можно встретить для них разные обозначения, но для унификации во всех примерах будут использоваться следующие обозначения: v_t — это первый момент или ещё по-другому экспоненциально взвешенное скользящее среднее градиентов, а s_t — второй момент или экспоненциально взвешенное скользящее среднее квадратов градиентов, однако в случае AdaGrad это просто квадрат градиентов.

Nesterov momentum

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

Алгоритм обновления параметров моментной оптимизации Нестерова

v_t leftarrow beta v_{t-1} - alpha d(w_{t-1} + beta v_{t-1} )

w_t leftarrow w_{t-1} + v_t

Схема Momentum vs Nesterov momentum

Схема Momentum vs Nesterov momentum

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

AdaGrad

Adaptive Gradient является одной из первых оптимизаций градиентного спуска с адаптивным шагом, в которой снижается градиент вдоль самых крутых направлений. Проще говоря, на каждом шаге происходит обновление параметров модели с учётом значений как предыдущих градиентов, так и их квадратов.

Алгоритм обновления параметров AdaGrad

s_t leftarrow s_{t-1} + dw_{t-1}^2

w_t leftarrow w_{t-1} - frac{alpha}{sqrt{s_t + epsilon}} dw_{t-1}

Где epsilon = 1e-8 — сглаживающий параметр для избегания деления на ноль.

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

RMSProp

RMSProp (Root Mean Square Propagation) — модификация AdaGrad, адаптированная для лучшей работы в невыпуклом случае. Основная идея заключается в изменении способа агрегирования градиента на экспоненциально взвешенное скользящее среднее. Другими словами, вместо накопления всех квадратов градиента с начала обучения, накапливаются квадраты градиента только из самых последних итераций.

Алгоритм обновления параметров RMSProp

s_t leftarrow beta s_{t-1} + (1 - beta) dw_{t-1}^2

w_t leftarrow w_{t-1} - frac{alpha}{sqrt s_t + epsilon} dw_{t-1}

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

Adam и его модификации

Adam (Adaptive Moment Estimation) объединяет в себе концепции Momentum и RMSProp, практически являясь серебряной пулей в задачах стохастической оптимизации. Как можно заметить, расчёт моментов в Adam очень схож с Momentum и RMSProp за исключением того, что к ним применяется поправка на смещение. В целом, благодаря таким улучшениям Adam сходится быстрее и лучше предшественников, а также более устойчив к подбору гиперпараметров, что делает его более стабильным решением в большинстве случаев.

Алгоритм обновления параметров Adam

v_t leftarrow beta_1 v_{t-1} + (1 - beta_1) dw_{t-1}

s_t leftarrow beta_2 s_{t-1} + (1 - beta_2) dw_{t-1}^2

w_t leftarrow w_{t-1}  - alpha frac{v_t}{sqrt s_t + epsilon}

Поправка на смещение:

v_t leftarrow frac{v_t}{1 - beta_1^t}

s_t leftarrow frac{s_t}{1 - beta_2^t}

Где beta_1 = 0.9,   beta_2 = 0.99 используются по умолчанию.

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

Однако время не стоит на месте и были разработаны модификации Adam, призванные устранить в той или иной степени недостатки, описанные выше. К наиболее популярным и интересным модификациям можно отнести следующие:

  • AdaMax использует экспоненциально взвешенную норму бесконечности для обновления вектора второго момента, то есть скорость обучения изменяется, основываясь максимальной величине градиента в истории:

s_t leftarrow max(beta_2 s_{t-1} |dw_{t-1}|)

  • Nadam (Nesterov-accelerated Adaptive Moment Estimation) использует другую поправку на смещение для вектора первого момента:

hat v_t leftarrow frac{(1 - beta_1^t) dw_{t-1}}{1 - Pi_{i=1}^{t} beta_1^i} + frac{beta_1^{t+1} v_t}{1 - Pi_{i=1}^{t+1} beta_1^i}

  • AdamW добавляет L2-регуляризацию к функции потерь и при обновлении весов:

$w_t leftarrow w_{t-1}  - frac{alpha v_t}{sqrt s_t + epsilon} + lambda w_{t-1}

  • Yogi обновляет вектор второго момента с учётом разности второго момента и квадрата градиента:

s_t leftarrow  s_{t-1} - (1 - beta_2) sign(s_{t-1} - dw_{t-1}^2) dw_{t-1}^2

  • Adan (Adaptive Nesterov Momentum) использует модифицированный New Nesterov Momentum (NME позволяет избежать дополнительных затрат на вычисление градиента в точке экстраполяции) для оценки первого и второго моментов, что позволяет значительно ускорить сходимость и найти приближённую точку первого порядка с заданной точностью ϵ. Схема работы алгоритма выглядит следующим образом:

Обучение и визуализация оптимизаторов

Для наглядности рассмотрим небольшой пример работы различных оптимизаторов на данных Boston Housing. Сначала мы создадим простую нейросеть в Pytorch и обучим её на всех тренировочных данных, на которых после же оценим снижение потерь оптимизаторов на каждой итерации. Также для любителей Keras мы обучим простую нейросеть на мини-пакетах, но уже оценим снижение потерь на тестовом наборе.

Загрузка и подготовка датасета

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
df_path = "/content/drive/MyDrive/BostonHousing.csv"
boston = pd.read_csv(df_path)
print(boston)
        crim    zn  indus  chas    nox     rm   age     dis  rad  tax  
0    0.00632  18.0   2.31     0  0.538  6.575  65.2  4.0900    1  296
1    0.02731   0.0   7.07     0  0.469  6.421  78.9  4.9671    2  242
2    0.02729   0.0   7.07     0  0.469  7.185  61.1  4.9671    2  242
3    0.03237   0.0   2.18     0  0.458  6.998  45.8  6.0622    3  222
4    0.06905   0.0   2.18     0  0.458  7.147  54.2  6.0622    3  222
..       ...   ...    ...   ...    ...    ...   ...     ...  ...  ...
501  0.06263   0.0  11.93     0  0.573  6.593  69.1  2.4786    1  273
502  0.04527   0.0  11.93     0  0.573  6.120  76.7  2.2875    1  273
503  0.06076   0.0  11.93     0  0.573  6.976  91.0  2.1675    1  273
504  0.10959   0.0  11.93     0  0.573  6.794  89.3  2.3889    1  273
505  0.04741   0.0  11.93     0  0.573  6.030  80.8  2.5050    1  273
     ptratio       b  lstat  medv
0       15.3  396.90   4.98  24.0
1       17.8  396.90   9.14  21.6
2       17.8  392.83   4.03  34.7
3       18.7  394.63   2.94  33.4
4       18.7  396.90   5.33  36.2
..       ...     ...    ...   ...
501     21.0  391.99   9.67  22.4
502     21.0  396.90   9.08  20.6
503     21.0  396.90   5.64  23.9
504     21.0  393.45   6.48  22.0
505     21.0  396.90   7.88  11.9
[506 rows x 14 columns]
print(boston.isna().sum())
crim       0
zn         0
indus      0
chas       0
nox        0
rm         5
age        0
dis        0
rad        0
tax        0
ptratio    0
b          0
lstat      0
medv       0
dtype: int64
boston.dropna(inplace=True)
X, y = boston.iloc[:, :-1].values, boston.iloc[:, -1].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
X_train_s = StandardScaler().fit_transform(X_train)
X_test_s = StandardScaler().fit_transform(X_test)

Параметры нейросети

nn_params = {'in_features': X.shape[1], 'h1': 16, 'h2': 8, 'out': 1}

Сравнение оптимизаторов Pytorch на тренировочных данных

from torch import nn, optim, FloatTensor, relu, manual_seed
class TorchNN(nn.Module):
    def __init__(self, in_features, h1, h2, out):
        super(TorchNN, self).__init__()
        self.fc1 = nn.Linear(in_features, h1)
        self.fc2 = nn.Linear(h1, h2)
        self.fc3 = nn.Linear(h2, out)
    def forward(self, x):
        x = relu(self.fc1(x))
        x = relu(self.fc2(x))
        x = self.fc3(x)
        return x
def torch_losses(data, model, optim_cls, optim_params, num_epochs=100):
    losses = []
    X_train, y_train = data
    criterion = nn.MSELoss()
    optimizer = optim_cls(model.parameters(), **optim_params)
    for epoch in range(num_epochs):
        y_pred = model.forward(X_train)
        loss = criterion(y_pred, y_train)
        losses.append(loss.item())
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    return losses
manual_seed(0)
X_train_s_tensor = FloatTensor(X_train_s)
y_train_tensor = FloatTensor(y_train).view(-1, 1)
torch_optimizers = [
    (optim.SGD, 'SGD', {'lr': 0.001}),
    (optim.SGD, 'Momentum', {'lr': 0.001, 'momentum': 0.9}),
    (optim.SGD, 'Nesterov Momentum', {'lr': 0.001, 'momentum': 0.9, 'nesterov': True}),
    (optim.Adagrad, 'Adagrad', {'lr': 0.01}),
    (optim.RMSprop, 'RMSprop', {'lr': 0.01}),
    (optim.Adam, 'Adam', {'lr': 0.01}),
    (optim.Adamax, 'Adamax', {'lr': 0.01}),
    (optim.AdamW, 'AdamW', {'lr': 0.01}),
    (optim.NAdam, 'NAdam', {'lr': 0.01})
    ]
# Visualization
plt.figure(figsize=(14, 6))
for optim_cls, optim_name, optim_params in torch_optimizers:
    nn_model = TorchNN(**nn_params)
    t_losses = torch_losses((X_train_s_tensor, y_train_tensor), nn_model, optim_cls, optim_params)
    plt.plot(range(len(t_losses)), t_losses, label=f'{optim_name}')
plt.title('Pytorch optimizers comparison on train data')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.show()

Сравнение оптимизаторов Keras на тестовых данных

from keras import optimizers
from keras.layers import Dense
from keras.models import Sequential
from keras.utils import set_random_seed
def create_keras_nn(optimizer, in_features, h1, h2, out):
    model = Sequential()
    model.add(Dense(input_shape=(in_features,), units=h1, activation='relu'))
    model.add(Dense(input_shape=(h1,), units=h2, activation='relu'))
    model.add(Dense(units=out))
    model.compile(optimizer=optimizer, loss='mse', metrics=['mse'])
    return model
def keras_losses(train_data, test_data, optimizers, nn_params, num_epochs=10):
    losses = []
    X_train, y_train = train_data
    X_test, y_test = test_data
    for name, optimizer in optimizers:
        model = create_keras_nn(optimizer, **nn_params)
        model_history = model.fit(X_train, y_train, batch_size=32, epochs=num_epochs,
                                  verbose=0, validation_data=(X_test, y_test))
        losses.append((name, model_history.history['val_loss']))
    return losses
set_random_seed(0)
keras_optimizers = [
    ('SGD', optimizers.SGD(learning_rate=0.001)),
    ('Momentum', optimizers.SGD(learning_rate=0.001, momentum=0.9)),
    ('Nesterov Momentum', optimizers.SGD(learning_rate=0.001, momentum=0.9, nesterov=True)),
    ('Adagrad', optimizers.Adagrad(learning_rate=0.01)),
    ('RMSprop', optimizers.RMSprop(learning_rate=0.01)),
    ('Adam', optimizers.Adam(learning_rate=0.01)),
    ('Adamax', optimizers.Adamax(learning_rate=0.01)),
    ('AdamW', optimizers.AdamW(learning_rate=0.01)),
    ('Nadam', optimizers.Nadam(learning_rate=0.01))
    ]
plt.figure(figsize=(14, 6))
k_losses = keras_losses((X_train_s, y_train), (X_test_s, y_test), keras_optimizers, nn_params)
for name, k_loss in k_losses:
    plt.plot(k_loss, label=name + ' test Loss')
plt.title('Keras optimizers comparison on test data')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.show()

Промежуточные выводы

Поскольку SDG, Momentum и Nesterov momentum являются менее стабильными алгоритмами и больше всего зависят от начальных значений learning rate, для них была задана меньшая скорость обучения, чем для остальных методов. На первом графике видно, что даже в таком случае эти алгоритмы немного подвержены колебаниям, хотя и быстро сошлись. Второй же график хорошо демонстрирует как обучение на мини-пакетах значительно ускоряет сходимость алгоритмов. В случае с AdaGrad возникла классическая проблема резкого снижения скорости обучения, которую в данном случае можно легко решить, установив изначально более высокое значение. А вот RMSprop хорошо сработал в обоих случаях и даже лучше Adam-подобных оптимизаторов.

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

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

Нарушение работы адаптивных методов со скользящим средним

Поскольку работа всех диагональных адаптивных методов в той или иной степени основана на использовании покоординатного learning rate, то в случае, когда последовательность  s_t перестаёт монотонно не убывать, алгоритм не может нормально сойтись к локальным минимумам. Как правило, такая ситуация означает приближение к критическим точкам и происходит при уменьшении dw_{t-1}^2 в сравнении с предыдущей накопленной историей с точностью до некоторой константы.

Данную проблему можно устранить путём наделения таких алгоритмов долговременной памятью о прошлых градиентах для исключения отрицательных регуляризаторов подобно тому, как это реализовано в AMSGrad. Проще говоря, выполняется условие s_t >= s_{t-1}, что возможно благодаря простому трюку:

hat s_0 = 0,  hat s_t = max(hat s_{t-1}, s_t)  and  hat S_t =  diag(hat s_t)

Однако стоит иметь в виду, что в таком случае требуются дополнительные расходы памяти, что может быть особенно проблематично для моделей с разреженными параметрами. Решить данную проблему можно за счёт использования непостоянных beta_1^t и beta_2^t, что было предложено в алгоритме AdamNC:

v_t leftarrow beta_1^t v_{t-1} + (1 - beta_1^t) dw_{t-1}   s_t leftarrow beta_2^t s_{t-1} + (1 - beta_2^t) dw_{t-1}^2

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

Однако в работе Tran Thi Phuong и Le Trieu Phong было показано, что проблема в доказательстве сходимости AMSGrad заключается в обработке гиперпараметров, рассматривая их как равные, в то время как это не совсем верно. Так авторами был представлен контрпример в контексте простой задачи выпуклой оптимизации, который показывает эту проблему. Алгоритм должен сходиться согласно следующей лемме:

R(T) leq sum_{i=1}^{d} sum_{t=1}^{T} frac{sqrt{hat{s}_{t,i}}}{2alpha_t(1 - beta_1^t)} ((w_{t,i} - w^*_{i})^2 - (w_{t+1,i} - w^*_{i})^2) +  + sum_{i=1}^{d} sum_{t=1}^{T} frac{alpha_t}{1 - beta_1} frac{v^2_{t,i}}{sqrt{hat{s}_{t,i}}} + sum_{i=1}^{d} sum_{t=2}^{T} frac{beta_1^t sqrt{hat{s}_{t-1,i}}}{2alpha_{t-1}(1 - beta_1)} (w_{t,i} - w^*_{i})^2

Однако проблема заключается в равенстве, которое на самом деле может быть как положительным, так и отрицательным:

(w_{t,i} - w^*_{i})^2 - (w_{t+1,i} - w^*_{i})^2

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

hat s_1 = s_1,  hat s_t = max left(frac{(1 - beta_1^t)^2}{(1 - beta_1^{t-1})^2} hat s_{t-1}, s_t right)   if   t geq 2,  and  hat S_t = diag(hat s_t)

Но стоит иметь в виду, что как и в случае с AMSGrad, AdamX также требует дополнительных расходов памяти.

Стратегии изменения скорости обучения

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

  • 1) alpha = frac{1}{1 + decay _ rate * t} alpha_0  -  плавное затухание;

  • 2) alpha = k^t alpha_0  -  экспоненциальное затухание;

  • 3) alpha = frac{k}{sqrt{t}} alpha_0, где k  - константа, а t  - число итераций;

  • 4) дискретное сокращение, когда после заданного количества итераций шаг уменьшается с определённым размером.

Не смотря на то, что на сегодняшний день в алгоритмах на основе градиентного спуска используется автоматическое снижение скорости обучения как в библиотеке sckit-learn, так и в библиотеках глубокого обучения, подбор learning rate всё ещё нужно выполнять аккуратно: алгоритм может преждевременно выйти на плато либо вовсе разойтись. Пример приведён на графике ниже.

Другим подходом в изменении скорости обучения является её резкое увеличение, чтобы «вытолкнуть» модель из возможных локальных минимумов, в которых она может застрять в процессе обучения. Такой подход называется Warm Restart и включает в себя циклическое изменение скорости обучения: начиная с высокого значения, скорость постепенно снижается по определённому правилу, а затем после достижения минимального значения она снова повышается. Это особенно полезно, когда модель сходится к неоптимальному решению из-за плохой инициализации или когда пространство параметров содержит множество локальных минимумов.

Одним из популярных методов, использующий такой подход, является CosineAnnealingWarmRestarts, в котором скорость обучения регулируется на основе «косинусного отжига» с перезапусками, возвращаясь к своему начальному значению:

η_t = η_{min} + frac{1}{2}(η_{max} - η_{min})(1 + cos(frac{T_{cur}}{T_{i}}pi))

Где:

  • eta_t — скорость обучения в момент времени ;

  • eta_{text{max}} — начальная скорость обучения;

  • eta_{text{min}} — минимальная скорость обучения;

  • T_{text{cur}} — количество эпох с момента последнего перезапуска;

  • а T_i — количество эпох между двумя перезапусками.

С полным списком «планировщиков» скорости обучения можно ознакомиться здесь и здесь.

Работа с большими мини-пакетами

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

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

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

LARS

Первым на очереди будет Layer-wise Adaptive Rate Scaling (LARS), использующий momentum в качестве базового алгоритма. Его основная идея заключается в подборе скорости обучения не для каждого нейрона или всей нейросети, а для каждого слоя отдельно. Проще говоря, обновление весов происходит с учётом локального learning rate, рассчитанного как отношение нормы весов к сумме нормы весов и градиентов. Работа алгоритма показана ниже:

Не смотря на то, что такой метод позволяет использовать батчи большого размера для обучения без потери качества, он плохо справляется со сложными моделями, где каждый слой имеет важное значение для общей производительности, например, с моделями внимания, такими как BERT. Это связано с тем, что если в одном из слоёв сети наблюдается нестабильное снижение градиентов, то к этому слою будет применяться меньшая скорость обучения, а поскольку LARS стремится синхронизировать обновления по всем слоям, то скорости обучения для более «стабильных» слоёв также будут снижены для предотвращения расхождения в обучении. Следовательно, более «стабильные» слои будут обновляться не так быстро, как могли бы, что в итоге значительно замедлит обучение всей модели и окажет негативное влияние на конечный результат.

LAMB

В ответ на это был разработан более продвинутый оптимизатор, известный как Layer-wise Adaptive Moments Based optimizer (LAMB), который можно рассматривать как применение LARS к оптимизатору Adam. Основное различие заключается в использовании двойной стратегии нормализации:

  • 1) Нормализация каждого измерения (или параметра модели) относительно квадратного корня из второго момента, используемого в Adam. Это означает, что каждый параметр модели обновляется с учётом его собственной истории изменений, что помогает более точно настраивать веса модели.

  • 2) Применение послойной нормализации. Другими словами, обновления параметров модели происходят с учётом масштаба каждого слоя в нейронной сети. Это помогает предотвратить слишком большие изменения в весах слоёв и избежать нестабильности в процессе обучения.

Алгоритм работает следующим образом:

Такой подход позволил значительно улучшить процесс обучения модели BERT даже на батчах большого размера без потери точности. Так команде Google Brain удалось сократить время обучения с 3 дней до всего лишь 76 минут, увеличив размер пакета до предела памяти модуля TPUv3. Более того, как и другие оптимизаторы, LAMB имеет ряд модификаций, способных не только ускорить обучение (как в NVLAMB благодаря предварительной нормализации градиентов), но и сделать его ещё более стабильным в плане сходимости (как в N-LAMB и NN-LAMB).

Прокcимальные методы

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

Метод проксимальной минимизации

Может быть полезен в тех случаях, когда трудно минимизировать функцию потерь f, но легко (или хотя бы проще) минимизировать её регуляризованную версию, то есть f плюс квадратичная величина. Данный алгоритм имеет множество разных интерпретаций в зависимости от целей использования. Наиболее популярными являются следующие:

  • 1) Регуляризация Тихонова позволяет находиться w_{k+1} недалеко от w_k и ускоряет сходимость, особенно при использовании метода сопряжённого градиента. Это обусловлено тем, что наличие регуляризации обеспечивает сильную выпуклость задачи:

w_{k+1} = text{argmin} left{ f(w) + frac{1}{2alpha_k} | w - w_k |^2 right} = prox_{alpha_k f}(w_k)

  • 2) Градиентный поток обеспечивает сходимость в точке минимума из любой начальной точки при t to infty:

frac {d}{dt} w(t) = - nabla f(w(t))

Решив данное дифференциальное уравнение с помощью прямой схемы Эйлера, получим:

w_{k+1} = w_k - alpha nabla f(w_k)

Однако такое решение менее стабильно, чем с использованием обратной схемы Эйлера. Тогда задача приобретает вид:

frac{w_{k+1} - w_k}{alpha} = - nabla f(w_{k+1})

Поскольку уравнение представлено в неявном виде, а его левая часть является по сути градиентом функции g(w^*) в точке w_{k+1}, тогда для выпуклого случая:

nabla (f(w^*) + g(w^*))(w_{k+1}) = 0 Rightarrow  Rightarrow w_{k+1} = text{argmin} left{ f(w^*) + frac{1}{2alpha_k} | w^* - w_k |^2 right} = prox_{alpha_k f}(w_k)

Также стоит отметить, что идея градиентного потока может быть обобщена на случаи, когда f не дифференцируется с помощью субградиентного дифференциального включения:

frac {d}{dt} w(t) in - partial f(w(t))

  • 3) Итеративное уточнение основано на идее асимптотически исчезающей регуляризации Тихонова и используется для решения линейных уравнений вида Xw = y с использованием факторизации Холецкого для X + frac{1}{alpha} I.

Рассмотрим задачу минимизации квадратичной функции:

f(w) = frac{1}{2} w^T X w - y^T w

где X in S_+^n (множество симметричных положительных полуопределённых n x n матриц). Такая задача эквивалентна решению системы линейных уравнений Xw = y. Когда X несингулярно, то единственным решением является w = X^{-1} y . Такую же проблему можно заметить в методе наименьших квадратов. Проксимальный оператор для f при w_k можно выразить аналитически:

prox_{alpha_k f}(w_k) = text{argmin} left{ frac{1}{2} w^T X w - y^T w + frac{1}{2} | w - w_k |^2   right} =  = left(X + frac{1}{alpha} I right)^{-1} left(y + frac{1}{alpha} w_k right)

Переписав данное выражение, получим:

w_{k+1} = w_k + left(X + frac{1}{alpha} I right)^{-1} (y - X w_k)

Проксимальный градиентный метод (PGM)

Применяется для решения проблемы вида min rightarrow f(w) + g(w), где  f является гладкой (дифференцируемой), а  негладкой функцией, для которой существует быстрый проксимальный оператор. Тогда, выполнив градиентный шаг по f и проксимальный по , получим итеративный процесс вида:

w_{k+1} = prox_{alpha_k g} (w_k - alpha_k nabla f(w_k))

Ещё такой процесс называется forward-backward splitting, где forward относится к шагу градиента, а backward — к проксимальному шагу.

PGM также имеет различные интерпретации:

  • 1) Majorization-minimization используется для решения проблемы вида:

min rightarrow q_{alpha}(w, w_k) = frac{1}{2} | w - (w_k  - alpha_k nabla f(w_k)) |^2  + alpha g(w)

А процесс обновления w_{k+1} выглядит следующим образом:

w_{k+1} = text{argmin}  q_{alpha}(w, w_k)

  • 2) Fixed point iteration основано на идее, что существует фиксированная точка w^*, которая является решением min rightarrow f(w) + g(w) лишь в том случае, когда она является точкой оператора forward-backward:

(I + alpha partial g)^{-1} (I - alpha nabla f)

Тогда решение приобретает вид:

w^* = (I + alpha partial g)^{-1} (I - alpha nabla f) (w^*) = prox_{alpha g} (w^* - alpha_k nabla f(w^*))

  • 3) Forward-backward интегрирование градиентного потока представляет собой метод численного интегрирования дифференциального уравнения градиентного потока, в котором используется прямой Шаг Эйлера для дифференцируемой части f и обратный шаг Эйлера для возможно недифференцируемой части . Если исходить предположения, что  является также дифференцируемой, то систему градиентного потока можно представить в виде:

frac {d}{dt} w(t) = - nabla f(w(t)) - nabla g(w(t))

Тогда получим процесс обновления, называемый forward-backward splitting:

w_{k+1} = (I + alpha nabla g)^{-1} (I - alpha nabla f) w_k

Также стоит добавить, что существует вариант ускоренного проксимального градиентного метода, который включает в себя этап экстраполяции:

z_{k+1} = w_k + p_k (w_k - w_{k-1})  w_{k+1} = prox_{alpha_k g} (z_{k+1} - alpha_k nabla f(z_{k+1}))

где p_k — параметр экстраполяции, а одна из самых простых схем его расчёта выглядит следующим образом:

p_k = frac {k}{k + 3}

ISTA (Iterative Shrinkage(Soft)-Thresholding Algorithm)

Данный метод можно рассматривать как обновление проксимального градиента, применяемое к L1-регуляризованной задаче наименьших квадратов:

|Xw - y|^2 + lambda |w| rightarrow min

Тогда прокс-оператор для l1-нормы будет выглядеть следующим образом:

prox_{lambda alpha} (w) = argmin left{frac{1}{2 alpha} |w - w^* |^2 + lambda |w^* | right} =  = argmin left{sum_{i=1}^d  left[ frac{1}{2 alpha} (w_i - w_i^*) + lambda |w_i^*| right] right} = T_{lambda alpha} (w)

где T_{lambda alpha} (w) — оператор с плавным установлением порога, который для одномерной задачи является решением со следующим правилом:

T_{lambda alpha} (w_i) = begin{cases}     w_i - lambda alpha,   w_i geq lambda alpha      0,               |w_i| leq lambda alpha      w_i + lambda alpha,   w_i leq - lambda alpha   end{cases}

Отсюда получим градиентный шаг обновления:

w_{k+1} = T_{lambda alpha_k} (w_k - alpha_k X^T (Xw_k- y))

Как можно заметить, данный метод позволяет получить разреженную модель, поскольку часть координат будет зануляться в случае |w_i| leq alpha, что особенно полезно в задачах компьютерного зрения и обработки сигналов. Однако ISTA в чистом виде имеет низкую скорости сходимости, поэтому на практике используются его различные модификации. Например, FISTA (от слова Fast), основанное на ускорении Нестерова, где используется дополнительный шаг экстраполяции:

t_{k+1} = frac{1 + sqrt{1 + 4t_k^2}}{2}  z_{k+1} = w_k + frac{t_k - 1}{t_{k+1}} (w_k - w_{k-1})  w_{k+1} = prox_{lambda alpha} (z_{k+1}) = T_{lambda alpha_k}(z_{k+1} - alpha_k nabla f(z_{k+1}))

Такой подход позволил достичь скорости сходимости O(1/k^2) вместо O(1/k) как в ISTA. К слову, на сегодняшний день FISTA также имеет ряд модификаций, делающих его работу более стабильной и быстрой в ряде случаев.

Методы второго порядка

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

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

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

  • 2) Если кривизна нулевая (нулевое значение второй производной), то градиент точно указывает на изменение функции потерь. В этом случае, градиентный спуск будет эффективно минимизировать функцию потерь, поскольку нет ни ускорения, ни замедления в изменении её значений.

  • 3) Если кривизна положительная (положительное значение второй производной), то функция потерь снижается медленнее, чем ожидалось на основе прогноза градиента. Это говорит о том, что при использовании слишком больших шагов можно не только замедлить процесс сходимости, но и увеличить значение функции потерь, отдаляясь от оптимального решения.

Метод Ньютона

Использует разложение в ряд Тейлора второго порядка для приближения функции f(w) в окрестностях точки :

f(w + t) approx f(w) + nabla f(w)t + frac{1}{2} nabla ^ 2 (w) t^2

Приравняв к нулю nabla f(w + t), получим оптимальное решение, то есть направление спуска:

0 = frac{d f(w + t)}{dt} = nabla f(w) + nabla ^ 2 f(w) Rightarrow  Rightarrow t = - frac {nabla f(w)}{nabla ^ 2 f(w)} = - H^{-1}(w) nabla f(w)

Тогда получим итеративный процесс обновления параметров следующего вида:

w_{k+1} = w_k + t_k = w_k - alpha_k H^{-1} (w_k) nabla f (w_k)

Если шаг alpha_k = 1, то это классический метод Ньютона, а при другом размере шага alpha_k in (0, 1) получим дэмпированный (damped) метод Ньютона.

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

Однако метод Ньютона применим только в случае положительно определённой матрицы H , иначе говоря, если не все собственные значения гессиана положительны вблизи седловой точки, то обновление параметров может произойти в неверном направлении. Одно из самых простых решений данной проблемы заключается в регуляризации гессиана через прибавление константы lambda:

w_{k+1} = w_k + t = w_k - alpha_k [H^{-1} (w_k) + lambda I] nabla f (w_k)

Помимо этого, у метода Ньютона есть ещё 2 серьёзных недостатка, которые делают его неприменимым к нейронным сетям с большим количеством параметров:

  • 1) Чувствительность к выбору начальной точки. Квадратичная скорость сходимости обеспечивается лишь в близи оптимума, поэтому если начальная точка расположена далеко от него, то алгоритм будет сходиться медленней и может не сойтись вообще. Отсюда следует необходимость в подборе шага alpha_k как и в случае с градиентным спуском. Частично данную проблему можно решить также с применением различных видов регуляризацией, например, такой как кубической.

  • 2) Высокая требовательность к вычислительным ресурсам. Поскольку число элементов гессиана равно квадрату числа параметров d, затраты памяти для их хранения составят O(d^2), а вычислительная сложность алгоритма будет O(d^3).

Далее будут рассмотрены альтернативы, использующие некоторые преимущества метода Ньютона, но при этом не требующие таких больших вычислительных затрат.

Метод сопряжённых градиентов

В отличие от метода наискорейшего спуска, в данном методе используется спуск в сопряжённых направлениях. Это означает, что в отличие от метода наискорейшего спуска, где направление спуска всегда совпадает с антиградиентом текущей точки и может привести к зигзагообразным траекториям, в данном случае направления спуска d выбираются таким образом, чтобы они были сопряжёнными (ортогональными) относительно гессиана функции потерь, то есть текущее направление выбирается с учётом предыдущего значения:

d_k = nabla f(w) + beta_k d_{t-1}

Направления d_k и d_{k-1} являются сопряжёнными, если выполняется условие d_k^T H d_{k-1}=0, а коэффициент beta_k определяет какую часть направления d_{k-1} следует прибавить к текущему направлению поиска.

Найти сопряжённые направления можно, просто получив собственные вектора H для beta_k, однако это вычислительно неэффективно, поэтому для расчёта beta_k обычно используются следующие методы:

  • 1) Метод Флетчера-Ривса:

beta_k = frac{nabla f(w_k)^T nabla f(w_k)}{nabla f(w_{k-1})^T nabla f(w_{k-1})}

  • 2) Метод Полака-Рибьера:

beta_k = frac{(nabla f(w_k) - nabla f(w_{k-1}))^T nabla f(w_k)}{nabla f(w_{k-1})^T nabla f(w_{k-1})}

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

BFGS (Broyden–Fletcher–Goldfarb–Shanno)

Является одним из самых известных квазиньютоновских методов и основан на аппроксимации обратного гессиана матрицей M, которая итеративно уточняется в ходе обновлений низкого ранга. Обозначив приближение гессиана симметричной положительно определённой матрицей B_k размера d  text{x}  d, получим функцию потерь аналогичную в методе Ньютона:

m(w_{k+1}) approx f(w_{k+1}) + nabla f(w_{k+1})t + frac{1}{2} nabla ^ 2 (w_{k+1}) t^2

Основываясь на информации из последнего шага, B_{k+1} должен удовлетворять условию, при котором градиент m(w_{k+1}) соответствует градиенту f на двух последних итерациях w_k и w_{k+1}:

nabla m(w_k - w_{k+1}) = nabla m(- alpha_k d_k) = nabla f(w_{k+1}) - B_{k+1} alpha_k  d_k = nabla f(w_k)

Отсюда получаем уравнение секущей, которое ещё известно как квазиньютоновское условие:

B_{k+1} alpha_k  d_k = nabla f(w_{k+1}) - nabla f(w_k)

Перепишем данное уравнение в более удобной форме, сделав несколько упрощений:

B_{k+1} s_k = y_k  s_k = (w_{k+1} - w_k) = alpha_k d_k  y_k = nabla f(w_{k+1}) - nabla f(w_k)

Согласно данному уравнению, матрица B_{k+1} может преобразовать s_k в y_k только в случае, если они будут удовлетворять условию кривизны:

s_k^T y_k > 0

Когда выполняется данное условие, уравнение секущей всегда имеет решение, а для однозначного определения вводится дополнительное условие, что среди всех симметричных матриц, удовлетворяющих уравнению секущей, B_{k+1} будет расположено наиболее близко к текущей матрице B_k. Другими словами, мы получим задачу вида:

min rightarrow B - B_k

Которую можно решить достаточно просто с использованием взвешенной нормы Фробениуса:

A _W = W^{1/2} A W^{1/2} _F

Где cdot _F определяется через C ^2_F = sum_{i=1}^n sum_{j=1}^n c^2_{ij}, а матрица весов W может быть выбрана в качестве любой при выполнении условия W y_k = s_k. Определим W как обратный усреднённый гессиан overline G_k^{-1}, где:

overline G_k = int_{0}^{1} nabla^2 f(w_k + alpha_k d_k) d lambda

С помощью теоремы Тейлора можно показать, что:

y_k = overline G_k alpha_k d_k = overline G_k s_k

При таком выборе матрицы W взвешенная норма Фробениуса является безразмерной, что является желательным свойством, поскольку позволяет избежать зависимости от единиц измерения при решении задачи минимизации. Тогда получим решение, которое называется методом DFP (Davidon-Fletcher-Powell):

B_{k+1} = (I - frac{y_k s_k^T}{y_k^T s_k}) B_K (I - frac{s_k y_k^T}{y_k^T s_k}) + frac{y_k y_k^T}{y_k^T s_k}

Поскольку в квазиньютоновских методах нас больше интересует обратный гессиан, перепишем данную формулу в более удобном виде. Для этого определим M=B_k^{-1} и воспользуемся обобщением формулы Шермана–Моррисона–Вудбери:

B^{-1} = A^{-1} - A^{-1} U (I + V^T A^{-1} U) V^T A^{-1}

В таком случае решение DFP приобретает следующий вид:

M_{k+1} = M_k - frac{M_k y_k y_k^T M_k}{y_k^T M_k y_k} + frac{s_k s_k^T}{y_k^T s_k}

В этом и заключается фундаментальная идея квазиньютоновского обновления: вместо того, чтобы пересчитывать приближённые гессианы (или обратные гессианы) с нуля на каждой итерации, мы применяем простую модификацию, которая объединяет самую последнюю наблюдаемую информацию о  функции потерь с информацией из текущего приближения гессиана.

Однако формулу обновления из алгоритма DFP можно сделать ещё более эффективной, проделав аналогичные процедуры с M_k вместо B_k. В итоге получим обновление BFGS:

M_{k+1} = (I - frac{s_k y_k^T}{y_k^T s_k}) M_k (I - frac{y_k s_k^T}{y_k^T s_k}) + frac{s_k s_k^T}{y_k^T s_k}

Мы также можем вывести версию алгоритма BFGS, которая работает с аппроксимацией гессиана B_k, а не M_k, если снова воспользуемся обобщением формулы Шермана–Моррисона–Вудбери:

B_{k+1} = B_k - frac{B_k s_k s_k^T B_k}{s_k^T B_k s_k} + frac{y_k y_k^T}{y_k^T s_k}

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

d_k = - M_k nabla f(w_k)

А параметры будут обновляться по следующему правилу:

w_{k+1} = w_k + alpha_k d_k

Подобно методу сопряжённых градиентов, в алгоритме BFGS создаётся серия линейных поисков на основе информации о кривизне функции, однако важное отличие заключается в том, что в данном случае достижение точки, максимально приближённой к истинному минимуму вдоль заданного направления, не так критично. Это делает данный алгоритм более эффективным, поскольку не требуется тратить дополнительное время на уточнение результатов каждого линейного поиска, однако для хранения матрицы M требуется O(d^2) памяти из-за чего данный алгоритм также малопригоден для моделей с большим количеством параметров.

SR1 (Symmetric Rank-1)

Представляет собой более простое обновление ранга 1, которое сохраняет симметрию матрицы и удовлетворяет уравнению секущей, но при этом исчезают гарантии, что обновлённая матрица B_k (или M_k) будет положительно определённой. Тем не менее, данный метод может быть полезен, когда стандартные предположения BFGS не выполняются или когда необходимо использовать методы определения доверительной области.

Симметричное обновление ранга 1, которое также известно как формула Бройдена, имеет общий вид:

B_{k+1} = B_k + sigma v v^T

Где sigma in {-1, 1 }, а также выбирается вместе с B_{k+1} таким образом, чтобы удовлетворять уравнению секущей. Подставляя обновление выше в данное уравнение, получим:

y_k = B_k s_k + [sigma v v^T] s_k

Поскольку член в скобках является скалярным, должно быть кратно y_k - B_k s_k для некоторого скалярного значения :

y_k - B_k s_k = sigma delta^2 [s_k^T (y_k - B_k s_k)] (y_k - B_k s_k)

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

sigma = sign [s_k^T (y_k - B_k s_k)]  delta = pm s_k^T (y_k - B_k s_k)^{-1/2}

Следовательно, формула обновления для B_k приобретает следующий вид:

B_{k+1} = B_k + frac{(y_k - B_k s_k) (y_k - B_k s_k)^T}{(y_k - B_k s_k)^T s_k}

Применив обобщение формулы Шермана–Моррисона–Вудбери, получим соответствующее обновление для обратной аппроксимации гессиана M_k:

M_{k+1} = M_k + frac{(s_k - M_k y_k) (s_k - M_k y_k)^T}{(s_k - M_k y_k)^T y_k}

Не смотря на менее стабильную работу в сравнении с DFP и BFGS, преимущество SR1 заключается в создании неопределённых аппроксимаций гессиана, что позволяет получить больше информации о локальной кривизне функции потерь и лучше исследовать пространство для поиска направлений, которые могут привести к лучшему решению.

L-BFGS (Limited-memory BFGS)

Данная модификация использует только последние m (обычно от 3 до 20) пар векторов {s_i, y_i } и начальное приближение M_0 для аппроксимации M_k, что позволяет иметь линейные затраты O(md) не только на память, но и на итерацию. Чтобы лучше разобраться как это происходит, сначала перепишем формулы обновления BFGS в упрощённом виде:

w_{k+1} = w_k + alpha_k M_k nabla f (w_k)  M_{k+1} = V_k^T M_k V_k + rho_k s_k s_k^T  V_k = I - rho_k y_k s_k^T,  rho_k = frac{1}{y_k^T s_k}

Тогда приближение M_k можно представить в следующем виде:

begin{align} M_k &= (V_{k-1}^{T} ... V_{k-m}^{T}) M_0 (V_{k-m} ... V_{k-1}) +  &+ rho_{k-m} (V_{k-1}^T ... V_{k-m+1}^{T}) s_{k-m} s_{k-m}^T (V_{k-m+1} ... V_{k-1}) +  &+  ...  &+ rho_{k-1} s_{k-1} s_{k-1}^T end{align}

Из этого выражения можно вывести рекурсивный алгоритм для эффективного вычисления произведения M_k nabla f(w_k), который называется L-BFGS two-loop recursion:

begin{align*} & q leftarrow nabla f(w_k)  & textbf{for } i  =  k - 1,  k - 2, ...,  k - m  & hspace{1.3cm} alpha_i leftarrow rho_i s_i^T q  & hspace{1.3cm} q leftarrow q - alpha_i y_i   & r leftarrow M_0 q  & textbf{for } i  =  k - m,  k - m + 1, ...,  k - 1  & hspace{1.3cm} beta leftarrow rho_i y_i^T r  & hspace{1.3cm} r leftarrow r + s_i (alpha_i - beta)   & M_k nabla f(w_k) = r end{align*}

Преимущество данной рекурсии заключается в том, что умножение на исходную матрицу M_0 изолировано от остальных вычислений, что позволяет свободно выбирать эту матрицу и изменять её между итерациями. Методом выбора M_0, показавшим себя хорошо на практике, является установка M_0 = gamma_k I, где:

gamma_k = frac{s_{k-1}^T y_{k-1}}{y_{k-1}^T y_{k-1}}

В данном случае gamma_k позволяет произвести оценку размера истинного гессиана по последнему направлению поиска. Это гарантирует хорошую масштабируемость направления поиска d_k, в результате чего на большинстве итераций alpha_k = 1. Теперь можно сделать формальное определение алгоритма L-BFGS следующим образом:

begin{align*} & text{Choose starting point } w_0  & m > 0,  k leftarrow 0  & textbf{repeat until convergence}  & hspace{1.3cm} M_0 = gamma_k I  & hspace{1.3cm} d_k = - M_k nabla f(w_k) hspace{0.4cm} text{from algorithm above}   & hspace{1.3cm} w_{k+1} = w_k + alpha_k d_k, hspace{0.3cm} text{where}  alpha_k  text{satisfies the Wolfe's conditions}  & hspace{1.3cm} r leftarrow r + s_i (alpha_i - beta)  & hspace{1.3cm} textbf{if } k > m:  & hspace{2.6cm} text{Discard the vector pair } {s_{k-m}, y_{k-m} }  text{from storage}  & hspace{1.3cm} s_k leftarrow w_{k+1} - w_k  & hspace{1.3cm} y_k = nabla f(w_{k+1}) - nabla f(w_k)  & hspace{1.3cm} k leftarrow k + 1 end{align*}

Shampoo

Вышеописанные методы всё ещё уступают в скорости и потреблении памяти обычным градиентным методам, особенно при обучении больших глубоких нейросетей. Отчасти это связано с тем, что они требуют точного, а не стохастического вычисления градиентов. В идеале нам хотелось бы иметь такой алгоритм, который совмещает в себе точность алгоритмов второго порядка и скорость алгоритмов первого порядка. В попытке приблизиться к этой цели появился алгоритм Shampoo, который применяется для стохастической оптимизации не только в матричных, но и в тензорных пространствах. Рассмотрим его основную идею.

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

На каждой итерации из матриц L_t размера m x m и R_t размера n x n , содержащих информацию о втором моменте из накопленных градиентов, формируются две предобусловленные матрицы, которые потом умножаются на градиентную матрицу слева направо соответственно. Каждая из предобусловленных матриц работает только с одним измерением градиента, сокращаясь по остальным, что позволяет неплохо ускорить процесс обучения. Объём пространства, который Shampoo использует в данном случае, составляет O(m^2 + n^2) вместо O(m^2 n^2) в сравнении с полноматричными методами. Более того, поскольку предобуславливание включает в себя обращение матрицы (и чаще всего спектральное разложение), объём вычислений для построения левого и правого предобуславливателей также сокращается с O(m^3 n^3) до O(m^3 + n^3).

Однако shampoo всё ещё требует больших вычислительных затрат, что особенно выделяется при работе с полносвязными и эмбэддинг слоями. Основная сложность возникает при вычислении p-х корней матриц и R_t^{-1/4}, которые были реализованы с использованием спектрального разложения (SVD), что может занимать много времени. Поэтому для ускоренной работы Shampoo было разработано несколько улучшений:

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

  • 2) Использование эффективных итерационных методов для вычисления p-х корней вместо SVD, например, применение модификаций на основе метода Шура-Ньютона.

  • 3) Использование одного из предобуславливателей L_t^{-1/2p} или R_t^{-1/2q}, где p, q > 0.

  • 4) Применение параллельного обучения на GPU.

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

Проследив историю развития методов второго порядка, становится очевидно, что с появлением таких алгоритмов как Shampoo, их применение становится всё более привлекательным с практической точки зрения. На мой скромный взгляд, в будущем их популярность будет расти и они будут играть значимую роль не только в глубоком обучении, но и в других областях инженерии и науки.

Дополнительные источники

Статьи:

  • «Adam: A Method for Stochastic Optimization», Diederik P. Kingma, Jimmy Ba;

  • «Decoupled Weight Decay Regularization», Ilya Loshchilov, Frank Hutter;

  • «Incorporating Nesterov Momentum into Adam», Timothy Dozat;

  • «Adaptive Methods for Nonconvex Optimization», Manzil Zaheer, Sashank J. Reddi, Devendra Sachan, Satyen Kale, Sanjiv Kumar;

  • «Adan: Adaptive Nesterov Momentum Algorithm for Faster Optimizing Deep Models», Xingyu Xie, Pan Zhou, Huan Li, Zhouchen Lin, Shuicheng Yan;

  • «On the Convergence of Adam and Beyond», Sashank J. Reddi, Satyen Kale, Sanjiv Kumar;

  • «On the Convergence Proof of AMSGrad and a New Version», Tran Thi Phuong, Le Trieu Phong;

  • «SGDR: Stochastic Gradient Descent with Warm Restarts», Ilya Loshchilov, Frank Hutter;

  • «Optimization for deep learning: theory and algorithms», Ruoyu Sun;

  • «Large Batch Training of Convolutional Networks», Yang You, Igor Gitman, Boris Ginsburg;

  • «Large Batch Optimization for Deep Learning: Training BERT in 76 minutes», Yang You, Jing Li, Sashank Reddi, Jonathan Hseu, Sanjiv Kumar, Srinadh Bhojanapalli, Xiaodan Song, James Demmel, Kurt Keutzer, Cho-Jui Hsieh;

  • «Proximal Algorithms», Neal Parikh, Stephen Boyd;

  • «A Fast Iterative Shrinkage-Thresholding Algorithm», for Linear Inverse Problems, Amir Beck, and Marc Teboulle;

  • «Improving Fast Iterative Shrinkage-Thresholding Algorithm: Faster, Smarter and Greedier», Jingwei Liang, Tao Luo, Carola-Bibiane Schönlieb;

  • «Resurrecting the sigmoid in deep learning through dynamical isometry: theory and practice», Jeffrey Pennington, Samuel S. Schoenholz, Surya Ganguli;

  • «Numerical Optimization», Jorge Nocedal, Stephen J. Wright;

  • «A regularized limited-memory BFGS method for unconstrained minimization problems», Shinji SUGIMOTO and Nobuo YAMASHITA;

  • «Shampoo: Preconditioned Stochastic Tensor Optimization», Vineet Gupta, Tomer Koren, Yoram Singer;

  • «Scalable Second Order Optimization for Deep Learning», Rohan Anil, Vineet Gupta, Tomer Koren, Kevin Regan, Yoram Singer;

  • «A Schur-Newton method for the matrix p’th root and its inverse», C.-H. Guo and N. J. Higham.

Видео:

Обзор и реализация популярных ML-алгоритмов 🡆

One day offer от ВСК

Дата
Время09:00 – 18:00
Место

Онлайн

Конференция «Я.Железо»

Дата
Время14:00 – 23:59
Место

МоскваОнлайн

Антиконференция X5 Future Night

Дата
Время11:00 – 23:00
Место

Онлайн

Конференция «IT IS CONF 2024»

Дата
Время09:00 – 19:00
Место

Екатеринбург

Summer Merge

Дата
Время
Место

Ульяновская область

Метки:





Запись опубликована: 10.05.2024

Сериал «Сёгун» всё-таки получит второй сезон

[ comments ]

Хироюки Санада уже подписал новый контракт.
Сёгун 2 сезон

Сериал FX «Сёгун» изначально планировали выпустить одним сезоном, ведь он полностью охватывает события книги, на которой и основан. Однако невероятный успех проекта и высокие рейтинги, судя по всему, заставили создателей передумать. Об этом пишет Deadline.

По данным источника, Хироюки Санада, звезда и продюсер сериала, уже подписал контракт на возвращение к роли Ёси Торанаги. О сюжете продолжения подробностей нет, но можно смело предположить, что сценаристы проекта попробуют расширить историю Джеймса Клавелла, автора оригинального романа «Сёгун».

Сделка о запуске второго сезона находится в завершающей стадии. От этого решения будет зависеть, в какой категории «Сёгун» будет бороться за «Эмми» в следующем году.

«Сёгун» уже на старте приковал к себе внимание зрителей различных стримингов. За первые шесть дней у него было 9 миллионов просмотров по всему миру на Hulu, Disney+ и Star+. Это сделало его самым успешным проектом FX, но он же был и самым дорогим.

[ comments ]

Метки:





Запись опубликована: 10.05.2024

Что такое внутрибольничная инфекция и чем она опасна

[ comments ]

Что такое внутрибольничная инфекция и чем она опасна

Под угрозой каждый, кто ложится в стационар.
Фото автора Ия Зорина

Ия Зорина

Медицинский автор Лайфхакера, атлет

Что такое внутрибольничная инфекция и чем она опасна

Внутрибольничные, или нозокомиальные, инфекции — это те, которыми можно заразиться во время получения медицинской помощи. Как правило, это происходит в стационарах, хотя может случиться и в диализных центрах, и в учреждениях длительного ухода, например геронтологических центрах.

Патогенами могут быть бактерии, вирусы или грибы. Многие из них ещё и устойчивы к антибиотикам. В одном американском исследовании учёные подсчитали, что среди всех внутрибольничных инфекций около 16% вызваны такими микроорганизмами.

Среди особо опасных выделяют устойчивые к антибиотикам ацинетобактеры (Acinetobacter) и энтеробактерии (Enterobacteriaceae), грибы Candida auris и вызывающие диарею клостридии (C. difficile). 

Также серьёзные осложнения могут вызвать энтеробактерии, вырабатывающие β-лактамазу, которая делает их более устойчивыми к антибиотикам, метициллин-резистентный золотистый стафилококк (S. aureus), устойчивый к ванкомицину энтерококк, устойчивая к карбапенемам синегнойная палочка (P. aeruginosa)

Как часто встречаются внутрибольничные инфекции

Нозокомиальные инфекции встречаются довольно часто, причём по всему миру.

Так, в 2015 году в США внутрибольничные инфекции атаковали 3,2% всех госпитализированных пациентов.

Не лучше дела в Европе. В одном исследовании 2016 года учёные подсчитали, что в больницах неотложной помощи госпитальные инфекции подхватили 6,5% пациентов, а в учреждениях длительного ухода — 3,9% больных.

По данным российского исследования 2013 года, распространённость НИ в скоропомощных стационарах 18 городов составила 7,6%.

Опираясь на эти данные, учёные посчитали, что среднее количество внутрибольничных инфекций по всей стране должно составлять около 2,3 млн случаев в год.

Как можно заразиться внутрибольничной инфекцией

Инфекции могут попасть в организм разными способами. Ниже мы перечислим распространённые пути заражения и возможные осложнения.

Через введение венозного катетера

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

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

Воздушно-капельным путём или через ИВЛ

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

Также инфекция может попасть в дыхательные пути из-за интубации трахеи при искусственной вентиляции лёгких. Это состояние называется вентилятор-ассоциированной пневмонией и развивается у 5–15% пациентов, прошедших через процедуру.

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

Через введение мочевого катетера

Инфицирование происходит у 15–25% пациентов при постановке урологического катетера.

Заражение может перейти на верхнюю часть мочевыделительной системы — почки и мочеточники, а также закончиться сепсисом.

Через воду и еду

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

C. difficile производит токсины, которые воздействуют на клетки эпителия кишечника и вызывают повреждение тканей, диарею и колит.

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

Во время хирургических операций

У 2–5% пациентов в течение 30 дней после операции или 90 дней после установки имплантов проявляются инфекции. Они могут поражать только кожу и подкожно-жировую клетчатку или распространяться на мышцы, фасции и внутренние органы.

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

Чем опасна внутрибольничная инфекция

Осложнения, возникшие от заражения нозокомиальными инфекциями, сильно увеличивают риск смерти пациентов. Это особенно опасно для тех, кто и так находится в критическом состоянии.

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

Норвежские исследователи оценили состояние более 19 тысяч пациентов за 7 лет и выяснили, что риск умереть при заражении НИ увеличивается в 1,5 раза.

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

Кто наиболее уязвим к внутрибольничным инфекциям

Подхватить внутрибольничные инфекции может каждый, но есть факторы, которые увеличивают риск:

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

Как защититься от внутрибольничной инфекции

Полностью защититься от такой инфекции не получится, даже если в медучреждении будут соблюдать абсолютно все предписанные нормы. В то же время доказанные стратегии по борьбе с НИ могут предотвратить 65–70% случаев инфекций кровотока и мочевыводящих путей и 55% случаев пневмонии и хирургических инфекций.

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

А вот пациент мало что может сделать, чтобы предотвратить заражение. Но всё же есть несколько мер, которые вы в состоянии принять:

  1. Сообщите доктору, если вас перевели из другой больницы или у вас недавно была инфекция.
  2. Спросите врача, какие меры они принимают, чтобы защитить пациентов от внутрибольничной инфекции.
  3. Если у вас установлен катетер, каждый день спрашивайте, когда его можно будет убрать.
  4. Если ждёте операцию, спросите у врача, как подготовиться к ней, чтобы снизить риск инфекции.
  5. Регулярно мойте руки и следите, чтобы сотрудники больницы тоже выполняли это предписание, прежде чем трогать вас. Напомните об этом и своим посетителям, если вас будут навещать в больнице.
  6. Можете уточнить у врача, действительно ли вам необходимо принимать антибиотики и как долго.
  7. Следите за своим состоянием. Если у вас появились признаки инфекции или осложнений, таких как лихорадка, спутанность сознания, затруднённое дыхание, обильный липкий пот, сильные боли, тахикардия, немедленно расскажите врачу. Это может быть признаком сепсиса.
  8.  Если принимаете антибиотики и за последние сутки у вас было три эпизода диареи, сообщите об этом врачу. Это может быть признаком заражения C. difficile. 

Если вы сомневаетесь, что врач назначил вам адекватное лечение, проконсультируйтесь с другим специалистом, чтобы получить альтернативное мнение.

Midjourney / Лайфхакер

[ comments ]

Метки:





Запись опубликована: 10.05.2024

Исследование: подсаливание еды за столом увеличивает риск развития рака желудка

[ comments ]

Учёные советуют ограничиваться предусмотренной рецептом солью в пище.
рак желудка

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

Некоторые исследователи склоняются к версии о том, что большое количество соли разрушает слизистую оболочку желудка. Это якобы делает её более восприимчивой к колонизации бактериями Helicobacter pylori, которые хорошо известны как фактор риска развития рака желудка.

Учёные из Венского медицинского университета провели исследование, взяв за основу биологический банк Великобритании. Это крупная база данных, в которой собраны биологические и медицинские показатели 471 тысячи добровольцев, согласившихся поделиться информацией для использования в различных исследованиях.

Средний возраст участников составил 56 лет. Они должны были ответить на вопрос о том, добавляют ли соль во время приёма пищи. То есть помимо той, которая добавляется в блюдо во время приготовления. Нужно было ответить в диапазоне от «никогда» до «всегда». Также исследователи собрали данные о наличии у участников рака желудка, инфекции Helicobacter pylori и сопутствующих заболеваниях.

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

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

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

Обложка: PxHere
Если нашли ошибку, выделите текст и нажмите Ctrl + Enter

[ comments ]

Метки:





Запись опубликована: 10.05.2024

[Перевод] Нейросеть решающая задачи жизни. AlphaFold 3 и комплексное переосознание мира фармы

Обновить

MisterClever 1 час назад

Уровень сложностиПростой
Время на прочтение6 мин

Количество просмотров275

Обзор
Перевод

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

Еще 5 лет назад разговоры вокруг анализа генома, CRISPR технологий и нейросетей были чем-то вроде околонаучной фантастики. Чего стоит фильм со Скалой «Рэмпейдж», где завязка сюжета в тестировании потенциала CRISPR. Однако, уже сегодня человеку открыт широкий спектр инструментов для улучшения некоторых своих качеств.

Нейросеть решающая задачи существования жизни

Статья написана по материалам исследования. Инновационная нейросеть от Google DeepMind генерирует не только структуру белков, лигандов, ДНК, РНК и «молекул всех форм жизни», но и предсказывает принципы их связи. Это обещает радикальное, революционное ускорение во многих областях науки.

Особенности работы с белками в науке

Схематическая демонстрация сложности в работе с аминокислотами и белками

Схематическая демонстрация сложности в работе с аминокислотами и белками

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

При этом, самих белков существует невероятно много. Если пытаться наугад синтезировать их в лаборатории, то процесс займет миллиарды лет. Но можно моделировать процессы, если использовать вычислительные системы. Хотя потребуется невероятно огромное количество мощностей для перебора. Тем более, что вычислительная мощность становится сегодня едва ли не мерилом чего-то божественного, если вдаваться в фундамент датаизма.

Сейчас для этого используются суперкомпьютеры, или подпроекты BOINC. Я сам использовал до последнего старый ноут для расчета заданий в Rosetta@home. Однако, даже если все люди мира запустят проект на своих устройствах, эта работа займет достаточно много времени.

Чем нейросеть решающая задачи отличается от перебора вариантов?

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

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

Если говорить цифрами, то на сегодня известно про существование более 200 миллионов белков. И только 170 000 белков разобрано до понимания базовых принципов. Зная аминокислотный состав и способы формирования структур, имеет смысл использовать продукт прогресса, по крайней мере за это ратуют идеи датаизма. Здесь на свет и выходит нейросеть решающая задачи существования жизни, чтобы ускорить этот процесс. Ведь до появления AlphaFold программы не могли предсказывать структуру белка так же точно, как экспериментальные методы, основанные на использовании человека.

Небольшой экскурс в историю. Как развивалась нейросеть решающая задачи фундаментальных жизненных процессов?

AlphaFold 2, выпущенный в 2021 году, стал прорывом, изменившим методологию. Нейросеть предсказала трехмерные структуры почти каждого белка в человеческом организме и помогла в реализации научных исследований. Менее чем за три года нейросеть использовалась исследователями во всем мире для ускорения открытий в области лечения рака, вакцин против малярии , создания ферментов, разъедающих пластик, и бесчисленного множества других проектов. На сегодня Alphafold 2 насчитывает более 14 000 упоминаний в научных статьях.

Итак, чем лучше AlphaFold 3? Новая версия выходит за рамки простого предсказания структуры и характера взаимодействия белков и включает в себя все базовые элементы живых организмов: от множества белков до ДНК, РНК и низкомолекулярных лигандов.

Большинство лекарств это лиганды, которые связываются с белками, меняя принципы их работы.

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

Природа данных и архитектура

Чтобы достичь таких возможностей, AlphaFold 3 был обучен на глобальных данных о молекулярной структуре, хранящихся в банке данных белков. Представители компании Deepmind утверждают, что нейросеть может обрабатывать более 99% всех известных биомолекулярных комплексов из упомянутой базы данных. Кроме того, был улучшен модуль Evoformer — архитектура, которая лежала в основе AlphaFold 2.

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

  •  AlphaFold 2 берет введенную аминокислотную последовательность. 

  • Ищет в базах данных аналогичные последовательности, уже идентифицированные в других живых организмах.

  • Извлекает всю необходимую информацию с помощью преобразователя Evoformer. Воплотившего в себе философию датаизма.

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

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

Как объясняет DeepMind в анонсе AlphaFold 3

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

В недавнем интервью Тому Маккензи из Bloomberg генеральный директор и соучредитель Google DeepMind, а также генеральный директор и основатель Isomorphic Labs, Демис Хассабис обсудил последствия использования AlphaFold 3 в разработке лекарств.

Святой Грааль открытия лекарств — это не просто знание структуры белка, что и делал AlphaFold 2, но и фактическая разработка лекарственных соединений, называемых лигандами, которые связываются с поверхностью белка. Важно знать, где лиганд связывается и насколько сильна новая связь, чтобы разработать правильный тип лекарственного соединения. Таким образом, AlphaFold 3 — это большой шаг в этом направлении предсказания связывания белка с лигандом и того, как это взаимодействие будет работать.

Потенциал AlphaFold 3 

В январе 2024 года Isomorphic Labs объявила о стратегическом партнерстве с фармацевтическими гигантами Eli Lilly и Novartis общей стоимостью около 3 миллиардов долларов США. Но что удивительно, так это сроки производства лекарств, которые, как ожидается, станут результатом этого партнерства.

Итак, мы уже работаем над реальными программами. И я ожидаю, что, возможно, в ближайшие пару лет в клиниках появятся первые лекарства, разработанные с помощью нейросетей. Если вы спросите меня, что самое важное, что может создать нейросеть для человека, так по мне – это лекарство для избавления от сотен ужасных болезней. Я не могу представить лучшего варианта использования нейросетей. Так что отчасти это и есть Мотивация Isomorphic и AlphaFold, а также всей нашей научной работы. Смысл того, что мы делаем. 

Ссылка на интервью

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

Использование теста PoseBusters показало, что AlphaFold 3 на 50% точнее лучших существующих методов — без необходимости ввода какой-либо структурной информации. Справка: PoseBusters проверяет химическую и физическую достоверность молекулярных и белково-лигандных «поз», созданных с помощью модели глубокого обучения.

Нейросеть решающая задачи на уровне форм жизни. Можно ли её использовать?

Также, вы сами можете затестить нейросеть. AlphaFold 3 доступен через AlphaFold Server , который включает в себя базу данных из 200 миллионов белковых структур. Этот феноменальный ресурс доступен бесплатно ученым, проводящим некоммерческие исследования, а также просто любопытным пользователям Интернета по всему миру.

Прогнозирование поведения группы белковых структур без такого инструмента может занять лет десять и обойтись в сотни тысяч долларов. AlphaFold 3 обещает радикально ускорить прогресс в  областях биологии и фармацевтики.

Это ступень в дивный новый мир невероятно мощной медицины, или портал в преисподнюю с виртуозно отточенным оружием, способным ориентироваться на генетические маркеры? Сказать сложно. Мы стоим на грани технологической сингулярности и её потенциал велик, а плоды манят разум. Подробнее о них рассказывается в телеграм канале. Подписывайтесь, чтобы не пропустить новые статьи!

One day offer от ВСК

Дата
Время09:00 – 18:00
Место

Онлайн

Конференция «Я.Железо»

Дата
Время14:00 – 23:59
Место

МоскваОнлайн

Антиконференция X5 Future Night

Дата
Время11:00 – 23:00
Место

Онлайн

Конференция «IT IS CONF 2024»

Дата
Время09:00 – 19:00
Место

Екатеринбург

Summer Merge

Дата
Время
Место

Ульяновская область

Метки: