Все как у людей
Искусственный интеллект на самом деле не такой, каким его представляют в кинематографе. Это набор методов и алгоритмов, некий софт, который может осознавать себя и решать задачи не алгоритмическим путем, то есть не методом, заранее заданным человеком. Создатели И И пытаются решить две фундаментальные задачи. Первая — понять, как работает наш мозг на примере модели, вторая — создать помощника, который будет решать некоторые задачи лучше и быстрее, чем человек. Для робота лучше всего осознавать мир при помощи зрения, тактильное и звуковое восприятие даст роботу не так много информации.
Первая задача, которую решают с помощью компьютерного зрения — классификация, когда нам нужно определить принадлежность объекта к одному из нескольких классов. Допустим, определить, кошка на изображении или собака. Если мы не знаем, где на картинке находится объект, то задачу локализации решаем при помощи детектирования. Третья важная задача — верификация, то есть сравнивание объектов.
Для компьютера изображение — это матрица символов, цифр, в RGB-формате или в параметрах контрастности, если мы ему даем черно-белое изображение. Человеку будет трудно выявить закономерности в такой матрице и сопоставить ей некое изображение, но компьютеру, наоборот, остается непонятным, как интерпретировать тот или иной пиксель. Для того, чтобы компьютер мог понять изображение, ученые пытались «скормить» эту матрицу чисел нейронным сетям (наш подробный разбор того, как работают и зачем еще нужны нейронные сети, читайте здесь). Они имитируют работу человеческого мозга, состоят из отдельных частей, которые объединяются в слои, и соединены друг с другом синапсами — связями, которые имеют некий вес. Изображение подавали на вход нейронной сети в виде вектора: первый пиксель первой строки, первый пиксель второй строки и так далее. Изображение прогонялось через сеть, и на выходе она должна была давать ответ, допустим, кошка изображена или собака. Никаких результатов такой вариант не дал. Еще бы. Представьте, что кто-то взял страницу из книги, читает первую букву первой строки, первую букву второй и так далее сверху вниз, а потом спрашивает у вас, что же было написано на странице.
Разбор по частям
Следующий этап, который решили применить к обработке изображений — feature engineering, попытка выделять некие особенности, но ручным путем. Например, у кошки есть уши, усы; эти особенности отмечали вручную и сравнивали с ними участки изображения. Особо хороших результатов такой подход тоже не дал, хотя это было лучше, чем просто переводить изображение в вектор. А вот в 80-х годах японский ученый Кунихико Фукусима придумал модель сверточной нейронной сети. Первую практическую ее реализацию, которая показала себя успешной, создал француз Ян Лекун в 2001 году — это была сверточная нейронная сеть LeNet-5. Она занималась распознаванием рукописных цифр и букв на чеках, банковских счетах и тому подобном.
От обычной нейронной сети сверточная отличается тем, что в ней есть слой, в котором изображение «ощупывается» специальным фильтром — ядром свертки. Он сохраняет особенности фрагмента вместе с особенностями соседних фрагментов, например, ищет участок, который больше всего похож на определенный символ. Таких фильтров в сверточных нейронных сетях применяется очень много, ищутся прямые линии, косые, изогнутые, и на их основе создается feature map, карта особенностей. Далее размерность изображения уменьшается. Так называемые пулинговые слои берут куски изображения, выбирают из них максимально похожий на требуемый и переносит на следующий слой. Последовательность такая: ощупали изображение, построили feature map, уменьшили размерность, ощупали, уменьшили… Картинка в итоге тоже трансформируется в вектор, но он отличается от вектора, который подавали на вход нейронной сети без сверточных слоев. В нем сохранены все геометрические особенности изображения, и он позволяет с большей уверенностью говорить о наличии каких-либо объектов. Затем вектор с сохраненными особенностями картинки можно подавать на скрытые слои, нейроны, и это позволяет давать очень хорошие результаты: то, что такая нейронная сеть применяется в банковской сфере, является высоким показателем качества ее работы.
Догнать и перегнать
Тем не менее, с 2001 до 2012 года ученые не проявляли большого интереса к нейронным сетям. Вы, наверное, слышали про состязание ImageNet, где компьютер в рамках задачи по классификации должен определить принадлежность объекта к одному из тысячи классов, и у него есть пять попыток. В 2012 году произошла революция: появилась сверточная нейронная сеть от Алекса Крижевского и его команды, которая состояла из восьми сверточных и двух полносвязных слоев, и она показала невероятный отрыв от своих конкурентов. В 2010 году средняя топ-5 ошибка составляла около 28%, в следующем году результат улучшили на 2%, ученые прослеживали линейную зависимость и предрекали, что до 15% удастся спуститься где-то к 2020 году. А вот и нет: в 2012 году Алекс Крижевский показал, что нейронные сети сделают всех и вся. Они стали флагманами в компьютерном зрении и глубоком обучении в целом, стали применяться практически во всех областях нашей жизни. Еще несколько лет назад сверточные нейронные сети не могли победить человека с его уровнем ошибок в 5,33%, но в 2015 году команда из Microsoft с помощью своих глубоких сверточных нейронных сетей из куда большего количества слоев смогли «сделать» человека. То есть теперь компьютер видит лучше нас.
Здесь можно проследить тенденцию: чем больше слоев в нейронной сети, тем лучше она работает. Но де-факто это не так. Сейчас перешли на новый уровень: делают не больше слоев, а больше нейронных сетей. В 2016 году на ImageNet победила команда с уровнем ошибок в 2,9%, которая использовала ансамбль из девяти нейронных сетей.
Для сравнения, в нашем мозге содержится от 80 до 130 млрд нейронов, между ними 10−13 трлн синапсов. Друг с другом соединены не все нейроны, у нейрона может быть от десяти до нескольких сот тысяч связей с другими. Количество операций, которые может выполнять наш мозг, несравнимо больше того, на что способна техника. Он «ест» куда меньше энергии, а количество настраиваемых параметров в нейронных сетях значительно меньше, чем количество параметров в голове человека. Можно подумать, что искусственный интеллект и нейронные сети еще нескоро превзойдут человеческий мозг, но это не совсем так. Современный искусственный интеллект — слабый ИИ, который решает только узкий круг задач — находится на уровне насекомого, но прогресс идет по экспоненте. По оценке ученых, тот момент, когда ИИ сможет превзойти человека, должен наступить с 2020 по 2045 год. После этого начнется настоящая революция, ИИ будет развиваться не за счет человека, а самостоятельно. К чему это приведет — черт его знает, оценки расходятся.
Не Эйнштейн, но старается
В целом сейчас ИИ используется как помощник. Недавно я смотрел видео о том, как квадрокоптер обучили летать по лесу, распознавать тропинки и принимать решения о том, куда лететь, чтобы находить заблудившихся. Я не думаю, что такой квадрокоптер пролетит мимо, злобно ухмыляясь, — пока что ИИ «хороший». Вот еще пример — один из самых полезных роботов, которых я видел: он научился нажимать кнопки, давить рычаги, ставить предметы в нужную позицию на примере других объектов. Когда ему показали кофемашину, он на основе предыдущего опыта смог построить алгоритм и сварить латте. То есть он начал пользоваться машиной, видя ее впервые. Это все еще слабый, но уже очень приятный искусственный интеллект.
Если говорить о других роботах, которые сами принимают решения, очень яркий пример — беспилотные автомобили, например, от Google. Селф-драйв машины тоже отчасти пользуются глубоким обучением и компьютерным зрением, чтобы распознавать объекты: сверху на кузове вы можете увидеть датчик, который с помощью лазера ощупывает окружающую среду, делает о ней предположения и строит модель того, что находится вокруг него. То есть машина постоянно «в курсе», что происходит рядом с ней. Она видит мир, по сути, как человек, но трактует в понятном для себя виде. Вся эта информация передается на компьютер, на котором показаны объекты уже в виде, понятном для человека. Красные объекты — велосипедисты, розовые и зеленые — машины, а желтые — пешеходы. У автомобиля есть множество алгоритмов поведения, причем не забитых вручную: у него есть слабый ИИ, который запрограммирован на принятие самостоятельных решений в зависимости от ситуации. Это сделано с помощью глубоких нейронных сетей, компьютер сам «понимает», что перед ним находится велосипедист, распознает его поднятую руку и притормаживает, давая возможность совершить маневр. Google ставит безопасность превыше всего, и, если вас хотят обогнать или совершить какой-то не всегда законный маневр, машинка не будет упираться и пропустит другого водителя — от греха подальше.
Эта система уже напоминает искусственный интеллект, но все же он слабый: у него есть алгоритм, который, хотя и не запрограммирован, хранится в нейронной сети. Сильный И И будет уже сам принимать решение вне зависимости от того, какой алгоритм у него прописан для решения этой задачи. Если он придумает решение лучше — он им воспользуется.
Если вы хотите заниматься созданием искусственного интеллекта, глубоким обучением или компьютерным зрением, я рекомендую в первую очередь ознакомиться с курсом Эндрю Энджи на Coursera. Он доступен каждому и будет понятен всем — неважно, учитесь вы в школе или в аспирантуре. Следующий курс — нейронные сети для машинного обучения, тоже очень полезный, но перед тем, как приступать к нему, лучше ознакомиться с курсом машинного обучения в целом. Ну, а если вас интересуют новости по глубокому обучению, обязательно вступайте в группу Deep Learning, там постоянно публикуются материалы, статьи и обучающие курсы по этой теме.