Лучшие практики глубокого обучения

искусственный интеллект
  • Эта статья была впервые опубликована из публичного аккаунта:RAIS, добро пожаловать, чтобы следовать.

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

механизм обратного вызова

Если вы видите это, у меня есть основания думать, что вы программист с некоторым опытом разработки, который понимает программирование и программирование. В этом случае вы должны быть знакомы с обратными вызовами. Обратные вызовы похожи на шаблон проектирования наблюдателя. Я дам вам задание для выполнения, и я буду продолжать делать свою работу после того, как объяснение закончится.Когда вы закончите выполнение, независимо от того, хороший результат или плохой, вы должны сообщить мне результат.В этом смысл обратного вызова.

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

Мы смотрим на данные в процессе обучения и находим, где начинается переобучение.Затем устанавливаем количество итераций цикла на эту критическую точку и переобучаем сеть.Можно ли изменить идею решения проблемы апелляции на обученную нами сеть? Судить, когда начинать переобучение (или показатели данных существенно не изменились), а затем автоматически останавливаться. Естественно, callback — лучший способ справиться с такого рода проблемами. Сейчас почти все виды фреймворков глубокого обучения предоставляют такой метод, Как это сделать? Давайте возьмем Keras в качестве примера. Вот три часто используемых примера. Различные фреймворки имеют некоторые тонкие различия. Пожалуйста, обратите на них внимание при их использовании:

# 定义需要哪些 callback
callbacks_list = [
    # 当所监控的数据不再增长,停止训练
    keras.callbacks.EarlyStopping(
        monitor='acc',
        patience=1,
    ),
    # 每轮训练都进行一次模型参数的保存,
    # monitor 表示如果监控数据没有改善(自动推断,还可用 mode 参数控制),不进行保存
    # save_best_only=True 时:
    #   val_loss: 自动推断 min
    #   val_acc: 自动推断 max
    keras.callbacks.ModelCheckpoint(
        filepath='point_model.h5',
        monitor='val_loss',
        save_best_only=True,
    ),
    # 当评价的指标没有提升时,减小学习率
    keras.callbacks. ReduceLROnPlateau(
        monitor='val_loss' 
        factor=0.1,    # 减小 10 倍学习率,2 或者 10 倍是常用值
        patience=10,   # 10 次迭代没有改善
    )
    # 当然,还可以自定义一些,keras.callbacks.Callback 的子类
]
model.fit(callbacks = callbacks_list)

TensorBoard

Для TensorBoard мы упоминали ранееНейросетевое распознавание рукописных цифрКак было сказано выше, мы сказали, что знали, что сеть обучала модель, но не знали, как работает сеть, поэтому нам понадобился TensorBoard для визуального просмотра, который можно просмотреть в браузере, примерно так:

image

image

Реализация кода почти такая же, как и в приведенном выше обратном вызове:

from keras.callbacks.tensorboard_v2 import TensorBoard
callback_list = [
        keras.callbacks.TensorBoard(
            log_dir='./logs',
            histogram_freq=1,
            embeddings_freq=1,
        )
    ]
model.fit(train_images, train_labels, epochs=5, batch_size=128, callbacks=callback_list)
# shell 中:tensorboard --logdir=logs
# 浏览器:http://localhost:6006/

Я считаю, что когда вы посмотрите на содержимое предыдущего экспорта данных, у вас возникнет другое чувство.Это не статья, посвященная объяснению TensorBoard.Я предлагаю вам вернуться и посмотреть на нее, она будет другой. Конечно, здесь есть и небольшой эпизод. Последняя официальная версия Keras несовместима с TensorFlow. При использовании этого обратного вызова будет сообщено об ошибке. Она исправлена. Соответствующие проблемы GitHub находятся вздесь, изменено 20 февраля, я думаю, что это исправление скоро будет выпущено в новой версии.

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

Используйте передовые шаблоны проектирования

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

остаточное соединение

image

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

пакетная нормализация

Пакетная стандартизация - это своего рода стандартизация. Метод стандартизации, который мы видели раньше, заключается в следующем: вычесть все данные из их среднего значения, а затем разделить их на их стандартные отклонения, так что среднее значение равно 0, а стандартное отклонение равно 1, верно? Напоминает мне стандартного нормального распределения (компьютеры - сплошная математика), да, вот оно!

Метод пакетной нормализации заключается в том, что вход каждого слоя сверточной нейронной сети поддерживает одно и то же распределение в процессе обучения. Каков эффект от этого? Это очень хорошо. Конкретный принцип - это другая статья, и мы поговорим об этом позже, но мы знаем Главное, что скорость обучения значительно ускоряется, процесс сходимости также значительно ускоряется, и эффект классификации увеличивается.При этом, поскольку скорость обучения не требуется, это легче настроить параметры.Короче говоря, это очень круто в использовании.

Здесь следует отметить, что, особенно для некоторых относительно глубоких сетей, пакетная нормализация помогает распространению градиента. Соответствующий код в Keras — BatchNormalization, который используется после сверточного слоя или плотного слоя.Предоставляется код:

conv_model.add(layers.Conv2D(32, 3, activation='relu'))
conv_model.add(layers.BatchNormalization())
​
dense_model.add(layers.Dense(32, activation='relu'))
​dense_model.add(layers.BatchNormalization())

Разделимая по глубине свертка

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

image

Вот пример кода для классификации изображений:

model = Sequential()
model.add(layers.SeparableConv2D(32, 3, activation='relu', input_shape=(64, 64, 3,)))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layers.MaxPooling2D(2))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layers.SeparableConv2D(128, 3, activation='relu'))
model.add(layers.MaxPooling2D(2))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layers.SeparableConv2D(128, 3, activation='relu'))
# 极大的减少运算量
model.add(layers.GlobalAveragePooling2D())
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

Оптимизация гиперпараметров

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

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

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

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

интеграция модели

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

Как объяснить эту проблему? Чтобы привести не очень точный пример, классификация изображений, некоторые модели больше внимания уделяют линиям, а некоторые модели - цветам.Модель, которая их сочетает, уделяет внимание и линиям, и цветам, поэтому конечный результат будет лучше. Другими словами, разные модели фокусируются на разных аспектах данных и анализируют данные более всесторонним и трехмерным образом.Конечно, результаты лучше. Конечно, это также требует, чтобы интегрированные модели были неплохими, иначе при таком бардаке ваша интегрированная модель будет недействительной, что очень понятно.

Суммировать

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

  • Эта статья была впервые опубликована из публичного аккаунта:RAIS, добро пожаловать, чтобы следовать.