Мы переходим с вами непосредственно к обучению нейронной сети. Мы с вами уже обсуждали, что это процесс, при котором мы поворачиваем ручки на нашей коробочке, при этом нас не очень сильно волнует, как это устроено внутри, мы просто их крутим. Мы будем для этого использовать градиентный спуск. Допустим, у нас есть некоторые параметры, то есть положения этих ручек для нашей нейронной сети. Положение этих ручек мы будем описывать вектором
w
0
w_0
. Это значит, что в
w
0
w_0
(это вектор весов), будут написаны все коэффициенты, которые мы используем в нашей нейронной сети. То есть, это какие-то веса для одного нейрона, какие-то веса для другого нейрона, и так далее, какие то смещения для одного нейрона, какие-то смещения для другого нейрона, и так далее. То есть это такой вот большой вектор. И мы сейчас находимся вот в этом векторе. Что происходит дальше? Мы берём нашу функцию потерь и считаем её производную. Точнее, градиент. Градиент -- это вектор, который состоит из производных по каждой из координат функции. Мы посчитали градиент функции потерь в точке
w
0
w_0
, в которой мы сейчас находимся. Градиент функции потерь показывает в сторону наибольшего роста функции потерь. Нам же нужно уменьшать функцию. Соответственно, нам нужно сделать шаг из
w
0
w_0
в направлении, обратном к градиенту. Мы получаем новый вектор весов
w
1
w_1
, который равен
w
0
w_0
минус
α
\alpha
умножить на градиент функции в точке
w
0
w_0
. Можно увидеть, что наша функция должна была уменьшиться. Теперь мы находимся в точке
w
1
w_1
. Мы, опять же, хотим ещё сильнее уменьшить нашу функцию потерь. Как это сделать? Можно, опять же, взять нашу функцию потерь, посчитать градиент уже в точке
w
1
w_1
и сделать ещё один градиентный шаг. И мы получаем новую новую точку, которую будем называть
w
2
w_2
.
w
2
w_2
вычисляется по точно той же формуле что и
w
1
w_1
. Я должен отметить здесь, что
α
\alpha
-- это скорость обучения сети, это какой-то коэффициент, фиксированный в нашем случае. То есть мы можем задать
α
\alpha
равным
0.1
0.1
, и тогда у нас во всех случаях, во всех шагах градиентного спуска,
α
\alpha
будет равен
0.1
0.1
. Итак, мы сейчас с вами находимся в точке
w
2
w_2
. Мы можем продолжать этот процесс -- можем получить некоторую точку
w
3
w_3
, которая уже визуально достаточно близко находится к точке минимума (ну, и так далее -- мы можем делать достаточное большое количество шагов при помощи градиентного спуска). Что здесь стоит отметить? Стоит отметить, что градиентный спуск находит минимум функции. Однако он может найти неоптимальный минимум функций. То есть, вот здесь, в этой функции, которая здесь представлена, здесь два минимума: вот первый, и вот второй. И нельзя сказать, какой из них меньше, какой из них больше. Но, допустим, вот этот минимум пусть будет у нас меньше. Даже если этот минимум у нас будет меньше, чем тот, который мы нашли в процессе градиентного спуска, градиентный спуск всё равно будет находить не самый лучший минимум, но он будет находить какой-то минимум. Вот такое есть свойство у обыкновенного градиентного спуска.
К сожалению, у нас пока нет статистики ответов на данный вопрос,
но мы работаем над этим.