Как учится машина. Революция в области нейронных сетей и глубокого обучения - Ян Лекун
Воспроизведение мышления – цель исследования машинного обучения на основе искусственных нейронных сетей. Обучение путем корректировки эффективности синапсов является примером того, что статистики с середины XX в. называют «идентификацией параметров модели».
Изучение и минимизация ошибок: пример
Допустим, вы хотите построить автомобиль, который управляет своим движением, имитируя водителя-человека. Что нужно делать?
Первый шаг – собрать данные, полученные от опытного водителя, то есть записать положение автомобиля на трассе и то, как водитель корректирует это положение, поворачивая рулевое колесо, чтобы удерживать автомобиль по центру дорожной полосы.
Можно представить себе измерение положения автомобиля в полосе движения, анализируя изображение камеры, которая фиксирует белые линии. Каждую десятую долю секунды регистрируется положение автомобиля относительно дорожной разметки и угол поворота рулевого колеса. В результате получается большой объем данных. За один час это составляет 36 000 положений автомобиля и углов поворота руля!
Давайте перенесем эту модель на график: положение автомобиля представляет переменную x (ось абсцисс), мы называем это «входом в систему». Если ширина полосы 4 м, то x будет равно 0, когда автомобиль находится посередине, 2 м, когда автомобиль пересекает дорожную разметку справа, и –2 м, если она пересекает разметку слева. Таким же образом, угол поворота рулевого колеса является переменной y (ось ординат на графике). Это называется «выход системы». Он выдает угол поворота рулевого колеса в градусах, например, 5°, чтобы повернуть немного влево, 0°, чтобы держать рулевое колесо прямо, и –5°, чтобы повернуть немного вправо.
Таким образом, регистрируя действия водителя за рулем, мы собираем тысячи числовых пар (x, y), состоящих из положения на дороге и соответствующего угла поворота рулевого колеса. Затем мы объединяем это множество примеров в виде списка из пар чисел X и Y, элементы которого пронумерованы. Чтобы обозначить конкретный пример в этом списке, его номер дается в квадратных скобках, например, пара значений X[3] и Y[3] соответствует примеру номер 3 (это обозначение, которое любят компьютерщики: в квадратных скобках в программировании указывается порядковый номер элемента массива). Мы соберем p примеров (например, p = 36 000), которые составят так называемый обучающий набор:
A = {(X[0], Y[0]), (X[1], Y[1]), (X[2], Y[2]),…, (X[p-1], Y[p-1])}
Цель состоит в том, чтобы на этих примерах научить машину предугадывать правильный угол поворота рулевого колеса в зависимости от положения автомобиля на дороге. Другими словами, мы хотим, чтобы машина «имитировала» водителя-человека, воспроизводя его поведение как можно лучше.
Для этого требуется найти функцию f(x), которая для каждого x обучающего набора подбирает соответствующий y в этом наборе, то есть Y[0] для X[0], Y[1] для X[1] и т. д. Как только функция f(x) найдена, мы можем использовать ее для интерполяции и вычисления y, соответствующего любому x, даже для значений x, которых нет в нашем обучающем наборе. Такой тип обучения называется «обучение с учителем».
Найти функцию f(х), которая предсказывает у на основе х
Представим идеального водителя, у которого обучающие примеры расположены по линии, показанной на рис. 3.1. Поскольку кажется, что в расположении этих точек есть какая-то закономерность, нам нужно найти функцию, график которой проходит через все эти точки. Кстати, мы только что совершили несколько произвольный выбор функции, априори решив, что это прямая, угол наклона которой нам и нужно найти.
Эта функция записывается следующим образом:
f(x) = w * x
Я использую здесь обозначения, применяемые в информатике, где символ * обозначает умножение. Данная функция представляет собой прямую, проходящую через 0, наклон которой определяется числом w. Удобнее рассматривать f как функцию с двумя переменными, x и w. Чтобы запрограммировать эту функцию на компьютере с языком Python[38], следует написать следующее:
def f(x, w): return w * x
Рис. 3.1. Взаимосвязь между отклонением автомобиля от полосы движения и углом поворота рулевого колеса, необходимый для возврата автомобиля в середину полосы
Абсцисса соответствует положению автомобиля относительно центра полосы движения на автостраде (в метрах), а ордината – углу поворота рулевого колеса, необходимому для возврата автомобиля в центр полосы (в градусах). Для отрицательного значения положения (слева от центра полосы движения) к рулевому колесу следует приложить отрицательный угол (в данном случае – по часовой стрелке). Здесь отклонение в 1 м исправляется поворотом руля на угол 4°.
Символы w и x представляют собой переменные, функция которых вычисляет произведение, обозначенное w * x. Понятие переменной в информатике означает своего рода «ящик» или ячейку в памяти компьютера, где можно хранить число. Например, можно создать переменную w и поместить в нее значение 4, а затем создать переменную x, имеющую значение 2:
w = 4
x = 2
Символы w и x – это просто названия соответствующих ячеек памяти. Чтобы вычислить функцию с этими значениями x и w, следует написать:
yp = f(x, w)
где символ yp обозначает прогноз y, произведенный нашей моделью.
Рис. 3.2. Прямая, которая проходит как можно ближе к точкам, которые не выровнены
Три из четырех точек лежат на одной прямой. Прямая с коэффициентом наклона 4 проходит через эти три точки, но не через четвертую. Проблема в том, как найти компромисс: прямую, которая проходит «как можно ближе» ко всем четырем точкам. При этом она может не проходить ни через одну из заданных точек.
После произведенного вычисления переменная yp будет содержать значение 8 (4 раза по 2).
Чтобы применить функцию к обучающему примеру № 3, необходимо выполнить следующее: присвоить переменным x и y значения X[3] и Y[3] и вычислить результирующее значение функции f(x, w).
x = X[3]
y = Y[3]
yp = f(x, w)
Поиск прямой, проходящей через точки, сводится к поиску правильного значения параметра w этой функции. Предположим, у нас есть только две тренировочные точки, A = [[0.0, 0.0], [0.9, 3.6]][39].
Через эти две точки проходит одна прямая. В этом случае правильное значение w равно 4, поскольку 4 * 0.9 = 3.6. Добавим третью точку (–0.8, –3.2). Три точки принадлежат одной прямой, и правильное значение w всегда равно 4.
Но это идеальная ситуация, в реальной жизни так обычно не бывает.
Поставим четвертую точку (1.9, 5.4).
Если мы используем то же значение 4.0 для w, значение, предсказанное нашей функцией yp = f(x, w), будет не 5.4, а 7.6 = 4 *