Как обучают и где применяют искусственные нейронные сети

Как обучают и где применяют искусственные нейронные сети

Доктор физико-математических наук Константин Воронцов рассказывает об искусственных нейронных сетях и их архитектуре. Этот материал — часть курса «Глубокое обучение», который «ПостНаука» делает вместе с организаторами технологического конкурса «UpGreat ПРО//ЧТЕНИЕ».

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


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

Линейный классификатор рассекает это пространство гиперплоскостью на две половины. По одну сторону должны оказаться векторы здоровых, по другую — векторы больных. Аналогично с заемщиками, только это будет уже другое пространство, ведь смысл признаков в нем иной: по одну сторону должны оказаться векторы добросовестных заемщиков, по другую — векторы тех, кто не любит возвращать долги. Чтобы это действительно было так, положение гиперплоскости необходимо правильно сориентировать, развернуть оптимальным образом так, чтобы на известных нам векторах было как можно меньше ошибок. Этот процесс мы и называем обучением, а векторы с известными классификациями — обучающей выборкой. Построенная гиперплоскость обладает способностью классифицировать новые объекты, то есть принимать решения автоматически вместо эксперта: пациент уже здоров или все еще болен; заемщик сможет вернуть долг банку или нет.

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

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

Что такое искусственная нейронная сеть и как ее обучают?

Нейросеть — это суперпозиция огромного числа линейных нейронов. Суперпозиция в математике — это функция от функции от функции. В нашем случае под функциями следует понимать нейроны. Есть нейроны, которые принимают на входе n признаков объекта. Они образуют первый слой сети. На выходе каждый такой нейрон дает одно число, поэтому все вместе они формируют вектор новых признаков объекта. Размерность этого вектора равна числу нейронов в первом слое. Продолжая действовать в том же духе, можно построить второй слой — это нейроны, которые на вход берут уже не исходные признаки, а сформированные первым слоем. Для каждой конкретной задачи мы сами решаем, сколько задать слоев. Обычно чем сложнее задача, тем больше слоев нам понадобится, но и данных тоже нужно будет больше для обучения всех весовых коэффициентов во всех нейронах.

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

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

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

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

Архитектуры нейронных сетей

Каждый слой нейронов преобразует входной вектор в выходной, причем размерность выходного вектора равна числу нейронов в слое. Таких преобразований последовательно можно выполнить много, и это называется многослойной (глубокой) нейронной сетью. Зачем так сложно и почему нужно много слоев? Дело в том, что каждый слой — это набор линейных классификаторов, которые по отдельности довольно примитивны. Каждый слой специализируется на одном относительно простом преобразовании вектора. Вместе они образуют нечто вроде конвейера.

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

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

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

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

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

Где применяются нейросети?

Серьезным катализатором наблюдаемого сейчас бума нейронных сетей послужил международный конкурс для систем распознавания объектов на изображениях ImageNet. В 2012 году Джеффри Хинтон и два его аспиранта Алекс Крижевский и Илья Суцкевер создали для этого конкурса сверточную сеть глубокого обучения AlexNet. ImageNet включал тогда порядка миллиона изображений, которые были собраны в интернете и размечены вручную пользователями с помощью краудсорсинга Amazon’s Mechanical Turk. На тот момент это был огромный объем данных для обучения нейросетей, поскольку раньше алгоритмы распознавания обучали на датасетах, включавших в лучшем случае десятки тысяч изображений. В начале конкурса такие алгоритмы давали около 30% ошибок. Сейчас ImageNet содержит примерно 15 миллионов изображений, разделенных на 22 тысячи категорий.

Сверточная сеть AlexNet позволила резко понизить уровень ошибок до 16% в конкурсе ImageNet. С того момента только глубокие нейронные сети лидировали в конкурсе. 2015 год ознаменовался преодолением барьера в 5% — это уровень ошибок людей, а финальная отметка остановилась на уровне около 2%. Это означает, что созданы технологии распознавания изображений, позволяющие решать огромное количество задач автоматизации — от распознавания лиц и номерных знаков до анализа сцен для беспилотного вождения.

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

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

Недавно появившиеся нейросетевые языковые модели со сложной архитектурой — например, BERT, GPT-1, GPT-2, GPT-3 — научились предсказывать слова в предложениях с той же точностью, с которой это делает человек. Причина такого прогресса заключается в том, что это модели, которые обучаются по огромному массиву текстов, объемом в полтерабайта.

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

Глубокие нейронные сети совершили важный прорыв в технологиях машинного обучения, автоматизировав процессы векторизации сложно структурированных объектов. Раньше для решения каждой задачи обработки изображений, сигналов или текстов необходимо было держать команду инженеров, занимающихся изобретением признаков (feature engineering), и эта работа зачастую оттягивала на себя львиную долю ресурсов в проектах. Глубокие нейронные сети фактически автоматизировали этот вид работ, втянув их в общий контур с обучением моделей. В последнее время намечается еще один похожий прорыв. Методы вроде NAS (Neural Architecture Search) готовы автоматизировать процессы выбора архитектур и подбора гиперпараметров моделей, в том числе для других нейронных сетей. То есть нейронные сети уже обучаются тому, как строить нейронные сети!

Перспективы использования искусственных нейронных сетей

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

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

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

Над материалом работали: Константин Воронцов, доктор физико-математических наук, профессор РАН, руководитель лаборатории Машинного интеллекта МФТИ, заведующий отделом Интеллектуальных систем ФИЦ ИУ РАН, и Ксения Харламова.


Источник: ПостНаука, 04.12.2020, Как обучают и где применяют искусственные нейронные сети

Курс «Глубокое обучение» на ПостНауке: https://postnauka.ru/courses/155976