что ручка упадет на стол, но не сможет указать ее ориентацию. В этом есть неопределенность. Если вы научите машину предсказывать продолжение видео с начальным кадром, как слева на рисунке, она не сможет сделать правильный и единый прогноз. Если ее попросят сделать один прогноз, лучшее, что она может сделать, – это выдать среднее значение всех возможных кадров из исходного видео. Но такой прогноз будет изображением, состоящим из ручки во всех возможных положениях, как изображено справа. Это плохой прогноз.
Рис. 9.4. Прогнозирование видео
На видео маленькая девочка перед праздничным тортом. Трудно предсказать, будет ли девочка вытягивать голову вперед, чтобы задуть свечи, или отведет ее назад, чтобы хлопать в ладоши. Система, обученная минимизировать ошибку прогнозирования, будет сведена к прогнозированию среднего вероятного прогноза, что является нечеткой картиной. Вверху: четыре кадра, поступающие в сеть. Внизу: следующие два кадра, предсказанные сверточной сетью, приводимой к минимизации квадратичной ошибки с тысячами клипов.
Давайте возьмем видео, где в комнату вносят торт в день рождения маленькой девочки (рис. 9.4). Перед ней ставят торт с зажженными свечами. Что она собирается делать? Для того, чтобы машина могла это предсказать, ей потребуется модель мира, содержащая большой объем информации о привычках и обычаях определенных культур, и не только. Ей также потребуются знания интуитивной физики, чтобы предсказать, что если задуть свечу, то она погаснет. Не говоря уже о неопределенностях: свечи может задуть девочка, стоящая рядом, девочку могут напугать гости, а может она начнет с аплодисментов и т. д. Как в этих случаях обучить систему прогнозирования? Девочка может двигать головой вперед или назад, поэтому система, обученная делать наилучшее прогнозирование, создаст размытое изображение, соответствующее наложению различных положений головы девочки.
Если бы мне пришлось выделить только одну проблему среди тех, которые стоят на пути прогресса в области ИИ, я бы сказал так: как заставить работать обучение без учителя, когда сигнал не полностью предсказуем, и притом является непрерывным и многомерным?
Множественные прогнозы и скрытые переменные
Модель, обученная без учителя, – это параметризованная функция (например, нейронная сеть) yp = g (x, w), где x – это часть наблюдаемых входов, а yp – прогноз. Данная формулировка, идентичная формулировке обучения с учителем, не позволяет модели делать ничего, кроме прогноза для заданных входов. Основная идея состоит в том, чтобы добавить к f аргумент z, который мы называем скрытой переменной:
yp = g(x, z, w)
Путем изменения z в заданном наборе выход yp будет меняться сам по себе. Набор всех выходов, полученных при изменении z в заданном наборе, представляет собой набор прогнозов модели. Эта ситуация показана на рис. 9.5.
Рис. 9.5. Модель со скрытой переменной
Модель со скрытой переменной зависит от значения скрытой переменной z, которая при изменении в наборе (обозначенном серым прямоугольником внизу) создает набор выходов, представленных серой лентой справа.
Существует несколько методов обучения модели со скрытыми переменными. Самый популярный метод, GAN (Generative Adversarial Network, генеративно-состязательные сети), был предложен в 2014 г. Яном Гудфеллоу[122], когда он был студентом Йошуа Бенжио. Принцип GAN показан на рис. 9.6. В примере (x, y) мы случайным образом извлекаем значение z из набора возможных значений, что дает прогноз yp. Поскольку z нарисован случайным образом, вероятность того, что прогнозируемый yp будет равен желаемому y, мала. Идея GAN состоит в том, чтобы обучить вторую сеть, называемую «критической сетью», определять, находится ли прогноз yp в наборе вероятных выходов или нет. Мы можем рассматривать критическую сеть как обучаемую функцию стоимости. Критическая сеть обучена обеспечивать низкую стоимость выходов, связанных с примерами (x, y), и высокую стоимость всех других наблюдений. В частности, дискриминатор предполагает, что прогнозы генератора (x, yp) неверны, и корректирует его веса, чтобы предоставить этим прогнозам высокую стоимость. Одновременно с этим первая сеть («генератор») корректирует свои веса для получения прогнозов, при которых дискриминатор выдаст низкую стоимость.
Рис. 9.6. GAN (генеративно-состязательные сети) или состязательные генеративные сети
GAN состоит из двух сетей, управляемых одновременно; одна из них является дискриминатором, а другая – генератором. Генератор берет наблюдение x (например, начальный сегмент видеоклипа) – значение, полученное случайным образом из скрытой переменной z (которая является вектором), и производит прогноз yp. Данный прогноз оценивается критической сетью. Эта сеть представляет собой своего рода обучаемую функцию стоимости. Форма функции стоимости обозначена справа в трех моментах обучения. Сначала функция стоимости плоская. Наблюдаемые у для данного х – это маленькие темные точки. Для наблюдаемого x дискриминатор корректирует свои параметры u, чтобы обеспечить низкую стоимость наблюдаемого y и высокую стоимость yp, предсказываемую генератором. Функция стоимости расширяется вокруг маленьких темных точек и поднимается вокруг ярких точек, создаваемых генератором. Одновременно генератор использует градиент стоимости по отношению к своему выходу (путем обратного распространения через дискриминатор), чтобы настроить свои параметры w и приблизить свои прогнозируемые точки к долине стоимости (т. е. давать хорошие прогнозы). После обучения мы можем нарисовать z наугад и получить набор правдоподобных yp с учетом наблюдения x.
С момента своего создания GAN стали предметом феноменального количества статей. Они дали впечатляющие результаты, хотя управлять ими очень сложно. Первые ошеломляющие результаты появились в ноябре 2015 г., когда вышла статья Алека Рэдфорда, Люка Метца и Сумита Чинтала[123]. Сумит работал в FAIR, Алек и Люк открыли стартап в Бостоне, но первый с тех пор присоединился к OpenAI, а второй – к Google. Их статья показала, что GAN, использующие архитектуру сверточной (или, скорее, деконволютивной) сети, может создавать довольно убедительные синтезированные изображения. Вход в генератор представляет собой 100-мерный скрытый вектор (в их случае нет x-входа), а выход – цветное изображение размером 64 × 64 пикселя. Дискриминатор – односторонняя сверточная сеть. Авторы тренировали свою сеть на фотографиях спален. После обучения сети дается 100 случайных чисел, и она создает образ воображаемой, но совершенно убедительной спальни. Эта статья была сродни взорвавшейся бомбе. Все перешли на GAN! Они являются одним из способов выполнения старой мечты моделирования данных: параметризация очень сложной поверхности в многомерном пространстве, о котором что-то известно только на немногих конкретных примерах.
Год спустя вместе с моим учеником Микаэлем Матье и Камилль Купри, исследователем из FAIR в Париже, мы показали, что GAN могут помочь решить проблему размытых изображений при прогнозировании видео[124]. Вместе с Камиллем и другими участниками FAIR мы будем создавать изображения одежды после обучения на основе коллекции изображений от известного дизайнера[125]. Некоторые примеры