Для того, чтобы нейросеть работала, ее нужно обучить на датасете.
Обучение нейросети состоит из двух основных этапов, которые повторяются много раз: попытка модели выдать результат (оно же прямое распространение, или forward propagation), и корректировка работы модели, наложение штрафа (оно же обратное распространение, backward propagation). Если модель уже обучена, для ее работы требуется только первый этап, который будет выполняться на новых данных, для которых мы хотим получить результат.
При обучении, эти два этапа повторяются столько раз, сколько потребуется, чтобы модель дала удовлетворительный результат. Как правило, для обучения используют не по одному объекту из датасета для выполнения прямого и обратного прохода, а группу размером в несколько объектов, которая называется батч. Так, размер батча можно настраивать, и за один проход модель учитывает характеристики всех объектов батча для обучения. Один повтор прямого и обратного распространения по всему датасету называется эпоха. Зачастую, таких итераций требуется не одна сотня. В этом обучение нейросети похоже на обучение людей.
Итак, как работает прямое распространение?
Нейросеть состоит из слоев, которые включают в себя настраиваемое количество нейронов. Если слои - полносвязные, то в них каждый нейрон связан со всеми нейронами предыдущего слоя, и к каждой из связей нейрон хранит вес, который определяет, насколько он будет учитывать сигнал с нейрона, с которым он связан. Обучение нейросети заключается в обучении весов - изменении их значений так, чтобы на одни сигналы нейроны научились "реагировать" больше, а на какие-то - меньше. Помимо полносвязных, бывают и варианты слоев, но суть их работы от этого не меняется. Связи есть ничто иное, как скрытые зависимости, которые нейросеть должна научиться замечать. В качестве самого нейрона можно представить некую нелинейную функцию, называемую активационной функцией, задача которой - представить всю совокупность поступивших в нее сигналов в виде одного результирующего значения, которое потребуется уже дальше для нейронов следующего слоя, если таковой имеется. Но в самом начале обучения нейросеть работает не верно, т.к. веса в самом начале задаются случайно. Так как же настраивать значения весов так, чтобы они помогали решать нашу задачу? На помощь приходит функция потерь, которая показывает, как нужно штрафовать модель, и механизм обратного распространения ошибки.
Как работает обратное распространение ошибки?
Для каждой задачи выбирается специальная функция потерь, задача которой - получить на вход результат прямого распространения нейронной сети, и показать, насколько ответ был близок к цели. Для типичных задач (например, классификация или регрессия) можно использовать типичные функции потерь для этих целей, но для более трудных задач (например, построение скелета человека по фото), требуется проявить фантазию и высокий профессионализм, чтобы составить функцию потерь так, чтобы она позволяла решить поставленную задачу. Функцию потерь можно представить как сложную функцию от результирующего, финального слоя, который на входе содержит веса и значения, которые поступают вместе с ними с предыдущих слоев, а также известные данные, которые "мы бы хотели получить".
Оказывается, что, если вспомнить свойство производной, что ее геометрический смысл - тангенс угла наклона к касательной, проведенной к точке (в нашем случае точка - результат функции потерь), то мы можем определить направление наискорейшего убывания функции, посчитав антиградиент функции потерь (в нашем случае - частную производную по всем весам) в полученной точке. Таким образом, мы получим вектор частных производных функции потерь по весам, которые требуется домножить на шаг градиента (также известный как learning rate), и, при сложении весов к нейронам предыдущего слоя (начиная с последнего слоя) с этими значения поэлементно, получим изменение весов так, чтобы при этом понижалось значение функции потерь, а значит - происходило итеративное приближение к желаемому результату. С остальными слоями производится такая же процедура, от слоя к слою, до самого первого.
Так, за каждую итерацию, модель начинает учитывать свойства данных, и в зависимости от этого менять веса. О чем стоит позаботиться специалисту - это о формировании датасета подходящим образом, о подборе функции потерь и о выборе архитектуры нейросети.