«РБК Тренды» публикуют отрывок из книги «Форма реальности. Скрытая геометрия стратегии, информации, общества, биологии и всего остального» Джордана Элленберга.
Материал подготовлен в коллаборации с издательством «Манн, Иванов и Фербер».
Искусственный интеллект как альпинизм
Моя знакомая Мередит Бруссард, профессор из Нью-Йоркского университета и эксперт в сфере машинного обучения и его влияния на общество, не так давно выступала на телевидении, где ее попросили вкратце объяснить общенациональной аудитории, что такое искусственный интеллект и как он работает. Это не роботы-убийцы, объяснила она ведущим, и не бесстрастные андроиды, чьи умственные способности превосходят наши. «Самое важное, что нужно помнить, — сказала она, — что это просто математика и не надо ее бояться». Удивленное выражение лиц ведущих наводило на мысль, что они предпочли бы роботов-убийц. Однако ответ Мередит был хорош. И я готов более детально поговорить на эту тему. Так что я принимаю эстафету и попробую объяснить, что такое математика машинного обучения, потому что эта масштабная идея проще, чем вы думаете.
Для начала предположим, что вы альпинист и пытаетесь покорить вершину. Но у вас нет карты. Вас окружают деревья и куст нигде нет никакой точки обзора, с которой можно было бы охватить взглядом весь ландшафт. Как добраться до вершины? Вот одна из стратегий. Посмотрите на уклон у ваших ног. Возможно, поверхность чуть повышается при шаге на север и чуть понижается при шаге на юг. Повернитесь на северо-восток и обнаружите еще более крутой подъем. Поворачиваясь вокруг своей оси, вы проверите все возможные направления движения; среди них точно есть одно с наибольшим уклоном вверх (если таких несколько — выбирайте любое, которое вам нравится). Сделайте несколько шагов в этом направлении. Снова повернитесь, выберите самый крутой подъем и продолжите движение. Теперь вы знаете, как работает машинное обучение! Ладно, возможно, в нем есть нечто большее. Но в основе всего лежит идея под названием градиентный спуск.
На самом деле речь в данном случае идет о градиентном подъеме (мы ищем самую высокую точку местности), а градиентный спуск используют для нахождения самой низкой точки. Но иногда говорят о методе градиентного спуска, подразумевая движение в обе стороны, поскольку принципиальной разницы нет, а вычисления одинаковы.
Фактически это некая форма метода проб и ошибок: вы пробуете несколько возможных ходов и выбираете тот, который вам больше всего подходит. Градиент, связанный с определенным направлением, — это математическое наименование выражения «насколько изменится высота, если вы делаете один крохотный шаг в этом направлении». Другими словами, это наклон поверхности, когда вы двигаетесь в этом направлении. Если вы знаете математический анализ, то это примерно тоже самое, что производная, однако для обсуждения нашей темы математический анализ не нужен.
Градиентный спуск — это алгоритм, математический способ сказать «явное правило, указывающее вам, что делать в любой ситуации, с которой вы можете столкнуться». В данном случае правило таково:
- Представьте все шаги, которые можете сделать.
- Выясните, какой из них обеспечивает наибольший градиент, сделайте его.
- Повторите.
Ваш путь к вершине, нанесенный на топографическую карту, будет выглядеть примерно так:
Как видите, эта идея может оказаться удачной для альпинизма (хотя не всегда, и мы еще к этому вернемся), однако какое отношение все это имеет к машинному обучению? Предположим, что я все-таки не альпинист, а компьютер, пытающийся чему-то научиться. Это может быть одна из машин, с которыми мы уже встречались, например AlphaGo, играющая в го лучше мастеров, или GPT-3, выдающая длинные строки правдоподобного английского текста. Но для начала будем придерживаться классики допустим, что я — компьютер, который пытается узнать, что такое кошка. Как мне это сделать? Примерно так же, как это делает младенец.
Малыш живет в мире, где время от времени какой-нибудь взрослый показывает на нечто, находящееся в поле зрения, говорит: «Кошка!». Вы можете обеспечить компьютеру аналогичный процесс обучения: предоставить ему тысячу изображений кошек в различных позах, при разном освещении и в разном настроении. «Все это кошки», — сообщаете вы компьютеру. В реальности, если вы действительно хотите быть полезным, вы добавляете такое же количество изображений другими объектами и объясняете компьютеру, что это не кошки. Задача машины — разработать стратегию, позволяющую ей отличать кошек от некошек самостоятельно.
Это блуждание по ландшафту всех возможных стратегий в попытках найти лучшую — вершину точности идентификации кошек. По сути, это аналог альпиниста. Следовательно, мы можем применить метод градиентного спуска! Вы выбираете какую-нибудь стратегию, тем самым помещая себя в ландшафт, а затем действуете в соответствии с правилом градиентного спуска. Проанализируйте все небольшие изменения, которые можете внести в текущую стратегию, выясните, какое из них предлагает наибольший градиент, сделайте это. Повторите.
Как разработать стратегию?
Звучит неплохо, но только до тех пор, пока вы не осознаете, что понятия не имеете, что это значит. Например, что такое стратегия? Это должно быть нечто, понятное компьютеру, а потому должно выражаться в математических терминах. Изображение для компьютера — это длинный список чисел (для компьютера все — длинный список чисел, за исключением вещей, которые для него являются коротким списком чисел).
Если картинка представляет собой сетку размером 600×600 пикселей, и каждый пиксель имеет яркость, задаваемую числом от 0 (чистый черный) до 1 (чистый белый цвет), и если мы знаем эти 360 000 чисел (600× 600), то, соответственно, знаем, что изображено на картинке (по крайней мере в черно-белом варианте). Стратегия в нашем случае — это просто способ взять 360 000 чисел и превратить их либо в кошку, либо в некошку, то есть на языке компьютеров — в 1 или 0. В Математических терминах это функция. На деле для большей психологической реалистичности результатом стратегии может быть какое-то число между 0 и 1: оно выражает неуверенность машины, если ей подсунут двусмысленное изображение, например рысь или подушку в виде кота Гарфилда. Результат 0,8 можно интерпретировать так: «Я почти уверен, что это кошка, но сомнения остаются». Например, ваша стратегия может быть такой: «Вывести среднее значение всех 360 000 чисел входных данных». Это даст 1, если изображение было полностью белым, и 0, если оно было полностью черным, а в целом отражает его среднюю яркость на экране. Что тут общего с кошкой? Ничего. Я и не говорил, что это хорошая стратегия.
Как же измерить успешность стратегии? Простейший способ — посмотреть, как она работает на тех двух тысячах картинок, которые наш «Кошкотрон» уже видел. Для каждой картинки мы можем присвоить нашей стратегии «меру неправильности». Если нарисована кошка и стратегия дает 1, то это «нулевая неправильность», то есть получается верный ответ. Если нарисована кошка, а стратегия выдает 0, то неправильность равна 1 — наихудший из возможных результатов. Если на изображении кошка, а стратегия дает 0,8, то ответ верный, но с долей сомнения, равной 0,2. Вы складываете такие числа для всех двух тысяч используемых изображений и получаете общую суммарную неправильность, которая и будет мерой вашей стратегии. Ваша цель — найти стратегию с минимальной суммарной неправильностью.
Как сделать так, чтобы стратегия не ошибалась? Вот здесь и появляется градиентный спуск. Потому что теперь вы уже знаете, что означает улучшение или ухудшение стратегии при ее незначительном изменении. Градиент измеряет, как сильно меняется неправильность при небольшом изменении стратегии. И из всех возможных способов немного изменить стратегию вы выбираете тот, который максимально уменьшает неправильность (кстати, именно поэтому метод называют градиентным спуском, а не подъемом).
Часто наша цель в машинном обучении — минимизировать что-то плохое, например, неправильность, а не максимизировать что-то хорошее, скажем высоту над уровнем моря. Метод градиентного спуска применим не только к кошкам; вы можете использовать его каждый раз, когда захотите, чтобы машина изучала какую-то стратегию на собственном опыте. Возможно, вам нужна стратегия, которая берет чьи-то рейтинги для сотен фильмов и предсказывает их рейтинги для еще не просмотренных картин; или стратегия, которая берет позицию в шашках или го и выдает ход, ставящий вашего противника в проигрышное положение; или стратегия, которая на основе видеосигнала с камеры автомобиля выдает движение рулевой колонки, упреждающее столкновение с мусорным баком. Все что угодно! Во всех случаях вы можете начать с какой-то предложенной стратегии, оценить, какие незначительные изменения максимально уменьшат неправильность в большинстве примеров, которые вы уже видели, внести эти изменения и повторить.