Введение в глубинное обучение.

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

03.05.2017 Дмитрий Ильвовский, Екатерина Черняк

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

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

Первые работы по глубинному обучению (deep learning) относятся к середине XX века. В начале 1940-х годов Уоррен Маккаллок и Уолтер Питтс предложили формальную модель человеческого мозга - искусственную нейронную сеть, а чуть позже Фрэнк Розенблатт обобщил их работы и создал модель нейронной сети на компьютере. Первые работы по обучению нейронных сетей с использованием алгоритма обратного распространения ошибки относятся к 1960-м годам (алгоритм вычисляет ошибку предсказания и минимизирует ее с помощью методов стохастической оптимизации). Однако оказалось, что, несмотря на красоту и изящество идеи имитации мозга, обучение «традиционных» нейронных сетей занимает много времени, а результаты классификации на небольших наборах данных сопоставимы с результатами, полученными более простыми методами, например машинами опорных векторов (Support Vector Machine, SVM). В итоге нейронные сети были на 40 лет забыты, но сегодня снова стали востребованы при работе с большими объемами неструктурированных данных, изображений и текстов.

С формальной точки зрения нейронная сеть представляет собой направленный граф заданной архитектуры, вершины или узлы которого называются нейронами . На первом уровне графа находятся входные узлы, на последнем - выходные узлы, число которых зависит от задачи. Например, для классификации на два класса на выходной уровень сети можно поместить один или два нейрона, для классификации на k классов - k нейронов. Все остальные уровни в графе нейронной сети принято называть скрытыми слоями. Все нейроны, находящиеся на одном уровне, связаны ребрами со всеми нейронами следующего уровня, каждое ребро обладает весом. Каждому нейрону ставится в соответствие функция активации, моделирующая работу биологических нейронов: они «молчат», когда входной сигнал слаб, а когда его значение превышает некий порог, срабатывают и передают входное значение дальше по сети. Задача обучения нейронной сети на примерах (то есть на парах «объект - правильный ответ») заключается в поиске весов ребер, наилучшим образом предсказывающих правильные ответы. Ясно, что именно архитектура - топология строения графа нейронной сети - является ее важнейшим параметром. Хотя формального определения для «глубинных сетей» пока нет, принято считать глубинными все нейронные сети, состоящие из большого числа слоев или имеющие «нестандартные» слои (например, содержащие только избранные связи или использующие рекурсию с другими слоями).

Примером наиболее успешного применения нейронных сетей пока является анализ изображений, однако нейросетевые технологии коренным образом изменили и работу с текстовыми данными. Если раньше каждый элемент текста (буква, слово или предложение) нужно было описывать с помощью множества признаков различной природы (морфологических, синтаксических, семантических и т. д.), то теперь во многих задачах необходимость в сложных описаниях пропадает. Теоретики и практики нейросетевых технологий часто говорят об «обучении представлению» (representation learning) - в сыром тексте, разбитом только на слова и предложения, нейронная сеть способна найти зависимости и закономерности и самостоятельно составить признаковое пространство. К сожалению, в таком пространстве человек ничего не поймет - во время обучения нейронная сеть ставит каждому элементу текста в соответствие один плотный вектор, состоящих из неких чисел, представляющих обнаруженные «глубинные» взаимосвязи. Акцент при работе с текстом смещается от конструирования подмножества признаков и поиска внешних баз знаний к выбору источников данных и разметке текстов для последующего обучения нейронной сети, для которого требуется существенно больше данных по сравнению со стандартными методами. Именно из-за необходимости использовать большие объемы данных и из-за слабой интерпретируемости и непредсказуемости нейронные сети не востребованы в реальных приложениях промышленного масштаба, в отличие от других, хорошо зарекомендовавших себя алгоритмов обучения, таких как случайный лес и машины опорных векторов. Тем не менее нейронные сети используются в целом ряде задач автоматической обработки текстов (рис. 1).

Одно из самых популярных применений нейронных сетей - построение векторов слов, относящихся к области дистрибутивной семантики: считается, что значение слова можно понять по значению его контекста, по окружающим словам. Действительно, если нам незнакомо какое-то слово в тексте на известном языке, то в большинстве случаев можно угадать его значение. Математической моделью значения слова служат вектора слов: строки в большой матрице «слово-контекст», построенной по достаточно большому корпусу текстов. В качестве «контекстов» для конкретного слова могут выступать соседние слова, слова, входящие с данным в одну синтаксическую или семантическую конструкцию, и т. д. В клетках такой матрицы могут быть записаны частоты (сколько раз слово встретилось в данном контексте), но чаще используют коэффициент положительной попарной взаимной информации (Positive Pointwise Mutual Information, PPMI), показывающий, насколько неслучайным было появление слова в том или ином контексте. Такие матрицы вполне успешно могут быть использованы для кластеризации слов или для поиска слов, близких по смыслу к искомому слову.

В 2013 году Томаш Миколов опубликовал работу , в которой предлагал использовать нейронные сети для обучения векторам слов, но для меньшей размерности: по кортежам (слово, контексты) обучалась нейронная сеть простейшей архитектуры, на выходе каждому слову в соответствие ставился вектор из 300 элементов. Оказалось, что такие вектора лучше передают семантическую близость слов. Например, на них можно определить арифметические операции сложения и вычитания смыслов и получить следующие уравнения: «Париж – Франция + Россия = Москва»; «король – мужчина + женщина = королева». Или найти лишнее слово в ряду «яблоко, груша, вишня, котенок». В работе были представлены две архитектуры, skip-gram и CBOW (Continuous Bag of Words), под общим названием word2vec. Как позже было показано в , word2vec - это не что иное, как факторизация матрицы «слово-контекст» с весами PPMI. Сейчас принято относить word2vec к дистрибутивной семантике, а не к глубинному обучению , однако исходным толчком для создания этой модели послужило применение нейронной сети. Кроме того, оказалось, что вектора word2vec служат удобным представлением смысла слова, которое можно подавать на вход глубинным нейронным сетям, используемым для классификации текстов.

Задача классификации текстов - одна из самых актуальных для маркетологов, особенно когда речь идет об анализе мнений или отношения потребителя к какому-то товару или услуге, поэтому исследователи постоянно работают над повышением качества ее решения. Однако анализ мнений является задачей классификации скорее предложений, а не текстов - в положительном отзыве пользователь может написать одно-два отрицательно окрашенных предложения, и их тоже важно уметь определять и анализировать. Известная трудность в классификации предложений заключается в переменной длине входа - поскольку предложения в текстах бывают произвольной длины, непонятно, как подать их на вход нейронной сети. Один из подходов заимствован из области анализа изображений и заключается в использовании сверточных нейронных сетей (convolutional neural network, CNN) (рис. 2).

На вход сверточной нейронной сети подается предложение, в котором каждое слово уже представлено вектором (вектор векторов). Как правило, для представления слов векторами используются заранее обученные модели word2vec. Сверточная нейронная сеть состоит из двух слоев: «глубинного» слоя свертки и обычного скрытого слоя. Слой свертки, в свою очередь, состоит из фильтров и слоя «субдискретизации». Фильтр - это нейрон, вход которого формируется при помощи окон, передвигающихся по тексту и выбирающих последовательно некоторое количество слов (например, окно длины «три» выберет первые три слова, слова со второго по четвертое, с третьего по пятое и т. д.). На выходе фильтра формируется один вектор, агрегирующий все вектора слов, в него входящих. Затем на слое субдискретизации формируется один вектор, соответствующий всему предложению, который вычисляется как покомпонентный максимум из всех выходных векторов фильтров. Сверточные нейронные сети просты в обучении и реализации. Для их обучения используется стандартный алгоритм обратного распространения ошибки, а за счет того, что веса фильтров равномерно распределены (вес i-го слова из окна одинаков для любого фильтра), число параметров у сверточной нейронной сети невелико. С точки зрения компьютерной лингвистики сверточные нейронные сети - мощный инструмент для классификации, за которым, впрочем, не стоит никакой языковой интуиции, что существенно затрудняет анализ ошибок алгоритма.

Классификация последовательностей - это задачи, в которых каждому слову нужно поставить в соответствие одну метку: морфологический разбор (каждому слову ставится в соответствие часть речи), извлечение именованных сущностей (определение того, является ли каждое слово частью имени человека, географического названия и пр.) и т. д. При классификации последовательностей используются методы, позволяющие учитывать контекст слова: если предыдущее слово - часть имени человека, то текущее тоже может быть частью имени, но вряд ли будет частью названия организации. Реализовать это требование на практике помогают рекуррентные нейронные сети, расширяющие идею языковых моделей (language model), предложенных в конце прошлого века. Классическая языковая модель предсказывает вероятность того, что слово i встретится после слова i-1. Языковые модели можно использовать и для предсказания следующего слова: какое слово с наибольшей вероятностью встретится после данного?

Для обучения языковых моделей нужны большие корпусы - чем больше обучающий корпус, тем больше пар слов модель «знает». Использование нейронных сетей для разработки языковых моделей позволяет сократить объем хранимых данных. Представим себе простую архитектуру сети, в которой на вход поступают слова i-2 и i-1, а на выходе нейронная сеть предсказывает слово i. В зависимости от числа скрытых слоев и количества нейронов на них, обученная сеть может быть сохранена как некоторое количество плотных матриц относительно небольшой размерности. Иначе говоря, вместо обучающего корпуса и всех пар слов в нем можно хранить лишь несколько матриц и список уникальных слов. Однако такая нейронная языковая модель не позволяет учитывать длинные связи между словами. Эту проблему решают рекуррентные нейронные сети (рис. 3), в которых внутреннее состояние скрытого слоя не только обновляется после того, как на вход приходит новое слово, но и передается на следующий шаг. Таким образом, скрытый слой рекуррентной сети принимает входы двух типов: состояние скрытого слоя на предыдущем шаге и новое слово. Если рекуррентная нейронная сеть обрабатывает предложение, то скрытые состояния позволяют запоминать и передавать длинные связи в предложениях. Экспериментально неоднократно было проверено, что рекуррентные нейронные сети запоминают род субъекта в предложении и выбирают правильные местоимения (она - ее, он - его) при генерации предложения, однако показать в явном виде, как именно такого рода информация хранится в нейронной сети или как она используется, до сих пор не удалось.

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

Развитием рекуррентных нейронных сетей стали архитектуры вида Seq2seq, состоящие из двух соединенных рекуррентных сетей, одна из которых отвечает за представление и анализ входа (например, вопроса или предложения на одном языке), а вторая - за генерацию выхода (ответа или предложения на другом языке). Сети Seq2seq лежат в основе современных систем «вопрос-ответ», чат-ботов и систем машинного перевода.

Кроме сверточных нейронных сетей, для анализа текстов применяются так называемые автокодировщики, используемые, например, для создания эффектов на изображениях в Photoshop или Instagram и нашедшие применение в лингвистике в задаче снижения размерности (поиск проекции вектора, представляющего текст, на пространство заведомо меньшей размерности). Проекция на двумерное пространство делает возможным представление текста в виде точки на плоскости и позволяет наглядно изобразить коллекцию текстов как множество точек, то есть служит средством предварительного анализа перед кластеризацией или классификацией текстов. В отличие от задачи классификации, в задаче снижения размерности нет четких критериев качества, однако изображения, получаемые при использовании автокодировщиков, выглядят достаточно «убедительно». С математической точки зрения автокодировщик - это нейронная сеть без учителя, которая обучается линейной функции f(x) = x и состоит из двух частей: кодировщика и декодировщика. Кодировщик - это сеть с несколькими скрытыми слоями с уменьшающимся количеством нейронов. Декодировщик - аналогичная сеть с увеличивающимся количеством нейронов. Их соединяет скрытый слой, на котором столько нейронов, сколько должно быть размерностей в новом пространстве меньшей размерности, и именно он отвечает за снижение размерности. Как и сверточные нейронные сети, автокодировщик не имеет никакой лингвистической интерпретации, поэтому может считаться скорее инженерным, чем аналитическим инструментом.

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

Литература

  1. Tomas Mikolov et. al. Efficient Estimation of Word Representations in Vector Space, arxiv.org. URL: http://arxiv.org/pdf/1301.3781.pdf
  2. Levy Omer, Yoav Goldberg, Ido Dagan. Improving distributional similarity with lessons learned from word embeddings. Transactions of the Association for Computational Linguistics 3. - 2015. - P. 211–225. URL: https://www.transacl.org/ojs/index.php/tacl/article/view/570/124 (дата обращения: 18.05.2017).
  3. Павел Велихов. Машинное обучение для понимания естественного языка // Открытые Системы.СУБД. - 2016. - № 1. - С.18–21. URL: (дата обращения: 18.05.2017).
  4. Christopher Manning. Computational linguistics and deep learning. Computational Linguistics. - 2016. URL: http://www.mitpressjournals.org/doi/full/10.1162/COLI_a_00239#.WQH8MBhh2qA (дата обращения: 18.05.2017).

Дмитрий Ильвовский ([email protected]) - сотрудник Международной лаборатории интеллектуальных систем и структурного анализа, Екатерина Черняк ([email protected]) - преподаватель центра непрерывного образования, факультет компьютерных наук, НИУ ВШЭ (Москва). Работа выполнена в рамках Программы фундаментальных исследований НИУ ВШЭ.



— Лаборатория молодая: в нашей команде пока только пять человек, работы — непаханое поле, но мы серьезно настроены. Основным направлением выбрали разработку и исследование диалоговых систем — онлайн-консультанты, помощники, которые компетентно отвечают на все вопросы пользователя. У многих компаний и сейчас есть такие сервисы, однако либо они плохо работают, постоянно выдавая ошибки, либо по ту сторону монитора сидит живой человек, который не может быть в сети 24/7, к тому же ему надо платить. Мы хотим разработать алгоритм, который позволит создавать роботов, способных к полноценной беседе. Такой робот сможет за считанные минуты купить вам билет на самолет или проконсультировать по любому насущному вопросу. Сейчас такого уровня систем не существует.

Нейронные сети и искусственный интеллект

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

Отличие искусственного интеллекта от всех алгоритмов прошлого поколения заключается в том, что обученная нейронная сеть действует не по заданному пути, а самостоятельно ищет способы наиболее эффективного достижения цели. Работа одиночного компьютерного «нейрона» выглядит так: для обучения на вход программы подаются объекты, принадлежащие двум типам — А и Б — и несущие в себе какое-то числовое значение. Программа, исходя из данных в обучающей выборке, понимает, какие диапазоны этого значения соответствуют объектам А, а какие — Б, и впоследствии может отличать их самостоятельно. В реальных задачах система должна различать множество типов, у каждого из которых, в свою очередь, могут быть десятки свойств. Для их решения необходима более сложная структура из слоев нейронов, серьезные вычислительные мощности и большое количество обучающих тестов. XXI век стал началом эры, в которой эти технологии уже могут применяться для решения ежедневных задач.

Михаил Бурцев, заведующий лабораторией:

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

Диалоги сотрудников лаборатории с нейронной сетью

Команда: сегодня и завтра

Лаборатория сотрудничает с крупными исследовательскими центрами на базе НИЯУ МИФИ и Курчатовского института. В ее деятельности также принимают участие и иностранные специалисты в области машинного обучения и нейроинформатики, например Сергей Плис из The Mind Research Network. Помимо этого, регулярно проводятся мероприятия, нацеленные на популяризацию деятельности лаборатории и поиск молодых талантов. Победа в хакатоне или успешное прохождение курсов дают неплохие шансы попасть в лабораторию.

Валентин Малых, сотрудник лаборатории:

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

Философия DeepHack

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

Владислав Беляев, сотрудник лаборатории:

— В этом и в прошлом году мы устраивали хакатоны по машинному обучению. Заявок было очень много, причем не только из России и СНГ, но и из Европы, из Штатов. Во время хакатона читали лекции ученые из Оксфорда и Стэнфорда, Google DeepMind и OpenAI , ну и российские коллеги, конечно. Сейчас мы готовим курс по нейронным сетям, расскажем все с самого начала и до конца: от биологической концепции и основных моделях в программировании до собственно прикладного применения и конкретной реализации.

Свободное время

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

Михаил Бурцев, заведующий лабораторией:

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

Трудоустройство

Лаборатория будет расширяться и уже сейчас ищет новых сотрудников. Самый простой способ получить место — пройти двухмесячную стажировку , на которую отбирают по итогам собеседования. Необходимым условием прохождения собеседования является выполнение части задач курса Deep Learning . Во время стажировки есть возможность поучаствовать в выполнении оплачиваемых заказных проектов. Финансирование лаборатории пока не налажено, однако, по словам сотрудников лаборатории, в ближайшее время эта проблема будет решена. «Попасть к нам сейчас — значит получить шанс стать «отцом-основателем» лаборатории в самом перспективном направлении информационных технологий», — говорит Михаил Бурцев.

Изображения и фотографии предоставила лаборатория нейронных сетей и глубокого обучения МФТИ. Фотограф: Евгений Пелевин.

» (Manning Publications).

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

Глубинное обучение: геометрический вид

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

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

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

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

Ограничения глубинного обучения

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

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

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

Риск антропоморфизации моделей машинного обучения

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

В частности, наиболее ярко это проявляется в «состязательных примерах», то есть образцах входных данных сети глубинного обучения, специально подобранных, чтобы их неправильно классифицировали. Вы уже знаете, что можно сделать градиентное восхождение в пространстве входных данных для генерации образцов, которые максимизируют активацию, например, определённого фильтра свёрточной нейросети - это основа техники визуализации, которую мы рассматривали в главе 5 (примечание: книги «Глубинное обучение с Python »), также как алгоритма Deep Dream из главы 8. Похожим способом, через градиентное восхождение, можно слегка изменить изображение, чтобы максимизировать предсказание класса для заданного класса. Если взять фотографию панды и добавить градиент «гиббон», мы можем заставить нейросеть классифицировать эту панду как гиббона. Это свидетельствует как о хрупкости этих моделей, так и о глубоком различии между трансформацией со входа на выход, которой она руководствуется, и нашим собственным человеческим восприятием.

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

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

Локальное обобщение против предельного обобщения

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

Люди способны на гораздо большее, чем преобразование немедленного стимула в немедленный отклик, как нейросеть или, может быть, насекомое. Люди удерживают в сознании сложные, абстрактные модели текущей ситуации, самих себя, других людей, и могут использовать эти модели для предсказания различных возможных вариантов будущего, и выполнять долговременное планирование. Они способны на объединение в единое целое известных концепций, чтобы представить то, что они никогда не знали раньше - как рисование лошади в джинсах, например, или изображение того, что бы они сделали, если бы выиграли в лотерею. Способность мыслить гипотетически, расширять свою модель ментального пространства далеко за пределы того, что мы напрямую испытывали, то есть, способность делать абстракции и рассуждения , пожалуй, определяющая характеристика человеческого познания. Я называю это «предельным обобщением»: способность приспосабливаться к новым, никогда не испытанным ранее ситуациям, используя очень мало данных либо вовсе не используя никаких данных.

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

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

Выводы

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

Чтобы снять некоторые из этих ограничений и начать конкурировать с человеческим мозгом, нам нужно отойти от прямого преобразования со входа в выход и перейти к рассуждениям и абстракциям . Возможно, подходящей основой для абстрактного моделирования различных ситуация и концепций могут быть компьютерные программы. Мы говорили раньше (примечание: в книге «Глубинное обучение с Python »), что модели машинного обучения можно определить как «обучаемые программы»; в данный момент мы можем обучать только узкое и специфическое подмножество всех возможных программ. Но что если бы мы могли обучать каждую программу, модульно и многократно? Посмотрим, как мы можем к этому придти.

Будущее глубинного обучения

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

На высоком уровне вот основные направления, которые я считаю перспективными:

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

Итак, вперёд.

Модели как программы

Как мы заметили раньше, необходимым трансформационным развитием, которое можно ожидать в области машинного обучения, является уход от моделей, выполняющих чисто распознавание шаблонов и способных только на локальное обобщение , к моделям, способным на абстракции и рассуждения , которые могут достичь предельного обобщения . Все нынешние программы ИИ с базовым уровнем рассуждений жёстко запрограммированы людьми-программистами: например, программы, которые полагаются на поисковые алгоритмы, манипуляции с графом, формальную логику. Так, в программе DeepMind AlphaGo бóльшая часть «интеллекта» на экране спроектирована и жёстко запрограммирована экспертами-программистами (например, поиск в дереве по методу Монте-Карло); обучение на новых данных происходит только в специализированных подмодулях - сети создания ценностей (value networks) и сети по вопросам политики (policy networks). Но в будущем такие системы ИИ могут быть полностью обучены без человеческого участия.

Как этого достичь? Возьмём хорошо известный тип сети: RNN. Что важно, у RNN немного меньше ограничений, чем у нейросетей прямого распространения. Это потому что RNN представляют собой немного больше, чем простые геометрические преобразования: это геометрические преобразования, которые осуществляются непрерывно в цикле for . Временной цикл for задаётся разработчиком: это встроенное допущение сети. Естественно, сети RNN всё ещё ограничены в том, что они могут представлять, в основном, потому что каждый их шаг по-прежнему является дифференцируемым геометрическим преобразованием и из-за способа, которым они передают информацию шаг за шагом через точки в непрерывном геометрическом пространстве (векторы состояния). Теперь представьте нейросети, которые бы «наращивались» примитивами программирования таким же способом, как циклы for - но не просто одним-единственным жёстко закодированным циклом for с прошитой геометрической памятью, а большим набором примитивов программирования, с которыми модель могла бы свободно обращаться для расширения своих возможностей обработки, таких как ветви if , операторы while , создание переменных, дисковое хранилище для долговременной памяти, операторы сортировки, продвинутые структуры данных вроде списков, графов, хеш-таблиц и многого другого. Пространство программ, которые такая сеть может представлять, будет гораздо шире, чем могут выразить существующие сети глубинного обучения, и некоторые из этих программ могут достичь превосходной силы обобщения.

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

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

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


Рисунок: Обученная программа одновременно полагается на геометрические примитивы (распознавание шаблонов, интуиция) и алгоритмические примитивы (аргументация, поиск, память).

За пределами обратного распространения и дифференцируемых слоёв

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

Кроме того, обратное распространение имеет рамки end-to-end, что подходит для обучения хороших сцепленных преобразований, но довольно неэффективно с вычислительной точки зрения, потому что не использует полностью модульность глубинных сетей. Чтобы повысить эффективность чего бы то ни было, есть один универсальный рецепт: ввести модульность и иерархию. Так что мы можем сделать само обратное распространение более эффективным, введя расцепленные модули обучения с определённым механизмом синхронизации между ними, организованном в иерархическом порядке. Эта стратегия частично отражена в недавней работе DeepMind по «синтетическим градиентам». Я ожидаю намного, намного больше работ в этом направлении в ближайшем будущем.

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

Автоматизированное машинное обучение

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

Сейчас бóльшую часть времени разработчик систем глубинного обучения бесконечно модифицирует данные скриптами Python, затем долго настраивает архитектуру и гиперпараметры сети глубинного обучения, чтобы получить работающую модель - или даже чтобы получить выдающуюся модель, если разработчик настолько амбициозен. Нечего и говорить, что это не самое лучшее положение вещей. Но ИИ и здесь может помочь. К сожалению, часть по обработке и подготовке данных трудно автоматизировать, поскольку она часто требует знания области, а также чёткого понимания на высоком уровне, чего разработчик хочет достичь. Однако настройка гиперпараметров - это простая поисковая процедура, и в данном случае мы уже знаем, чего хочет достичь разработчик: это определяется функцией потерь нейросети, которую нужно настроить. Сейчас уже стало обычной практикой устанавливать базовые системы AutoML, которые берут на себя большую часть подкрутки настроек модели. Я и сам установил такую, чтобы выиграть соревнования Kaggle.

На самом базовом уровне такая система будет просто настраивать количество слоёв в стеке, их порядок и количество элементов или фильтров в каждом слое. Это обычно делается с помощью библиотек вроде Hyperopt, которые мы обсуждали в главе 7 (примечание: книги «Глубинное обучение с Python »). Но можно пойти намного дальше и попробовать получить обучением соответствующую архитектуру с нуля, с минимальным набором ограничений. Это возможно с помощью обучения с подкреплением, например, или с помощью генетических алгоритмов.

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

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

Пожизненное обучение и повторное использование модульных подпрограмм

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

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

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

Подумайте, как выглядит сегодня процесс разработки программного обеспечения: как только инженер решает определённую проблему (HTTP-запросы в Python, например), он упаковывает её как абстрактную библиотеку для повторного использования. Инженеры, которым в будущем встретится похожая проблема, просто ищут существующие библиотеки, скачивают и используют их в своих собственных проектах. Таким же образом в будущем системы метаобучения смогут собирать новые программы, просеивая глобальную библиотеку высокоуровневых повторно используемых блоков. Если система начнёт разрабатывать похожие подпрограммы для нескольких разных задач, то выпустит «абстрактную» повторно используемую версию подпрограммы и сохранит её в глобальной библиотеке. Такой процесс откроет возможность для абстракции , необходимого компонента для достижения «предельного обобщения»: подпрограмма, которая окажется полезной для многих задач и областей, можно сказать, «абстрагирует» некий аспект принятия решений. Такое определение «абстракции» похоже не понятие абстракции в разработке программного обеспечения. Эти подпрограммы могут быть или геометрическими (модули глубинного обучения с предобученными представлениями), или алгоритмическими (ближе к библиотекам, с которыми работают современные программисты).

Рисунок: Метаобучаемая система, способная быстро разработать специфические для задачи модели с применением повторно используемых примитивов (алгоритмических и геометрических), за счёт этого достигая «предельного обобщения».

В итоге: долговременное видение

Вкратце, вот моё долговременное видение для машинного обучения:
  • Модели станут больше похожи на программы и получат возможности, которые простираются далеко за пределы непрерывных геометрических преобразований исходных данных, с чем мы работаем сейчас. Возможно, эти программы будут намного ближе к абстрактным ментальным моделям, которые люди поддерживают о своём окружении и о себе, и они будут способны на более сильное обобщение благодаря своей алгоритмической природе.
  • В частности, модели будут смешивать алгоритмические модули с формальными рассуждениями, поиском, способностями к абстракции - и геометрические модули с неформальной интуицией и распознаванием шаблонов. AlphaGo (система, потребовавшая интенсивного ручного программирования и разработки архитектуры) представляет собой ранний пример, как может выглядеть слияние символического и геометрического ИИ.
  • Они будут выращиваться автоматически (а не писаться вручную людьми-программистами), с использованием модульных частей из глобальной библиотеки повторно используемых подпрограмм - библиотеки, которая эволюционировала путём усвоения высокопроизводительных моделей из тысяч предыдущих задач и наборов данных. Как только метаобучаемая система определила общие шаблоны решения задач, они преобразуются в повторно используемые подпрограммы - во многом как функции и классы в современном программировании - и добавляются в глобальную библиотеку. Так достигается способность абстракции .
  • Глобальная библиотека и соответствующая система выращивания моделей будет способна достичь некоторой формы человекоподобного «предельного обобщения»: столкнувшись с новой задачей, новой ситуацией, система сможет собрать новую работающую модель для этой задачи, используя очень малое количество данных, благодаря: 1) богатым программоподобным примитивам, которые хорошо делают обобщения и 2) обширному опыту решения похожих задач. Таким же образом, как люди могут быстро изучить новую сложную видеоигру, потому что у них есть предыдущий опыт многих других игр и потому что модели на основе предыдущего опыта являются абстратктными и программоподобными, а не простым преобразованием стимула в действие.
  • По существу, эту непрерывно обучающуюся систему по выращиванию моделей можно интерпретировать как Сильный Искусственный Интеллект. Но не ждите наступления какого-то сингулярного робоапокалипсиса: он является чистой фантазией, которая родилась из большого списка глубоких недоразумений в понимании интеллекта и технологий. Впрочем, этой критике здесь не место.

Грядущая революция умных роботов предсказывалась каждые десять лет начиная с 1950-х годов. Тем не менее, она так и не произошла. Прогресс в области искусственного интеллекта происходил неуверенно, порою скучно, неся многим энтузиастам разочарование. Видимые успехи - компьютер Deep Blue, созданный в середине 1990-х IBM и обыгравший в 1997 году Гарри Каспарова в шахматы, или появление в конце 1990-х электронного переводчика - были скорее результатом «грубых» расчетов, чем переносом механизмов человеческого восприятия на процессы компьютерных вычислений.

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

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

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

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

Замечательным примером использования нейронных сетей с глубинным обучением является распознавание одинаковых объектов, сфотографированных под разными углами или в разных позах (если речь идет о человеке или о животном). Алгоритмы, использующие попиксельное сканирование, «думают» что перед ними два разных изображения, тогда как «умные» нейронные сети «понимают», что перед ними тот же самый объект. И наоборот - изображения двух собак разных пород, сфотографированных в одинаковой позе, прежними алгоритмами могли восприниматься как фотографии одной и той же собаки. Нейронные сети с глубинным обучением могут выявить такие детали изображений, которые помогут им различить животных.

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