Глава 8. Недообучение, переобучение и универсальный процесс ML
329
обучения будет не только минимизироваться расхождение цели с предсказанием, но
и уменьшаться сумма квадратов элементов ядра. Зачастую эти две задачи противо
речат друг другу. Например, уменьшение величины элементов ядра может снижать
второй член, но увеличивать первый (потери на основе MSE). Как же эти два про
тиворечащих члена уравновешиваются по относительной значимости в общих по
терях? Для этого и служит коэффициент
12Rate
, выражающий количественно важ
ность члена L2 относительно члена расхождения цели с предсказанием. Чем больше
значение
12Rate
, тем больше процесс обучения будет стремиться уменьшить член
L2регуляризации за счет увеличения погрешности цель — предсказание. Этот член,
по умолчанию равный
1e-3
, представляет собой гиперпараметр, значение которого
подбирается в ходе оптимизации гиперпараметров.
Так в чем же польза от L2регуляризатора? В блоке Б на рис. 8.4 приведены
кривые потерь регуляризованного MLP. Сравнивая их с кривыми для нерегуляри
зованного MLP (блок A того же рисунка), видим, что расхождение кривых потерь
для обучающего и проверочного наборов данных у регуляризованной модели мень
ше. А значит, модель более не «уделяет слишком много внимания» специфическим
паттернам обучающего набора данных. Вместо этого она усваивает из обучающего
набора данных паттерны, хорошо обобщающиеся на не виденные моделью примеры
данных из проверочного набора. В нашем регуляризованном MLP только первый
плотный слой содержит регуляризатор, а второй плотный слой — нет. Но этого, как
оказывается, в данном случае вполне достаточно для устранения переобучения.
В следующем разделе мы подробнее рассмотрим, почему меньшие значения ядра
снижают переобучение.
Визуализируем эффект, производимый регуляризацией
на значения весов
Поскольку работа L2регуляризатора основана на поощрении меньших значений
ядра скрытого плотного слоя, следует ожидать, что значения ядра после обуче
ния меньше в регуляризованном MLP, чем в нерегуляризованном. Как убедиться
в этом в TensorFlow.js? Благодаря функции
tfvis.show.layer()
из tfjsvis можно
визуализировать весовые коэффициенты модели TensorFlow.js с помощью одной
строки кода. Фрагмент кода в листинге 8.4 демонстрирует, как это сделать. Данный
код выполняется по завершении обучения модели MLP. Вызов
tfvis.show.layer()
требует двух аргументов: поверхности визира, на которой происходит визуализация,
и визуализируемого слоя.
Листинг 8.4.
Визуализируем распределение весовых коэффициентов слоев
(из файла jena-weather/index.js)
function visualizeModelLayers(tab, layers, layerNames) {
layers.forEach((layer, i) => {
const surface = tfvis.visor().surface({name: layerNames[i], tab});
tfvis.show.layer(surface, layer);
});
}
330
Do'stlaringiz bilan baham: |