© 2018, Manning, © 2018, Питер книга на www.piter.com СОДЕРЖАНИЕ
9.3.1 Модели как программы 9.3.4 Непрерывное обучение и повторное использование модульных подпрограмм 9.3.5 Долгосрочная перспектива 9.3. БУДУЩЕЕ ГЛУБОКОГО ОБУЧЕНИЯЭто самый гипотетический раздел, цель которого — расширить горизонты для тех, кто желает присоединиться к существующей исследовательской программе или заняться своими исследованиями. Зная, как действуют глубокие сети, и понимая текущее положение дел в сфере исследований, можем ли мы предсказать направление движения в среднесрочной перспективе? Далее приводятся некоторые мои личные мысли. Имейте в виду, что у меня нет хрустального шара, поэтому многим моим ожиданиям, может быть, не суждено стать реальностью. Я разделяю эти прогнозы не потому, что их состоятельность будет доказана в ближайшем будущем, а потому, что они интересны и выглядят реальными в настоящем. Вот основные направления, которые мне кажутся многообещающими:
Обратите внимание: эти соображения не относятся к какому-то конкретному виду контролируемого обучения, которое до сих пор остается хлебом насущным глубокого обучения, скорее они применимы к любой форме машинного обучения, включая неконтролируемое и самоконтролируемое обучение, а также обучение с подкреплением. Принципиально не важно, откуда берутся размеченные данные или как выглядит цикл обучения; это всего лишь разные ветви машинного обучения — разные грани одной и той же конструкции. Давайте рассмотрим их поближе. 9.3.1. Модели как программыКак отмечалось в предыдущем разделе, одна из обязательных трансформаций в сфере машинного обучения, которые мы можем ожидать, — это уход от моделей, реализующих лишь распознавание шаблонов и способных только на локальные обобщения, в сторону моделей, способных абстрагировать и рассуждать и тем самым достигать экстремального обобщения. Все современные программы ИИ, способные на простейшие рассуждения, написаны человеком-программистом: например, программы, опирающиеся на алгоритмы поиска, манипулирование графами и формальную логику. В игре AlphaGo компании DeepMind, например, большая часть интеллекта спроектирована и запрограммирована опытными программистами с применением четких алгоритмов (таких, как алгоритм Монте-Карло для поиска в деревьях); обучение на данных происходит только в специализированных модулях (оценочные и стратегические сети). Однако в будущем такие системы ИИ могут стать полностью обучаемыми без участия человека. Как такое может произойти? Рассмотрим хорошо изученный тип сетей: рекуррентные нейронные сети (RNN). Важно отметить, что RNN имеют немного меньше ограничений, чем сети прямого распространения, потому что RNN — это чуть больше, чем простые геометрические преобразования: это геометрические преобразования, многократно повторяемые во внутреннем цикле for. Сам временной цикл for «зашит» человеком-разработчиком: это предположение, имплантированное в сеть. Естественно, рекуррентные сети все еще очень ограничены в возможности представления, в первую очередь потому, что каждый их шаг является дифференцируемым геометрическим преобразованием, и они переносят информацию из шага в шаг через точки в непрерывном геометрическом пространстве (векторы состояний). Теперь вообразите нейронную сеть, дополненную программными примитивами, но вместо единственного жестко зашитого цикла for с четко определенной геометрической памятью она включает в себя обширный набор программных примитивов, которыми может свободно манипулировать и расширять свои функции обработки, организуя ветвление с помощью инструкции if, выполняя условные циклы while, создавая переменные, используя диск в качестве долговременного хранилища, применяя операции сортировки, используя сложные структуры данных (например, списки, графы и хеш-таблицы) и многое другое. Пространство программ, которые такая сеть сможет представить, было бы намного шире, чем то, которое можно представить с помощью современных моделей глубокого обучения, и некоторые из этих программ могли бы достигать высочайшей степени обобщения. Мы одновременно уйдем от жестко запрограммированного интеллекта (программного обеспечения, написанного вручную) и от обучаемого геометрического интеллекта (глубокое обучение). Вместо этого мы получим сочетание формальных алгоритмических, поддерживающих возможность абстрагирования и рассуждения модулей и геометрических модулей, поддерживающих неформальное знание и распознавание шаблонов. Вся система будет обучаться без участия или с минимальным участием человека. Родственная подобласть ИИ, которая, как мне кажется, может «взлететь», — это синтез программ, в частности синтез нейронных программ. Синтез программ заключается в создании простых программ с использованием алгоритма поиска (возможно, генетического поиска, как в генетическом программировании) для исследования обширного пространства возможных программ. Поиск останавливается при обнаружении программы, соответствующей заданным требованиям, часто имеющим форму множества пар ввод/вывод. Это очень напоминает машинное обучение: по заданным обучающим данным, имеющим форму пар ввод/вывод, мы находим программу, которая соответствует входным и выходным данным и способна обобщать новые входные данные. Различие в том, что вместо обучения значений параметров в четко определенной программе (нейронной сети) мы генерируем исходный код посредством процесса дискретного поиска. Я определенно ожидаю увидеть в этой области новую волну интереса в ближайшие несколько лет. В частности, я ожидаю появления новой смежной области между глубоким обучением и синтезом программ, где вместо программ на языке общего назначения будут генерироваться нейронные сети (потоки геометрической обработки данных), дополненные широким набором алгоритмических примитивов, таких как циклы for, и многих других (рис. 9 .5). Это должно быть более практично и полезно, чем прямой синтез исходного кода, и существенно расширит диапазон задач, поддающихся решению с применением машинного обучения, — пространство программ, которые можно автоматически генерировать на основе обучающих данных. Современные рекуррентные сети можно считать предтечами таких гибридных алгоритмически-геометрических моделей. Рисунок 9.5 – Программа, сгенерированная одновременно на основе геометрических (распознавание шаблонов, предсказание) и алгоритмических (рассуждения, поиск, память) примитивов. 9.3.4. Непрерывное обучение и повторное использование модульных подпрограммКогда модели станут сложнее и будут основаны на более насыщенных алгоритмических примитивах, эта повышенная сложность потребует увеличить степень повторного использования результатов прежних решений вместо обучения новых моделей с нуля каждый раз, когда возникает новая задача или новый набор данных. Многие наборы данных содержат недостаточно информации, чтобы мы могли приступить к созданию новых, сложных моделей с нуля, и поэтому необходимо будет использовать информацию из прежних наборов данных (представьте, что вам пришлось бы изучать русский язык с нуля всякий раз, когда вы открываете новую книгу, — это было бы просто невозможно). Обучение моделей с нуля для каждой новой задачи неэффективно также из-за большого перекрытия между текущими задачами и прежними. В последние годы неоднократно отмечалось интересное наблюдение: обучение одной и той же модели для решения мало связанных между собой задач дает в результате модель, которая лучше подходит для каждой задачи. Например, обучение одной и той же нейронной модели машинного перевода с английского на немецкий и с французского на итальянский дает в результате модель, которая лучше подходит для каждой пары языков. Аналогично, одновременное обучение модели классификации и сегментации изображений с использованием одной и той же сверточной основы дает в результате модель, которая лучше решает обе задачи. Это вполне объяснимо: в малосвязанных задачах всегда какая-то часть информации является общей, в результате объединенная модель получает доступ к большему объему информации о каждой отдельной задаче, нежели модель, обучаемая для решения какой-то конкретной задачи. В настоящее время под повторным использованием моделей в разных задачах подразумевается использование обученных весов моделей, выполняющих универсальные функции, такие как выделение визуальных признаков. Пример этого вы видели в главе 5. В будущем я ожидаю, что в обиход войдет более обобщенная версия: мы будем использовать не только ранее извлеченные признаки (веса подмоделей), но также архитектуры моделей и процедуры обучения. По мере того как модели будут становиться все более похожими на программы, мы начнем повторно использовать подпрограммы подобно классам и функциям в обычных языках программирования. Представьте современный процесс разработки программного обеспечения: решив определенную задачу (например, поддержку HTTP-запросов в Python), инженер тут же упаковывает решение в абстрактную библиотеку многократного пользования. Другие инженеры, столкнувшись с подобной проблемой в будущем, смогут отыскать существующие библиотеки, загрузить их и использовать в своих проектах. Похожим способом в будущем системы метаобучения смогут собирать новые программы, просеивая глобальную библиотеку высокоуровневых блоков многократного пользования. Когда система обнаружит, что ей нужны схожие подпрограммы для нескольких разных задач, она сможет создать абстрактную многоразовую версию подпрограммы и сохранить ее в глобальной библиотеке (рис. 9 .6). Такой процесс реализует абстракцию: необходимый компонент для достижения экстремального обобщения. О подпрограмме, полезной для решения различных задач в разных областях, можно сказать, что она абстрактная в отношении некоторых аспектов решаемой задачи. Это определение абстракции похоже на понятие абстракции в разработке программного обеспечения. Такие подпрограммы могут быть геометрическими (модули глубокого обучения с предварительно выделенными представлениями) или алгоритмическими (ближе к библиотекам, которыми пользуются современные программисты). Рисунок 9.6 – Система метаобучения, способная быстро разрабатывать модели для конкретных задач, используя примитивы многократного пользования (алгоритмические и геометрические), и таким способом достигать экстремального обобщения. 9.3.5. Долгосрочная перспективаВот какой я вижу долгосрочную перспективу машинного обучения:
|