Представьте все шаги, которые можете сделать. Выясните, какой из них обеспечивает наибольший градиент, и сделайте его. Повторите.
Ваш путь к вершине, нанесенный на топографическую карту, будет выглядеть примерно так:
(Еще одно изящное геометрическое утверждение[294]
: при движении по градиентному спуску ваш путь на карте всегда пересекает точки изолиний равных высотКак видите, эта идея может оказаться удачной для альпинизма (хотя не всегда, и мы еще к этому вернемся), однако какое отношение все это имеет к машинному обучению?
Предположим, что я все-таки не альпинист, а компьютер, пытающийся чему-то научиться. Это может быть одна из машин, с которыми мы уже встречались, например AlphaGo, играющая в го лучше мастеров, или GPT-3, выдающая длинные строки правдоподобного английского текста. Но для начала будем придерживаться классики и допустим, что я – компьютер, который пытается узнать, что такое кошка.
Как мне это сделать? Примерно так же, как это делает младенец. Малыш живет в мире, где время от времени какой-нибудь взрослый показывает на нечто, находящееся в поле зрения, и говорит: «Кошка!» Вы можете обеспечить компьютеру аналогичный процесс обучения: предоставить ему тысячу изображений кошек в различных позах, при разном освещении и в разном настроении. «Все это кошки», – сообщаете вы компьютеру. В реальности, если вы действительно хотите быть полезным, вы добавляете такое же количество изображений с другими объектами и объясняете компьютеру, что это не кошки.
Задача машины – разработать стратегию, позволяющую ей отличать кошек от некошек самостоятельно. Это блуждание по ландшафту всех возможных стратегий в попытках найти лучшую – вершину точности в идентификации кошек. По сути, это аналог альпиниста. Следовательно, мы можем применить метод градиентного спуска! Вы выбираете какую-нибудь стратегию, тем самым помещая себя в ландшафт, а затем действуете в соответствии с правилом градиентного спуска.
Проанализируйте все небольшие изменения, которые можете внести в текущую стратегию, выясните, какое из них предлагает наибольший градиент, и сделайте это. Повторите.
Звучит неплохо, но только до тех пор, пока вы не осознаете, что понятия не имеете, что это значит. Например, что такое стратегия? Это должно быть нечто, понятное компьютеру, а потому должно выражаться в математических терминах. Изображение для компьютера – это длинный список чисел. (Для компьютера все – длинный список чисел, за исключением вещей, которые для него являются коротким списком чисел.) Если картинка представляет собой сетку размером 600×600 пикселей, и каждый пиксель имеет яркость, задаваемую числом от 0 (чистый черный) до 1 (чистый белый цвет), и если мы знаем эти 360 000 чисел (600 × 600), то, соответственно, знаем, что изображено на картинке (по крайней мере в черно-белом варианте).
Стратегия в нашем случае – это просто способ взять 360 000 чисел и превратить их либо в кошку, либо в некошку, то есть на языке компьютеров – в 1 или 0. В математических терминах это
Например, ваша стратегия может быть такой: «Вывести среднее значение всех 360 000 чисел входных данных». Это даст 1, если изображение было полностью белым, и 0, если оно было полностью черным, а в целом отражает его среднюю яркость на экране. Что тут общего с кошкой? Ничего. Я и не говорил, что это хорошая стратегия.
Как же измерить успешность стратегии? Простейший способ – посмотреть, как она работает на тех двух тысячах картинок, которые наш «Кошкотрон» уже видел. Для каждой картинки мы можем присвоить нашей стратегии «меру неправильности»[295]
. Если нарисована кошка и стратегия дает 1, то это «нулевая неправильность», то есть получается верный ответ. Если нарисована кошка, а стратегия выдает 0, то неправильность равна 1 – наихудший из возможных результатов. Если на изображении кошка, а стратегия дает 0,8, то ответ верный, но с долей сомнения, равной 0,2[296].