Часть II • Введение в TensorFlow.js
2.2.2. Обратное распространение ошибки: внутри
градиентного спуска
В предыдущем разделе мы объяснили, как размер шага обновлений весов влияет на
процесс градиентного спуска. Однако мы не обсуждали, как вычисляются
направ-
ления
обновлений. Они жизненно важны для процесса обучения нейронной сети
и определяются градиентами относительно весов, а для вычисления градиентов
используется метод
обратного распространения ошибки
(backpropagation). Изобре
тенный в 1960х годах метод обратного распространения ошибки сегодня один из
фундаментов нейронных сетей и глубокого обучения. В этом подразделе на простом
примере мы разберем, как работает метод обратного распространения ошибки. Об
ратите внимание, что этот подраздел предназначен только для тех читателей, кото
рые хотели бы лучше разобраться в обратном распространении ошибки. Читать его
не обязательно, если вы хотите просто применить алгоритм с помощью TensorFlow.
js, ведь все эти механизмы аккуратно спрятаны «под капотом» API
tf.Model.fit()
.
Вы можете пропустить подраздел и продолжить чтение с раздела 2.3.
Рассмотрим простую линейную модель:
y
'
= v * x,
где
x
— входной признак,
y
'
— предсказываемый выходной сигнал, а
v
— единствен
ный весовой параметр этой модели, обновляемый в ходе обратного распространения
ошибки. Пусть роль функции потерь у нас играет квадратичная погрешность; тогда
loss
(функция потерь),
v
,
x
и
y
(фактическое целевое значение) связаны таким со
отношением:
ф_потерь = (y
'
- y)
2
= (v * x - y)
2
Возьмем следующие конкретные значения: два входных
x
=
2
и
y
=
5
, а весовой
коэффициент
v
=
0
. Значение
loss
тогда равно
25
. Это все показано пошагово на
рис. 2.9. Каждый серый прямоугольник в блоке A соответствует входному сигналу
(то есть
x
и
y
). А каждый белый прямоугольник обозначает какуюлибо операцию.
Всего операций три. Соединяющие операции ребра (а также ребро, соединяющее
подбираемый весовой коэффициент
v
с первой операцией) помечены
e1
,
e2
и
e3
.
Один из важных этапов обратного распространения ошибки состоит в опреде
лении следующей величины:
«Если все остальное (в данном случае величины x и y)
не меняется, насколько изменится значение функции потерь, если поменять v на одну
единицу измерения?»
Эта величина называется
градиентом функции потерь по (относительно)
v
.
Зачем нам нужен этот градиент? Поскольку далее можно изменить
v
в
противопо-
ложном
ему направлении, в результате чего значение функции потерь уменьшится.
Обратите внимание, что градиенты потерь по
x
или
y
нам не нужны, так как
x
и
y
обновлять не требуется: это фиксированные входные данные.
Этот градиент вычисляется пошагово, начиная со значения функции потерь
и обратно к переменной
v
, как показано в блоке Б на рис. 2.9. Именно направление,
в котором на этом рисунке выполняются вычисления, и служит причиной того, что
алгоритм называется «обратное распространение ошибки». Рассмотрим его пошагово.
Do'stlaringiz bilan baham: |