Американские ученые Уоррен Мак-Каллок и Уолтер Питтс в 40-х годах ХХ века предложили математическую модель нейрона мозга человека, назвав ее математическим нейроном. Согласно предложенной модели, математический нейрон весьма правдоподобно имитировал структуру и свойства своего прототипа — биологического нейрона мозга. На этом основании Мак-Каллок и Питтс высказали весьма смелое предположение, которое впоследствии легло в основу современной нейроинформатики: если математические нейроны связать между собой проводниками, имитирующими нервные волокна, то такой искусственный мозг будет способен решать интеллектуальные задачи, подобно тому, как это делает естественный человеческий мозг.

Идея Мак-Каллока – Питтса была воплощена в жизнь в 1958 году американским ученым Фрэнком Розенблаттом. Он создал компьютерную программу для IBM-794, эмулирующую деятельность математических нейронов. Это была первая нейронная сеть, которую назвали персептроном...

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

Юрий Валентинович Визильтер — начальник подразделения интеллектуального анализа данных и технического зрения ГосНИИ Авиационных систем, профессор РАН.

— Как люди пришли к идее создания нейронных сетей?

— Идею искусственных нейронных сетей нужно рассматривать в более широком контексте, связанном с попытками создать искусственный интеллект (ИИ). И здесь обычно выделяют два основных направления. Первое из них связано с моделированием человеческих рассуждений. Эта линия восходит к Аристотелю и Евклиду. Все мы знаем, как строятся рассуждения в рамках евклидовой геометрии: есть система постулатов и правила логического вывода. На основе постулатов и правил вывода мы можем доказывать какие-то утверждения, то есть получать новые знания на основе существующих. Именно этот способ "машинного мышления", основанный на автоматизированных логических рассуждениях, в первую очередь, и пытались реализовать, когда впервые заговорили о системах искусственного интеллекта. Предполагалось, что для любой области человеческой деятельности, скажем для городского озеленения, можно придумать достаточно полную и адекватную систему аксиом, после чего, используя правила логического вывода, получать от ИИ ответы на любые возможные вопросы о том, как озеленять город.

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

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

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

Рассмотрим, например, задачу автоматизированной постановки медицинских диагнозов. Пусть человек, больной или здоровый, характеризуется некоторым набором признаков — показателями давления, температуры, содержания в крови определенных веществ, результатами других анализов. Мы получаем вектор чисел и, фактически, вписываем человека (точнее, отображаем свои ограниченные знания о нем) в некое декартово пространство признаков. Как теперь классифицировать больных и здоровых в этом математическом пространстве? Возникает идея классификатора, как набора разделяющих поверхностей, например, гиперплоскостей в пространстве признаков. В простейшем случае двух классов по одну сторону от разделяющей поверхности будет находиться множество примеров одного класса ("больных"), а по другую — другого класса ("здоровых"). При этом компьютер подбирает классификаторы, не пытаясь понять, как бы действовал, решая такую задачу, человек. Он просто старается минимизировать количество ошибок классификации на обучающей выборке данных. Такой ИИ учится решать практические задачи и выполнять различные функции человека, минуя этап выяснения того, каким способом это делает человек. Это и есть основная идея машинного обучения.

Название изображения

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

Почему эти алгоритмы называются искусственными нейронными сетями? Потому что исторически они возникли в рамках попытки математически смоделировать работу естественных нейронных сетей, из которых состоит нервная система человека и животных. Естественный нейрон — это крайне сложный биологический объект, который нейрофизиологи и биологи продолжают активно изучать и по сей день. Однако общие принципы его работы известны достаточно давно. Каждый нейрон имеет множество входных отростков, по которым он связывается с другими нейронами. Затем он перерабатывает полученную информацию, причем, нелинейным образом, и выдает один выходной сигнал. На основе этой очень упрощенной схемы в 50-е годы прошлого века была создана математическая модель нейрона, которая и известна сегодня под названием "искусственный нейрон". Это простейший вычислительный модуль, который принимает на вход некоторый вектор, состоящий из чисел (сигналов или признаков). Все элементы входного вектора умножаются на заданные коэффициенты, после чего складываются и подвергаются нелинейному преобразованию. Зачем на выходе искусственного нейрона нелинейность? У естественных нейронов есть такое свойство, как возбудимость. Естественный нейрон либо возбужден, то есть создает сигнал на выходе, либо "выключен". При компьютерной реализации получается на выходе 1 или 0 соответственно. Конечно, эта математическая модель никак не объясняет, как на самом деле функционируют элементы нервной системы человека. Но когда мы говорим об искусственных нейронах, то подразумеваем просто математические операции, с которыми нам удобно работать в задачах обучения.

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

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

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

Именно осознание того, что вычислительные устройства стали решать задачи, которые раньше были под силу только человеку, навело на мысль, что роботы будут приносить нам кофе. Чего тогда не хватило, чтобы действительно создать функциональный ИИ? Если говорить о нейронных сетях — смелости и данных. У многослойного персептрона было 3, максимум 5 слоев. И даже при такой небольшой глубине переработки информации было не совсем понятно, как учить такие нейронные сети. С каждым новым слоем обучение нейронов первых слоев проходит все сложнее. Поэтому в прошлом веке никто не пытался на практике построить настолько глубокую нейронную сеть, чтобы она обладала необходимой обобщающей способностью для решения действительно интеллектуальных задач. А если бы ее и попробовали создать, то все равно до начала ХХI века не существовало необходимых гигантских баз данных, на которых можно было бы обучить столь масштабную сеть.

Тем не менее, уже в 1992 году были придуманы сверточные нейронные сети, которые должны были решать задачи обработки сигналов и изображений. Можно сказать, что они стали прообразом современных нейронных сетей, с которыми мы сегодня работаем. В то время им просто не хватило изображений для обучения. С появлением интернета и поисковых сетей, нейронные сети получили в распоряжение миллиарды изображений. И в 2011 году были получены первые прорывные результаты: знаменитая сверточная сеть AlexNet впервые продемонстрировала возможность решения задач распознавания визуальных образов на уровне человека.

Почему современные нейронные сети называются глубокими? По сравнению с первыми персептронами Розенблатта у глубоких нейронных сетей тысячи слоев. Раньше нельзя было представить, что можно обучить нейронную сеть с таким количеством слоев — ведь число обучаемых коэффициентов в ней было бы невообразимо огромным. Чтобы уменьшить количество параметров, пошли на ухищрения: была предложена идея свертки. В области компьютерного зрения давно существовала идея "оконного фильтра". Если мы хотим обработать изображение, то должны одинаково обрабатывать каждый его кусочек, поскольку при сдвиге изображения результат обработки не должен меняться. Так работает и сверточный нейрон. Он связан не со всеми точками предыдущего слоя, а лишь с небольшой окрестностью выходной точки. При этом количество коэффициентов, которые нужно рассчитывать, резко уменьшается, ведь изображение обрабатывается по кусочкам. Словно один размноженный нейрон, созданный для анализа небольшого фрагмента ("окна"), скользит по изображению. И так в каждом слое.

"ТАК СУЩЕСТВУЕТ ЛИ УЖЕ СЕЙЧАС, В 2020 ГОДУ ФУНКЦИОНАЛЬНЫЙ («СЛАБЫЙ») ИИ? МНЕ КАЖЕТСЯ, ЗДЕСЬ УМЕСТНА АНАЛОГИЯ С ИСТОРИЕЙ АВИАЦИИ — МЫ НАХОДИМСЯ В ТОЙ ТОЧКЕ РАЗВИТИЯ ТЕХНОЛОГИИ, КОГДА САМОЛЕТ БРАТЬЕВ РАЙТ УЖЕ ВЗЛЕТЕЛ, НО «КОНКОРДЫ» И «ТУ-144» ЕЩЕ ТОЛЬКО ПРЕДСТОИТ СДЕЛАТЬ"

— Какие еще преимущества проявились у глубоких нейронных сетей?

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

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

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

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

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

Такой "собачий" уровень работы глубоких сетей был характерен где-то до 2015-16 гг. Однако в настоящее время в данной области произошли очень серьезные сдвиги. Рассмотрим в качестве теста так называемую задачу ответа на визуальные вопросы, когда компьютер должен отвечать на вопросы людей о содержании изображений или видеороликов. На простые вопросы о содержании картинки нейронная сеть давно уже научилась отвечать. Сколько объектов изображено? К каким классам они относятся? Какой объект изображен сверху, а какой снизу? Подобные вопросы не требуют рассуждений. Нужно лишь распознать то, что мы наблюдаем.

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

Название изображения

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

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

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

— А как подкрепляют нейронные сети?

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

— Каким образом?

— Как нейросети вообще обучаются? Нейронные сети стали успешно учиться благодаря такому алгоритму обучения как обратное распространение ошибки. Пусть в текущий момент времени имеются наборы входов и известные для них наборы выходов, которые сравниваются с ответами "учителя". Скажем, нейросеть решает задачу распознавания цифр от 0 до 9. Мы подаем изображение нуля, нейросеть отвечает — 0. Подаем изображение единицы, нейросеть отвечает — 1. Подаем изображение тройки, нейросеть отвечает — 1. Ошибка! Выходной вектор нейросети не совпадает с правильным ответом "учителя". Приходится анализировать каждый слой в обратном порядке от выхода к входу в поиске причины неувязок. Вообще-то на принятое решение влияет каждый коэффициент каждого нейрона сети, но чем больше слоев сети, тем длиннее формула связи нейронов этого слоя с выходными значениями, а значит, тем слабее их непосредственное влияние на выход. Поэтому мы берем текущий результат и прогоняем его по некоторому количеству входов и сравниваем выходы с ответами "учителя". И на каждом шаге обучения неправильные ответы по возможности корректируются путем небольших изменений параметров нейросети в каждом слое.

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

Таким образом, благодаря развитию глубоких нейронных сетей и их соединению с методами имитации человеческих рассуждений, мы можем рассчитывать на то, что уже в самые ближайшие годы у нас появится функциональный искусственный интеллект. Некоторые даже считают, что он уже создан. Ведь на сегодняшний день практически нет задач, которые решаются исключительно человеком и не могут быть в принципе решены хотя бы на каком-то уровне глубокими нейросетями. Так существует ли уже сейчас, в 2020 году функциональный ("слабый") ИИ? Мне кажется, здесь уместна аналогия с историей авиации — мы находимся в той точке развития технологии, когда самолет братьев Райт уже взлетел, но "Конкорды" и "Ту-144" еще только предстоит сделать.