Глубокое обучение на Python. 2-е межд. издание - Франсуа Шолле - E-Book

Глубокое обучение на Python. 2-е межд. издание E-Book

Франсуа Шолле

0,0

Beschreibung

Глубокое обучение динамично развивается, открывая все новые и новые возможности создания ПО. Это не только автоматический перевод текстов с одного языка на другой, распознавание изображений, но и многое другое. Глубокое обучение превратилось в важный навык, необходимый каждому разработчику. Keras и TensorFlow облегчают жизнь разработчикам и позволяют легко работать даже тем, кто не имеет фундаментальных знаний в области математики или науки о данных. Настала пора познакомиться с глубоким обучением и мощной библиотекой Keras! В этом расширенном и дополненном издании создатель библиотеки Keras — Франсуа Шолле — делится знаниями и с новичками, и с опытными специалистами. Иллюстрации и наглядные примеры помогут вам разобраться с самыми сложными вопросами и концепциями. Вы быстро приобретете навыки, необходимые для разработки приложений глубокого обучения.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 611

Veröffentlichungsjahr: 2023

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Франсуа Шолле
Глубокое обучение на Python. 2-е межд. издание

Переводчик А. Киселев

Франсуа Шолле

Глубокое обучение на Python. 2-е межд. издание. — СПб.: Питер, 2022.

ISBN 978-5-4461-1909-7

© ООО Издательство "Питер", 2022

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

Моему сыну Сильвену: надеюсь, что когда-нибудь ты прочтешь эту книгу!

Предисловие

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

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

Чтобы начать внедрение глубокого обучения во все необходимые задачи, мы должны сделать его доступным как можно большему числу людей, включая неспециалистов (которые не являются инженерами-исследователями или аспирантами). Раскрытие всего потенциала этой технологии требует полной ее демократизации. Сегодня мы находимся на пике исторического перехода, когда глубокое обучение выходит из академических лабораторий и отделов исследований крупных технологических компаний и становится неотъемлемой частью инструментария каждого разработчика — подобно тому как начинали распространяться веб-технологии в конце 1990-х. В 1998 году для создания сайта или приложения потребовалась бы небольшая команда инженеров. А теперь подобные продукты для своего бизнеса или сообщества может разработать любой желающий. В недалеком будущем специалисту хватит лишь базовых навыков программирования, чтобы воплотить свою идею интеллектуального приложения, обучающегося на данных.

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

Данная книга — еще один шаг на пути популяризации глубокого обучения. Фреймворку Keras всегда требовался сопроводительный курс, который одновременно освещал бы основы глубокого обучения, показывал примеры его использования и демонстрировал лучшие практики в применении глубокого обучения. В 2016–2017 годах я подготовил такой курс — и он нашел воплощение в первом издании этой книги, вышедшем в декабре 2017 года. Книга быстро стала бестселлером по машинному обучению — она разошлась тиражом более 50 000 экземпляров и была переведена на 12 языков, в том числе на русский (2018 год).

С момента выхода первого издания сфера глубокого обучения быстро развивалась: была выпущена версия TensorFlow 2, продолжила набирать популярность архитектура Transformer и т.д. Как результат, в конце 2019 года я решил обновить книгу. Сначала по простоте душевной я думал, что она изменится примерно наполовину и останется плюс-минус такого же объема, как и первое издание. Но после двух лет работы книга выросла на треть и обновилась почти на три четверти. Так что перед вами не просто исправленное и дополненное издание — это совершенно новая книга.

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

Благодарности

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

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

Благодарю компанию Google за поддержку Keras. Было очень приятно, когда там решили использовать мой проект в качестве высокоуровневого API для TensorFlow1. Бесшовная интеграция Keras и TensorFlow выгодна пользователям обоих продуктов. Связка TensorFlow и Keras делает технологии глубокого обучения доступными для широкого круга людей.

Хочу поблагодарить сотрудников издательства Manning, сделавших возможным выпуск этой книги: издателя Марджана Бейса и всех сотрудников редакторского и технического отделов, в том числе Майкла Стивенса, Дженнифер Стоут, Александра Драгосавлевича и многих других, чья работа осталась «за кадром».

Большое спасибо техническим рецензентам: Билли О’Каллагану, Кристиану Вайстаннеру, Конраду Тейлору, Даниэле Сапата Риеско, Дэвиду Джейкобсу, Эдмону Беголи, доктору Эдмунду Рональду, Хао Лю, Джареду Дункану, Ки Наму, Кену Фрикласу, Челлу Янссону, Милану Шаренацу, Нгуену Као, Никосу Канакарису, Оливеру Кортену, Раушану Джа, Саяку Полу, Серджио Говони, Шашанку Поласу, Тодду Куку, Витону Витанису — и всем остальным, кто прислал свои замечания к рукописи этой книги.

Особое спасибо Фрэнсису Буонтемпо, выступившему в роли научного редактора, и Карстену Стробеку, выполнившему техническую редактуру книги.

1 Открытая программная библиотека алгоритмов машинного обучения, разработанная компанией Google для решения задач построения и обучения нейронных сетей с целью автоматического поиска и классификации образов, качество которых достигает качества человеческого восприятия. — Примеч. пер.

О книге

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

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

В примерах в качестве внутреннего механизма взяты фреймворк глубокого обучения Keras, написанный на Python, и библиотека TensorFlow 2. Они демонстрируют новейшие по состоянию на 2021 год приемы их использования.

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

Кому адресована эта книга

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

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

• если вы эксперт в области глубокого обучения, желающий освоить фреймворк Keras, в книге вы найдете лучший интенсивный его курс;

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

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

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

О примерах кода

Книга содержит множество примеров исходного кода как в листингах, так и внутри основного текста. В обоих случаях код набран такиммоношириннымшрифтом, чтобы можно было выделить его на фоне других материалов.

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

Все примеры кода из этой книги доступны на сайте издательства Manning: https://www.manning.com/books/deep-learning-with-python-second-edition, а также в блокнотах Jupyter на GitHub: https://github.com/fchollet/deep-learning-with-python-notebooks. Их можно запускать с помощью Google Colaboratory — бесплатной среды для блокнотов Jupyter. Подключение к интернету и браузер — все, что вам нужно, чтобы начать знакомство с глубоким обучением.

Об авторе

Франсуа Шолле является создателем Keras — одного из самых широко используемых фреймворков глубокого обучения. В настоящее время работает в Google, где разрабатывает программное обеспечение и возглавляет команду Keras. Кроме того, он занимается исследованиями в области абстрагирования, формализации рассуждений и обобщения в сфере искусственного интеллекта.

 

Иллюстрация на обложке

Иллюстрация на обложке подписана как «Одежда персидской женщины в 1568 году». Она взята из книги Collection of the Dresses of Different Nations, Ancient and Modern («Коллекция костюмов разных народов, античных и современных») Томаса Джеффериса, опубликованной в Лондоне между 1757 и 1772 годами. На титульной странице указано, что это выполненная вручную каллиграфическая цветная гравюра, обработанная гуммиарабиком.

Томас Джефферис (1719–1771) носил звание географа короля Георга III. Английский картограф, он был ведущим поставщиком карт того времени. Он выгравировал и напечатал множество карт для нужд правительства, других официальных органов и широкий спектр коммерческих карт и атласов, в частности Северной Америки. Будучи картографом, интересовался местной одеждой народов, населяющих разные земли, и собрал блестящую коллекцию различных платьев, описав ее в четырех томах. Очарование далеких земель и дальних путешествий для удовольствия было относительно новым явлением в конце XVIII века, и коллекции, подобные этой, были весьма популярны, так как позволяли ознакомиться с внешним видом жителей других стран.

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

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

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

1. Что такое глубокое обучение

В этой главе

• Обобщенные определения основных понятий.

• История развития машинного обучения.

• Ключевые факторы роста популярности глубокого обучения и его потенциал в будущем.

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

Далее будет заложен фундамент для дальнейшего обсуждения ИИ, машинного и глубокого обучения.

1.1. Искусственный интеллект, машинное и глубокое обучение

Прежде всего определим, что подразумевается под искусственным интеллектом. Что такое ИИ, машинное и глубокое обучение (рис. 1.1)? Как они связаны друг с другом?

 

Рис. 1.1. Искусственный интеллект, машинное и глубокое обучение

1.1.1. Искусственный интеллект

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

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

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

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

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

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

1.1.2. Машинное обучение

В викторианской Англии жила леди Ада Лавлейс — друг и соратник Чарльза Бэббиджа, изобретателя аналитической вычислительной машины (первого известного механического компьютера). Несомненно, устройство опередило свое время, но в 1830-х и 1840-х годах оно не задумывалось как универсальный компьютер, потому что самой идеи универсальных вычислений еще не существовало. Машина просто давала возможность использовать механические операции для автоматизации некоторых вычислений из области математического анализа, что и обусловило такое ее название. Тем не менее она была более интеллектуальным потомком ранних механических вычислительных устройств, таких как суммирующая машина Паскаля («Паскалина») или счетчик шагов Лейбница — усовершенствованная версия «Паскалины». Разработанная Блезом Паскалем в 1642 году (в возрасте 19 лет!) «Паскалина» была первым в мире механическим арифмометром — она могла складывать, вычитать, умножать и даже делить.

В 1843 году Ада Лавлейс заметила:

«Аналитическая машина не может создавать что-то новое. Она может делать все, что и мы… ее цель — лишь помогать нам осуществлять то, с чем мы уже хорошо знакомы».

Наблюдение леди Лавлейс остается поразительным даже спустя 179 лет. Сможет ли универсальный компьютер «создавать» что-нибудь свое, или он всегда будет просто выполнять операции, полностью понятные нам, людям? Сможет ли когда-нибудь породить какую-либо оригинальную мысль? Сможет ли учиться на собственном опыте? Сможет ли стать творцом?

Позднее пионер ИИ Алан Тьюринг в своей знаменитой статье Computing Machi­nery and Intelligence2 назвал это замечание «аргументом Ады Лавлейс»3. Там же он представил тест Тьюринга, а также перечислил основные идеи, которые могут привести к созданию ИИ4. Тьюринг придерживался весьма провокационного для того времени мнения, что компьютеры могут имитировать в принципе все аспекты человеческого интеллекта.

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

 

Рис. 1.2. Машинное обучение: новая парадигма программирования

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

1.1.3. Изучение правил и представлений данных

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

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

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

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

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

Прежде чем двинуться дальше, давайте определим, что есть представление данных. По сути, это другой способ их представления, или кодирования. Например, цветное изображение можно закодировать в формате RGB (red-green-blue — «красный — зеленый — синий») или HSV (hue-saturation-value — «тон — насыщенность — значение»): это два разных представления одних и тех же данных. Некоторые задачи трудно решаются с данными в одном представлении, но легко — в другом. Например, «выбрать все красные пиксели» проще в RGB-изображениях, тогда как «сделать изображение менее насыщенным» быстрее в формате HSV. Главная задача моделей машинного обучения как раз заключается в поиске соответствующего представления входных данных — преобразований, которые сделают данные более пригодными для решения конкретной проблемы.

Обратимся к примеру. Рассмотрим систему координат с осями X и Y и несколько точек в этой системе координат (x, y), как показано на рис. 1.3.

 

Рис. 1.3. Пример некоторых данных

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

• исходными данными являются координаты точек;

• результатом является цвет;

• мерой качества работы алгоритма может быть, например, процент правильно классифицированных точек.

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

 

Рис. 1.4. Изменение системы координат

Координаты наших точек в изменившейся системе координат можно назвать новым представлением данных. Причем более удачным! Задачу классификации данных «черный/белый» здесь можно свести к простому правилу: «черные точки имеют координату x > 0» или «белые точки имеют координату x < 0». Это новое представление в сочетании с найденным правилом точно решает поставленную задачу.

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

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

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

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

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

Теперь, когда вы знаете, что понимается под обучением, посмотрим, что особенного в глубоком обучении.

1.1.4. «Глубина» глубокого обучения

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

В глубоком обучении такие многослойные представления рассматриваются (по­чти всегда) с использованием нейронных сетей — моделей, структурированных в виде слоев, наложенных друг на друга. Термин «нейронная сеть» знаком нам из нейробиологии; хотя некоторые основополагающие идеи глубокого обучения действительно отчасти заимствованы из науки о мозге, его модели все же не являются моделями мозга. Нет никаких доказательств, что мозг реализует механизмы, подобные используемым в глубоком обучении. Вам могут встретиться научно-популярные статьи, где утверждается, что глубокое обучение работает подобно мозгу или моделирует работу мозга, но в действительности это не так. Было бы неправильно заставлять новичков в этой области думать, что глубокое обучение каким-то образом связано с нейробиологией. Забудьте всю эту туманную мистику про «как наш мозг»; забудьте также все, что читали о гипотетической связи между глубоким обучением и биологией. Намного продуктивнее считать данный метод математическим инструментом для изучения представлений данных.

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

 

Рис. 1.5. Глубокая нейронная сеть для классификации цифр

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

 

Рис. 1.6. Глубокие представления, получаемые моделью классификации цифр

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

1.1.5. Принцип действия глубокого обучения в трех картинках

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

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

 

Рис. 1.7. Нейронная сеть параметризуется ее весами

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

 

Рис. 1.8. Функция потерь оценивает качество результатов, производимых нейронной сетью

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

 

Рис. 1.9. Оценка потерь используется как обратная связь для корректировки весов

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

1.1.6. Какой ступени развития достигло глубокое обучение

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

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

• классификация изображений на уровне человека;

• распознавание речи на уровне человека;

• распознавание рукописного текста на уровне человека;

• улучшение качества машинного перевода с одного языка на другой;

• улучшение качества машинного чтения текста вслух;

• появление цифровых помощников, таких как Google Assistant и Amazon Alexa;

• управление автомобилем на уровне человека;

• повышение точности целевой рекламы, используемой компаниями Google, Baidu и Bing;

• повышение релевантности поиска в интернете;

• появление возможности отвечать на вопросы, заданные вслух;

• игра в го сильнее человека.

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

1.1.7. Не верьте рекламе

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

Такое уже происходило раньше. ИИ пережил две волны оптимистического подъема, за которыми следовал спад, сопровождаемый разочарованиями, скептицизмом и, как результат, снижением финансирования. Все началось с символического ИИ в 1960-х. В те годы давались весьма многообещающие прогнозы его развития. Один из самых известных пионеров и сторонников символического ИИ Марвин Мински в 1967 году заявил: «В течение поколения... проблема создания “искусственного интеллекта” будет практически решена». Три года спустя, в 1970 году, он сделал более точное предсказание: «Через 3–8 лет у нас появится машина с интеллектом среднего человека». В 2021-м это достижение все еще кажется далеким — пока нам сложно предугадать, сколько времени уйдет на это, — но в 1960-х и в начале 1970-х некоторые эксперты (как и многие люди ныне) полагали, что будущее находится прямо за углом. Несколько лет спустя из-за не оправдавшихся высоких ожиданий исследователи и правительственные фонды отвернулись от этой области — так началась первая зима ИИ (метафора вполне уместна: все это происходило вскоре после начала холодной войны).

Данный спад был не последним. В 1980-х интерес к символическому ИИ снова возрос благодаря буму экспертных систем в крупных компаниях. Первые успехи вызвали волну инвестиций — и отделы ИИ, занимающиеся разработкой экспертных систем, начали появляться в корпорациях по всему миру. К 1985 году компании тратили более миллиарда долларов США в год на развитие технологии. Но к началу 1990-х из-за дороговизны в обслуживании, сложностей в масштабировании и ограниченности применения интерес к ней снова начал падать. Так началась вторая зима ИИ.

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

1.1.8. Перспективы ИИ

Даже несмотря на наши, возможно, нереалистичные ожидания на ближайшую перспективу, долгосрочная картина выглядит весьма ярко. Мы только начинаем применять глубокое обучение в решении многих важных проблем, от постановки медицинских диагнозов до усовершенствования цифровых помощников. В последние пять лет исследования в области ИИ продвигались удивительно быстро во многом благодаря высокому уровню финансирования, никогда прежде не наблюдавшемуся в недолгой истории ИИ, но пока слишком малому, чтобы этот прогресс получил свое воплощение в продуктах и процессах, формирующих наш мир. Большинство результатов исследований в глубоком обучении пока не нашли практической реализации, по крайней мере в полном спектре задач, где эта технология могла быть полезна. Ваш доктор и ваш бухгалтер пока не используют ИИ. Вы сами в повседневной жизни, скорее всего, с ним не сталкиваетесь. Конечно, вы задаете простые вопросы своему смартфону и получаете разумные ответы, вам попадаются весьма полезные рекомендации при выборе товаров на Amazon, а по фразе «день рождения» вы можете быстро найти в Google Photos фотографии с праздника вашей дочери, который был в прошлом месяце. Это, несомненно, большой шаг вперед. Но такие инструменты лишь дополняют нашу жизнь. ИИ еще не занял в ней центральное место.

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

По пути мы можем столкнуться с неудачами и, возможно, пережить новую зиму ИИ — так же как после всплеска развития интернет-индустрии в 1998–1999 годах произошел спад, вызванный уменьшением инвестиций в начале 2000-х. Но мы придем туда — рано или поздно. В конечном итоге ИИ будет применяться во всех процессах нашего общества и нашей жизни, как и интернет сегодня.

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

1.2. Что было до глубокого обучения: краткая история машинного обучения

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

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

1.2.1. Вероятностное моделирование

Вероятностное моделирование — применение принципов статистики к анализу данных. Это одна из самых ранних форм машинного обучения, которая до сих пор находит широкое использование. Одним из наиболее известных алгоритмов в данной категории является наивный байесовский алгоритм.

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

С байесовским алгоритмом тесно связана модель логистической регрессии (сокращенно logreg), которую иногда рассматривают как аналог примера Hello World в машинном обучении. Пусть вас не вводит в заблуждение название. Модель логистической регрессии — это алгоритм классификации. Так же как наивный байесовский алгоритм, модель логистической регрессии была разработана задолго до появления компьютеров, но до сих пор остается востребованной благодаря своей простоте и универсальной природе. Часто это первое, что пытается сделать исследователь со своим набором данных, чтобы получить представление о классификации.

1.2.2. Первые нейронные сети

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

Первое успешное практическое применение нейронных сетей датируется 1989 годом, когда Ян Лекун в Bell Labs объединил ранние идеи сверточных нейронных сетей и обратного распространения ошибки и использовал их для решения задачи распознавания рукописных цифр. Получившаяся в результате нейронная сеть была названа LeNet и была внедрена почтовой службой США в 1990-х для автоматического распознавания почтовых индексов на конвертах.

1.2.3. Ядерные методы

Хотя первый успех нейронных сетей в 1990-х и привлек к ним внимание исследователей, новый разработанный подход к машинному обучению — ядерные методы (kernel methods) — быстро отправил нейронные сети обратно в небытие. Ядерные методы — это группа алгоритмов классификации, из которых наибольшую известность получил метод опорных векторов (Support Vector Machine, SVM). Современная формулировка SVM была предложена Владимиром Вапником и Коринной Кортес в начале 1990-х в Bell Labs и опубликована в 1995 году5, хотя прежняя линейная формулировка была обнародована Вапником и Алексеем Червоненкисом еще в 1963 году6.

Метод опорных векторов — это алгоритм классификации, предназначенный для поиска хороших «решающих границ», разделяющих два класса (рис. 1.10). Он выполняется в два этапа.

1. Данные отображаются в новое пространство более высокой размерности, где граница может быть представлена как гиперплоскость (если данные были двумерными, как на рис. 1.10, гиперплоскость вырождается в линию).

 

Рис. 1.10. Решающая граница

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

Методика отображения данных в пространство более высокой размерности, где задача классификации становится проще, может хорошо выглядеть на бумаге, но на практике часто оказывается трудноразрешимой. Вот тут и приходит на помощь изящная процедура kernel trick (ключевая идея, по которой ядерные методы получили свое название). Суть ее заключается в следующем: чтобы найти хорошие решающие гиперплоскости в новом пространстве, явно определять координаты точек в этом пространстве не требуется; достаточно вычислить расстояния между парами точек — эффективно это можно сделать с помощью функции ядра. Функция ядра — это незатратная вычислительная операция, отображающая любые две точки из исходного пространства и вычисляющая расстояние между ними в целевом пространстве представления, полностью минуя явное вычисление нового представления. Функции ядра обычно определяются вручную, а не извлекаются из данных — в случае с методом опорных векторов по данным определяется только разделяющая гиперплоскость.

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

1.2.4. Деревья решений, случайные леса и градиентный бустинг

Деревья решений — это иерархические структуры, которые позволяют классифицировать входные данные или предсказывать выходные значения по заданным исходным значениям (рис. 1.11). Они легко визуализируются и интерпретируются. Деревья решений, формируемые на основе данных, заинтересовали исследователей в 2000-х, и к 2010 году им часто отдавали предпочтение перед ядерными методами.

 

Рис. 1.11. Дерево решений: обучаемыми параметрами являются вопросы о данных. Таким вопросом мог бы быть, например: «Коэффициент 2 в данных больше 3,5?»

В частности, алгоритм «Случайный лес» (Random Forest) предложил надежный и практичный подход к обучению на основе деревьев решений. Он создает большое количество специализированных деревьев решений и в последующем объединяет выдаваемые ими результаты. Случайные леса применимы к широкому кругу проблем — можно сказать, они почти всегда являются оптимальным алгоритмом для любых задач поверхностного машинного обучения. Когда в 2010 году был запущен известный конкурсный веб-сайт Kaggle (http://kaggle.com), посвященный машинному обучению, случайные леса быстро набрали там популярность и удерживали свои позиции, пока в 2014 году не появился метод градиентного бустинга. Метод градиентного бустинга (во многом напоминающий случайный лес) — это прием машинного обучения, основанный на объединении слабых моделей прогнозирования, обычно — деревьев решений. Он использует градиентный бустинг, способ улучшения любой модели машинного обучения путем итеративного обучения новых моделей, специализирующихся на устранении слабых мест в предыдущих моделях. Применительно к деревьям решений настоящий прием позволяет получить модели, которые в большинстве случаев превосходят случайные леса, сохраняя аналогичные свойства. На сегодняшний день это один из лучших алгоритмов (если не самый лучший) для решения задач, не связанных с распознаванием. Наряду с глубоким обучением данный прием на сайте Kaggle находится среди наиболее используемых.

1.2.5. Назад к нейронным сетям

Примерно в 2010 году, несмотря на почти полную потерю интереса к нейронным сетям со стороны научного сообщества, ряд исследователей, продолжавших работать в этой сфере, стали добиваться важных успехов: группы Джеффри Хинтона из Университета Торонто, Йошуа Бенгио из Университета Монреаля, Яна Лекуна из Нью-Йоркского университета и исследователи в научно-исследовательском институте искусственного интеллекта IDSIA в Швейцарии.

В 2011 году Ден Киресан из IDSIA выиграл академический конкурс по классификации изображений с использованием глубоких нейронных сетей, обучаемых на GPU, — это был первый практический успех современного глубокого обучения. Но перелом произошел в 2012 году, когда группа Хинтона приняла участие в ежегодном соревновании по крупномасштабному распознаванию образов (ImageNet Large Scale Visual Recognition Challenge, или кратко ILSVRC). ImageNet предложило очень сложное на то время задание, заключающееся в делении цветных изображений с высоким разрешением на 1000 разных категорий после обучения по выборке, включающей 1,4 миллиона изображений. В 2011 году модель-победитель, основанная на классических подходах к распо­знаванию образов, показала точность лишь 74,3 %7. В 2012 году команда Алекса Крижевски, в которой советником был Джеффри Хинтон, достигла точности 83,6 % — значительный прорыв. С тех пор каждый год первые позиции в этом соревновании занимают глубокие сверточные нейронные сети. В 2015 году точность модели-победителя составляла 96,4 % — и задача классификации на ImageNet была сочтена решенной полностью.

Начиная с 2012 года глубокие сверточные нейронные сети (convnets) пере­шли в разряд передовых алгоритмов для всех проблем распознавания образов; в целом, они с успехом могут использоваться в любых задачах распознавания. На крупных конференциях по распознаванию образов, проводившихся после 2015 года, было трудно найти презентацию, не включающую сверточных нейросетей в том или ином виде. В то же время глубокое обучение нашло применение во многих других видах задач — например, в обработке естественного языка. В широком круге вопросов оно полностью заменило метод опорных векторов и деревья решений. Например, в течение нескольких лет Европейская организация по ядерным исследованиям (European Organization for Nuclear Research, CERN) использовала методы на основе деревьев решений для данных, получаемых с детектора частиц ATLAS в Большом адронном коллайдере; но затем было принято решение перейти на использование глубоких нейронных сетей на основе Keras из-за лучшей производительности и простоты их обучения на больших наборах данных.

1.2.6. Отличительные черты глубокого обучения

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

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

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

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

1.2.7. Современный ландшафт машинного обучения

Отличный способ получить представление о текущей ситуации в использовании алгоритмов и инструментов машинного обучения — это конкурсный сайт Kaggle. Благодаря соревновательному характеру (в некоторых конкурсах участвуют тысячи соискателей, а призы составляют миллионы долларов США) и широкому разнообразию задач машинного обучения Kaggle помогает реально оценить, какие существуют подходы и насколько они успешны. Так какой же алгоритм уверенно выигрывает состязания? Какими инструментами пользуются победители?

В начале 2019 года у команд, которые начиная с 2017 года попадали в пятерку лучших в любом из соревнований Kaggle, поинтересовались, какой основной программный инструмент они использовали (рис. 1.12). Как оказалось, ведущие команды отдавали предпочтение методам глубокого обучения (обычно с применением библиотеки Keras) или деревьям с градиентным бустингом (как правило, с использованием библиотеки LightGBM или XGBoost).

 

Рис. 1.12. Инструменты машинного обучения, использовавшиеся командами, которые участвовали в конкурсах Kaggle

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

С 2016 по 2020 год в индустрии машинного обучения и обработки данных главенствовали два подхода: метод градиентного бустинга и глубокое обучение. Метод градиентного бустинга, в частности, использовался для решения задач, где присутствовали структурированные данные, тогда как глубокое обучение применялось для решения задач распознавания, таких как классификация изображений.

Приверженцы градиентного бустинга почти всегда используют Scikit-learn, XGBoost или LightGBM. А подавляющее большинство специалистов, практикующих глубокое обучение, предпочитают библиотеку Keras, обычно в комбинации с фреймворком TensorFlow. Эти инструменты имеют одну общую черту — все они являются библиотеками на языке Python, широко используемым для решения задач машинного обучения и анализа данных.

 

Рис. 1.13. Использование инструментов в индустрии машинного обучения и обработки данных (источник: www.kaggle.com/kaggle-survey-2020)

Чтобы добиться успеха в применении машинного обучения, следует уделить особое внимание данным двум методам: методу градиентного бустинга (для задач поверхностного обучения) и глубокому обучению (для задач распознавания). В техническом плане это означает, что вы должны владеть тремя библиотеками — Scikit-learn, XGBoost и Keras, — занимающими доминирующее положение в конкурсах на сайте Kaggle. Как только вы взяли в руки данную книгу, вы уже сделали большой шаг к этой цели.

1.3. Почему глубокое обучение? Почему сейчас?

Две ключевые идеи глубокого обучения для решения задач распознавания образов — сверточные нейронные сети и алгоритм обратного распространения ошибки — были хорошо известны уже в 1989 году. Алгоритм долгой краткосрочной памяти (Long Short-Term Memory, LSTM), составляющий основу глубокого обучения для прогнозирования временных рядов, был предложен в 1997 году и с тех пор почти не модифицировался. Так почему же глубокое обучение начало применяться только с 2012 года? Что изменилось за эти два десятилетия?

В целом машинным обучением движут три технические силы:

• оборудование;

• наборы данных и тесты;

• алгоритмические достижения.

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

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

1.3.1. Оборудование

Между 1990 и 2010 годами быстродействие стандартных процессоров выросло примерно в 5000 раз. Сейчас на ноутбуке можно запускать небольшие модели глубокого обучения, тогда как 25 лет назад это в принципе было невозможно.

Однако типичные модели глубокого обучения, используемые для распознавания образов или речи, требуют вычислительной мощности на порядок больше, чем мощность ноутбука. В течение 2000-х такие компании, как NVIDIA и AMD, вложили миллионы долларов в разработку быстрых процессоров с массовым параллелизмом (графических процессоров — Graphical Processing Unit, GPU) для поддержки графики все более реалистичных видеоигр — недорогих, специа­лизированных суперкомпьютеров, предназначенных для отображения на экране сложных трехмерных сцен в режиме реального времени. Эти инвестиции принесли пользу научному сообществу, когда в 2007 году компания NVIDIA выпустила CUDA (https://developer.nvidia.com/about-cuda) — программный интерфейс для линейки своих GPU. Теперь несколько GPU могут заменить мощные кластеры на обычных процессорах в различных задачах с возможностью массового распараллеливания вычислений (в том числе начиная с физического моделирования). Глубокие нейронные сети, выполняющие в основном умножение множества маленьких матриц, также допускают высокую степень распараллеливания, поэтому ближе к 2011 году некоторые исследователи начали писать CUDA-реализации нейронных сетей. Одними из первых стали Дэн Кайесан8 и Алекс Крижевски9.

Таким образом игровая индустрия субсидировала создание суперкомпьютеров для следующего поколения приложений искусственного интеллекта. Действительно, иногда крупные достижения начинаются с игр. Современный графический процессор NVIDIA Titan RTX, в конце 2019 года стоивший 2500 долларов США, способен выдать пиковую производительность 16 терафлопс с одинарной точностью (16 триллионов операций в секунду с числами типа float32). Это почти в 500 раз больше производительности самого быстрого по состоянию на 1990 год суперкомпьютера Intel Touchstone Delta. Графическому процессору Titan RTX требуется всего несколько часов для обучения модели ImageNet, выигравшей конкурс ILSVRC в 2012–2013 годах. Между тем большие компании совершенствуют модели глубокого обучения на кластерах, состоящих из сотен GPU.

Более того, индустрия глубокого обучения вышла за рамки GPU и инвестировала средства в развитие еще более специализированных, эффективных процессоров для глубокого обучения. В 2016 году на ежегодной конференции Google I/O компания Google продемонстрировала свой проект тензорного процессора (Tensor Processing Unit, TPU) с новой архитектурой, предназначенного для использования в глубоких нейронных сетях, намного более производительного и энергоэффективного, чем топовые модели GPU.

В 2020 году было представлено третье поколение карты TPU с вычислительной мощностью 420 терафлопс. Это в 10 000 раз больше мощности Intel Touchstone Delta 1990 года.

Данные карты TPU предназначены для сборки крупномасштабных конфигураций, называемых блоками или подами (pods). Один блок (1024 карты TPU) имеет максимальную производительность 100 петафлопс. Для сравнения — это около 10 % пиковой вычислительной мощности современного крупнейшего суперкомпьютера IBM Summit в Национальной лаборатории Ок-Риджа, который состоит из 27 000 графических процессоров NVIDIA и имеет пиковую вычислительную мощность около 1,1 эксафлопса.

1.3.2. Данные

Иногда ИИ называют новой индустриальной революцией. И если глубокое обучение — ее паровой двигатель, то данные — это уголь: сырье, питающее наши интеллектуальные машины, без которого невозможно движение вперед. Вдобавок к экспоненциальному росту емкости устройств хранения информации, наблюдавшемуся в последние 20 лет (согласно закону Мура), перемены в игровом мире вызвали бурное развитие интернета, благодаря чему появилась возможность накапливать и распространять очень большие объемы данных для машинного обучения. В настоящее время крупные компании работают с коллекциями изображений, видео и текстовых материалов, которые невозможно было бы собрать без интернета. Например, изображения на сайте Flickr, классифицированные пользователями, стали золотой жилой для разработчиков моделей распознавания образов. То же можно сказать о видеороликах на YouTube. А «Википедия» теперь считается ключевым источником наборов данных для задач обработки естественного языка.

Если и есть набор данных, ставший катализатором для развития глубокого обучения, то это коллекция ImageNet, включающая 1,4 миллиона изображений, классифицированных вручную на 1000 категорий (каждое изображение отнесено только к одной категории). Но особенной коллекцию делает не только ее огромный размер, но и ее применение во время ежегодных соревнований10.

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

1.3.3. Алгоритмы

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

Ситуация изменилась в 2009–2010 годах с появлением некоторых простых, но важных алгоритмических усовершенствований, позволивших улучшить распространение градиента:

• улучшенные функции активации;

• улучшенные схемы инициализации весов, начиная с предварительного послойного обучения (от которого быстро отказались);

• улучшенные схемы оптимизации, такие как RMSProp и Adam.

Только когда эти усовершенствования позволили создавать модели с десятью слоями и более, глубокое обучение получило свое развитие. А в 2014, 2015 и 2016 годах были открыты еще более продвинутые способы распространения градиента, такие как пакетная нормализация, обходные связи и отделимые свертки.

В настоящее время мы можем обучать с нуля модели с произвольной глубиной. Это открыло возможность использования чрезвычайно больших моделей, обладающих значительной репрезентативной силой, то есть способных кодировать обширнейшие пространства гипотез. Чрезвычайная масштабируемость — одна из определяющих характеристик современного глубокого обучения. Архитектуры крупномасштабных моделей, включающие десятки слоев и десятки миллионов параметров, позволили достичь важных рубежей в области распо­знавания образов (архитектуры ResNet, Inception или Xception) и в обработке естественного языка (большие архитектуры на основе Transformer: BERT, GPT-3 или XLNet).

1.3.4. Новая волна инвестиций

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

В 2011 году, как раз перед тем, как глубокое обучение вышло на лидирующие позиции, общие инвестиции венчурного капитала в ИИ по всему миру составили меньше одного миллиарда долларов — эти деньги почти полностью ушли на практическое применение методов поверхностного машинного обучения. К 2015 году вложения превысили пять миллиардов, а в 2017 достигли ошеломляющих 16 миллиардов (рис. 1.14). За эти несколько лет появились сотни стартапов, пытающихся извлечь выгоду из поднявшейся шумихи. Между тем крупные компании, такие как Google, Amazon и Microsoft, инвестировали деньги в исследования, проводившиеся внутренними подразделениями, и объемы этих инвестиций почти наверняка превысили вложения венчурного капитала.

 

Рис. 1.14. Оценка ОЭСР общего объема инвестиций в стартапы ИИ (источник: http://mng.bz/zGN6)

Машинное обучение — и глубокое обучение в частности — заняло центральное место в стратегии продуктов этих технологических гигантов. В конце 2015 года генеральный директор Google Сундар Пичаи отметил: «Машинное обучение — это основа для решительной смены системы координат в оценивании всей нашей деятельности. Мы вдумчиво применяем его во всех наших продуктах, будь то поиск, реклама, YouTube или Play. И мы с самого начала — и систематически — применяем машинное обучение во всех этих областях»11.

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

1.3.5. Демократизация глубокого обучения

Одним из ключевых факторов, обусловивших приток новых лиц в глубокое обучение, стала демократизация инструментов, используемых в данной области. На начальном этапе глубокое обучение требовало значительных знаний и опыта программирования на C++ и владения CUDA, чем могли похвастаться очень немногие. В настоящее время для исследований в области глубокого обучения достаточно базовых навыков программирования на Python. Это вызвано прежде всего развитием Theano и позднее TensorFlow (двух фреймворков для Python, реализующих операции с тензорами, которые поддерживают автоматическое дифференцирование и значительно упрощают реализацию новых моделей), а также появлением дружественных библиотек (например, Keras), которые делают работу с глубоким обучением таким же простым делом, как манипулирование кубиками лего. После выхода в 2015 году библиотека Keras быстро была принята за основу многими командами новых стартапов, аспирантами и исследователями, работающими в этой области.

1.3.6. Ждать ли продолжения этой тенденции?

Есть ли что-то особенное в глубоком обучении, что делает его правильным выбором и для компаний-инвесторов, и для исследователей? Или это просто увлечение, которое не продлится долго? Будем ли мы использовать глубокие нейронные сети через 20 лет?

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

• простота — глубокое обучение избавляет от необходимости конструировать признаки, заменяя сложные, противоречивые и тяжелые конвейеры простыми обучаемыми моделями, которые обычно строятся с использованием 5–6 тензорных операций;

• масштабируемость — глубокое обучение легко поддается распараллеливанию на GPU или TPU, поэтому оно в полной мере может использовать закон Мура. Кроме того, обучение моделей можно производить итеративно, на небольших пакетах данных, что дает возможность осуществлять этот процесс на наборах данных произвольного размера (единственным узким местом является объем доступной мощности для параллельных вычислений, которая, как следует из закона Мура, является быстро перемещающимся барьером);

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

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

В 2016 году, когда шла работа над первым изданием этой книги, я утверждал, что глубокое обучение все еще находится в первой половине сигмоиды и в следующие несколько лет ожидается гораздо больший прогресс в преобразованиях. Это подтвердилось на практике: в 2017 и 2018 годах наблюдался рост популярности моделей глубокого обучения на основе Transformer, используемых для обработки естественного языка и совершивших революцию в данной области. В то же время глубокое обучение продолжало обеспечивать устойчивый прогресс в области распознавания образов и речи. В 2021 году оно, похоже, перешло во вторую половину сигмоиды. Все еще можно ожидать значительного развития в предстоящие годы, но, скорее всего, мы уже вышли из начальной фазы стремительного прогресса.

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

2 «Вычислительные машины и разум», перевод на русский язык можно найти по адресу https://bio.wikireading.ru/6066. — Примеч. пер.

3Turing A.M. Computing Machinery and Intelligence // Mind 59, no. 236 (1950): 433–460.

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

5Vapnik V., Cortes C. Support-Vector Networks // Machine Learning 20, no. 3 (1995): 273–297.

6Vapnik V., Chervonenkis A. A Note on One Class of Perceptrons // Automation and Remote Control 25 (1964).

7 Точность оценивается как частота выбора моделью из основных своих предполагаемых ответов правильного (на каждый из 1000 вопросов в случае ImageNet).

8 См. статью Flexible, High Performance Convolutional Neural Networks for Image Classification в материалах 22-й Международной конференции по искусственному интеллекту (2011), www.ijcai.org/Proceedings/11/Papers/210.pdf.

9 См. статью ImageNet Classification with Deep Convolutional Neural Networks в журнале Advances in Neural Information Processing Systems, № 25 (2012), http://mng.bz/2286.

10 Соревнования по распознаванию изображений ImageNet Large Scale Visual Recognition Challenge (ILSVRC), www.image-net.org/challenges/LSVRC.

11Pichai S. Alphabet earnings call. Oct. 22, 2015.