Новый год все ближе, скоро закончатся 2010-е годы, подарившие миру нашумевший ренессанс нейросетей. Мне не давала покоя
Понятно, что можно примерно посчитать количество статей по разным областям. Метод не идеальный, нужно учитывать подобласти, но в целом можно пробовать. Дарю идею, по Google Scholar (BatchNorm) это вполне реально! Можно считать новые датасеты, можно новые курсы. Ваш же покорный слуга, перебрав несколько вариантов, остановился на Google Trends (BatchNorm).
Мы с коллегами взяли запросы основных технологий ML/DL, например, Batch Normalization, как на картинке выше, точкой добавили дату публикации статьи и получили вполне себе график взлета популярности темы. Но не у всех тем
Кому интересно, что получилось — добро пожаловать под кат!
Вместо введения или про распознавание картинок
Итак! Исходные данные были довольно сильно зашумлены, иногда были резкие пики.
Источник: твиттер Андрея Карпаты — студенты стоят в проходах огромной аудитории, чтобы послушать лекцию по сверточным нейросетям
Условно, достаточно было Андрею Карпаты прочитать лекцию легендарного CS231n: Convolutional Neural Networks for Visual Recognition на 750 человек с популяризацией понятия, как идет резкий пик. Поэтому данные сглаживались простым box-фильтром (все сглаженные помечены как Smoothed на оси). Поскольку нас интересовало сравнение скорости роста популярности — после сглаживания все данные были нормализованы. Получилось довольно забавно. Вот график основных архитектур, соревновавшихся на ImageNet:
Источник: Здесь и далее — расчеты автора по данным Google Trends
На графике очень хорошо видно, что после нашумевшей публикации AlexNet, заварившей кашу текущего хайпа нейросетей в конце 2012, еще в течении практически двух лет бурлил
Дальше, во второй половине 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.
Дальше был DenseNet, который пришелся уже на начало общего хайпа и начал взлетать заметно быстрее. И, наконец, пробивший планку количества слоев ResNet пошел на взлет почти сразу, пусть и не так резко, как DenseNet.
Если мы говорим про популярность, хотелось бы пару слов вставить про характеристики сети и эффективность работы, от которых популярность тоже зависит. Если посмотреть, как на ImageNet предсказывают класс в зависимости от количества операций в сети, расклад будет такой (выше и левее — лучше):
Источник: Benchmark Analysis of Representative Deep Neural Network Architectures
Типа AlexNet уже совсем не торт, и рулят сети на основе ResNet. Однако если посмотреть на более близкую моему сердцу практическую оценку FPS, то хорошо видно, что VGG тут поближе к оптимуму, и вообще, расклад заметно меняется. В том числе AlexNet неожиданно на Парето-оптимальной огибающей (горизонтальная шкала логарифмическая, лучше выше и правее):
Источник: Benchmark Analysis of Representative Deep Neural Network Architectures
Итого:
- В ближайшие годы расклад архитектур с большой вероятностью очень существенно поменяется из-за прогресса акселераторов нейросетей, когда какие-то архитектуры уйдут в корзины, а какие-то внезапно взлетят, просто потому что лучше лягут на новое железо. Например, в упомянутой статье сделано сравнение на NVIDIA Titan X Pascal и NVIDIA Jetson TX1 board, и расклад заметно меняется. При этом прогресс TPU, NPU и прочих только начался.
- Как практик, не могу не обратить внимание, что сравнение на ImageNet делается по умолчанию на ImageNet-1k, а не на ImageNet-22k, уже просто потому, что большинство тренирует свои сети на ImageNet-1k, где в 22 раза меньше классов (это и проще, и быстрее). Переход на ImageNet-22k, более актуальный для многих практических применений, также поменяет расклад (для тех, кто заточился на 1k — сильно).
Глубже в технологии и архитектуры
Впрочем, вернемся к технологиям. Термин 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 публикуются не все. Прочитывать статьи даже в своей подобласти сегодня становится совершенно невозможно. Как следствие, многие интересные идеи заведомо окажутся погребенными под завалами новых публикаций, что скажется на сроках их «взлета». Впрочем, также взрывное увеличение числа грамотных специалистов, занятых в области, дает
Итого:
- Помимо ImageNet и оставшейся за кадром истории с игровыми успехами DeepMind, GAN-ы дали начало новой волне популяризации нейросетей. С ними реально стала возможна «съемка» актеров без применения камеры. И то ли еще будет! Под этот информационный шум будут финансироваться и менее звучные, но вполне рабочие технологии обработки и распознавания.
- Поскольку публикаций становится слишком много, с нетерпением ждем появления новых нейросетевых методов быстрого анализа статей, ибо только они нас спасут (шутка с долей шутки!).
Вкалывают роботы, счастлив человек
Уже 2 года
Суть AutoML очень проста, в нем сбылась вековая мечта data scientist-ов — чтобы гиперпараметры подбирала нейросеть. Идея была встречена на ура:
Ниже на графике мы видим довольно редкую ситуацию, когда после публикации исходных статей по NASNet и AmoebaNet, они начинают набирать популярность по меркам предыдущих идей практически мгновенно (сказывается огромный интерес к теме):
Идиллическую картину несколько портят два момента. Во-первых, любой разговор про AutoML начинается с фразы: «Если у вас есть дофигалион GPU...». И это проблема. Google, конечно, утверждает, что с их Cloud AutoML это легко решаемо,
В любом случае, основной взлет 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-кратного превосходства. Выглядит предельно обнадеживающе, очень ждем, поскольку, повторюсь, для мобильных устройств это будет прорыв.
Пока же ситуация не так волшебна, хотя есть серьезные успехи. Вот интересный тест текущих мобильных аппаратных акселераторов нейросетей (картинка кликабельна, и, что опять греет душу автора, тоже в картинках в секунду):
Источник: Performance evolution of mobile AI accelerators: image throughput for the float Inception-V3 model (FP16 model using TensorFlow Lite and NNAPI)
Зеленым обозначены мобильные чипы, синим — CPU, оранжевым — GPU. Хорошо видно, что текущие мобильные чипы и в первую очередь топовый чип от Huawei уже обгоняют по производительности CPU в десятки раз большего размера (и энергопотребления). И это сильно! С GPU пока все не так волшебно, но то ли еще будет. Подробнее результаты можно посмотреть на отдельном сайте http://ai-benchmark.com/, обратите там внимание на секцию тестов, они выбрали хороший набор алгоритмов для сравнения.
Итого: Прогресс аналоговых акселераторов сегодня довольно сложно оценивать. Идет гонка. На изделия пока не вышли, поэтому публикаций относительно мало. Можно мониторить появляющиеся с задержкой патенты (например, плотный поток от IBM) или выуживать редкие патенты других производителей. Похоже, это будет очень серьезная революция, в первую очередь в смартфонах и серверных TPU.
Вместо заключения
ML/DL сегодня называют новой технологией программирования, когда мы не пишем программу, а вставляем блок и обучаем его. Т.е. типа сначала был ассемблер, потом С, потом С++, и вот теперь, после долгих 30 лет ожидания, следующая ступенька — ML/DL:
В этом есть свой смысл. В продвинутых компаниях с недавних пор места принятия решений в программах заменяют нейросетями. Т.е. если вчера там были решения «на IF-ах» или на милых сердцу программиста эвристиках или даже использовались уравнения Лагранжа (вау!) и прочие более сложные достижения десятилетий развития теории управления, то сегодня там ставят простенькую нейросеть на 3-5 слоев с несколькими входами и несколькими десятками коэффициентов. Она мгновенно обучается, ощутимо эффективнее работает, и разрабатывать код становится быстрее. Если раньше надо было сидеть, шаманить
Естественно, отладка теперь отличается. Если раньше, когда что-то не работало, шел запрос: «Пришлите пример, на котором не работает!» И дальше серьезный опытный
Впрочем, как математический инструмент ML/DL вообще и нейросети в частности — это явно нечто большее, чем следующая технология программирования. Те же нейросети теперь встречаются просто на каждом шагу:
- Смартфон фотографирует текст и распознает его — это нейросети,
- Смартфон неплохо переводит на лету с языка на язык и проговаривает перевод — нейросети и еще раз нейросети,
- Навигатор и умная колонка вполне сносно распознают речь — снова нейросети,
- Телевизор показывает яркую контрастную картинку 8K из входного 2K видео — также нейросети,
- Роботы на производстве стали точнее, начали лучше видеть и распознавать нештатные ситуации — опять нейросети,
- Школьник в 10 классе скачивает из интернета сканы школьных сочинений, размечает их на буквы и пишет
на коленкена удивление неплохо работающую программу распознавания рукописного текста, неподъемную задачу для мега-профессионалов 90-х — и тут нейросети,
- В автосервисе записывают звук двигателя и тут же получают список потенциальных проблем — и это нейросети,
- И даже так — команда вместо непростого и до сих пор медленного решения дифференциальных уравнений инверсной кинематики обучает что-то волшебное и получает быстрые и довольно точные решения — конечно же это нейросети,
- В общем — нейросети теперь абсолютно везде! )
С момента, когда люди научились обучать действительно глубокие нейросети во многом благодаря BatchNorm (2015) и skip connections (2015), прошло всего 4 года, а с момента, как они «взлетели», — 3 года, и результаты их работы мы пока толком не видели. И сейчас они будут доходить до продуктов. Что-то подсказывает, что в ближайшие годы нас ждет много интересного. Особенно когда «взлетят» акселераторы…
Когда-то давно, если кто помнит, Прометей похитил с Олимпа огонь и передал его людям. Рассердившийся Зевс с другими богами создали первую красавицу женщину-человека по имени Пандора, которую наделили многими замечательными женскими качествами
Источник: Художник Фредерик Стюарт Чёрч, «Открытый ящик Пандоры»
С тех времен пошло выражение «открыть ящик Пандоры», то есть совершить
Знаете, чем глубже у меня погружение в нейросети, тем явственнее ощущение, что это очередной ящик Пандоры. Впрочем, у человечества богатейший опыт открытия подобных ящиков! Из свежего недавнего — это ядерная энергетика и интернет. Так что, думаю, совместными усилиями справимся. Не зря же куча суровых
Итого:
- В статью не вошло много интересных тем, например, классические ML алгоритмы, transfer learning, reinforcement learning, популярность датасетов и т.д. (Господа, вы можете продолжить тему!)
- К вопросу о ларце: я лично считаю, что программисты Google, которые добились того, что Google отказалась от контракта с Пентагоном на 10 миллиардов, — молодцы и красавцы. Им респект и уважуха. Впрочем, заметим, кто-то этот крупный тендер выиграл.
Читайте также:
- Аппаратное ускорение глубоких нейросетей: GPU, FPGA, ASIC, TPU, VPU, IPU, DPU, NPU, RPU, NNP и другие буквы — текст автора про текущее состояние и перспективы аппаратного ускорения нейросетей в сравнении с текущими подходами.
- Deep Fake Science, кризис воспроизводимости и откуда берутся пустые репозитории — про проблемы в науке, порождаемые ML/DL.
- Уличная магия сравнения кодеков. Раскрываем секреты — пример фейка на основе нейросетей.
Всем большого количества новых интересных открытий в 2020-х вообще и в Новом году, в частности!
Благодарности
Хотелось бы сердечно поблагодарить:
- Лабораторию Компьютерной Графики и Мультимедиа ВМК МГУ им. М.В. Ломоносова за вклад в развитие глубокого обучения в России и не только,
- персонально Константина Кожемякова и Дмитрия Коновальчука, которые сделали очень много для того, чтобы эта статья стала лучше и нагляднее,
- и, наконец, огромное спасибо Кириллу Малышеву, Егору Склярову, Николаю Оплачко, Андрею Москаленко, Ивану Молодецких, Евгению Ляпустину, Роману Казанцеву, Александру Яковенко и Дмитрию Клепикову за большое количество дельных замечаний и правок, сделавших этот текст намного лучше!