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

534    Глава 14. Заключение

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

14.1.5. Обобщенный процесс машинного обучения

Хорошо .иметь .доступ .к .чрезвычайно .мощному .инструменту .создания .моделей,.отображающих.любое.входное.пространство.в.любое.целевое,.однако. не.менее.сложной.частью.процесса.машинного.обучения.является.все.то,.что. предшествует.проектированию.и.обучению.таких.моделей.(а.для.промышлен- ных.моделей.—.еще.и.все,.что.происходит.потом)..Предпосылкой.успешного. применения .машинного .обучения .является .достаточно .полное .понимание. предметной.области,.чтобы.определять,.что.можно.попытаться.предсказать,. имея .текущий .набор .данных, .и.как .оценивать .успех..В .этом.вам.не .смогут. помочь.никакие.современные.инструменты.вроде.Keras.и.TensorFlow..Вспомним.в.общих.чертах,.как.выглядит.типичный.процесс.машинного.обучения,. описанный.в.главе.6.

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

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

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

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

4.. Преобразуйте.данные.в.векторы.и.выполните.предварительную.обработку,. чтобы.сделать.их.более.доступными.для.нейронной.сети.(нормализация.и.т..д.).

5.. Реализуйте.первую.модель,.преодолевающую.планку.базового.решения,. чтобы.убедиться.в.применимости.машинного.обучения.к.данной.задаче..Так. бывает.не.всегда!

14.1. Краткий обзор ключевых понятий    535

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

7.. Разверните.получившуюся.модель.в.промышленном.окружении.—.как.веб- API,.как.часть.приложения.на.JavaScript.или.C++,.на.встроенном.устройстве.

и.т..д..Продолжайте.следить.за.качеством.ее.работы.на.реальных.данных.

и.используйте.полученные.результаты.для.уточнения.следующего.поколения.модели!

14.1.6. Основные архитектуры сетей

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

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

. Векторные данные.—.полносвязные.сети.(слои.Dense).

. Изображения.—.двумерные.сверточные.сети.

.Последовательные данные.—.рекуррентные.сети.для.временных.рядов.или. архитектура.Transformer.для.дискретных.последовательностей.(таких.как. последовательности.слов)..Одномерные.сверточные.сети.можно.использовать.для.непрерывных.последовательностей,.инвариантных.в.отношении. переноса,.например.сигналов.волновой.формы.

.Видеоданные .—.трехмерные.сверточные.сети.(если.необходимо.захваты- вать .эффекты .движения) .или .комбинация .двумерной .сверточной .сети,.

536    Глава 14. Заключение

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

. Объемные данные.—.трехмерные.сверточные.сети.

Теперь.вспомним.особенности.каждой.архитектуры.

Полносвязные сети

Полносвязная.сеть.—.это.стек.слоев.Dense,.предназначенных.для.обработки. векторных.данных.(где.каждый.образец.представлен.вектором.количественных. или.качественных.атрибутов)..Такие.сети.не.предполагают.наличия.во.входных. признаках.какой-то.определенной.структуры:.они.называются.полносвязными. (densely.connected),.потому.что.измерения.слоя.Dense.связаны.со.всеми.другими. измерениями..Слой.пытается.отобразить.отношения.между.любыми.двумя.входными.признаками..Этим.он.отличается,.например,.от.двумерного.сверточного. слоя,.который.рассматривает.только.локальные.отношения.

Полносвязные.сети.чаще.всего.используются.для.данных,.выражающих.качественные.характеристики.(например,.когда.входные.признаки.являются. списками.атрибутов),.таких.как.данные.в.наборе.с.ценами.на.жилье.в.Бостоне,. который.использовался.в.главе.4..Они.также.применяются.для.заключительной. классификации.или.регрессии.в.большинстве.сетей..Например,.сверточные.сети,. рассматривавшиеся.в.главе.8,.а.также.рекуррентные.сети,.рассматривавшиеся. в.главе.10,.обычно.завершаются.одним.или.двумя.слоями.Dense.

Помните:.для.бинарной классификации.стек.слоев.должен.завершаться.слоем. Dense .с.единственным.измерением,.функцией.активации.sigmoid .и.функцией. потерь.binary_crossentropy..Вашей.целью.должно.быть.значение.0 .или.1:

from tensorflow import keras

from tensorflow.keras import layers

inputs = keras.Input(shape=(num_input_features,)) x = layers.Dense(32, activation="relu")(inputs)

x = layers.Dense(32, activation="relu")(x) outputs = layers.Dense(1, activation="sigmoid")(x) model = keras.Model(inputs, outputs)

model.compile(optimizer="rmsprop", loss="binary_crossentropy")

Для .выполнения .однозначной классификации .(когда .каждый .образец .принадлежит.точно.одному.классу).завершайте.стек.слоев.слоем.Dense .с.количеством.измерений,.равным.количеству.классов,.и.функцией.активации.softmax.. Если.цели.получены.прямым.кодированием,.используйте.функцию.потерь. categorical_crossentropy;.если.они.—.целые.числа,.используйте.sparse_ categorical_crossentropy:

inputs = keras.Input(shape=(num_input_features,)) x = layers.Dense(32, activation="relu")(inputs)

x = layers.Dense(32, activation="relu")(x)

14.1. Краткий обзор ключевых понятий    537

outputs = layers.Dense(num_classes, activation="softmax")(x) model = keras.Model(inputs, outputs)

model.compile(optimizer="rmsprop", loss="categorical_crossentropy")

Для.выполнения.многозначной классификации.(когда.каждый.образец.может. принадлежать.нескольким.классам.сразу).завершайте.стек.слоев.слоем.Dense . с.количеством.измерений,.равным.количеству.классов,.функцией.активации. softmax .и.функцией.потерь.binary_crossentropy..Ваши.цели.должны.быть.получены.многомерным.прямым.кодированием:

inputs = keras.Input(shape=(num_input_features,)) x = layers.Dense(32, activation="relu")(inputs)

x = layers.Dense(32, activation="relu")(x)

outputs = layers.Dense(num_classes, activation="sigmoid")(x) model = keras.Model(inputs, outputs) model.compile(optimizer="rmsprop", loss="binary_crossentropy")

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

inputs = keras.Input(shape=(num_input_features,)) x = layers.Dense(32, activation="relu")(inputs)

x = layers.Dense(32, activation="relu")(x) outputs layers.Dense(num_values)(x)

model = keras.Model(inputs, outputs) model.compile(optimizer="rmsprop", loss="mse")

Сверточные сети

Сверточные.слои.выделяют.локальные.пространственные.шаблоны,.применяя. одни.и.те.же.геометрические.преобразования.к.разным.участкам.в.пространстве. (фрагментам).во.входном.тензоре..В.результате.получаются.представления,. инвариантные в отношении переноса,.что.делает.свертки.высокоэффективными.и.модульными..Эта.идея.применима.к.пространствам.любой.размерности:. одномерным.(последовательностям),.двумерным.(изображениям),.трехмерным. (объемам).и.т..д..Вы.можете.использовать.слой.Conv1D .для.обработки.последо- вательностей,.слой.Conv2D .—.для.обработки.изображений.и.слой.Conv3D .—.для. обработки.объемов..В.качестве.более.компактной.и.эффективной.альтернативы. сверточным.слоям.также.можно.использовать.свертки,.разделяемые.по.глубине,. такие.как.SeparableConv2D.

Сверточные нейронные сети.состоят.из.стека.сверточных.слоев.и.слоев.вы- бора.максимальных.значений.по.соседям.(max-pooling)..Слои.выбора.позво- ляют.снижать.пространственную.размерность.данных,.что.необходимо.для.

538    Глава 14. Заключение

сохранения.размеров.карты.признаков.в.разумных.пределах.с.ростом.числа. признаков,.и.дают.возможность.последующим.сверточным.слоям.«увидеть». входное.пространство.на.большем.протяжении..Сверточные.сети.часто.заканчиваются.операцией.Flatten .или.слоем.глобального.выбора,.превращающими. карту.пространственных.признаков.в.векторы,.за.которыми.следуют.слои.Dense,. реализующие.классификацию.или.регрессию.

Вот.типичная.сеть.для.классификации.изображений.(в.данном.случае.категориальная.классификация),.использующая.слои.SeparableConv2D:

inputs = keras.Input(shape=(height, width, channels))

x = layers.SeparableConv2D(32, 3, activation="relu")(inputs) x = layers.SeparableConv2D(64, 3, activation="relu")(x)

x = layers.MaxPooling2D(2)(x)

x = layers.SeparableConv2D(64, 3, activation="relu")(x) x = layers.SeparableConv2D(128, 3, activation="relu")(x) x = layers.MaxPooling2D(2)(x)

x = layers.SeparableConv2D(64, 3, activation="relu")(x) x = layers.SeparableConv2D(128, 3, activation="relu")(x) x = layers.GlobalAveragePooling2D()(x)

x = layers.Dense(32, activation="relu")(x)

outputs = layers.Dense(num_classes, activation="softmax")(x) model = keras.Model(inputs, outputs)

model.compile(optimizer="rmsprop", loss="categorical_crossentropy")

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

Рекуррентные нейронные сети

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

В.Keras.доступны.три.слоя.RNN:.SimpleRNN,.GRU.и.LSTM..Для.большинства.случаев. практического.применения.лучше.использовать.GRU.или.LSTM..LSTM.—.более.мощ- ный.из.этих.двух,.но.и.более.затратный.в.вычислительном.смысле;.GRU .можно. рассматривать.как.более.простую.и.незатратную.альтернативу.

Чтобы.уложить.в.стек.несколько.слоев.RNN,.каждый.предыдущий.слой.перед. последним.должен.возвращать.полную.последовательность.своих.выходов. (каждый.входной.временной.интервал.будет.соответствовать.выходному);.если.

14.1. Краткий обзор ключевых понятий    539

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

Вот.единственный.простой.слой.RNN.для.бинарной.классификации.последовательностей.векторов:

inputs = keras.Input(shape=(num_timesteps, num_features)) x = layers.LSTM(32)(inputs)

outputs = layers.Dense(num_classes, activation="sigmoid")(x) model = keras.Model(inputs, outputs) model.compile(optimizer="rmsprop", loss="binary_crossentropy")

А.вот.стек.из.слоев.RNN.для.бинарной.классификации.последовательностей. векторов:

inputs = keras.Input(shape=(num_timesteps, num_features)) x = layers.LSTM(32, return_sequences=True)(inputs)

x = layers.LSTM(32, return_sequences=True)(x) x = layers.LSTM(32)(x)

outputs = layers.Dense(num_classes, activation="sigmoid")(x) model = keras.Model(inputs, outputs) model.compile(optimizer="rmsprop", loss="binary_crossentropy")

Архитектура Transformer

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

Модель.Transformer.можно.использовать.для.решения.любых.задач,.связанных. с.обработкой.наборов.или.последовательностей,.включая.классификацию.текста,. но.лучше.всего.она.подходит.для.задач.обучения типа «последовательность в последовательность»,.таких.как.машинный.перевод.абзацев.с.одного.языка.на.другой.

Модель.Transformer.для.преобразования.последовательностей.в.последовательности.состоит.из.двух.частей:

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

.TransformerDecoder .—.декодер,.принимающий.выходные.данные.Trans­ formerEncoder .и .целевую .последовательность .и .предсказывающий, .что. должно.находиться.в.целевой.последовательности.дальше.