Предположим, двое друзей играют в мяч, но одному из них нужно пойти домой и поужинать со своей семьей, а другой все еще хочет потренироваться в метании мяча. Что, если бы у нее был «умный» друг-робот, с которым можно было бы играть и ловить ее броски? Если у нее достаточно навыков программирования, она сможет обучить нейронную сеть для достижения этой цели!

Нейронная сеть находит корреляцию между входными данными и желаемыми выходными.

Допустим, вы хотите, чтобы нейронная сеть научилась ловить бейсбольный мяч, и все, что у нее есть в качестве входных данных, — это кадры бейсбольного мяча, приближающегося к роботу. Результатом будет положение его бейсбольной перчатки в воздухе.

Как человек, вы можете наблюдать, где находится бейсбольный мяч, как быстро он движется и в каком направлении движется (и, возможно, имеет ли он вращение). Затем вы соответствующим образом отрегулируете положение вашей перчатки в небе и (надеюсь) поймаете ее.

Но как нейронная сеть может добиться этого?

Сегодня нейронным сетям требуется множество примеров, чтобы научиться что-то делать.

В нашем примере мы могли бы использовать в качестве примера входные видео бейсбольного мяча, приближающегося к роботу-ловцу (предположим, что робот не может двигаться, кроме своей перчатки). Мы наденем камеру на голову, чтобы снять эти примеры. В качестве выходных примеров у нас будет положение его перчатки в воздухе, чтобы поймать мяч. Кто-то может управлять роботом вручную, чтобы генерировать эти примеры.

Мы будем передавать эти примеры по сети по одному. Если наша сеть хорошо спроектирована, каждый раз, когда мы «распространяемся» по сети, она будет лучше предсказывать, в каком положении должна быть перчатка, чтобы поймать мяч.

По сути, все, что делает нейронная сеть, — это предсказания. Он делает хорошие прогнозы, находя корреляцию между примерами входных данных и соответствующими выходными данными.

Когда мы начнем обучать нашу сеть, она, скорее всего, выдаст очень плохой прогноз (т. е. неверную оценку того, где должна находиться перчатка в воздухе). Чтобы выяснить почему, мы заглянем внутрь нейронной сети.

Входные данные нашего примера (видео падающего бейсбольного мяча, назовем его тренировочными данными) преобразуются в набор чисел. Эти числа будут умножены на группу случайных чисел, называемых весами. Результатом этого умножения будет еще одна связка чисел. Мы можем взять эту новую группу чисел и умножить ее на другую группу весов. Каждый раз, когда мы добавляем несколько весов для умножения на получившийся набор чисел, мы добавляем в сеть еще один слой. В конце концов, у нас будет набор чисел, представляющих предсказание сети о положении бейсбольной перчатки в воздухе.

Чтобы улучшить наше предположение о том, где должна быть расположена перчатка в воздухе, нам нужно вычислить ошибку, то есть, насколько далеко от желаемого положения находится наше предсказанное положение. Предположим, что наша перчатка может двигаться только вверх, вниз, влево и вправо, но не вперед и назад. Затем мы можем смоделировать положение перчатки по координатам x и y вертикальной плоскости, в которой стоит робот. Чтобы вычислить ошибку, мы просто возьмем разницу между прогнозируемым x и фактическим x и то же самое для y. Мы должны взять абсолютное значение или для простоты вычислений квадрат этих разностей. Эти два различия будут добавлены вместе. Эта сумма будет нашей ошибкой. Нам нужно изменить наши веса, чтобы, повторяя процесс из предыдущего пункта со следующим вводом обучения, мы получили более точный прогноз.

Я расскажу, как мы на самом деле меняем эти веса, чтобы сделать хороший прогноз в pt. 2, введя универсальный алгоритм градиентного спуска.

Примечание: я только в прошлом году столкнулся с нейронными сетями, постепенно заинтересовался и начал учиться. Я бы сказал, что мое понимание их все еще примитивно, и написал по памяти в этой статье, чтобы улучшить свое понимание их и распространить знания! Пожалуйста, укажите на любые концептуальные ошибки, если вы их найдете.