Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шолле Ф. - Глубокое обучение на Python (Библиотека программиста) - 2023.pdf
Скачиваний:
6
Добавлен:
07.04.2024
Размер:
11.34 Mб
Скачать

5.3.Улучшение качества обучения модели     185

5.2.3.Что важно помнить об оценке моделей

Выбирая.протокол.оценки,.всегда.помните:

.о репрезентативности данных.—.обучающая.и.контрольная.выборки.должны. быть.репрезентативными.для.всего.объема.имеющихся.данных..Например,. если.вы.пытаетесь.классифицировать.изображения.рукописных.цифр.и.име­ ете.массив,.в.котором.образцы.упорядочены.по.классам,.использование.первых. 80.%.образцов.для.обучения.и.остальных.20.%.для.контроля.приведет.к.тому,. что.обучающая.выборка.будет.содержать.классы.0–7,.а.контрольная.—.только. классы.8–9..Данная.ошибка.может.показаться.смешной,.однако.ее.совершают. слишком.часто..По.этой.причине.всегда.желательно.перемешивать.данные. перед.делением.на.обучающую.и.контрольную.выборки;

.о направлении оси времени.—.пытаясь.предсказать.будущее.по.прошлому. (например,.погоду.на.завтра,.изменение.цен.на.бирже.и.т..д.),.вы.не.должны. перемешивать.данные.перед.делением,.поскольку.это.создаст.временную́ утечку:.ваша.модель.фактически.будет.обучаться.по.данным.в.будущем..В.таких.ситуациях.всегда.нужно.следить,.чтобы.контрольные.данные.следовали непосредственно.за.обучающими;

.об избыточности данных.—.если.некоторые.образцы.присутствуют.в.данных. в.нескольких.экземплярах.(частое.явление.в.реальном.мире),.перемешивание. и.деление.данных.на.обучающую.и.проверочную.выборки.приведет.к.появлению.избыточности.между.ними..По.сути,.вы.будете.проводить.тестирование. на.части.обучающих.данных.—.а.это.худшее.из.зол!.Убедитесь,.что.обучающая. и.проверочная.выборки.не.пересекаются.

Имея.надежный.способ.оценки.качества.модели,.вы.сможете.решить.главную. проблему.машинного.обучения.—.найти.баланс.между.оптимизацией.и.общно- стью,.недообучением.и.переобучением.

5.3. УЛУЧШЕНИЕ КАЧЕСТВА ОБУЧЕНИЯ МОДЕЛИ

Чтобы.добиться.идеального.уровня.обучения,.сначала.нужно.переобучить.модель..Поскольку.заранее.не.известно,.где.проходит.граница.переобучения,.чтобы. ее.обнаружить,.нужно.ее.пересечь..Иными.словами,.приступая.к.решению.некоторой.задачи,.в.первую.очередь.сконструируйте.модель,.которая.демонстрирует. некоторую.способность.к.обобщению.и.может.переобучиться..Получив.такую. модель,.можно.сосредоточиться.на.совершенствовании.ее.способности.к.обобщению,.борясь.с.переобучением.

186    Глава 5. Основы машинного обучения

На.этом.этапе.вы.столкнетесь.с.тремя.типичными.проблемами:

. обучение.не.начинается:.потери.в.обучающих.данных.не.уменьшаются;

.обучение.начинается,.но.модель.не.создает.осмысленных.обобщений:.ей. не.удается.превзойти.установленный.базовый.уровень;

.потери.на.проверочных.данных.постепенно.снижаются.и.модели.удалось. превзойти.базовый.уровень,.но.эффект.переобучения.никак.не.наступает:. это.говорит.о.недообученности.модели.

Давайте .посмотрим, .как .решить .перечисленные .проблемы, .чтобы .достичь. первую.важную.веху.в.проекте.машинного.обучения:.получить.модель,.которая.обладает.некоторой.способностью.к.обобщению.(способностью.превзойти. тривиальный.базовый.уровень).и.может.переобучиться.

5.3.1. Настройка основных параметров градиентного спуска

Иногда.обучение.не.начинается.или.замирает.слишком.рано..Уровень.потерь. стоит.на.месте..Это.всегда.можно.преодолеть:.помните,.что.модель.можно.подстроить.даже.под.случайные.данные..Даже.если.все.в.вашей.задаче.лишено. всякого.смысла,.вы.все равно.сможете.чему-то.обучить.модель,.пусть.даже.за. счет.запоминания.обучающих.данных.

Когда.подобное.происходит,.корень.проблемы.почти.всегда.кроется.в.настройке. процесса.градиентного.спуска:.в.выборе.оптимизатора,.начальных.значений. весов.модели,.скорости.обучения.или.размера.пакета..Все.эти.параметры.взаимозависимы,.поэтому.часто.достаточно.настроить.скорость.обучения.и.размер. пакета,.оставив.остальные.параметры.неизменными.

Давайте.рассмотрим.конкретный.пример:.обучим.модель.MNIST.из.главы.2. с.чрезмерно.большой.скоростью.обучения,.равной.1.

Листинг 5.7. Обучение модели MNIST с чрезмерно большой скоростью обучения

(train_images, train_labels), _ = mnist.load_data() train_images = train_images.reshape((60000, 28 * 28)) train_images = train_images.astype("float32") / 255

model = keras.Sequential([ layers.Dense(512, activation="relu"), layers.Dense(10, activation="softmax")

])

model.compile(optimizer=keras.optimizers.RMSprop(1.), loss="sparse_categorical_crossentropy", metrics=["accuracy"])

model.fit(train_images, train_labels, epochs=10,

batch_size=128, validation_split=0.2)

5.3. Улучшение качества обучения модели     187

Модель.быстро.достигает.точности.обучения.на.проверочных.данных.в.диа- пазоне.30–40.%,.но.не.может.превзойти.этот.уровень..Попробуем.уменьшить. скорость.обучения.до.более.разумного.значения.1e-2.

Листинг 5.8. Та же модель с меньшей скоростью

model = keras.Sequential([ layers.Dense(512, activation="relu"), layers.Dense(10, activation="softmax")

]) model.compile(optimizer=keras.optimizers.RMSprop(1e-2),

loss="sparse_categorical_crossentropy", metrics=["accuracy"])

model.fit(train_images, train_labels, epochs=10,

batch_size=128, validation_split=0.2)

Теперь.обучение.сдвинулось.с.мертвой.точки.

Если.вы.оказались.в.подобной.ситуации,.попробуйте:

.уменьшить.или.увеличить.скорость.обучения..Слишком.высокая.скорость. может.привести.к.чрезмерным.изменениям.весов,.не.позволяющим.градиентному.спуску.найти.минимум.(как.в.предыдущем.примере);.слишком.же. низкая.скорость.может.сделать.обучение.настолько.медленным,.что.создастся. впечатление,.будто.оно.остановилось;

.увеличить.размер.пакета..Пакет.с.большим.количеством.образцов.позволит. получить.более.информативные.и.менее.зашумленные.градиенты.(с.меньшей. дисперсией).

В.конце.концов.вы.найдете.конфигурацию,.с.которой.начнется.обучение.

5.3.2. Использование более удачной архитектуры

Вы.сконструировали.модель,.которая.обучается,.но.по.какой-то.причине.оценки. качества.на.проверочных.данных.совсем.не.улучшаются..Они.не.превышают. базового.уровня.случайного.классификатора:.модель.обучается,.но.не.обобщает.. Что.происходит?

Это,.пожалуй,.худшая.ситуация.в.машинном.обучении,.в.которой.вы.можете.ока- заться..Она.явно.сигнализирует:.что-то не так в самом вашем подходе.—.и.здесь. трудно.сказать,.в.чем.именно.заключается.проблема..Вот.несколько.наводок.

Во-первых,.может.оказаться,.что.исходные.данные.просто.не.содержат.доста- точного.объема.информации.для.прогнозирования.целей:.задача.в.том.виде,. в.котором.она.сформулирована,.неразрешима..Примерно.это.произошло,.когда.

188    Глава 5. Основы машинного обучения

мы.попытались.обучить.модель.MNIST.на.наборе.с.перемешанными.метками:. модель.обучалась.нормально,.но.точность.на.проверочных.данных.оставалась. на.уровне.10.%,.потому.что.с.таким.набором.данных.было.просто.невозможно. научиться.обобщать.

Возможно.также,.что.для.решения.поставленной.задачи.не.подходит.архитектура. модели..Например,.в.главе.10.вы.увидите.пример.прогнозирования.временного. ряда,.когда.плотно.связанная.архитектура.не.может.превзойти.тривиальный.ба- зовый.случай.—.а.вот.более.подходящая.рекуррентная.архитектура.оказывается. более.способной.к.обобщению..Использование.модели,.основанной.на.верных. предположениях.о.проблеме,.важно.для.достижения.общности:.выбирайте. правильные.архитектуры.

В.следующих.главах.вы.познакомитесь.с.разными.архитектурами,.подходящими. для.работы.с.разными.видами.данных.—.изображениями,.текстом,.временными. рядами.и.т..д..Всегда.следует.внимательно.изучать.передовые.архитектуры,.при- меняющиеся.для.решения.задач,.аналогичных.вашей,.—.высока.вероятность,.что. вы.не.первый,.кто.за.нее.берется.

5.3.3. Увеличение емкости модели

Если.вам.удалось.найти.подходящую.модель,.которая.показывает.постепенное. уменьшение.потерь.и,.кажется,.достигает.хотя.бы.некоторого.уровня.общности,. поздравляю:.вы.почти.у.цели..Теперь.вам.нужно.найти.точку,.когда.наступает. переобучение.модели.

Рассмотрим.следующую.небольшую.модель.—.простую.логистическую.регрес- сию,.обученную.на.изображениях.MNIST.

Листинг 5.9. Простая логистическая регрессия на наборе данных MNIST

model = keras.Sequential([layers.Dense(10, activation="softmax")]) model.compile(optimizer="rmsprop",

loss="sparse_categorical_crossentropy", metrics=["accuracy"])

history_small_model = model.fit( train_images, train_labels, epochs=20,

batch_size=128, validation_split=0.2)

По.результатам.обучения.получилась.кривая.потерь,.изображенная.на.рис..5.14:

import matplotlib.pyplot as plt

val_loss = history_small_model.history["val_loss"] epochs = range(1, 21)

plt.plot(epochs, val_loss, "b--", label="Потери на этапе проверки")

5.3. Улучшение качества обучения модели     189

plt.title("Эффект недостаточной емкости модели") plt.xlabel("Эпохи")

plt.ylabel("Потери") plt.legend()

Величина.потерь.на.проверочных.данных,.кажется,.остановилась.или.очень. медленно.улучшается.—.вместо.того.чтобы.пойти.вспять..Она.достигла.значе- ния.0,26.и.продолжает.колебаться.около.него..Вы.можете.продолжать.обучение,. но.эффект.переобучения.не.наступает.даже.после.множества.итераций..Скорее. всего,.в.своей.карьере.вы.часто.будете.сталкиваться.с.подобными.случаями.

Рис. 5.14. Эффект недостаточной емкости модели

Помните,.что.в.любой.задаче.должно.наступать.переобучение..Равно.как.проблему.неуменьшающихся.потерь.при.обучении,.данный.вопрос.также.всегда. можно.решить..Если.возникает.ощущение,.что.переобучение.не.наступает,.скорее. всего,.проблема.связана.с.недостаточной репрезентативной мощностью.вашей. модели..Попробуйте.сконструировать.модель.большего.размера,.с.большей. емкостью.(то.есть.способную.хранить.больше.информации)..Повысить.репрезентативную.мощность.можно,.добавив.больше.слоев,.используя.более.крупные. слои.(с.большим.количеством.параметров).или.типы.слоев,.лучше.подходящие. для.данной.задачи.(более.удачную.архитектуру).

Попробуем.обучить.более.крупную.модель,.состоящую.из.двух.промежуточных. слоев.по.96.нейронов.в.каждом:

model = keras.Sequential([ layers.Dense(96, activation="relu"), layers.Dense(96, activation="relu"), layers.Dense(10, activation="softmax"),

])