Они хотели написать программу, которая получала бы на входе состояние пикселей экрана и текущий счет и играла так, чтобы максимизировать счет. Правила игры программе не сообщаются: она должна случайным образом экспериментировать, двигая в разные стороны ракетку в Breakout или по-всякому стреляя из лазерной пушки по снижающимся кораблям пришельцев в Space Invaders. Каждый раз, когда программа делает ход, она может оценить, привел ли он к увеличению счета или не произвел никакого эффекта.
Эта программа реализует возникшую еще в 1990-е годы концепцию обучения с подкреплением, которая предполагает корректировку вероятности определенных действий в зависимости от воздействия на функцию вознаграждения или счет. Например, в игре Breakout можно принять только одно-единственное решение – сдвинуть ракетку, расположенную внизу экрана, влево или вправо. Изначально выбор делается с вероятностью 50: 50. Но если случайное перемещение ракетки приводит к попаданию по шарику, то через короткое время после этого счет увеличивается. Тогда программа производит пере-калибровку вероятности смещения влево или вправо с учетом этой новой информации. Это увеличивает вероятность смещения в том же направлении, в котором движется шарик. Новшеством было совмещение такого обучения с нейронными сетями, которые должны были оценивать состояние пикселей и решать, какие именно элементы коррелируют с ростом счета.
Вначале, поскольку компьютер просто пробовал случайные ходы, его игра была ужасна; он почти не набирал очков. Но каждый раз, когда очередной случайный ход приводил к увеличению счета, программа запоминала этот ход и более активно использовала его в дальнейшем. Постепенно случайные ходы прекратились, и стал проявляться более обоснованный рисунок игры – ходы, которые, как программа выяснила на опыте, по-видимому, способствовали росту счета.
Видеоролик, который сотрудники DeepMind приложили в качестве иллюстрации к написанной впоследствии статье об этой работе, стоит посмотреть. В нем показано, как программа учится играть в Breakout. Сначала видно, как она случайным образом двигает ракетку взад и вперед, чтобы посмотреть, что из этого выйдет. Затем, когда шарик наконец попадает в ракетку, отскакивает от нее и разбивает кирпичик, отчего увеличивается счет, программа начинает переписывать самое себя. По-видимому, соприкосновение пикселей ракетки с пикселями шарика приносит положительный результат. После 400 партий программа играет уже по-настоящему сильно: ракетка постоянно отправляет шарик то туда, то сюда.