Деконструкция мифа о глубоком обучении. Лекция в Яндексе

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


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

Под катом — расшифровка лекции и часть слайдов Сергея.


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

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

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

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

Еще в этом мифе есть свои герои, совершающие великие эпические подвиги.

В этом мифе есть и сами великие подвиги — они потом остаются в истории и рассказываются друг другу из уст в уста.

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

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

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

Во-вторых — попытка воспроизвести принципы работы человеческого мозга или даже превзойти их.

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

Давайте поговорим про новизну. Есть такой пример, что многие успехи глубокого обучения — связанные прежде всего с задачами компьютерного зрения, да и все остальные — начались с исторической работы 2012 года, когда два аспиранта и один научный руководитель обучили большую сверточную сеть и с большим отрывом победили в конкурсе распознавания изображений ImageNet. Многие разговоры о том, что это наше будущее, начались именно с указанной работы. И многие люди стали воспринимать обсуждаемую технологию как что-то совершенно новое — в то время как первые статьи о сверточных сетях датируются серединой 90-х годов. Конечно, тогда они были гораздо меньше, и изображения, с которыми они работали, были гораздо проще, но тем не менее.

Другой хороший пример — рекуррентные сети. Известная модель seq to seq, sequence to sequence learning, позволяет, например, осуществлять машинный перевод или строить диалоговые системы. Она тоже наделала много шума. Когда я читал примеры философских диалогов с этой системой, у меня холодок пробежал по спине, потому что пример из статьи имеет какой-то смысл. И снова многие заговорили, что мы приближаемся к какому-то искусственному интеллекту, и тоже возникло ощущение, что речь идет о чем-то совершенно новом.

Это действительно была новая модель, новая нейросетевая архитектура, и результат, по сути, уникальный. Однако можно заметить, что составляющие этой сети, которые отвечают за распознавание, скажем, входного вопроса и за генерацию ответа, представляют собой довольно давно известную рекуррентную архитектуру, и известна она как long short-term memory или LSTM. Предложена она была аж в 1997 году — почти 20 лет назад.

И вот, совсем свежий прорыв, развеявший все сомнения о том, ждет ли нас сильный искусственный интеллект. Речь идет про гибкий нетворк, систему от компании Google DeepMind, которая на сырых кадрах из эмулятора игр Atari смогла научиться в них играть, причем лучше, чем отдельные люди. Это, понятно, тоже наделало много шума.

Интересно, что это исторический результат, но также верно и другое: часть этой системы, отвечающая непосредственно за интеллект, за принятие решений, за принципы Q-learning, была предложена аж в 1989 году в диссертации, по-моему, Кристофера Уоткинса.

Что же изменилось за эти 20 лет? Почему когда-то нейросети были технологией-аутсайдером, каждый шутил и издевался над исследователями в этой области, а теперь всё немножко наоборот?

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

Стало больше данных. Упомянутый конкурс ImageNet и набор данных для него состоит из 14 миллионов размеченных объектов в 21 тысяче категорий. Объекты размечены людьми. Хотя этот дата-сет создавался только для одной задачи, для классификации изображений, благодаря ему появились такие классные приложения, как Prisma, перенос стилей, и наверняка еще извлечен не весь потенциал. Был необходим качественный переход в наличии обучающих данных.

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

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

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

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

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

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

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

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

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

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

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

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

Согласитесь: все это нельзя назвать черным ящиком, где мы строим минимальное количество предположений. Мы вносим очень много априорного знания.

А вот пример сверточной сети, которая показывает одни из лучших на данный момент результатов в конкурсе ImageNet. Это Inception-ResNet. Блок, отмеченный красным, на самом деле выглядит так. Следующий блок выглядит так, и следующий.

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

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

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

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

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

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

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

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

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

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

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

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

Интересно, что это несколько напоминает модель model-view controller, которая иногда встречается в программировании. Может, отсюда что-то следует.

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

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

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

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

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

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

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

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

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

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

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

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

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

Также должна быть возможность универсально обучать нужные модели на больших данных.


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

Одну минуту поговорю о роли больших данных. Давайте на секунду забудем про ImageNet. Вспомним два примера: DQN и AlphaGo. Интересно то, что указанные системы обучались на симулированных данных. В случае с DQN использовались снимки из эмулятора компьютерных игр, запуск которого гораздо дешевле, чем, например, запуск робота в реальном мире. Если 10 млн виртуальных обучающих объектов мы собрать можем, то собрать 10 млн реальных обучающих объектов гораздо сложнее, особенно если речь идет о состоянии какой-то физической системы.

И AlphaGo помимо размеченного (неразборчиво — прим. ред.) использовала 30 млн позиций, полученных в ходе игры системы с самой собой. Это очень важные идеи, поскольку именно они позволили собрать эффективную обучающую выборку и обучить настолько сложную модель.

Следующий прорыв может стоить дорого. В следующей предметной области, которая будет «решена» нейросетями, тоже должно быть много обучающих выборок. Если вы хотите построить очень совершенного чат-бота, вам где-то надо найти обучающую выборку. И возможно, вам придется вложить много денег в ее разметку.

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

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


Источник: habrahabr.ru

Комментарии: