.. _chap_introduction: Введение ======== До недавнего времени почти каждая компьютерная программа, с которой вы могли взаимодействовать в течение обычного дня, представляла собой жёсткий набор правил, точно определяющих её поведение. Предположим, мы хотим написать приложение для управления платформой электронной коммерции. После нескольких часов размышлений у доски мы можем определить общие контуры рабочего решения, например: (i) пользователи взаимодействуют с приложением через интерфейс, работающий в веб-браузере или мобильном приложении; (ii) наше приложение взаимодействует с коммерческой СУБД для отслеживания состояния каждого пользователя и ведения записей об исторических транзакциях; и (iii) в основе нашего приложения *бизнес-логика* (можно сказать, *мозги*) определяет набор правил, сопоставляющих каждую возможную ситуацию с соответствующим действием, которое должна выполнить наша программа. Чтобы создать «мозг» нашего приложения, мы можем перечислить все типичные события, которые должна обрабатывать программа. Например, всякий раз, когда покупатель нажимает кнопку добавления товара в корзину, программа должна добавить запись в таблицу базы данных корзины, связав идентификатор этого пользователя с идентификатором запрошенного товара. Затем мы можем попытаться пройтись по всем возможным пограничным случаям, проверяя корректность наших правил и внося необходимые изменения. Что произойдет, если пользователь попытается оформить заказ с пустой корзиной? Хотя немногие разработчики сразу получают всё идеально (может потребоваться несколько тестовых запусков, чтобы устранить недочеты), в большинстве случаев мы можем написать такие программы и уверенно запустить их *до* того, как увидим реального клиента. Наша способность вручную проектировать автоматизированные системы, обеспечивающие работу продуктов и систем, часто в новых ситуациях, является выдающимся когнитивным достижением. И когда вы можете разработать решения, которые работают :math:`100\%` % времени, вам, как правило, не стоит беспокоиться о машинном обучении. К счастью для растущего сообщества ученых в области машинного обучения, многие задачи, которые мы хотели бы автоматизировать, поддаются человеческой изобретательности не так легко. Представьте, что вы собрались у белой доски с самыми умными людьми, которых вы знаете, но на этот раз вы решаете одну из следующих проблем: - Напишите программу, которая прогнозирует погоду на завтра на основе географических данных, спутниковых снимков и скользящего окна предыдущих погодных наблюдений. - Напишите программу, которая принимает фактоидный вопрос, заданный в свободной форме, и правильно на него отвечает. - Напишите программу, которая, получив на вход изображение, определяет всех людей, изображённых на нём, и обводит их контурами. - Напишите программу, которая предлагает пользователям товары, которые они, скорее всего, оценят, но с которыми им вряд ли бы удалось столкнуться в процессе обычного просмотра. Для решения таких задач даже опытные программисты испытывали бы трудности с написанием решений с нуля. Причины могут быть разными. Иногда программа, которую мы ищем, следует паттерну, меняющемуся со временем, поэтому не существует единственного правильного ответа! В таких случаях любое успешное решение должно гибко адаптироваться к изменяющемуся миру. В других случаях взаимосвязь (скажем, между пикселями и абстрактными категориями) может быть слишком сложной, требуя тысяч или миллионов вычислений и подчиняясь неизвестным принципам. В случае распознавания изображений точные шаги, необходимые для выполнения задачи, лежат за пределами нашего сознательного понимания, хотя наши подсознательные когнитивные процессы выполняют эту задачу без усилий. **Машинное обучение** — это изучение алгоритмов, способных обучаться на основе опыта. По мере накопления алгоритмом машинного обучения большего количества опыта, обычно в виде наблюдательных данных или взаимодействий со средой, его эффективность улучшается. В отличие от этого, наша детерминированная платформа электронной коммерции следует одной и той же бизнес-логике, независимо от того, какой опыт накапливается, пока сами разработчики не решат, что пришло время обновить программное обеспечение. В этой книге мы научим вас основам машинного обучения, уделяя особое внимание **глубокому обучению** — мощному набору методов, лежащих в основе инноваций в таких различных областях, как компьютерное зрение, обработка естественного языка, здравоохранение и геномика. Мотивирующий пример ------------------- Прежде чем начать писать, авторы этой книги, как и большинство работников, должны были выпить кофе. Мы сели в машину и поехали. Алекс, используя iPhone, произнес: «Привет, Siri», активировав систему распознавания речи телефона. Затем Му скомандовал: «построй маршрут до кофейни Blue Bottle». Телефон быстро отобразил транскрипцию его команды. Он также распознал, что мы запрашиваем маршрут, и запустил приложение карт (app), чтобы выполнить наш запрос. После запуска приложение карт определило несколько маршрутов. Рядом с каждым маршрутом телефон показал предполагаемое время в пути. Хотя эта история вымышлена ради удобства изложения, она демонстрирует, что всего за несколько секунд наше повседневное взаимодействие со смартфоном может задействовать несколько моделей машинного обучения. Представьте, что вам нужно написать программу, реагирующую на *ключевое слово*, такое как «Алекса», «Окей, Google» или «Привет, Сири». Попробуйте реализовать её самостоятельно, имея в распоряжении только компьютер и редактор кода, как показано на рисунке :numref:`fig_wake_word`. Как бы вы написали такую программу с нуля? Подумайте об этом… задача оказывается непростой. Каждую секунду микрофон собирает примерно 44 000 примеров. Каждый пример представляет собой измерение амплитуды звуковой волны. Какое правило могло бы надёжно преобразовывать фрагмент сырого аудио в уверенные предсказания :math:`\{\textrm{yes}, \textrm{no}\}` о том, содержит ли этот фрагмент ключевое слово? Если вы застряли, не волнуйтесь. Мы тоже не знаем, как написать такую программу с нуля. Именно поэтому мы используем машинное обучение. .. _fig_wake_word: .. figure:: ../img/wake-word.svg Найти ключевое слово. Вот в чем суть. Часто, даже когда мы не знаем, как явно указать компьютеру, как сопоставлять входные данные с выходными, мы сами способны выполнить эту когнитивную задачу. Иными словами, даже если вы не знаете, как запрограммировать компьютер на распознавание слова «Alexa», вы сами можете его распознать. Опираясь на эту способность, мы можем собрать огромный *набор данных*, содержащий примеры аудиоклипов и соответствующих меток, указывающих, какие клипы содержат ключевое слово. В доминирующем сегодня подходе к *машинному обучению* мы не пытаемся создать систему, которая *явно* предназначена для распознавания ключевых слов. Вместо этого мы определяем гибкую программу, поведение которой определяется множеством *параметров*. Затем мы используем набор данных для определения наилучших возможных значений параметров, то есть тех, которые повышают эффективность нашей программы согласно выбранной мере производительности. Параметры можно представить в виде ручек, которые мы можем поворачивать, тем самым изменяя поведение программы. Как только параметры зафиксированы, такую программу называют *моделью*. Множество всех различных программ (отображений «вход–выход»), которые мы можем получить, манипулируя параметрами, называется *семейством* моделей. А «метапрограмма», использующая наш набор данных для выбора параметров, называется *алгоритмом обучения*. Прежде чем мы сможем приступить к обучению алгоритма, необходимо точно определить задачу, уточнив природу входных и выходных данных, а также выбрать подходящее семейство моделей. В данном случае модель принимает фрагмент аудио в качестве *входа*, а в качестве *выхода* генерирует выбор среди :math:`\{\textrm{yes}, \textrm{no}\}`. Если всё пойдёт по плану, предположения модели, как правило, будут правильными с точки зрения того, содержит ли фрагмент ключевое слово для пробуждения. Если выбрать подходящее семейство моделей, то должна существовать такая конфигурация параметров, при которой модель будет выдавать ответ «да» каждый раз, когда распознает слово «Alexa». Поскольку выбор слова для активации произволен, нам, вероятно, потребуется семейство моделей, достаточно выразительное, чтобы с помощью другой конфигурации параметров оно могло выдавать ответ «да» только при произнесении слова «Apricot». Мы ожидаем, что одно и то же семейство моделей подойдет как для распознавания «Alexa», так и для распознавания «Apricot», поскольку интуитивно эти задачи кажутся похожими. Однако, если нам нужно работать с принципиально разными типами входных или выходных данных, например, сопоставлять изображения с подписями или переводить английские предложения на китайские, может потребоваться совершенно иное семейство моделей. Как можно догадаться, если мы просто случайно настроим все параметры, маловероятно, что наша модель распознает слова «Alexa», «Apricot» или любое другое английское слово. В машинном обучении *обучение* — это процесс, с помощью которого мы находим правильную настройку параметров для обеспечения желаемого поведения модели. Иными словами, мы *обучаем* нашу модель на данных. Как показано в :numref:`fig_ml_loop`, процесс обучения обычно выглядит следующим образом: 1. Начните с модели, инициализированной случайным образом, которая не способна выполнять какие-либо полезные задачи. 2. Возьмите часть ваших данных (например, фрагменты аудио и соответствующие :math:`\{\textrm{yes}, \textrm{no}\}` метки). 3. Настройте параметры так, чтобы модель демонстрировала лучшие результаты на этих примерах. 4. Повторяйте шаги 2 и 3, пока модель не станет потрясающей. .. _fig_ml_loop: .. figure:: ../img/ml-loop.svg Типичный процесс обучения. Подводя итог, вместо того чтобы писать код для распознавания команд пробуждения, мы создаем программу, которая *учится* распознавать эти команды, если ей предоставить большой размеченный набор данных. Можно считать, что определение поведения программы путем предоставления ей набора данных — это *программирование с данными*. Иными словами, мы можем «запрограммировать» детектор кошек, предоставив нашей системе машинного обучения множество примеров кошек и собак. Таким образом, детектор в итоге научится выдавать очень большое положительное число, если это кошка, очень большое отрицательное число, если это собака, и значение, близкое к нулю, если он не уверен. Это лишь поверхностное знакомство с тем, что способно машинное обучение. Глубокое обучение, которое мы рассмотрим подробнее позже, — это лишь один из многих популярных методов решения задач машинного обучения. Ключевые компоненты ------------------- В примере с ключевым словом мы описали набор данных, состоящий из аудиофрагментов и бинарных меток, и в общих чертах показали, как можно обучить модель аппроксимировать отображение от фрагментов к классификациям. Подобная задача, в которой мы пытаемся предсказать неизвестную целевую метку на основе известных входных данных, используя набор данных, содержащий примеры с известными метками, называется *обучением с учителем*. Это лишь один из многих видов задач машинного обучения. Прежде чем исследовать другие варианты, мы хотим подробнее рассмотреть некоторые ключевые компоненты, которые будут сопровождать нас независимо от того, какую задачу машинного обучения мы решаем: 1. **Данные**, из которых мы можем извлекать знания. 2. *Модель*, описывающая, как преобразовывать данные. 3. Целевая функция, которая количественно оценивает, насколько хорошо (или плохо) работает модель. 4. *Алгоритм* для настройки параметров модели с целью оптимизации целевой функции. Данные ~~~~~~ Само собой разумеется, что невозможно заниматься наукой о данных без данных. Мы могли бы посвятить сотни страниц размышлениям о том, что именно представляет собой *данные*, но пока сосредоточимся на ключевых свойствах наборов данных, с которыми будем работать. Как правило, мы имеем дело с совокупностью *примеров*. Чтобы эффективно работать с данными, нам обычно необходимо подобрать подходящее численное представление. Каждый *пример* (или *точка данных*, *экземпляр данных*, *выборка*) обычно состоит из набора атрибутов, называемых *признаками* (иногда их называют *ковариатами* или *входами*), на основе которых модель должна делать прогнозы. В задачах *обучения с учителем* наша цель — предсказать значение специального атрибута, называемого *меткой* (или *целевой переменной*), который не входит во входные данные модели. Если бы мы работали с данными изображений, каждый пример мог бы состоять из отдельной фотографии (признаков) и числа, указывающего категорию, к которой принадлежит фотография (метка). Фотография была бы представлена в числовом виде в виде трёх сеток числовых значений, отражающих яркость красного, зелёного и синего света в каждой позиции пикселя. Например, цветное изображение размером :math:`200\times 200` пикселей состояло бы из :math:`200\times200\times3=120000` числовых значений. В качестве альтернативы мы можем использовать данные электронных медицинских карт и решить задачу прогнозирования вероятности того, что конкретный пациент проживет следующие 30 дней. В этом случае наши признаки могут включать набор легкодоступных атрибутов и часто регистрируемых измерений, таких как возраст, жизненно важные показатели, сопутствующие заболевания, текущие лекарства и недавние медицинские процедуры. Меткой, доступной для обучения, будет бинарное значение, указывающее, выжил ли каждый пациент из исторических данных в течение 30-дневного периода. В таких случаях, когда каждый пример характеризуется одинаковым числом числовых признаков, мы говорим, что входные данные представляют собой векторы фиксированной длины, а (постоянную) длину этих векторов называют *размерностью* данных. Как можно себе представить, данные фиксированной длины удобны, поскольку избавляют нас от одной лишней проблемы. Однако не все данные можно легко представить в виде векторов *фиксированной длины*. Хотя мы можем ожидать, что изображения, полученные с помощью микроскопа, будут сделаны на стандартном оборудовании, мы не можем рассчитывать на то, что все изображения, извлеченные из Интернета, будут иметь одинаковое разрешение или *форму*. Для изображений мы можем рассмотреть возможность их обрезки до стандартного размера, но эта стратегия имеет свои ограничения. При этом мы рискуем потерять информацию в обрезанных частях. Более того, текстовые данные ещё более упорно сопротивляются представлению фиксированной длины. Рассмотрим отзывы клиентов, оставленные на таких сайтах электронной коммерции, как Amazon, IMDb и TripAdvisor. Некоторые из них короткие: «Это ужасно!». Другие растягиваются на несколько страниц. Одним из главных преимуществ глубокого обучения перед традиционными методами является сравнительная легкость, с которой современные модели могут обрабатывать данные *переменной длины*. Как правило, чем больше данных, тем легче наша работа. При наличии большего объёма данных мы можем обучать более мощные модели и меньше полагаться на заранее сформулированные допущения. Переход от (относительно) малых данных к большим стал одной из ключевых причин успеха современного глубокого обучения. Чтобы подчеркнуть эту мысль, отметим, что многие из самых впечатляющих моделей в глубоком обучении не работают без больших наборов данных. Некоторые другие модели могут функционировать в условиях малых данных, но они не превосходят традиционные подходы. Наконец, недостаточно просто иметь много данных и обрабатывать их умным образом. Нам нужны *правильные* данные. Если данные содержат множество ошибок или выбранные признаки не позволяют предсказать интересующую нас целевую переменную, обучение потерпит неудачу. Эта ситуация хорошо описывается клише: *мусор на входе — мусор на выходе*. Более того, низкая предсказательная точность — не единственное возможное последствие. В чувствительных областях применения машинного обучения, таких как предиктивное полицейское патрулирование, отбор резюме и модели оценки рисков для кредитования, мы должны быть особенно внимательны к последствиям использования некачественных данных. Одним из часто встречающихся вариантов отказа является ситуация, когда в обучающих данных отсутствуют некоторые группы людей. Представьте себе систему распознавания рака кожи, которая никогда не видела темную кожу. Ошибки могут возникать и тогда, когда данные не только недостаточно репрезентативны для некоторых групп, но и отражают социальные предрассудки. Например, если для обучения предсказательной модели, предназначенной для отбора резюме, используются исторические решения о найме, то модели машинного обучения могут непреднамеренно усвоить и автоматизировать историческую несправедливость. Обратите внимание, что все это может произойти без активного сговора или даже осознания со стороны специалиста по данным. Модели ~~~~~~ Большая часть машинного обучения связана с преобразованием данных. Мы можем захотеть создать систему, которая принимает фотографии и предсказывает, насколько они «улыбчивы». Либо мы можем захотеть обрабатывать набор показаний датчиков и оценивать, насколько они нормальны или аномальны. Под *моделью* мы понимаем вычислительный механизм, принимающий данные одного типа и выдающий предсказания другого, возможно, иного типа. В частности, нас интересуют *статистические модели*, которые можно оценить по данным. Хотя простые модели вполне способны решать достаточно простые задачи, проблемы, на которые мы обращаем внимание в этой книге, расширяют границы классических методов. Глубокое обучение принципиально отличается от классических подходов прежде всего набором мощных моделей, на которых оно сосредоточено. Эти модели состоят из множества последовательных преобразований данных, соединенных друг с другом сверху вниз, отсюда и название *глубокое обучение*. В процессе обсуждения глубоких моделей мы также рассмотрим некоторые более традиционные методы. Целевые функции ~~~~~~~~~~~~~~~ Ранее мы представили машинное обучение как обучение на основе опыта. Под *обучением* здесь мы подразумеваем улучшение выполнения какой-либо задачи с течением времени. Но кто может сказать, что именно считается улучшением? Можно предположить, что мы предложим обновить нашу модель, и некоторые могут усомниться, является ли это обновление действительно улучшением. Чтобы разработать формальную математическую систему машинного обучения, нам необходимы формальные критерии оценки качества (или некачества) наших моделей. В машинном обучении и в оптимизации в целом эти критерии называются *целевыми функциями*. По соглашению, целевые функции обычно определяют так, чтобы меньшие значения были лучше. Это лишь условность. Любую функцию, для которой большие значения лучше, можно преобразовать в новую функцию, качественно идентичную исходной, но для которой меньшие значения лучше, просто изменив знак. Поскольку мы принимаем меньшие значения за лучшие, такие функции иногда называют *функциями потерь*. При прогнозировании числовых значений наиболее распространенной функцией потерь является *квадратичная ошибка*, то есть квадрат разности между предсказанием и истинным значением целевой переменной. Для задач классификации наиболее распространенной целевой функцией является минимизация доли ошибок, то есть доли примеров, на которых наши предсказания расходятся с истинными значениями. Некоторые целевые функции (например, квадратичная ошибка) легко оптимизируются, тогда как другие (например, доля ошибок) трудно оптимизировать напрямую из-за недифференцируемости или других сложностей. В таких случаях вместо этого обычно оптимизируют *суррогатную целевую функцию*. В процессе оптимизации мы рассматриваем функцию потерь как функцию от параметров модели, считая обучающую выборку константой. Мы находим наилучшие значения параметров модели, минимизируя потери на наборе, состоящем из некоторого числа примеров, собранных для обучения. Однако успешное выполнение на обучающих данных не гарантирует успешного выполнения на ранее не виденных данных. Поэтому обычно мы разделяем доступные данные на два множества: *обучающий набор данных* (или *обучающую выборку*) для обучения параметров модели; и *тестовый набор данных* (или *тестовую выборку*), который откладывается для оценки. В конечном итоге мы обычно сообщаем о производительности наших моделей на обоих множествах. Можно провести аналогию между производительностью на обучающих данных и оценками, которые студент получает на пробных экзаменах, используемых для подготовки к реальному итоговому экзамену. Даже если результаты обнадеживают, это не гарантирует успеха на итоговом экзамене. В процессе обучения студент может начать заучивать вопросы из пробных экзаменов, что создает иллюзию освоения темы, но приводит к ошибкам при столкновении с ранее не виденными вопросами на самом итоговом экзамене. Когда модель хорошо работает на обучающей выборке, но не обобщает знания на ранее не виденные данные, мы говорим, что она *переобучается* на обучающих данных. Алгоритмы оптимизации ~~~~~~~~~~~~~~~~~~~~~ Получив источник данных, представление, модель и чётко определённую целевую функцию, нам нужен алгоритм, способный находить наилучшие параметры для минимизации функции потерь. Популярные алгоритмы оптимизации в глубоком обучении основаны на подходе, называемом *градиентным спуском*. Если кратко, на каждом шаге этот метод проверяет, как изменится значение функции потерь на обучающей выборке для каждого параметра при его небольшом изменении. Затем он обновляет параметр в направлении, которое снижает значение функции потерь. Виды задач машинного обучения ----------------------------- Проблема обнаружения ключевых слов в нашем вводном примере — лишь одна из многих, с которыми может справиться машинное обучение. Чтобы дополнительно заинтересовать читателя и сформировать общий терминологический аппарат, который будет использоваться на протяжении всей книги, мы теперь представим широкий обзор ландшафта задач машинного обучения. Обучение с учителем ~~~~~~~~~~~~~~~~~~~ Обучение с учителем описывает задачи, в которых нам предоставляется набор данных, содержащий как признаки, так и метки, и предлагается построить модель, способную предсказывать метки на основе входных признаков. Каждая пара «признак–метка» называется примером. Иногда, когда контекст ясен, мы можем использовать термин *примеры* для обозначения совокупности входных данных, даже если соответствующие метки неизвестны. Обучение с учителем подразумевает, что для выбора параметров мы (в роли «учителей») предоставляем модели набор данных, состоящий из размеченных примеров. С точки зрения теории вероятностей, нас обычно интересует оценка условной вероятности метки при заданных входных признаках. Хотя это лишь одна из нескольких парадигм, обучение с учителем обеспечивает большинство успешных применений машинного обучения в промышленности. Отчасти это связано с тем, что многие важные задачи можно чётко сформулировать как оценку вероятности неизвестного значения при наличии определённого набора доступных данных: - Предсказать наличие или отсутствие рака по компьютерной томограмме. - Предсказать правильный перевод на французский язык, имея предложение на английском языке. - Предсказать цену акции на следующий месяц на основе данных финансовой отчетности за текущий месяц. Хотя все задачи обучения с учителем описываются простой формулировкой «предсказание меток по входным признакам», само обучение с учителем может принимать самые разнообразные формы и требовать множества решений при построении моделей. Эти решения зависят, среди прочего, от типа, размера и количества входных и выходных данных. Например, для обработки последовательностей произвольной длины и фиксированных векторных представлений мы используем разные модели. В течение этой книги мы подробно рассмотрим многие из этих задач. Неформально процесс обучения выглядит следующим образом. Сначала берётся большой набор примеров, для которых известны признаки, и из них выбирается случайное подмножество, для которого определяются истинные метки. Иногда эти метки могут быть уже собранными данными (например, умер ли пациент в течение следующего года), а в других случаях может потребоваться привлечь аннотаторов для разметки данных (например, присвоение изображений к категориям). Вместе эти входные данные и соответствующие им метки образуют обучающую выборку. Мы подаём обучающий набор данных в алгоритм обучения с учителем — функцию, которая принимает в качестве входных данных набор данных и выдаёт другую функцию: обученную модель. Наконец, мы можем подавать ранее не встречавшиеся входные данные в обученную модель, используя её выходные значения в качестве предсказаний соответствующих меток. Весь процесс изображён на рисунке :numref:`fig_supervised_learning`. .. _fig_supervised_learning: .. figure:: ../img/supervised-learning.svg Обучение с учителем. Регрессия ^^^^^^^^^ Возможно, самой простой задачей обучения с учителем для понимания является *регрессия*. Рассмотрим, например, набор данных, собранный из базы данных продаж домов. Мы можем составить таблицу, в которой каждая строка соответствует отдельному дому, а каждый столбец — некоторому значимому атрибуту, такому как площадь дома в квадратных футах, количество спален, количество ванных комнат и время (в минутах пешком) до центра города. В этом наборе данных каждый пример представляет собой конкретный дом, а соответствующий ему вектор признаков — это одна строка в таблице. Если вы живете в Нью-Йорке или Сан-Франциско и не являетесь генеральным директором компаний Amazon, Google, Microsoft или Facebook, вектор признаков вашего дома (площадь, количество спален, количество ванных комнат, время пешком до центра) может выглядеть примерно так: :math:`[600, 1, 1, 60]`. Однако, если вы живете в Питтсбурге, он может выглядеть скорее как :math:`[3000, 4, 3, 10]`. Фиксированные по длине векторы признаков, подобные этому, необходимы для большинства классических алгоритмов машинного обучения. Что делает задачу задачей регрессии, так это вид целевой переменной. Предположим, вы ищете новый дом. Вы можете захотеть оценить справедливую рыночную стоимость дома, исходя из таких характеристик, как описано выше. Данные здесь могут состоять из исторических объявлений о продаже домов, а метками могут выступать наблюдаемые цены продаж. Когда метки принимают произвольные числовые значения (даже в пределах некоторого интервала), мы называем это задачей *регрессии*. Цель состоит в том, чтобы создать модель, прогнозы которой максимально точно приближают фактические значения меток. Многие практические задачи легко описываются как задачи регрессии. Предсказание рейтинга, который пользователь присвоит фильму, можно рассматривать как задачу регрессии, и если бы вы разработали отличный алгоритм для решения этой проблемы в 2009 году, вы могли бы выиграть `1-миллионный приз Netflix `__. Предсказание продолжительности пребывания пациентов в больнице также является задачей регрессии. Хорошее эмпирическое правило заключается в том, что любая задача, отвечающая на вопрос *сколько?* или *сколько раз?*, с высокой вероятностью является задачей регрессии. Например: - Сколько часов займет эта операция? - Сколько осадков выпадет в этом городе за следующие шесть часов? Даже если вы никогда не занимались машинным обучением, вы, вероятно, уже неформально решали задачи регрессии. Представьте, например, что вы вызвали мастера для прочистки канализации, и он потратил 3 часа на удаление засоров в ваших сточных трубах. Затем вам выставили счет на 350 долларов. Теперь представьте, что ваш друг нанял того же мастера на 2 часа и получил счет на 250 долларов. Если бы вам спросили, сколько стоит ожидать за предстоящую услугу по удалению засоров, вы могли бы сделать несколько разумных предположений, например, что чем больше часов работы, тем больше долларов. Вы также могли бы предположить, что существует базовая плата за выезд, а затем мастер берет оплату за каждый час работы. Если бы эти предположения оказались верными, то, имея эти два примера данных, вы уже могли бы определить структуру ценообразования мастера: 100 долларов в час плюс 50 долларов за выезд к вам домой. Если вы поняли это, то уже знакомы с общей идеей *линейной* регрессии. В этом случае мы могли бы подобрать параметры, которые точно соответствуют ценам подрядчика. Однако иногда это невозможно, например, если часть изменчивости обусловлена факторами, не учитываемыми нашими двумя признаками. В таких случаях мы будем стремиться обучать модели, минимизирующие расстояние между нашими предсказаниями и наблюдаемыми значениями. В большинстве глав мы сосредоточимся на минимизации функции потерь квадрата ошибки. Как мы увидим позже, эта функция потерь соответствует предположению о том, что наши данные искажены гауссовским шумом. Классификация ^^^^^^^^^^^^^ В то время как модели регрессии отлично подходят для ответов на вопросы «сколько?», многие задачи не укладываются в этот шаблон. Рассмотрим, например, банк, который хочет внедрить функцию сканирования чеков в своё мобильное приложение. В идеале клиент должен просто сделать фотографию чека, а приложение автоматически распознает текст на изображении. Предполагая, что у нас есть возможность выделять фрагменты изображения, соответствующие каждому рукописному символу, основной оставшейся задачей будет определение того, какой символ из известного набора изображён на каждом фрагменте. Такие задачи типа «какой именно?» называются *классификацией* и требуют иного набора инструментов, чем те, что используются для регрессии, хотя многие методы могут быть перенесены. В *классификации* мы хотим, чтобы наша модель анализировала признаки, например, значения пикселей на изображении, и предсказывала, к какому *категори* (иногда называемому *классом*) из некоторого дискретного множества вариантов относится *пример*. Для рукописных цифр у нас может быть десять классов, соответствующих цифрам от 0 до 9. Простейшей формой классификации является случай, когда существует только два класса; такую задачу мы называем *бинарной классификацией*. Например, наш *набор данных* может состоять из изображений животных, а наши метки могут принимать значения :math:`\textrm{\{cat, dog\}}`. В то время как в *регрессии* мы стремились получить регрессор, выводящий числовое *значение*, в классификации мы стремимся получить классификатор, выводом которого является предсказанный класс. По причинам, которые мы рассмотрим по мере того, как книга станет более технической, оптимизация модели, способной выдавать лишь *жёсткое* категориальное присвоение, например, либо «кошка», либо «собака», может оказаться сложной задачей. В таких случаях обычно гораздо проще выразить нашу модель в терминах вероятностей. Учитывая признаки примера, наша модель присваивает вероятность каждому возможному классу. Возвращаясь к нашему примеру классификации животных, где классы :math:`\textrm{\{cat, dog\}}`, классификатор может проанализировать изображение и выдать вероятность того, что на нём изображена кошка, равную 0,9. Это число можно интерпретировать так: классификатор на 90% уверен, что на изображении изображена кошка. Величина вероятности для предсказанного класса передаёт представление о неопределённости. Это не единственный доступный способ её оценки, и мы обсудим другие в главах, посвящённых более сложным темам. Когда возможных классов больше двух, такую задачу называют *многоклассовой классификацией*. Типичные примеры включают распознавание рукописных символов :math:`\textrm{\{0, 1, 2, ... 9, a, b, c, ...\}}`. Если в задачах регрессии мы стремились минимизировать функцию потерь, основанную на квадратичной ошибке, то стандартной функцией потерь для задач классификации является *перекрёстная энтропия*; её название станет понятнее, когда мы рассмотрим теорию информации в последующих главах. Обратите внимание, что наиболее вероятный класс не обязательно тот, который вы выберете для принятия решения. Предположим, что вы нашли красивый гриб на своём заднем дворе, как показано на рисунке :numref:`fig_death_cap`. .. _fig_death_cap: .. figure:: ../img/death-cap.jpg :width: 200px Бледная поганка — не есть! Теперь предположим, что вы создали классификатор и обучили его определять, является ли гриб ядовитым, на основе фотографии. Допустим, наш классификатор определяет ядовитость и выдает вероятность того, что :numref:`fig_death_cap` изображает бледную поганку, равную 0,2. Иными словами, классификатор на 80% уверен, что наш гриб не является бледной поганкой. Тем не менее, было бы безрассудством съесть его. Дело в том, что определённая польза от вкусного ужина не стоит 20% риска смерти от него. Иными словами, влияние неопределенного риска значительно перевешивает пользу. Таким образом, чтобы принять решение о том, есть ли гриб, нам необходимо вычислить ожидаемый ущерб, связанный с каждым действием, который зависит как от вероятных исходов, так и от выгод или вреда, связанных с каждым из них. В данном случае ущерб от поедания гриба может составлять :math:`0.2 \times \infty + 0.8 \times 0 = \infty`, тогда как потери от его выбрасывания равны :math:`0.2 \times 0 + 0.8 \times 1 = 0.8`. Наша осторожность оказалась оправданной: как любой миколог скажет нам, гриб на :numref:`fig_death_cap` на самом деле является бледной поганкой. Классификация может быть гораздо сложнее, чем просто бинарная или многоклассовая. Например, существуют варианты классификации, учитывающие иерархическую структуру классов. В таких случаях не все ошибки равнозначны: если мы вынуждены ошибиться, нам может быть предпочтительнее отнести объект к родственному классу, а не к отдалённому. Обычно это называют *иерархической классификацией*. В качестве примера можно вспомнить `Линнея `__, который организовал фауну в виде иерархии. В случае классификации животных не так уж плохо спутать пуделя со шнауцером, но наша модель понесла бы огромный штраф, если бы перепутала пуделя с динозавром. То, какая иерархия является релевантной, может зависеть от того, как вы планируете использовать модель. Например, гремучие змеи и полосатые змеи могут быть близки на филогенетическом древе, но путаница между гремучей змеей и полосатой может иметь фатальные последствия. Разметка ^^^^^^^^ Некоторые задачи классификации прекрасно укладываются в рамки бинарной или многоклассовой классификации. Например, мы можем обучить обычный бинарный классификатор для различения кошек и собак. Учитывая текущее состояние компьютерного зрения, мы можем сделать это легко, используя готовые инструменты. Тем не менее, независимо от того, насколько точной станет наша модель, мы можем столкнуться с трудностями, когда классификатор встретит изображение «Бременских музыкантов» — популярной немецкой сказки, в которой участвуют четыре животных (:numref:`fig_stackedanimals`). .. _fig_stackedanimals: .. _subsec_recommender_systems: .. figure:: ../img/stackedanimals.png :width: 300px Осёл, собака, кошка и петух. Как видно, на фотографии изображены кошка, петух, собака и осёл, а на заднем плане видны деревья. Если мы ожидаем встречать подобные изображения, задача многоклассовой классификации может оказаться не совсем подходящей. Вместо этого мы можем предоставить модели возможность указать, что на изображении присутствуют кошка, собака, осёл *и* петух. Проблема обучения предсказанию классов, которые не являются взаимоисключающими, называется *многометочной классификацией*. Задачи автоматической простановки меток обычно лучше всего описывать в терминах многометочной классификации. Рассмотрим метки, которые люди могут применять к публикациям в техническом блоге, например: «машинное обучение», «технологии», «гаджеты», «языки программирования», «Linux», «облачные вычисления», «AWS». К одной типичной статье может быть применено от 5 до 10 меток. Как правило, метки обладают определённой структурой корреляций. Публикации о «облачных вычислениях» с высокой вероятностью содержат упоминание «AWS», а публикации о «машинном обучении» часто упоминают «GPU». Иногда такие задачи тегирования опираются на огромные наборы меток. Национальная медицинская библиотека США привлекает множество профессиональных аннотаторов, которые присваивают каждой статье, предназначенной для индексации в PubMed, набор тегов, выбранных из онтологии Medical Subject Headings (MeSH) — коллекции, состоящей примерно из 28 000 тегов. Правильное тегирование статей имеет важное значение, поскольку оно позволяет исследователям проводить исчерпывающие обзоры литературы. Это трудоемкий процесс, и, как правило, между архивированием и тегированием проходит год. Машинное обучение может предоставлять предварительные теги до тех пор, пока каждая статья не пройдет надлежащий ручной обзор. Действительно, на протяжении нескольких лет организация BioASQ `проводила соревнования `__ по этой задаче. Поиск ^^^^^ В области информационного поиска мы часто ранжируем наборы элементов. Возьмем веб-поиск в качестве примера. Цель заключается не столько в том, чтобы определить, *является ли* конкретная страница релевантной для запроса, сколько в том, чтобы решить, какие из релевантных результатов следует показать пользователю наиболее заметно. Одним из способов решения этой задачи может быть присвоение оценки каждому элементу набора, а затем выбор наиболее высоко оцененных элементов. `PageRank `__, первоначальный секретный ингредиент поисковой системы Google, был ранним примером такой системы оценивания. Странно, но оценка, предоставляемая PageRank, не зависела от конкретного запроса. Вместо этого использовался простой фильтр релевантности для определения множества релевантных кандидатов, а затем PageRank применялся для приоритизации более авторитетных страниц. В настоящее время поисковые системы используют машинное обучение и поведенческие модели для получения оценок релевантности, зависящих от запроса. Существуют целые академические конференции, посвященные этой теме. Системы рекомендаций ^^^^^^^^^^^^^^^^^^^^ Рекомендательные системы — это ещё одна постановка задачи, связанная с поиском и ранжированием. Эти задачи схожи тем, что их цель — отобразить набор объектов, релевантных для пользователя. Главное отличие заключается в акценте на *персонализации* для конкретных пользователей в контексте рекомендательных систем. Например, страница результатов для поклонника научной фантастики и страница результатов для знатока комедий с Питером Селлерсами могут существенно различаться. Аналогичные проблемы возникают и в других сценариях рекомендаций, например, для товаров розничной торговли, музыки и новостей. В некоторых случаях клиенты предоставляют явную обратную связь, сообщая, насколько им понравился конкретный товар (например, рейтинги и отзывы на Amazon, IMDb или Goodreads). В других случаях они предоставляют неявную обратную связь, например, пропуская композиции в плейлисте, что может указывать на неудовлетворенность или, возможно, просто свидетельствовать о том, что песня не подходит по контексту. В простейших формулировках такие системы обучаются оценивать некоторый балл, такой как ожидаемый рейтинг или вероятность того, что конкретный пользователь приобретет определённый товар. Имея такую модель, для любого заданного пользователя можно выбрать набор объектов с наибольшими оценками, которые затем можно рекомендовать этому пользователю. Промышленные системы значительно сложнее и учитывают детальную активность пользователей и характеристики товаров при вычислении таких оценок. :numref:`fig_deeplearning_amazon` показывает книги по глубокому обучению, рекомендованные Amazon на основе алгоритмов персонализации, настроенных с учётом предпочтений Астона. .. _fig_deeplearning_amazon: .. figure:: ../img/deeplearning-amazon.jpg Книги по глубокому обучению, рекомендованные Amazon. Несмотря на их огромную экономическую ценность, рекомендательные системы, наивно построенные на базе предиктивных моделей, страдают от ряда серьёзных концептуальных недостатков. Во-первых, мы наблюдаем лишь *цензурированную обратную связь*: пользователи предпочитают оценивать фильмы, которые вызывают у них сильные эмоции. Например, на пятибалльной шкале можно заметить, что примеры получают множество оценок «один» и «пять», но при этом заметно мало оценок «три». Более того, текущие привычки покупок часто являются результатом работы алгоритма рекомендаций, который в данный момент используется, однако алгоритмы обучения не всегда учитывают эту деталь. Таким образом, возможно формирование петель обратной связи, в которых рекомендательная система предпочтительно продвигает пример, который затем считается более качественным (из-за роста покупок), и в свою очередь рекомендуется ещё чаще. Многие из этих проблем — в частности, вопросы обработки цензурирования, учёта стимулов и петель обратной связи — являются важными нерешёнными задачами исследований. Обучение последовательностям ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ До сих пор мы рассматривали задачи, в которых имеется фиксированное число входов и фиксированное число выходов. Например, мы изучали прогнозирование цен на жилье на основе фиксированного набора признаков: площади, количества спален, количества ванных комнат и времени в пути до центра города. Мы также обсуждали отображение изображения (фиксированной размерности) в предсказанные вероятности принадлежности к каждому из фиксированного числа классов, а также прогнозирование рейтингов, связанных с покупками, исключительно на основе идентификатора пользователя и идентификатора товара. В этих случаях, как только наша модель обучена, после того как каждый тестовый пример подается в модель, он сразу же забывается. Мы предполагали, что последовательные наблюдения независимы, поэтому не было необходимости сохранять этот контекст. Но как следует работать с фрагментами видео? В этом случае каждый фрагмент может состоять из разного количества кадров. Наши предположения о том, что происходит в каждом кадре, могут быть гораздо более точными, если учитывать предыдущие или последующие кадры. То же самое относится и к языку. Например, одной из популярных задач глубокого обучения является машинный перевод: задача заключается в том, чтобы принимать на вход предложения на некотором исходном языке и предсказывать их перевод на другой язык. Такие задачи возникают и в медицине. Мы можем захотеть, чтобы модель отслеживала состояние пациентов в отделении интенсивной терапии и отправляла предупреждения всякий раз, когда риск их смерти в течение следующих 24 часов превышает определённый порог. В этом случае мы не будем сбрасывать всю информацию об истории пациента каждый час, поскольку нам может не хотеться делать прогнозы, основываясь только на самых последних измерениях. Подобные задачи относятся к числу самых захватывающих применений машинного обучения и являются примерами *обучения последовательностей*. Они требуют, чтобы модель либо принимала на вход последовательности, либо генерировала выходные последовательности (или и то, и другое). В частности, *обучение «последовательность-в-последовательность»* рассматривает задачи, в которых и входные, и выходные данные представляют собой последовательности переменной длины. Примерами таких задач являются машинный перевод и преобразование речи в текст. Хотя невозможно рассмотреть все типы преобразований последовательностей, стоит упомянуть следующие частные случаи. **Тегирование и синтаксический разбор**. Этот процесс включает аннотирование текстовой последовательности атрибутами. В этом случае входные и выходные данные *согласованы*, то есть они имеют одинаковое количество элементов и следуют в соответствующем порядке. Например, в *тегировании частей речи (PoS tagging)* мы присваиваем каждому слову в предложении соответствующую часть речи, например, «существительное» или «прямое дополнение». В качестве альтернативы, мы можем хотеть узнать, какие группы смежных слов относятся к именованным сущностям, таким как *люди*, *места* или *организации*. В наивно упрощённом примере ниже мы можем просто хотеть указать, является ли какое-либо слово в предложении частью именованной сущности (помечено как «Ent»). .. raw:: latex \diilbookstyleinputcell .. code:: text Tom has dinner in Washington with Sally Ent - - - Ent - Ent **Распознавание речи**. При распознавании речи входной последовательностью является аудиозапись говорящего (:numref:`fig_speech`), а выходной — транскрипция его слов. Сложность заключается в том, что количество аудиодисков (звук обычно дискретизируется с частотой 8 или 16 кГц) значительно превышает количество текстовых символов, то есть отсутствует взаимно однозначное соответствие между аудио и текстом, поскольку на одно произнесенное слово может приходиться тысячи сэмплов. Это задачи обучения преобразованию последовательности в последовательность, где выходная последовательность значительно короче входной. Хотя люди отлично справляются с распознаванием речи, даже из аудио низкого качества, заставить компьютеры выполнять те же задачи остается серьезным вызовом. .. _fig_speech: .. figure:: ../img/speech.png :width: 700px ``-D-e-e-p- L-ea-r-ni-ng-`` в аудиозаписи. **Текст в речь**. Это обратная задача автоматического распознавания речи. На вход подается текст, а на выходе получается аудиофайл. В данном случае выходная последовательность значительно длиннее входной. **Машинный перевод**. В отличие от распознавания речи, где соответствующие входные и выходные данные следуют в одном порядке, в машинном переводе несовпадение данных создает новую проблему. В этом случае входные и выходные последовательности могут иметь разную длину, а соответствующие области этих последовательностей могут располагаться в другом порядке. Рассмотрим следующий наглядный пример характерной для немцев тенденции ставить глаголы в конец предложения: .. raw:: latex \diilbookstyleinputcell .. code:: text German: Haben Sie sich schon dieses grossartige Lehrwerk angeschaut? English: Have you already looked at this excellent textbook? Wrong alignment: Have you yourself already this excellent textbook looked at? Многие смежные задачи возникают и в других задачах обучения. Например, определение порядка, в котором пользователь читает веб-страницу, является задачей двумерного анализа макета. В задачах диалога возникают всевозможные дополнительные сложности: чтобы определить, что сказать дальше, необходимо учитывать знания об окружающем мире и априорное состояние разговора на значительных временных дистанциях. Эти темы являются активными направлениями исследований. Неконтролируемое и самообучение ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ В предыдущих примерах мы рассматривали обучение с учителем, при котором модель получает на вход огромный набор данных, содержащий как признаки, так и соответствующие значения меток. Можно сказать, что задача обучаемой модели в этом случае крайне специализирована, а её «начальник» — крайне диктаторски настроен. Начальник стоит над душой обучаемой модели и указывает ей, что именно нужно делать в каждой ситуации, пока она не научится отображать ситуации в действия. Работать под таким начальством звучит довольно скучно. С другой стороны, угодить такому начальнику довольно легко. Нужно лишь как можно быстрее распознать закономерность и имитировать действия начальника. Рассмотрим обратную ситуацию: работать на начальника, который не понимает, чего он от вас хочет, может быть крайне неприятно. Однако, если вы планируете стать специалистом по данным, вам лучше привыкнуть к этому. Начальник может просто вручить вам огромный массив данных и сказать: «Займись с ним *какой-нибудь наукой о данных!*\ ». Это звучит размыто, потому что так оно и есть. Мы называем этот класс задач *обучением без учителя*, а тип и количество вопросов, которые мы можем задать, ограничены лишь нашей креативностью. Методы обучения без учителя мы рассмотрим в последующих главах. А пока, чтобы разжечь ваш интерес, опишем несколько вопросов, которые вы, возможно, захотите задать. - Можно ли найти небольшое количество прототипов, которые точно описывают данные? Имея набор фотографий, можем ли мы сгруппировать их на пейзажи, изображения собак, младенцев, кошек и горных вершин? Аналогично, имея набор данных о действиях пользователей в сети, можем ли мы сгруппировать их по схожему поведению? Эта задача обычно известна как *кластеризация*. - Можно ли найти небольшое количество параметров, которые точно отражают существенные свойства данных? Траектории движения мяча хорошо описываются его скоростью, диаметром и массой. Портные разработали небольшой набор параметров, достаточно точно описывающих форму человеческого тела, для подбора одежды. Такие задачи называются *оценкой подпространства*. Если зависимость линейна, метод называется *методом главных компонент*. - Существует ли представление (произвольно структурированных) объектов в евклидовом пространстве, позволяющее эффективно сопоставлять символические свойства? Это можно использовать для описания сущностей и их отношений, например, «Рим» :math:`-` «Италия» :math:`+` «Франция» :math:`=` «Париж». - Существует ли описание коренных причин большинства наблюдаемых нами данных? Например, если у нас есть демографические данные о ценах на жилье, загрязнении окружающей среды, уровне преступности, местоположении, образовании и зарплатах, можем ли мы выявить взаимосвязи между ними, опираясь исключительно на эмпирические данные? Этим вопросам посвящены области, изучающие *причинность* и *вероятностные графовые модели*. - Ещё одним важным и захватывающим недавним достижением в области обучения без учителя стало появление *глубоких генеративных моделей*. Эти модели оценивают плотность данных либо явно, либо *неявно*. После обучения генеративную модель можно использовать либо для оценки примеров в соответствии с их вероятностью, либо для выборки синтетических примеров из изученного распределения. Ранние прорывы в глубоком обучении в области генеративного моделирования были связаны с изобретением *вариационных автокодировщиков* :cite:`Kingma.Welling.2014,rezende2014stochastic` и продолжились разработкой *генеративно-состязательных сетей* :cite:`Goodfellow.Pouget-Abadie.Mirza.ea.2014`. Более поздние достижения включают нормализующие потоки :cite:`dinh2014nice,dinh2017density` и диффузионные модели :cite:`sohl2015deep,song2019generative,ho2020denoising,song2021score`. Дальнейшим развитием *обучения без учителя* стало появление *самообучения* — методов, которые используют некоторые аспекты неразмеченных данных для получения сигнала обучения. Для текста мы можем обучать модели «заполнять пропуски», предсказывая случайно замаскированные слова на основе их контекста в больших корпусах без каких-либо усилий по разметке :cite:`Devlin.Chang.Lee.ea.2018`. Для изображений мы можем обучать модели определять относительное положение двух вырезанных областей одного и того же изображения :cite:`Doersch.Gupta.Efros.2015`, предсказывать скрытую часть изображения на основе его видимых фрагментов или определять, являются ли два примера искажёнными версиями одного и того же исходного изображения. Самообучающиеся модели часто учатся извлекать представления, которые затем используются при дообучении полученных моделей на конкретной целевой задаче. Взаимодействие со средой ~~~~~~~~~~~~~~~~~~~~~~~~ До сих пор мы не обсуждали, откуда на самом деле берутся данные или что именно происходит, когда модель машинного обучения выдает результат. Это связано с тем, что обучение с учителем и обучение без учителя не рассматривают эти вопросы достаточно глубоко. В обоих случаях мы заранее собираем большой объём данных, а затем запускаем алгоритмы распознавания образов, больше никогда не взаимодействуя с окружающей средой. Поскольку все обучение происходит после того, как алгоритм отключается от среды, этот подход иногда называют *офлайн-обучением*. Например, обучение с учителем предполагает простую схему взаимодействия, показанную на рисунке :numref:`fig_data_collection`. .. _fig_data_collection: .. figure:: ../img/data-collection.svg Сбор данных для обучения с учителем из среды. Простота офлайн-обучения имеет свои преимущества. С одной стороны, это позволяет рассматривать задачу распознавания паттернов изолированно, не беспокоясь о сложностях, возникающих при взаимодействии с динамической средой. Однако такая постановка задачи ограничена. Если вы выросли на романах Азимова о роботах, то, вероятно, представляете искусственно интеллектуальных агентов, способных не только делать прогнозы, но и совершать действия в мире. Мы хотим иметь дело с интеллектуальными *агентами*, а не просто с предиктивными моделями. Это означает, что нам нужно думать о выборе *действий*, а не только о прогнозах. В отличие от прогнозов, действия реально влияют на среду. Если мы хотим обучить интеллектуального агента, мы должны учитывать, как его действия могут повлиять на будущие наблюдения агента, поэтому офлайн-обучение здесь не подходит. Рассмотрение взаимодействия со средой ставит целый ряд новых вопросов моделирования. Ниже приведены лишь некоторые примеры. - Запоминает ли окружение наши предыдущие действия? - Стремится ли среда помочь нам, например, когда пользователь читает текст для системы распознавания речи? - Хочет ли среда победить нас, например, когда спамеры адаптируют свои письма, чтобы избежать спам-фильтров? - Обладает ли среда изменяющейся динамикой? Например, всегда ли будущие данные будут напоминать прошлые, или закономерности будут меняться со временем — как естественным образом, так и в ответ на наши автоматизированные инструменты? Эти вопросы поднимают проблему *сдвига распределения*, при которой обучающие и тестовые данные различаются. Примером этого, с которым многие из нас, возможно, сталкивались, является ситуация, когда экзамены составляются преподавателем, а домашние задания — его ассистентами. Далее мы кратко опишем обучение с подкреплением — богатый фреймворк для формулировки задач *обучения*, в которых агент взаимодействует со средой. Обучение с подкреплением ~~~~~~~~~~~~~~~~~~~~~~~~ Если вас интересует использование машинного обучения для создания агента, который взаимодействует со средой и совершает действия, то, скорее всего, вы сосредоточитесь на *обучении с подкреплением*. Это может включать приложения в робототехнике, диалоговых системах и даже в разработке искусственного интеллекта (ИИ) для видеоигр. *Глубокое обучение с подкреплением*, применяющее глубокое обучение к задачам обучения с подкреплением, стало чрезвычайно популярным. Прорывная глубокая Q-сеть, победившая людей в играх Atari, используя только визуальный ввод :cite:`mnih2015human`, и программа AlphaGo, лишившая мирового чемпиона титула в настольной игре Го :cite:`Silver.Huang.Maddison.ea.2016`, являются двумя яркими примерами. Обучение с подкреплением дает очень общую постановку задачи, в которой агент взаимодействует со средой в течение ряда временных шагов. На каждом шаге агент получает от среды некоторое *наблюдение* и должен выбрать *действие*, которое затем передается обратно в среду посредством некоторого механизма (иногда называемого *исполнительным устройством*); после каждого такого цикла агент получает от среды *вознаграждение*. Этот процесс проиллюстрирован на рисунке :numref:`fig_rl-environment`. Затем агент получает следующее наблюдение, выбирает следующее действие и так далее. Поведение агента в обучении с подкреплением определяется *политикой*. Если говорить кратко, *политика* — это просто функция, отображающая наблюдения среды в действия. Цель обучения с подкреплением — выработать хорошие политики. .. _fig_rl-environment: .. figure:: ../img/rl-environment.svg Взаимодействие между алгоритмом обучения с подкреплением и средой. Сложно переоценить общность фреймворка обучения с подкреплением. Например, обучение с учителем можно переформулировать как обучение с подкреплением. Предположим, у нас есть задача классификации. Мы можем создать агента обучения с подкреплением, где каждому классу соответствует одно действие. Затем мы можем создать среду, которая выдаёт вознаграждение, точно равное значению функции потерь из исходной задачи обучения с учителем. Более того, обучение с подкреплением позволяет решать многие задачи, которые не поддаются решению методами обучения с учителем. Например, в обучении с учителем мы всегда предполагаем, что входные данные обучающей выборки сопровождаются правильными метками. Однако в обучении с подкреплением мы не предполагаем, что для каждого наблюдения среда указывает оптимальное действие. Как правило, мы получаем лишь некоторую награду. Более того, среда может даже не сообщать нам, какие именно действия привели к получению этой награды. Рассмотрим игру в шахматы. Единственный реальный сигнал вознаграждения поступает в конце партии: мы получаем вознаграждение, скажем, :math:`1`, если побеждаем, или вознаграждение, скажем, :math:`-1`, если проигрываем. Таким образом, алгоритмы обучения с подкреплением должны решать проблему *назначения заслуг* (credit assignment): определять, какие действия следует считать причиной того или иного исхода. То же самое относится к сотруднику, получившему повышение 11 октября. Это повышение, вероятно, отражает ряд удачных решений, принятых за предыдущий год. Чтобы добиться повышения в будущем, необходимо понять, какие именно действия привели к предыдущим успехам. Обучающиеся с подкреплением системы также могут сталкиваться с проблемой частичной наблюдаемости. Это означает, что текущее наблюдение может не сообщать всю информацию о текущем состоянии. Предположим, что робот-пылесос оказался запертым в одном из множества одинаковых шкафов в вашем доме. Чтобы спасти робота, необходимо определить его точное местоположение, что может потребовать учёта предыдущих наблюдений, сделанных до того, как он вошел в шкаф. Наконец, в любой момент времени обучаемый агент может знать одну хорошую политику, но могут существовать и другие, более эффективные политики, которые агент ещё не пробовал. Обучаемый агент должен постоянно выбирать: *использовать* (exploit) лучшую (на данный момент) известную стратегию в качестве политики или *исследовать* (explore) пространство стратегий, потенциально отказываясь от некоторой краткосрочной выгоды в обмен на новые знания. Общая задача обучения с подкреплением имеет весьма широкую постановку. Действия влияют на последующие наблюдения. Награды наблюдаются только в том случае, если они соответствуют выбранным действиям. Среда может быть как полностью, так и частично наблюдаемой. Одновременный учёт всей этой сложности может оказаться чрезмерной задачей. Более того, не каждая практическая задача обладает всей этой сложностью. В результате исследователи изучали множество частных случаев задач обучения с подкреплением. Когда среда полностью наблюдаема, задачу обучения с подкреплением называют *марковским процессом принятия решений*. Если состояние не зависит от предыдущих действий, речь идет о *задаче контекстуального бандита*. Если же состояния нет, а есть только набор доступных действий с изначально неизвестными наградами, мы имеем дело с классической *задачей многорукого бандита*. Корни ----- Мы рассмотрели лишь небольшую часть задач, которые может решить машинное обучение. Для широкого круга таких задач глубокое обучение предоставляет мощные инструменты. Хотя многие методы глубокого обучения являются недавними разработками, основные идеи обучения на основе данных изучаются уже на протяжении веков. Люди издавна стремились анализировать данные и предсказывать будущие события, и именно это стремление лежит в основе многих разделов естественных наук и математики. Два примера — распределение Бернулли, названное в честь `Якоба Бернулли (1655–1705) `__, и нормальное распределение, открытое `Карлом Фридрихом Гауссом (1777–1855) `__. Гаусс, например, изобрел метод наименьших квадратов, который до сих пор используется для решения множества задач — от страховых расчётов до медицинской диагностики. Такие инструменты способствовали развитию экспериментального подхода в естественных науках: например, закон Ома, связывающий силу тока и напряжение в резисторе, идеально описывается линейной моделью. Даже в средние века математики проявляли тонкое понимание оценок. Например, в геометрическом трактате `Якоба Кёбеля (1460–1533) `__ показано усреднение длины стоп 16 взрослых мужчин для оценки типичной длины стопы в популяции (:numref:`fig_koebel`). .. _fig_koebel: .. figure:: ../img/koebel.jpg :width: 500px Оценка длины стопы. Когда группа людей выходила из церкви, 16 взрослых мужчин попросили выстроиться в ряд и измерить длину их ступней. Сумма этих измерений затем делилась на 16, чтобы получить оценку того, что сейчас называется одним футом. Этот «алгоритм» позже был улучшен для учёта деформированных ступней: двух мужчин с самой короткой и самой длинной ступнями убирали, а среднее вычисляли только по оставшимся. Это один из самых ранних примеров оценки усечённого среднего. Статистика действительно получила мощный импульс к развитию благодаря доступности и накоплению данных. Один из её пионеров, `Рональд Фишер (1890–1962) `__, внес значительный вклад как в её теорию, так и в её применение в генетике. Многие из его алгоритмов (такие как линейный дискриминантный анализ) и концепции (такие как матрица информации Фишера) по-прежнему занимают видное место в основах современной статистики. Даже его наборы данных оказали долгосрочное влияние. Набор данных Iris, опубликованный Фишером в 1936 году, до сих пор иногда используется для демонстрации алгоритмов машинного обучения. Фишер также был сторонником евгеники, что напоминает нам: морально сомнительное использование науки о данных имеет столь же долгую и устойчивую историю, как и её продуктивное применение в промышленности и естественных науках. Другими источниками влияния на машинное обучение стали теория информации Клода Шеннона (1916–2001) https://en.wikipedia.org/wiki/Claude_Shannon и теория вычислений, предложенная Аланом Тьюрингом (1912–1954) https://en.wikipedia.org/wiki/Alan_Turing. В своей знаменитой статье *Computing Machinery and Intelligence* :cite:`Turing.1950` Тьюринг задал вопрос: «Могут ли машины мыслить?». Описывая то, что сейчас известно как тест Тьюринга, он предложил считать машину *интеллектуальной*, если человеку-оценщику трудно отличить ответы машины от ответов человека, основываясь исключительно на текстовом взаимодействии. Дальнейшее влияние оказали нейробиология и психология. В конце концов, люди явно демонстрируют интеллектуальное поведение. Многие исследователи задавались вопросом, можно ли объяснить эту способность и, возможно, воспроизвести её. Одним из первых алгоритмов, вдохновлённых биологией, стал алгоритм, сформулированный `Дональдом Хеббом (1904–1985) `__. В своей новаторской книге *The Organization of Behavior* :cite:`Hebb.1949` он предположил, что нейроны обучаются посредством положительного подкрепления. Это стало известно как правило Хебба. Эти идеи вдохновили последующие работы, такие как алгоритм обучения перцептрона Розенблатта, и заложили основы многих алгоритмов стохастического градиентного спуска, лежащих в основе глубокого обучения сегодня: подкреплять желательное поведение и ослаблять нежелательное, чтобы получить хорошие значения параметров нейронной сети. Именно биологическая интуиция дала название *нейронным сетям*. На протяжении более чем века (начиная с моделей Александра Бейна, 1873 года, и Чарльза Шеррингтона, 1890 года) исследователи пытались создать вычислительные схемы, напоминающие сети взаимодействующих нейронов. Со временем интерпретация биологических процессов становилась всё менее буквальной, но название сохранилось. В основе большинства современных сетей лежат несколько ⟦key⟧ принципов: - Чередование линейных и нелинейных блоков обработки, часто называемых *слоями*. - Использование цепного правила (также известного как *обратное распространение ошибки*) для одновременной настройки параметров во всей сети. После первоначального быстрого прогресса исследования нейронных сетей переживали застой примерно с 1995 по 2005 год. Это было обусловлено двумя основными причинами. Во-первых, обучение сети вычислительно очень затратно. Хотя в конце прошлого века оперативной памяти было достаточно, вычислительных мощностей не хватало. Во-вторых, наборы данных были относительно небольшими. Более того, набор данных Фишера «Ирисы» 1936 года всё ещё оставался популярным инструментом для проверки эффективности алгоритмов. Набор данных MNIST, содержащий 60 000 рукописных цифр, считался огромным. Учитывая нехватку данных и вычислительных ресурсов, такие мощные статистические инструменты, как методы на основе ядра, деревья решений и графовые модели, на практике оказались более эффективными во многих приложениях. Кроме того, в отличие от нейронных сетей, они не требовали недель для обучения и давали предсказуемые результаты с надёжными теоретическими гарантиями. Путь к глубокому обучению ------------------------- Многое изменилось с появлением огромных объёмов данных, что стало возможным благодаря Всемирной паутине, появлению компаний, обслуживающих сотни миллионов пользователей в сети, распространению недорогих и высококачественных датчиков, дешевому хранению данных (закон Кридера) и дешевым вычислениям (закон Мура). В частности, ландшафт вычислений в глубоком обучении был революционизирован благодаря развитию графических процессоров (GPU), изначально разработанных для компьютерных игр. Внезапно алгоритмы и модели, которые ранее казались вычислительно невозможными, стали достижимыми. Это лучше всего иллюстрируется на рисунке :numref:`tab_intro_decade`. :Набор данных, оперативная память компьютера и вычислительные мощности .. table:: label:``tab_intro_decade`` +-----------------------+----------------+---------------+---------------+ | Десятилетие | Набор данных | Память | Количество | | | | | операций с | | | | | плавающей | | | | | запятой в | | | | | секунду | +=======================+================+===============+===============+ | 1970 | 100 (Iris) | 1 КБ | 100 КФ (Intel | | | | | 8080) | +-----------------------+----------------+---------------+---------------+ | 1980 | 1 K (цены на | 100 КБ | 1 MF (Intel | | | жилье в | | 80186) | | | Бостоне) | | | +-----------------------+----------------+---------------+---------------+ | 1990 | 10 K | 10 МБ | 10 МБ (Intel | | | (распознавание | | 80486) | | | оптических | | | | | символов) | | | +-----------------------+----------------+---------------+---------------+ | 2000 | 10 млн | 100 МБ | 1 GF (Intel | | | (веб-страниц) | | Core) | +-----------------------+----------------+---------------+---------------+ | 2010 | 10 G (реклама) | 1 ГБ | 1 ТФ (NVIDIA | | | | | C2050) | +-----------------------+----------------+---------------+---------------+ | 2020 | 1 T | 100 ГБ | 1 PF (NVIDIA | | | (социальная | | DGX-2) | | | сеть) | | | +-----------------------+----------------+---------------+---------------+ Обратите внимание, что оперативная память не успевает за ростом объёмов данных. В то же время рост вычислительных мощностей опережает рост размеров наборов данных. Это означает, что статистические модели должны становиться более эффективными в использовании памяти, благодаря чему они могут выделять больше вычислительных циклов на оптимизацию параметров в рамках возросшего вычислительного бюджета. В результате оптимальный выбор в машинном обучении и статистике сместился от (обобщённых) линейных моделей и методов на основе ядра к глубоким нейронным сетям. Это также одна из причин, по которой многие основные инструменты глубокого обучения, такие как многослойные персептроны :cite:`McCulloch.Pitts.1943`, свёрточные нейронные сети :cite:`LeCun.Bottou.Bengio.ea.1998`, долгая краткосрочная память :cite:`Hochreiter.Schmidhuber.1997` и Q-обучение :cite:`Watkins.Dayan.1992`, были по сути «переоткрыты» за последнее десятилетие после сравнительно длительного периода относительного застоя. Недавний прогресс в статистических моделях, приложениях и алгоритмах иногда сравнивают с кембрийским взрывом — периодом стремительной эволюции видов. Действительно, современное положение дел — это не просто следствие применения доступных ресурсов к алгоритмам, разработанным десятилетия назад. Обратите внимание, что приведённый ниже список идей лишь слегка затрагивает тот спектр идей, который помог исследователям достичь колоссального прогресса за последнее десятилетие. - Новые методы контроля ёмкости, такие как *дропаут* :cite:`Srivastava.Hinton.Krizhevsky.ea.2014`, помогли смягчить переобучение. При этом шум добавляется :cite:`Bishop.1995` во всю нейронную сеть в процессе обучения. - *Механизмы внимания* решили вторую проблему, которая мучила статистику более века: как увеличить память и сложность системы, не увеличивая количество обучаемых параметров. Исследователи нашли элегантное решение, используя то, что можно рассматривать лишь как *обучаемую структуру указателей* :cite:`Bahdanau.Cho.Bengio.2014`. Вместо того чтобы запоминать всю текстовую последовательность, например, для машинного перевода в представлении фиксированной размерности, достаточно было хранить указатель на промежуточное состояние процесса перевода. Это позволило значительно повысить точность при работе с длинными последовательностями, поскольку модели больше не нужно было запоминать всю последовательность перед началом генерации новой. - Архитектура *трансформера* :cite:`Vaswani.Shazeer.Parmar.ea.2017`, построенная исключительно на механизмах *внимания*, демонстрирует превосходные свойства *масштабирования*: она показывает лучшие результаты при увеличении размера набора данных, размера модели и объёма вычислений, затрачиваемых на *обучение* :cite:`kaplan2020scaling`. Эта архитектура продемонстрировала убедительные успехи в широком спектре областей, таких как обработка естественного языка :cite:`Devlin.Chang.Lee.ea.2018,brown2020language`, компьютерное зрение :cite:`Dosovitskiy.Beyer.Kolesnikov.ea.2021,liu2021swin`, распознавание речи :cite:`gulati2020conformer`, обучение с подкреплением :cite:`chen2021decision` и графовые нейронные сети :cite:`dwivedi2020generalization`. Например, одна модель трансформера, предварительно обученная на столь разнообразных модальностях, как текст, изображения, крутящие моменты и нажатия кнопок, способна играть в Atari, создавать подписи к изображениям, поддерживать диалог и управлять роботом :cite:`reed2022generalist`. - Моделируя вероятности текстовых последовательностей, *языковые модели* способны предсказывать текст на основе других текстов. Масштабирование данных, моделей и вычислительных ресурсов открыло перед языковыми моделями всё больше возможностей для выполнения целевых задач посредством генерации текста, имитирующего человеческий, на основе входных данных :cite:`brown2020language,rae2021scaling,hoffmann2022training,chowdhery2022palm,openai2023gpt4,anil2023palm,touvron2023llama,touvron2023llama2`. Например, благодаря согласованию языковых моделей с человеческими намерениями :cite:`ouyang2022training`, `ChatGPT `__ от OpenAI позволяет пользователям взаимодействовать с ним в диалоговом режиме для решения таких задач, как отладка кода и творческое письмо. - Многоэтапные архитектуры, такие как сети с памятью :cite:`Sukhbaatar.Weston.Fergus.ea.2015` и нейронный программист-интерпретатор :cite:`Reed.De-Freitas.2015`, позволили специалистам по статистическому моделированию описывать итеративные подходы к рассуждению. Эти инструменты позволяют многократно изменять внутреннее состояние глубокой нейронной сети, выполняя последующие шаги в цепи рассуждений, подобно тому как процессор изменяет память для выполнения вычислений. - Ключевым достижением в *глубоком генеративном моделировании* стало изобретение *генеративно-состязательных сетей* :cite:`Goodfellow.Pouget-Abadie.Mirza.ea.2014`. Традиционно статистические методы оценки плотности и генеративные модели были сосредоточены на поиске подходящих распределений вероятности и (часто приближенных) алгоритмов выборки из них. В результате эти алгоритмы во многом ограничивались отсутствием гибкости, присущей статистическим моделям. Важнейшим нововведением в генеративно-состязательных сетях стала замена алгоритма выборки на произвольный алгоритм с дифференцируемыми параметрами. Эти параметры затем настраиваются таким образом, чтобы дискриминатор (по сути, двухвыборочный тест) не мог отличить поддельные примеры от реальных. Благодаря возможности использовать произвольные алгоритмы для генерации данных, оценка плотности стала доступна широкому спектру методов. Примеры галопирующих зебр :cite:`Zhu.Park.Isola.ea.2017` и поддельных лиц знаменитостей :cite:`Karras.Aila.Laine.ea.2017` служат подтверждением этого прогресса. Даже любители, рисующие каракули, могут создавать фотореалистичные изображения, основываясь лишь на набросках, описывающих компоновку сцены :cite:`Park.Liu.Wang.ea.2019`. - Более того, в то время как процесс диффузии постепенно добавляет случайный шум к выборкам данных, *диффузионные модели* :cite:`sohl2015deep,ho2020denoising` обучаются процессу удаления шума, постепенно формируя выборки данных из случайного шума, тем самым обращая процесс диффузии вспять. В последнее время они начали заменять генеративно-состязательные сети в современных глубоких генеративных моделях, таких как DALL-E 2 :cite:`ramesh2022hierarchical` и Imagen :cite:`saharia2022photorealistic`, предназначенных для создания произведений искусства и изображений на основе текстовых описаний. - Во многих случаев одного GPU недостаточно для обработки больших объёмов данных, доступных для обучения. За последнее десятилетие возможности создания алгоритмов параллельного и распределённого обучения значительно улучшились. Одна из ключевых проблем при разработке масштабируемых алгоритмов заключается в том, что основной инструмент оптимизации в глубоком обучении, стохастический градиентный спуск, требует обработки относительно небольших мини-батчей данных. В то же время малые батчи ограничивают эффективность GPU. Таким образом, обучение на 1024 GPU с размером мини-батча, скажем, 32 изображения на батч, приводит к формированию совокупного мини-батча примерно из 32 000 изображений. Работа, первоначально выполненная :cite:t:`Li.2017`, а затем :cite:t:`You.Gitman.Ginsburg.2017` и :cite:t:`Jia.Song.He.ea.2018`, увеличила этот размер до 64 000 наблюдений, сократив время обучения модели ResNet-50 на наборе данных ImageNet до менее чем 7 минут. Для сравнения, изначально время обучения составляло дни. - Способность к распараллеливанию вычислений также способствовала прогрессу в *обучении с подкреплением*. Это привело к значительным успехам в достижении компьютерами сверхчеловеческих результатов в таких задачах, как Го, игры Atari, StarCraft, а также в физических симуляциях (например, с использованием MuJoCo), где доступны симуляторы среды. См., например, :cite:t:`Silver.Huang.Maddison.ea.2016` для описания таких достижений AlphaGo. Если говорить кратко, обучение с подкреплением работает наиболее эффективно, когда имеется большое количество кортежей вида (состояние, действие, награда). Симуляция предоставляет такую возможность. - Фреймворки глубокого обучения сыграли ключевую роль в распространении идей. Первое поколение фреймворков с открытым исходным кодом для моделирования нейронных сетей включало `Caffe `__, `Torch `__ и `Theano `__. Многие основополагающие статьи были написаны с использованием этих инструментов. Сейчас им на смену пришли `TensorFlow `__ (часто используемый через его высокоуровневый API `Keras `__), `CNTK `__, `Caffe 2 `__ и `Apache MXNet `__. Третье поколение фреймворков состоит из так называемых *императивных* инструментов для глубокого обучения; этот тренд, по всей видимости, был инициирован `Chainer `__, который использовал синтаксис, похожий на Python NumPy, для описания моделей. Эта идея была перенята как `PyTorch `__, так и `Gluon API `__ MXNet, а также `JAX `__. Разделение труда между исследователями систем, создающими более совершенные инструменты, и статистиками, разрабатывающими более качественные нейронные сети, значительно упростило дело. Например, обучение модели логистической регрессии раньше было нетривиальной задачей, которую в 2014 году в Университете Карнеги — Меллона поручали новым аспирантам по специальности «машинное обучение». Теперь эту задачу можно решить менее чем в 10 строк кода, что делает её вполне посильной для любого программиста. Успешные примеры ---------------- Искусственный интеллект имеет долгую историю успешного решения задач, которые было бы трудно выполнить иными способами. Например, системы сортировки почты, использующие оптическое распознавание символов, применяются с 1990-х годов. Именно из них был получен знаменитый набор данных MNIST с рукописными цифрами. То же самое можно сказать о чтении банковских чеков и оценке кредитоспособности заявителей. Финансовые транзакции автоматически проверяются на мошенничество. Это составляет основу многих систем электронных платежей, таких как PayPal, Stripe, AliPay, WeChat, Apple, Visa и MasterCard. Компьютерные программы для игры в шахматы уже несколько десятилетий демонстрируют конкурентоспособный уровень. Машинное обучение обеспечивает поиск, рекомендации, персонализацию и ранжирование в интернете. Иными словами, машинное обучение повсеместно, хотя часто остаётся незамеченным. Лишь в последнее время искусственный интеллект оказался в центре внимания, в основном благодаря решениям проблем, которые ранее считались неразрешимыми и которые напрямую связаны с потребителями. Многие из этих достижений связаны с глубоким обучением. - Интеллектуальные помощники, такие как Siri от Apple, Alexa от Amazon и Google Assistant, способны с приёмлемой точностью отвечать на голосовые запросы. Сюда входят как рутинные задачи, например включение света, так и более сложные, такие как запись к парикмахеру или предоставление телефонной поддержки. Это, вероятно, самый заметный признак того, что искусственный интеллект влияет на нашу жизнь. - Ключевым компонентом цифровых ассистентов является их способность точно распознавать речь. Точность таких систем постепенно возрастала до уровня, при котором для определённых приложений она сравнялась с человеческой :cite:`Xiong.Wu.Alleva.ea.2018`. - Распознавание объектов также значительно продвинулось вперед. В 2010 году идентификация объекта на изображении была довольно сложной задачей. На бенчмарке ImageNet исследователи из NEC Labs и Иллинойсского университета в Урбана-Шампейн достигли ошибки в топ-5 на уровне 28% :cite:`Lin.Lv.Zhu.ea.2010`. К 2017 году эта ошибка снизилась до 2,25% :cite:`Hu.Shen.Sun.2018`. Аналогичные впечатляющие результаты были достигнуты в задачах распознавания пения птиц и диагностики рака кожи. - Успехи в играх ранее служили мерилом человеческих способностей. Начиная с TD-Gammon — программы для игры в нарды, использующей обучение с подкреплением на основе метода временных разниц, — алгоритмические и вычислительные достижения привели к созданию алгоритмов для широкого спектра приложений. В отличие от нардов, шахматы имеют гораздо более сложное пространство состояний и набор действий. DeepBlue обыграл Гарри Каспарова благодаря массовому параллелизму, специализированному оборудованию и эффективному поиску по дереву игры :cite:`Campbell.Hoane-Jr.Hsu.2002`. Го ещё сложнее из-за своего огромного пространства состояний. AlphaGo достигла уровня человека в 2015 году, используя глубокое обучение в сочетании с выборкой по дереву Монте-Карло :cite:`Silver.Huang.Maddison.ea.2016`. Сложность покера заключалась в том, что пространство состояний велико и наблюдается лишь частично (мы не знаем карты противников). Libratus превзошла человеческие возможности в покере, используя эффективно структурированные стратегии :cite:`Brown.Sandholm.2017`. - Ещё одним свидетельством прогресса в области искусственного интеллекта является появление беспилотных автомобилей. Хотя полная автономность пока не достигнута, в этом направлении был достигнут значительный прогресс: такие компании, как Tesla, NVIDIA и Waymo, уже выпускают продукты, обеспечивающие частичную автономию. Главная сложность достижения полной автономности заключается в том, что безопасное вождение требует способности воспринимать окружающую обстановку, рассуждать и применять правила в системе. В настоящее время глубокое обучение применяется в основном для решения визуальных аспектов этих задач. Остальное тщательно настраивается инженерами. Это лишь вершина айсберга значимых применений машинного обучения. Например, робототехника, логистика, вычислительная биология, физика элементарных частиц и астрономия обязаны своими наиболее впечатляющими недавними достижениями, по крайней мере отчасти, машинному обучению, которое таким образом становится повсеместным инструментом для инженеров и ученых. В неспециализированных статьях часто поднимаются вопросы о надвигающемся «апокалипсисе искусственного интеллекта» и правдоподобности *сингулярности*. Страх заключается в том, что системы машинного обучения каким-то образом обретут сознание и будут принимать решения, независимые от их разработчиков, которые напрямую влияют на жизнь людей. В некоторой степени искусственный интеллект уже напрямую влияет на средства к существованию людей: кредитоспособность оценивается автоматически, автопилоты в основном управляют транспортными средствами, а решения о выдаче залога принимаются на основе статистических данных. В более прикладном смысле мы можем попросить Alexa включить кофемашину. К счастью, мы далеки от создания системы искусственного интеллекта, способной сознательно манипулировать своими создателями. Во-первых, системы ИИ проектируются, обучаются и внедряются конкретным образом, ориентированным на достижение определённых целей. Хотя их поведение может создавать иллюзию общего интеллекта, в основе их работы лежит комбинация правил, эвристик и статистических моделей. Во-вторых, на данный момент просто не существует инструментов для *общего искусственного интеллекта*, способных самостоятельно совершенствоваться, рассуждать о себе, а также изменять, расширять и улучшать свою архитектуру при решении общих задач. Гораздо более насущной проблемой является то, как искусственный интеллект используется в нашей повседневной жизни. Вероятно, многие рутинные задачи, которые в настоящее время выполняют люди, могут и будут автоматизированы. Сельскохозяйственные роботы, вероятно, снизят затраты для фермеров, выращивающих органическую продукцию, но они также автоматизируют процессы сбора урожая. Этот этап промышленной революции может иметь глубокие последствия для широких слоёв общества, поскольку низкооплачиваемая работа обеспечивает занятость многих людей во многих странах. Кроме того, статистические модели, применяемые без должной осторожности, могут приводить к расовой, гендерной или возрастной предвзятости и вызывать обоснованные опасения относительно справедливости процедур, если они используются для принятия важных решений. Важно обеспечить осторожное использование этих алгоритмов. С учётом наших текущих знаний эта проблема кажется нам гораздо более насущной, чем потенциальная угроза злонамеренного сверхинтеллекта, способного уничтожить человечество. Суть глубокого обучения ----------------------- До сих пор мы говорили о машинном обучении в общих чертах. Глубокое обучение — это подраздел машинного обучения, занимающийся моделями на основе многослойных нейронных сетей. Оно *глубокое* именно в том смысле, что его модели изучают множество *слоёв* преобразований. Хотя это может звучать узко, глубокое обучение породило головокружительное разнообразие моделей, методов, постановок задач и приложений. Было разработано множество интуитивных представлений, объясняющих преимущества глубины. Можно сказать, что всё машинное обучение включает множество вычислительных слоёв, первый из которых состоит из этапов обработки признаков. Отличие глубокого обучения заключается в том, что операции, изучаемые на каждом из многих слоёв представлений, обучаются совместно на основе данных. Проблемы, которые мы обсуждали ранее, такие как обучение на необработанных аудиосигналах, на исходных значениях пикселей изображений или сопоставление предложений произвольной длины с их эквивалентами на иностранных языках, — это те области, где глубокое обучение преуспевает, а традиционные методы дают сбой. Оказывается, что эти многослойные модели способны обрабатывать низкоуровневые перцептивные данные способом, недоступным предыдущим инструментам. Несомненно, наиболее важной общей чертой методов глубокого обучения является *обучение от начала до конца*. То есть вместо сборки системы из компонентов, каждый из которых настраивается индивидуально, мы строим систему и затем совместно настраиваем её производительность. Например, в компьютерном зрении ученые ранее разделяли процесс *конструирования признаков* и процесс построения моделей машинного обучения. Детектор границ Кэнни :cite:`Canny.1987` и экстрактор признаков SIFT Лоу :cite:`Lowe.2004` доминировали в течение более чем десятилетия как алгоритмы преобразования изображений в векторы признаков. В былые времена ключевой частью применения машинного обучения к этим задачам была разработка вручную сконструированных способов преобразования данных в форму, удобную для моделей с малой глубиной. К сожалению, возможности человеческой изобретательности ограничены по сравнению с последовательной оценкой миллионов вариантов, выполняемой алгоритмом автоматически. С приходом глубокого обучения эти экстракторы признаков были заменены автоматически настраиваемыми фильтрами, обеспечивающими более высокую точность. Таким образом, одно из ключевых преимуществ глубокого обучения заключается в том, что оно заменяет не только неглубокие модели в конце традиционных конвейеров обучения, но и трудоёмкий процесс конструирования признаков. Более того, устраняя значительную часть специфичной для предметной области предварительной обработки, глубокое обучение стерло многие границы, ранее разделявшие компьютерное зрение, распознавание речи, обработку естественного языка, медицинскую информатику и другие области применения, тем самым предложив единый набор инструментов для решения разнородных задач. Помимо сквозного обучения, мы наблюдаем переход от параметрических статистических описаний к полностью непараметрическим моделям. Когда данных мало, приходится опираться на упрощающие предположения о реальности, чтобы получить полезные модели. Когда данных много, эти предположения можно заменить непараметрическими моделями, которые лучше соответствуют данным. В некоторой степени это отражает прогресс, достигнутый физикой в середине прошлого века благодаря появлению компьютеров. Вместо ручного решения параметрических аппроксимаций поведения электронов теперь можно прибегать к численному решению соответствующих дифференциальных уравнений в частных производных. Это привело к созданию гораздо более точных моделей, хотя зачастую и ценой потери интерпретируемости. Ещё одно отличие от предыдущих работ заключается в принятии субоптимальных решений, работе с невыпуклыми нелинейными задачами оптимизации и готовности пробовать решения до их строгого доказательства. Этот новый эмпирический подход к решению статистических проблем, в сочетании с притоком новых специалистов, привёл к быстрому прогрессу в разработке практических алгоритмов, хотя во многих случаях это происходило за счёт модификации и повторного изобретения инструментов, которые существовали уже десятилетия. В конечном счете, сообщество глубокого обучения гордится тем, что делится инструментами за пределами академических и корпоративных границ, публикуя множество отличных библиотек, статистических моделей и обученных сетей как открытое программное обеспечение. Именно в этом духе ноутбуки, составляющие эту книгу, свободно распространяются и могут использоваться. Мы приложили все усилия, чтобы снизить барьеры доступа для всех, кто хочет изучить глубокое обучение, и надеемся, что наши читатели извлекут из этого пользу. Резюме ------ Машинное обучение изучает, как компьютерные системы могут использовать опыт (часто данные) для повышения эффективности выполнения конкретных задач. Оно объединяет идеи из статистики, интеллектуального анализа данных и оптимизации. Часто оно используется как средство реализации решений в области искусственного интеллекта. В рамках машинного обучения репрезентативное обучение фокусируется на том, как автоматически находить подходящий способ представления данных. Рассматриваемое как многоуровневое репрезентативное обучение посредством изучения множества слоёв преобразований, глубокое обучение заменяет не только поверхностные модели в конце традиционных конвейеров машинного обучения, но и трудоемкий процесс конструирования признаков. Значительная часть недавнего прогресса в глубоком обучении была обусловлена обилием данных, возникающих благодаря дешевым датчикам и приложениям интернет-масштаба, а также значительным прогрессом в вычислениях, в основном благодаря графическим процессорам. Кроме того, наличие эффективных фреймворков глубокого обучения сделало проектирование и реализацию оптимизации всей системы значительно проще, и это является ключевым компонентом для достижения высокой производительности. Упражнения ---------- 1. Какие из частей кода, которые вы сейчас пишете, можно было бы «научить», то есть улучшить за счет обучения и автоматического определения проектных решений, заложенных в код? Содержит ли ваш код эвристические проектные решения? Какие данные могут понадобиться для обучения желаемому поведению? 2. Какие задачи, с которыми вы сталкиваетесь, имеют множество примеров решений, но не имеют конкретного способа их автоматизации? Они могут стать отличными кандидатами для применения глубокого обучения. 3. Опишите взаимосвязи между алгоритмами, данными и вычислениями. Как характеристики данных и доступные вычислительные ресурсы влияют на выбор подходящих алгоритмов? 4. Назовите несколько областей, где сквозное обучение пока не является подходом по умолчанию, но где оно может оказаться полезным. `Обсуждения `__