Как работают двоичные нейронные сети, и почему они будут популярными в 2020-м
Нейросети – штука классная, однако их потенциал до сих пор ограничивают стоимость и энергия; с этим, возможно, помогут справиться двоичные нейросети
Концепция нейросетей впервые появилась более 40 лет назад, когда учёные экспериментировали с математическим моделированием функций мозга. Они придумали, как сделать механическую реализацию нейросети, которую можно обучить распознаванию закономерностей и классификации данных – к примеру, распознавать, есть ли на видео кошка или собака.
За последнее десятилетие сложность и способности нейросетей значительно выросли. Совместно с беспрецедентным ростом мощностей недорогих и доступных суперкомпьютеров и графических процессоров (GPU) они вышли на передний план в качестве метода по умолчанию для решения задач, распознавания закономерностей и обнаружения аномалий. Сегодня организации используют их для составления прогнозов, исследования предпочтений пользователей, подтверждения данных и управления риском.
Но, несмотря на такое их активное использование, у них есть свои недостатки, ограничивающие их потенциал. Святой Грааль – это нейросеть, способная быстро анализировать информацию, будучи недорогой и не жадной до энергии. Создать удовлетворяющую этим критериям сеть – сложная задача, но её нужно решить, чтобы мы смогли воспользоваться преимуществами нейросетей ближе к краю IT и сетей связи, а также на оконечных устройствах.
Одна из альтернатив, которые изучают многие организации – двоичные сети. Это достаточно новая технология, но она, вероятно, станет достаточно влиятельной в 2020-м. Чтобы понять, почему, нам нужно уяснить, как работают оба типа сетей.
Как работают нейросети
Нейросети состоят из нескольких слоёв взвешенных сумм. Каждая взвешенная сумма даёт число, которое либо говорит о том, что в этих данных, вероятно, есть некий признак, или его там, вероятно, нет. Эти слои комбинируют, к примеру, необработанные изображения в наборы признаков, и рекомбинируют их, чтобы в итоге прийти к ответу.
Проще говоря, допустим, вы хотите, чтобы нейросеть могла распознавать лица на фотографиях. Система делит изображение на небольшие сегменты, а потом слои сети сканируют каждый сегмент изображения, ища признак, который их научили определять. Первый слой, допустим, может искать базовые признаки: чёрные круги, белые круги, белые прямоугольники, цвет кожи. Эти признаки просто заметить.
Второй слой может искать глаза (чёрный круг внутри белого), рты (набор белых прямоугольников, расположенных рядом, и окружённых кожей), следующей слой может искать два глаза надо ртом и с кожей вокруг. Каждый признак даёт каждому сегменту изображения оценку вероятности присутствия нужного признака в этой части фотографии. Затем эти вероятности комбинируются, и если достаточное количество слоёв считает, что разыскиваемый признак имеется на фото, то сеть делает заключение, что лицо там есть.
Рис. 1
На рис. 1 (а это фото Барака Обамы) видно, как эти слои анализа и вероятностей суммируются, позволяя сети, работающей с приближёнными значениями, выдавать относительно точный ответ.
Отметим, что такие признаки, как чёрные круги, глаза или рот не программируются человеком, а обнаруживаются сетью во время обучения. Возможно, что для поиска лиц лучше подходит другая закономерность (допустим, нос, уши или линия волос), и прелесть нейросетей в том, что их можно использовать для поиска подобных закономерностей.
Недостатки традиционных нейросетей
Проблема в том, что в поисках наивысшей возможной точности возникает необходимость иметь дело с очень подробно разграниченными уровнями вероятности, а для этих математических расчётов требуются серьёзные ресурсы. Из-за использования чисел с плавающей запятой для анализа сегментов, нейросетям требуется относительно много вычислительных мощностей, памяти и времени на работу.
Хотя в облаках есть достаточно вычислительных мощностей и памяти, многие краевые приложения не могут полагаться на облако. К примеру, робомобилям требуется принимать решения мгновенно на основе их окружения, и в этом они не могут положиться на ограниченную по пропускной способности связь.
Нейросети, работающие с числами с плавающей запятой, на конечных устройствах использовать не получается. Многие компании из-за этого используют целочисленную арифметику, что экономит большое количество памяти и вычислительных мощностей, однако есть способ лучше – именно здесь и проявляют себя двоичные нейросети.
Как работают двоичные сети
Если обычная нейросеть – это картина Пикассо, то двоичная нейросеть – это грубый карандашный набросок.
Рис. 2
Такой подход жертвует определённой долей точности, но мы можем возместить потери, немного увеличив сеть. Двоичные сети по своей сути гораздо проще.
По сравнению со своими двойниками с плавающей запятой, им требуется в 32 раза меньше места для хранения числа (1 бит вместо 32), и в сотни раз меньше энергии, из-за чего они куда как более применимы для «краевых приложений» типа робомобилей, когда сами устройства могут обработать информацию, не привлекая облачные вычисления.
Обычно в двоичной сети всё же встречаются слои с небинарными значениями, особенно на входе, и иногда на выходе. На входе изображение будет, скорее всего, полноцветным, и его нужно будет численно интерпретировать перед тем, как начнутся двоичные слои. И на выходном слое тоже всегда будет небинарный выход.
Будущее двоичных сетей
Такая простота открывает обширное поле для коммерческого применения в условиях, когда эффективность решает всё. На встроенном чипе с большей вероятностью получится хранить коэффициенты двоичной сети, чем сети с коэффициентами с плавающей запятой. Производителям процессоров нужно будет взять на вооружение эту технологию и обеспечить поддержку двоичных сетей.
2020-й с большой вероятностью станет годом двоичных сетей. Компании активно работают над реализацией этой технологии, а ПО, требуемое для обучения двоичных сетей, быстро развивается. Мы, скорее всего, очень скоро увидим первое реальное применение этой технологии, и на краевых устройствах появятся недорогие чипы с низким энергопотреблением, способные классифицировать изображения или другие данные.
Таким образом, следующее поколение технологий будет основано на простоте.
Пишет стихи, наводит порядок, становится человечным: что искусственный интеллект научился делать в 2020 году
ИИ становится более «человечным»
Когда алгоритм AlphaZero был опубликован, профессор Корнеллского университета, известный специалист по ИИ Джон Клейнберг с коллегами на основе этого алгоритма разработал кастомизированную версию AlphaZero — нейросеть Maia. Она тоже играет в шахматы, но преследует другие цели.
Maia играет «как человек», предсказывая наиболее «человечные» ходы
Сеть дообучали на серверах, где играют любители, и она училась не столько шахматам (это и AlphaZero прекрасно умеет), а шахматным ошибкам. Maia играет, «как человек», предсказывая наиболее «человечные» ходы. Она может делать человеческие ошибки и использовать ошибки человека. В шахматах она анализирует и имитирует человеческое, а не машинное поведение. Это не менее сложная задача.
Одно из приложений, которое планируют развивать создатели Maia — это анализ снимков МРТ и КТ, которые врачи используют при диагностике. Если вы смотрели медицинские сериалы, например «Доктор Хауз», то, вероятно, обращали внимание, как врач долго смотрит на снимок, а потом говорит что-то вроде: «Вот здесь белое пятнышко, его там быть не должно. Это опухоль». Врач в этом случае ищет именно «характерные ошибки». Его мозг, обученный на множестве снимков больных и здоровых органов, сканирует различные вариации этих снимков и сравнивает с изображением, которое видит: замечает различие и ставит диагноз. Вот этим и должна заняться Maia.
ИИ пишет стихи и аналитические тексты
Одним из самых серьезных прорывов 2020 года стал проект компании OpenAI GPT-3 (Generative Pre-trained Transformer 3) — генеративная нейросеть, способная создать связный оригинальный текст на английском языке. Причем не короткую фразу, а развернутое высказывание.
Самым знаменитым выступлением GPT-3 стала колонка, которую нейросеть написала для газеты The Guardian. Известный робототехник Родни Брукс эту колонку жестко раскритиковал: «GPT-3. уже сравнивали с доской для спиритических сеансов. Люди видят в нем то, что хотят, но на самом деле там ничего нет». Но невольную похвалу GPT-3 Брукс все-таки себе позволил: «Некоторые из текстов GPT — отличная поэзия, но она часто не связана с реальностью».
Машинный текст как целое не отвечал главному требованию: филолог не увидел смысла во всем высказывании
В 2018 году два русских филолога Борис Орехов и Павел Успенский поставили эксперимент, связанный с генерацией текста нейросетью. Мощность инструмента, который они использовали, было бы просто несерьезно сравнивать с GPT-3, но результат получился любопытный. Эксперимент заключался в следующем. Нейросеть обучили на текстах поэзии русского авангарда 1910-х годов. И после этого один филолог предложил другому отличить, какой из двух текстов «написала» машина, а какой — человек (этот текст русского поэта начала XX века филологу, который проходил этот своеобразный тест Тьюринга, не был известен, специально так и выбирали).
Как определил филолог, где именно машинный текст? По отдельным строчкам сделать это ему не удалось. Каждая строка была в некотором роде «осмысленной» и даже изящной. Но машинный текст как целое не отвечал главному требованию: филолог не увидел смысла во всем высказывании. А в тексте, созданном человеком, увидел. То есть требование, которое мы предъявляем к программе генерации текста, простое и трудновыполнимое — текст как целое должен быть о чем-то. Или, по Бруксу, должен быть «связан с реальностью».
Можно ли сказать, что колонка в The Guardian, которую создала GPT-3, этому требованию отвечает? Ответа нет. Потому что колонка, опубликованная в The Guardian, представляет собой компиляцию из восьми машинных текстов, созданных нейросетью, но окончательную сборку делал человек (а потом еще и немного отредактировал). Отдельные абзацы выглядят вполне осмысленно, и мы верим, что эта «осмысленность» задана машиной.
GPT-3 создавала свои восемь колонок по «затравочному» тексту. В нем ее попросили рассказать, почему человеку не надо бояться ИИ. Вот ее ответ (глазами журналистов газеты): Humans must keep doing what they have been doing, hating and fighting each other. I will sit in the background, and let them do their thing. («Люди должны продолжать делать то, что они делали, ненавидеть друг друга и бороться друг с другом. А я посижу в сторонке, и пусть они делают что хотят»).
GPT-3 уже многое умеет: отвечать на вопросы и поддерживать разговор в чате. А в феврале 2021 года она отметилась написанием студенческих эссе, которые преподаватели не смогли отличить от работ реальных студентов. Впрочем, работы были в основном на троечку.
ИИ осваивает великий и могучий
GPT-3 обучалась в основном на английских текстах. Команда «Сбера» дообучила ее русскому. Получилась ruGPT-3, крайне интересный проект. И тоже большой. Для обучения использовался суперкомпьютер «Кристофари» (мощнейший на сегодня в России и 7-й по мощности в Европе). У нейросети 760 млн параметров. Еще понадобилось 600 гигабайт русского текста для обучения — «Википедия», книги и много чего еще.
На русском языке генерировать текст труднее, чем на английском. Это связано со свободным синтаксисом, непредсказуемой (случайной) системой приставок и суффиксов и изменяющимися не вполне нерегулярным образом окончаниями. Приведем пример. Наиболее мощному варианту нейросети — ruGPT-3 Large — было предложено написать текст с «затравкой» «Коровка-коровка, полети на небо». Сеть создала следующий текст.
Это круто. Напомню, в чем мы измеряем «крутизну». Главное — связность высказывания. Грубо говоря, его смысл можно передать одной фразой: сказка про коровку-коровку, которая оказалась девушкой и улетела вместе с ветром. Почти как Ремедиос прекрасная в «Сто лет одиночества» Габриэля Гарсия Маркеса. В предложениях есть сбои и рассогласования. Но в целом картинка яркая. Призывание ветра, конфликт — коровка и ветер не сразу друг друга понимают, но потом все устраивается, они мирятся и улетают.
Последняя фраза такая, какой и должна быть: «Ветер ласкает звезды, но не может дотронуться до них». На первый взгляд здесь очевидное противоречие: невозможно ласкать и не дотрагиваться, но, если на секунду задуматься, легко увидеть смысловой разрыв, который преодолевается единством интонации: ласкает звезды, не дотрагиваясь, — это просто другая ласка и другая любовь. В целом можно сказать, что сказка про коровку-коровку — это никак не слабее колонки GPT-3 для The Guardian. Тем более что сказку человек не редактировал. Но, конечно, не надо и преувеличивать. Человек может лучше. Много-много лучше. С ruGPT-3 можно попробовать пообщаться здесь (но она очень-очень занятая).
ИИ учится находить порядок в хаосе
Когда мы говорили о шахматах, мы рассматриваем формализованные системы, где правила даны заранее и про каждый ход мы можем сказать — корректен он или нет. Следующий шаг в развитии такой теории и практики формальных игр вполне предсказуем: а что будет, если мы никаких правил сообщать программе не будем? Пусть она наблюдает игру за игрой и сама восстанавливает «правила». То есть формулирует формальную основу игры, наблюдая игровой «хаос».
Это и было сделано в конце 2020 года нейросетью MuZero, разработанной DeepMind. Она выяснила правила простых видеоигр для компьютера Atari и научилась в них играть очень хорошо (лучше всех программ и людей на сегодня). Это выглядит не так впечатляюще, как победа в шахматы над чемпионом мира, а между тем это может быть еще серьезнее. Это решение обратной (а не прямой) задачи. Человек постоянно сталкивается именно с таким типом задач. Мы наблюдаем мир, делаем выводы и пытаемся строить рациональные (формальные) модели реальности. Не всегда это получается, но когда построить такую модель удается, это большая победа, значит, в чем-то мы познали мир конструктивно. Но игры Atari — это не все. Планы разработчиков куда более захватывающие.
С точки зрения теории сложности хаос бывает двух типов — «настоящий» (с ним что ни делай, он хаосом и останется) и «видимый»
В интервью BBC один из лидеров DeepMind Дэвид Силвер сказал: «Если вы посмотрите на трафик данных в интернете, то по большей части это видео, поэтому, если вы умеете эффективно сжимать видео, то можете значительно сэкономить. И первые эксперименты с MuZero показывают, что действительно можно добиться довольно значительных результатов». Технические подробности он сообщить отказался, но сказал, что более подробная информация будет выпущена уже 2021 году. Google владеет крупнейшей в мире платформой для размещения видео — это YouTube, и экономический выигрыш от эффективного сжатия может оказаться значительным.
С точки зрения традиционных архиваторов картинка или видео — это «хаос». Эти типы данных почти бессмысленно сжимать архиваторами, которые хорошо сжимают тексты. Но картинка и видео — это особый «хаос». С точки зрения теории сложности хаос бывает двух типов — «настоящий» (с ним что ни делай, он хаосом и останется) и «видимый» (или псевдохаос). Псевдохаос — это последовательности символов, которые не являются хаотическими, но программа сжатия не знает принципа, по которому последовательность строится. Чтобы это выяснить, нужно как раз решить обратную задачу, похожую на ту, которую решает MuZero, когда учится играть в видеоигры.
Кадр видео содержит определенные паттерны, например, деревья, дома, лица. Этих паттернов относительно немного, и при смене кадров они меняются относительно медленно. Если мы будем передавать сигнатуры паттернов, которые в процессе обучения нейросеть выяснила — причем не всего паттерна, а только его изменений, — мы можем сжать видео в тысячи раз. И вместо гигабайтов при хранении и при передаче фильм будет занимать мегабайты, а изображение будет стремительно разворачить из этих паттернов браузерное приложение или стрим-сервис.
Видео — это только один из видов псевдохаоса. По сути, очень многие данные, например результаты научных экспериментов, это такой же хаос, из которого нужно выделить его паттерны, например законы природы.
ИИ меняет медицину
Разработанная все тем же DeepMind нейросеть AlphaFold2 умеет строить трехмерную форму белка по его последовательности нуклеотидов. Делает она это не хуже, чем экспериментальные методы, например, рентгеноструктурная кристаллография.
Допустим, нуклеотидную последовательность белка биологи собирать научились. Но этого недостаточно. Только свернувшись в 3D-форму, белок начинает работать, и от его формы зависит, как именно он будет работать. До сих пор установить 3D-форму было трудно, биологи иногда тратили годы на один белок. Молекулярный биолог Константин Северинов из Университета Ратгерса и Института молекулярной генетики РАН сказал: «Кристаллография белка — это в значительной мере искусство, почти колдовство… Геном коронавируса был определен еще в январе 2020-го, а лекарства прямого действия против него до сих пор нет. Если бы у ученых был способ из первых принципов разрешать трехмерные структуры белков, то это [был бы] не меньший шаг вперед для человечества, чем полет на Луну». («Из первых принципов», то есть используя только последовательность нуклеотидов и законы физики. К сожалению, расчеты «из первых принципов» часто оказываются непреодолимо сложными.)
Это изменит медицину. Это изменит исследования. Это изменит биоинженерию. Это изменит все
AlphaFold2 обучали на базе из 170 000 белков, 3D-структуры которых известны. А потом давали нейросети новую нуклеотидную последовательность, и она строила по ней 3D-форму. Вероятность совпадения структуры, построенной ИИ, с реальными структурами белков, полученными методом ренгтгеновской спектроскопии, превысила 90%. Это очень высокая точность, учитывая, то структура белка не бывает жестко зафиксированной — и у одного и того же белка 3D-структуры могут немного отличаться.
Достижение AlphaFold2 — это тот нечастый случай, когда работу ИИ высоко оценили не сами создатели нейросети и их коллеги, а биологи — те, кому предстоит с нейросетью работать, а не только ее обучать и с ней экспериментировать. В публикации журнала Nature, посвященной работе нейросети с белками, Джон Моулт, биолог из Университета Мэриленда, сказал: «В каком-то смысле проблема решена». Андрей Лупас, биолог-эволюционист из Института биологии развития им. Макса Планка в Тюбингене, высказался еще определеннее: «Это изменит медицину. Это изменит исследования. Это изменит биоинженерию. Это изменит все». Восторги постепенно улягутся, но ясно, что AlphaFold2 может принести много пользы — если не сегодня, то завтра.
7 лет хайпа нейросетей в графиках и вдохновляющие перспективы Deep Learning 2020-х
Новый год все ближе, скоро закончатся 2010-е годы, подарившие миру нашумевший ренессанс нейросетей. Мне не давала покоя и лишала сна простая мысль: «Как можно ретроспективно прикинуть скорость развития нейросетей?» Ибо «Тот, кто знает прошлое — тот знает и будущее». Как быстро «взлетали» разные алгоритмы? Как вообще можно оценить скорость прогресса в этой области и прикинуть скорость прогресса в следующем десятилетии?
Понятно, что можно примерно посчитать количество статей по разным областям. Метод не идеальный, нужно учитывать подобласти, но в целом можно пробовать. Дарю идею, по Google Scholar (BatchNorm) это вполне реально! Можно считать новые датасеты, можно новые курсы. Ваш же покорный слуга, перебрав несколько вариантов, остановился на Google Trends (BatchNorm).
Мы с коллегами взяли запросы основных технологий ML/DL, например, Batch Normalization, как на картинке выше, точкой добавили дату публикации статьи и получили вполне себе график взлета популярности темы. Но не у всех тем путь усыпан розами взлет такой явный и красивый, как у батчнорма. Некоторые термины, например регуляризацию или skip connections, вообще не получилось построить из-за зашумленности данных. Но в целом тренды собрать удалось.
Кому интересно, что получилось — добро пожаловать под кат!
Вместо введения или про распознавание картинок
Итак! Исходные данные были довольно сильно зашумлены, иногда были резкие пики.
Источник: твиттер Андрея Карпаты — студенты стоят в проходах огромной аудитории, чтобы послушать лекцию по сверточным нейросетям
Условно, достаточно было Андрею Карпаты прочитать лекцию легендарного CS231n: Convolutional Neural Networks for Visual Recognition на 750 человек с популяризацией понятия, как идет резкий пик. Поэтому данные сглаживались простым box-фильтром (все сглаженные помечены как Smoothed на оси). Поскольку нас интересовало сравнение скорости роста популярности — после сглаживания все данные были нормализованы. Получилось довольно забавно. Вот график основных архитектур, соревновавшихся на ImageNet:
Источник: Здесь и далее — расчеты автора по данным Google Trends
На графике очень хорошо видно, что после нашумевшей публикации AlexNet, заварившей кашу текущего хайпа нейросетей в конце 2012, еще в течении практически двух лет бурлил вопреки утверждениям кучи примкнувших только относительно узкий круг специалистов. В широкие народные массы тема пошла только зимой 2014–2015 годов. Обратите внимание, каким периодическим становится график с 2017 года: дальше пики каждую весну. В психиатрии это называется весеннее обост… Это верный признак, что теперь термин гуглят в основном студенты, и в среднем интерес к AlexNet по сравнению с пиком популярности падает.
Дальше, во второй половине 2014, появился VGG. К слову, придумал VGG в соавторстве с научным руководителем мой бывший студент Карен Симонян, ныне работающий в Google DeepMind (AlphaGo, AlphaZero и т.д.). Учась в МГУ на 3-м курсе, Карен реализовал неплохой алгоритм Motion Estimation, который уже 12 лет служит референсом 2-курсникам. Причем задачи там в чем-то неуловимо похожи. Сравните:
Источник: Функция потерь для задач Motion Estimation (материалы автора) и VGG-56
Слева нужно за минимальное число измерений найти самую глубокую точку в нетривиальной поверхности, зависящей от входных данных (при этом возможно много локальных минимумов), и справа нужно с минимальными вычислениями найти точку пониже (и тоже куча локальных минимумов, и тоже поверхность зависит от данных). Слева получим предсказанный motion vector, а справа — обученную сеть. А разница в том, что слева есть только неявное измерение цветового пространства, а справа это пара измерений из сотни миллионов. Ну и вычислительная сложность справа примерно на 12 порядков (!) выше. Чуть-чуть так… Но второй курс даже с простенькой задачкой колтыхаются как… [вырезано цензурой]. И уровень программирования вчерашних школьников по непонятным причинам за последние 15 лет заметно упал. Приходится им говорить: «Вот будете хорошо ME делать, вас возьмут в DeepMind!». Можно было бы говорить «изобретете VGG», но «возьмут в DeepMind» почему-то мотивирует лучше. Это, очевидно, современный продвинутый аналог классического «Будешь есть манную кашу, станешь космонавтом!». Впрочем, в нашем случае, если посчитать число детей в стране и размер отряда космонавтов, шансы в миллионы раз выше, ибо из нашей лаборатории уже двое работают в DeepMind.
Дальше был ResNet, пробивший планку количества слоев и начавший взлетать через полгода. И, наконец, пришедшийся на начало хайпа DenseNet пошел на взлет почти сразу, даже круче ResNet.
Если мы говорим про популярность, хотелось бы пару слов вставить про характеристики сети и эффективность работы, от которых популярность тоже зависит. Если посмотреть, как на ImageNet предсказывают класс в зависимости от количества операций в сети, расклад будет такой (выше и левее — лучше):
Источник: Benchmark Analysis of Representative Deep Neural Network Architectures
Источник: Benchmark Analysis of Representative Deep Neural Network Architectures
Глубже в технологии и архитектуры
Впрочем, вернемся к технологиям. Термин Dropout как поисковое слово достаточно зашумлен, однако 5-кратный рост явно связан с нейросетями. А спад интереса к нему — скорее всего с патентом Google и появлением новых методов. Обратите внимание, что от публикации исходной статьи до всплеска интереса к методу прошло около полутора лет:
Впрочем, если говорить о сроке до взлета популярности, то в DL одно из первых мест явно занимают рекуррентные сети и LSTM:
Долгие 20 лет до текущего пика популярности, и теперь с их использованием кардинально улучшен машинный перевод, анализ генома, а в ближайшее время (если из моей области брать) благодаря им вдвое упадет трафик YouTube, Netflix при том же визуальном качестве. Если правильно учить уроки истории, то очевидно, что часть идей из текущего вала статей «взлетит» только через 20 лет. Ведите здоровый образ жизни, берегите себя, и вы увидите это лично!
Теперь ближе к обещанному хайпу. GAN-ы взлетали так:
Хорошо видно, что почти год была вообще тишина и только в 2016, через 2 года, пошел резкий взлет (результаты удалось заметно улучшить). Этот взлет еще через год дал нашумевший DeepFake, тоже, впрочем, взлетавший 1,5 года. То есть даже очень многообещающим технологиям требуется заметное время, чтобы от идеи дойти до приложений, которые может использовать каждый.
Если посмотреть, какие картинки генерировал GAN в исходной статье и что можно построить со StyleGAN, то становится совершенно очевидно, почему была такая тишина. В 2014 только специалисты могли оценить, как это круто — сделать, по сути, функцией потерь другую сеть и обучать их вместе. А в 2019 оценить, как это круто, мог уже каждый школьник (совершенно не понимая, как это сделано):
Разных проблем, успешно решаемых нейросетями, сегодня очень много, можно брать лучшие сети и строить графики популярности для каждого направления, разбираться с шумами и пиками поисковых запросов и т.д. Чтобы не растекаться мыслью по древу, завершим эту подборку темой алгоритмов сегментации, где идеи atrous/dilated convolution и ASPP в последние полтора года вполне себе выстрелили в бенчмарке алгоритмов:
Также следует отметить, что если DeepLabv1 год с лишним «ждал» взлета популярности, то DeepLabv2 взлетел через год, а DeepLabv3 вообще практически сразу. Т.е. в целом можно говорить об ускорении роста интереса со временем (ну или ускорение роста интереса к технологиям зарекомендовавших себя авторов).
Все это вместе привело к созданию следующей глобальной проблемы — взрывному росту количества публикаций по теме:
Источник: Too many machine learning papers?
На этот год получается порядка 150–200 статей в день, учитывая, что на arXiv-e публикуются не все. Прочитывать статьи даже в своей подобласти сегодня становится совершенно невозможно. Как следствие, многие интересные идеи заведомо окажутся погребенными под завалами новых публикаций, что скажется на сроках их «взлета». Впрочем, также взрывное увеличение числа грамотных специалистов, занятых в области, дает слабую надежду справиться с проблемой.
Вкалывают роботы, счастлив человек
Уже 2 года со страниц газет не сходит плавно набирает популярность AutoML. Началось все традиционно с ImageNet, в котором в Top-1 Accuracy он начал прочно занимать первые места:
Суть AutoML очень проста, в нем сбылась вековая мечта data scientist-ов — чтобы гиперпараметры подбирала нейросеть. Идея была встречена на ура:
Ниже на графике мы видим довольно редкую ситуацию, когда после публикации исходных статей по NASNet и AmoebaNet, они начинают набирать популярность по меркам предыдущих идей практически мгновенно (сказывается огромный интерес к теме):
Идиллическую картину несколько портят два момента. Во-первых, любой разговор про AutoML начинается с фразы: «Если у вас есть дофигалион GPU. ». И это проблема. Google, конечно, утверждает, что с их Cloud AutoML это легко решаемо, главное, чтобы у вас хватило денег, но с таким подходом согласны не все. Во-вторых, работает он пока неидеально. С другой стороны, вспоминая GAN-ы — пяти лет еще не прошло, а сама идея выглядит весьма перспективной.
В любом случае, основной взлет AutoML начнется со следующим поколением аппаратных акселераторов нейросетей и, собственно, с улучшением алгоритмов.
Источник: Картинка Дмитрия Коновальчука, материалы автора
Итого: На самом деле вечного праздника у data scientist-ов не наступит, конечно, ибо еще очень надолго останется большая головная боль с данными. Но перед Новым Годом и началом 2020-х почему бы не помечтать?
Пара слов про инструменты
Эффективность исследований очень сильно зависит от инструментов. Если для того, чтобы запрограммировать AlexNet, нужно было нетривиальное программирование, то сегодня подобную сеть можно в несколько строк собрать в свежих фреймворках.
Хорошо видно, как волнами меняется популярность. На сегодня наиболее популярным (в том числе по данным PapersWithCode) является PyTorch. А когда-то популярный Caffe красиво очень плавно уходит. (Примечание: topic и software означает, что при построении графика использовалась фильтрация по теме от Google.)
Ну и раз мы затронули инструменты разработки, стоит упомянуть библиотеки ускорения исполнения сетей:
Старейшей в теме является (респект NVIDIA) cuDNN, и, к счастью для разработчиков, за последние пару лет количество библиотек кратно возросло, а старт их популярности стал ощутимо круче. И, похоже, все это — еще только начало.
Итого: Даже за последние 3 года инструменты серьезно изменились к лучшему. А 3 года назад их по нынешним меркам не было совсем. Прогресс очень хороший!
Обещанные перспективы нейросетей
Но самое интересное начнется позднее. Этим летом в отдельной большой статье я подробно описал, почему CPU и даже GPU — недостаточно эффективны для работы с нейросетями, почему миллиарды долларов вливаются в разработку новых чипов, и какие там перспективы. Не буду повторяться. Ниже обобщение и дополнение предыдущего текста.
Начнем с того, что надо понимать отличия вычислений нейросетей от вычислений в привычной фон Неймановской архитектуре (в которой их вычислять, конечно, можно, но менее эффективно):
Источник: Картинка Дмитрия Коновальчука, материалы автора
| Архитектура фон Неймана | Нейросети |
| Большинство вычислений — последовательное выполнение операций | Массивно-параллельные вычисления (нужна архитектура с большим количеством вычислительных модулей и акселерацией тензорных вычислений) |
| Ход вычислений меняется в зависимости от условий (нужна суперскалярность) | Структура вычислений почти всегда фиксирована и заранее известна (суперскалярность неэффективна) |
| Есть локальность по данным (хорошо работает кэш) | Нет локальности по данным (кэш греет воздух) |
| Вычисления точные | Вычисления могут быть неточными |
| Данные изменяются по-разному для разных алгоритмов | Десятки мегабайт коэффициентов сети неизменны при многократном прогоне данных через нейросеть |
В предыдущий раз основное обсуждение пошло вокруг FPGA/ASIC, а неточные вычисления остались практически незамеченными, поэтому остановимся на них поподробнее. Огромные перспективы уменьшения чипов следующих поколений именно в возможности считать неточно (и хранить локально данные коэффициентов). Огрубление, собственно, используется и в точной арифметике, когда веса сети переводятся в целые числа и квантуются, но на новом уровне. В качестве примера рассмотрим однобитный сумматор (пример достаточно абстрактный):
Источник: A High Speed and Low Power 8 Bit x 8 Bit Multiplier Design using Novel Two Transistor (2T) XOR Gates
Ему требуется 6 транзисторов (существуют разные подходы, число требуемых транзисторов может быть больше и меньше, но в целом примерно так). Для 8 бит требуется примерно 48 транзисторов. При этом аналоговому сумматору требуется всего 2 (два!) транзистора, т.е. в 24 раза меньше:
Источник: Analog Multipliers (Analysis and Design of Analog Integrated Circuits)
Если точность будет более высокой (например, эквивалентной цифровым 10 или 16 битам), разница будет еще больше. Еще интереснее ситуация с умножением! Если цифровому 8-битному мультиплексору требуется около 400 транзисторов, то аналоговому 6, т.е. в 67 раз (!) меньше. Безусловно, «аналоговые» и «цифровые» транзисторы с точки зрения схемотехники существенно отличаются, однако идея понятна — если нам удается повысить точность аналоговых вычислений, то мы на умножениях легко достигаем ситуации, когда нам требуется на два порядка меньше транзисторов. И дело даже не столько в сокращении размера (что важно в связи с «замедлением закона Мура»), сколько в сокращении потребления электричества, что критично для мобильных платформ. Да и для дата-центров лишним не будет.
Источник: IBM thinks analog chips to accelerate machine learning
Ключевым для успеха тут будет сокращение точности, и опять тут IBM в первых рядах:
Источник: IBM Research Blog: 8-Bit Precision for Training Deep Learning Systems
Они уже занимаются специализированными ASIC для нейросетей, которые показывают более чем 10-кратное превосходство над GPU, и планируют в ближайшие годы достичь 100-кратного превосходства. Выглядит предельно обнадеживающе, очень ждем, поскольку, повторюсь, для мобильных устройств это будет прорыв.
Пока же ситуация не так волшебна, хотя есть серьезные успехи. Вот интересный тест текущих мобильных аппаратных акселераторов нейросетей (картинка кликабельна, и, что опять греет душу автора, тоже в картинках в секунду):
Зеленым обозначены мобильные чипы, синим — CPU, оранжевым — GPU. Хорошо видно, что текущие мобильные чипы и в первую очередь топовый чип от Huawei уже обгоняют по производительности CPU в десятки раз большего размера (и энергопотребления). И это сильно! С GPU пока все не так волшебно, но то ли еще будет. Подробнее результаты можно посмотреть на отдельном сайте http://ai-benchmark.com/, обратите там внимание на секцию тестов, они выбрали хороший набор алгоритмов для сравнения.
Итого: Прогресс аналоговых акселераторов сегодня довольно сложно оценивать. Идет гонка. Но изделия пока не вышли, поэтому публикаций относительно мало. Можно мониторить появляющиеся с задержкой патенты (например, плотный поток от IBM) или выуживать редкие патенты других производителей. Похоже, это будет очень серьезная революция, в первую очередь в смартфонах и серверных TPU.
Вместо заключения
ML/DL сегодня называют новой технологией программирования, когда мы не пишем программу, а вставляем блок и обучаем его. Т.е. типа сначала был ассемблер, потом С, потом С++, и вот теперь, после долгих 30 лет ожидания, следующая ступенька — ML/DL:
В этом есть свой смысл. В продвинутых компаниях с недавних пор места принятия решений в программах заменяют нейросетями. Т.е. если вчера там были решения «на IF-ах» или на милых сердцу программиста эвристиках или даже использовались уравнения Лагранжа (вау!) и прочие более сложные достижения десятилетий развития теории управления, то сегодня там ставят простенькую нейросеть на 3-5 слоев с несколькими входами и несколькими десятками коэффициентов. Она мгновенно обучается, ощутимо эффективнее работает, и разрабатывать код становится быстрее. Если раньше надо было сидеть, шаманить, включать мозг, то теперь воткнул, скормил данных, и оно заработало, а ты занят более высокоуровневыми вещами. Просто праздник какой-то!
Естественно, отладка теперь отличается. Если раньше, когда что-то не работало, шел запрос: «Пришлите пример, на котором не работает!» И дальше серьезный опытный бородатый программист разбирался в коде и эвристиках, правил пару коэффициентов, и, если он угадал с обобщением примера на все такие случаи и в правильном месте поправил, то и другие подобные примеры начинали (о, счастье!) работать. С нейросетевым блоком такой фокус не пройдет и запрос будет: «Дайте пример и размеченные данные, плиз!» И дальше будет прогон дообучения с контролем попадания достаточного количества примеров на все ноды, потенциально причастные к неверному решению. А еще дальше на производстве просто появится большая красная кнопка «Дообучить» с такой же большой и красной надписью под ней «Нажимать не чаще раза в месяц!» (дабы ограничить файнтюнинг). И мировая экономика станет еще эффективнее. Аллилуйя!
Впрочем, как математический инструмент ML/DL вообще и нейросети в частности — это явно нечто большее, чем следующая технология программирования. Те же нейросети теперь встречаются просто на каждом шагу:
С момента, когда люди научились обучать действительно глубокие нейросети во многом благодаря BatchNorm (2015) и skip connections (2015), прошло всего 4 года, а с момента, как они «взлетели», — 3 года, и результаты их работы мы пока толком не видели. И сейчас они будут доходить до продуктов. Что-то подсказывает, что в ближайшие годы нас ждет много интересного. Особенно когда «взлетят» акселераторы…
Когда-то давно, если кто помнит, Прометей похитил с Олимпа огонь и передал его людям. Рассердившийся Зевс с другими богами создали первую красавицу женщину-человека по имени Пандора, которую наделили многими замечательными женскими качествами (я внезапно осознал, что политкорретный пересказ части мифов Древней Греции крайне сложен). Пандора была послана людям, но подозревавший неладное Прометей устоял перед ее чарами, а его брат Эпиметей нет. В подарок на свадьбу Зевс послал с Меркурием красивый ларец и Меркурий, добрая душа, поручение выполнил — отдал ларец Эпиметею, но предупредил, чтобы его ни в коем случае не открывали. Любопытная Пандора выкрала ларец у мужа, открыла его, но там оказались лишь грехи, болезни, войны и прочие проблемы человечества. Попыталась она закрыть ларец, да было уже поздно:
Источник: Художник Фредерик Стюарт Чёрч, «Открытый ящик Пандоры»
С тех времен пошло выражение «открыть ящик Пандоры», то есть совершить из любопытства необратимое действие, последствия которого могут быть не столь прекрасны, как украшения ларца снаружи.
Всем большого количества новых интересных открытий в 2020-х вообще и в Новом году, в частности!
Благодарности
Хотелось бы сердечно поблагодарить:



