194
Часть II • Введение в TensorFlow.js
Рис. 5.3.
Кривые потерь и
безошибочности для переноса обучения на сверточной сети MNIST
. Блок
A: кривые при заблокированных первых
семи слоях предобученной модели. Блок
Б: кривые при повторной инициализации случайным образом значений всех весов модели. Блок
В:
кривые при отсутствии блокирования каких-либо слоев предобученной модели. Учтите, что оси y первых трех блоков отличаются. Блок
Г:
смешанный пример, на котором графики потерь и
безошибочности из блоков А
— В
для удобства сравнения показаны на одних осях координат
Глава 5. Перенос обучения: переиспользование предобученных нейронных сетей
195
Но что получится, если не блокировать веса слоев выделения признаков? Про
вести такой эксперимент вы можете с помощью опции
Don’t Freeze Feature Layers
рас
крывающегося меню
Training Mode
. Результат приведен в блоке В на рис. 5.3. Стоит
упомянуть несколько его отличий от результатов из блока A.
z
z
Без блокирования слоев выделения признаков начальное значение функции
потерь оказывается значительно выше (например, после первой эпохи: 0,37
вместо 0,27), а безошибочность — ниже (0,87 вместо 0,91). Почему так? В начале
обучения предобученной модели на новом наборе данных предсказания сначала
содержат множество ошибок, поскольку для пяти новых цифр предобученные
веса выдают, по сути, случайные предсказания. В результате значения функции
потерь будут очень велики, а углы наклона ее графика — очень круты. Это при
водит к большим значениям градиентов, вычисляемых на начальных этапах об
учения, и, в свою очередь, ведет к сильным колебаниям значений всех весовых
коэффициентов модели. А период сильных колебаний значений, через который
проходят весовые коэффициенты всех слоев, приводит к более высоким началь
ным потерям, как видно из блока В. Поэтому при традиционном подходе к пере
носу обучения первые несколько слоев блокируются и тем самым «ограждаются»
от этих больших начальных возмущений весов.
z
z
В частности, изза этих больших начальных возмущений итоговая безоши
бочность модели при подходе без блокирования (0,945, блок В) оказывается
не
выше, чем безошибочность обычного подхода переноса обучения с блокиро
ванием слоев (~0,968, блок A).
z
z
Если ни один из слоев модели не заблокирован, обучение занимает намного
больше времени. Например, на одном из наших ноутбуков обучение модели
с заблокированными слоями выделения признаков заняло около 30 секунд, а об
учение модели без какихлибо заблокированных слоев — примерно вдвое больше
(60 секунд). На рис. 5.4 схематически показана причина этого явления. Заблоки
рованные слои исключаются из уравнения во время обратного распространения
ошибки, в результате чего каждый вызов
fit()
отрабатывается быстрее.
На рис. 5.4 путь обратного распространения ошибки показан черными стрел
ками, указывающими влево. В отсутствие заблокированных слоев все весовые
коэффициенты модели (
v
1
–
v
5
) обновляются на каждом шаге обучения (каж
дом батче), а значит, участвуют в процессе обратного распространения ошибки
(блок A). Обратите внимание, что признаки (
x
) и целевые переменные (
y
) в об
ратном распространении ошибки никогда не участвуют, поскольку их значения
не нужно обновлять. Замораживание первых нескольких слоев модели приводит
к исключению подмножества весов (
v
1
–
v
3
) из процесса обратного распростране
ния ошибки (блок Б). Они становятся аналогами
x
и
y
и рассматриваются как
константы, учитываемые при вычислении функции потерь. В результате объем
необходимых для обратного распространения ошибки вычислений уменьшается,
а процесс обучения ускоряется.
Приведенные различия подтверждают обоснованность подхода с блокирова
нием слоев при переносе обучения: при нем слои выделения признаков из базовой
196
Do'stlaringiz bilan baham: |