Резюме настройки параметров моделей нейронных сетей CNN и LSTM на основе pytorch

машинное обучение Python Нейронные сети

Demo

Это небольшой итог последних двух месяцев.На github загружена реализованная демоверсия, которая включает в себя CNN, LSTM, BiLSTM, GRU, комбинацию CNN и LSTM, BiLSTM, а также многоуровневый многоканальный CNN, LSTM, BiLSTM и др. Реализация модели нейронной сети. В этой статье обобщены проблемы, возникшие в последнее время, методы лечения и связанные с ними стратегии, а также опыт (на самом деле опыта нет) и т. д. капусты.

Демонстрационный сайт: https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch

(1) Краткое описание Pytorch

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

Для новичков, которые не изучили pytorch, вы можете сначала ознакомиться с 60-минутным введением в pytorch, опубликованным на официальном сайте, адрес ссылки: http://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html

(2) CNN, LSTM

Справочник по пониманию сверточной нейронной сети CNN

(https://wuwuwu.onlytribe.com/Hanbingsu/note/485480)

Справочник по пониманию сети долговременной кратковременной памяти LSTM

(https://onlytribe.com/Hanbingsu/note/581764)

(3) Предварительная обработка данных

1. Корпус, который я сейчас использую, это базовые стандартные данные (например, следующие), но есть еще некоторые места, которые необходимо предварительно обработать в процессе загрузки данных корпуса, такие как капитализация некоторых данных, обработки чисел и «\n \t » и других символов, а теперь использовать стороннюю библиотеку torchtext для загрузки предобработки данных.

2. torch строит словарь и обрабатывает корпусные данные:

3. Обработка специальных символов, таких как числа, в корпусных данных:

4. На что обратить внимание:

При загрузке набора данных вы можете использовать random для перемешивания данных.

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

(4) Вложение слов

1. Встраивание слов — это просто соответствующий вектор слов, соответствующий каждому слову в корпусе В настоящее время наиболее часто используемым способом обучения векторов слов должна быть ссылка на word2vec:

(HTTP://woowoo.cn blog.com/parents tercel blog/afraid/7181899.HTML)

2. Соответствующий словарь был создан с помощью torchtext выше.Есть два способа загрузки векторов слов.Один - загрузить предварительно обученные векторы слов, которые были обучены извне в соответствии с корпусом, а другой - случайным образом инициализировать слово векторов. Два метода сравниваются друг с другом. Если вы используете предварительно обученные векторы слов в то время, эффект будет намного лучше, но векторы слов, которые вы обучаете сами, могут не дать хороших результатов, потому что данных корпуса может быть недостаточно , такие как вектора слов, которые были обучены, например, слово Google News Vector — это вектор слов, признанный отраслью, но из-за огромного количества, если аппаратных средств (GPU) недостаточно, не пытайтесь это сделать.

3. Укажите несколько адресов для загрузки предварительно обученных векторов слов.

word2vec-GoogleNews-vectors

(https://github.com/mmihaltz/word2vec-GoogleNews-vectors)

glove-vectors

(https://nlp.stanford.edu/projects/glove/)

4. Загрузка внешних векторов слов

Загрузите векторы слов, которые можно найти в векторах слов в словаре

Чтобы иметь дело со словами, которые не могут быть найдены в векторе слов в словаре, широко известном как OOV (вне словаря), можно использовать несколько стратегий:

Усреднение найденных векторов слов

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

Значение случайной инициализации было прочитано в нескольких статьях, некоторая случайная инициализация находится между (-0,25, 0,25) или (-0,1, 0,1), конкретный эффект можно проверить самостоятельно, разные наборы данных, разные внешние. Эффект оценки вектора слова разные.Результат моего теста: 0,25 лучше, чем 0,1

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

5. Используйте внешние векторы слов в модели

5) Инициализация параметров

Для функции свертки nn.Conv2d() в pytorch есть вес и смещение, и необходимо инициализировать вес, Невыполнение инициализации может замедлить скорость сходимости и повлиять на конечный эффект и т. д.

Для инициализации веса вы обычно можете использоватьtorch.nn.init.uniform(),torch.nn.init.normal(),torch.nn.init. xavier_uniform(), ссылка на конкретное использование http://pytorch.org/docs/master/nn.html#torch-nn-init

Для nn.LSTM() в pytorch есть атрибуты all_weights, включая вес и смещение, которые представляют собой многомерную матрицу.

(6) Корректировка и ее стратегия

Настройки параметров нейронной сети

Размер ядра в CNN: я прочитал документ (Анализ чувствительности сверточных нейронных сетей (и руководство для практиков) для классификации предложений). В документе проверялось использование ядра. Согласно результатам, большинство настроек будут установите от 1 до 10 случайных комбинаций, конкретный эффект зависит от вашей собственной задачи.

Номер ядра в CNN — это количество функций в каждом окне свертки, примерно установленное на уровне 100-600, я обычно устанавливаю 200 300.

Отсев: в большинстве статей отсев установлен на 0,5.Говорят, что 0,5 имеет хороший эффект и может предотвратить проблемы переобучения.Однако в различных задачах необходимо соответствующим образом настроить размер отсева.В дополнение к настройке Значение отсева, Положение отсева в модели также имеет решающее значение. Вы можете попробовать разные положения отсева, и вы можете получить потрясающие результаты.

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

скорость обучения: Общее начальное значение скорости обучения отличается для разных настроек оптимизатора.Говорят, что есть некоторые классические конфигурации, такие как Адам: lr = 0,001

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

Скрытый размер в LSTM: размер скрытого слоя в LSTM также оказывает определенное влияние на результаты.Если вы используете внешний вектор слова 300dim, вы можете рассмотреть скрытый размер = 150 или 300. Для скрытого размера я установил максимум 600, т.к. из-за аппаратного оборудования 600 уже очень медленно обучается.Если ресурсы железа в порядке, можно попробовать больше скрытых значений размера, но все же нужно учитывать взаимосвязь между скрытым размером и размерностью вектора слова в процесс попытки иметь определенные отношения)

Два ограничения нормальной формы: max-norm и norm-type в Embedded in pytorch — это два ограничения нормальной формы.

Регуляризация L2, также известная как уменьшение веса, реализована в pytorch. Конкретная реализация находится в оптимизаторе, а параметр — weight_decay (регуляризация L1 в pytorch была заброшена и может быть реализована самостоятельно), обычно устанавливается на 1e-8Исчезновение градиента, проблема взрыва градиента

Стратегии для нейронных сетей для улучшения Acc

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

Динамическая скорость обучения: в последней версии 0.2 pytorch реализована динамическая скорость обучения, см. http://pytorch.org/docs/master/optim.html#how-to-adjust-learning-rate.

Пакетные нормализации, соответствующие функции BatchNorm1d() и BatchNorm2d() также предоставляются в pytorch, которые можно использовать напрямую, а один параметр (импульс) можно настроить как гиперпараметр.

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

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

Оптимизатор: pytorch предоставляет несколько оптимизаторов. Наиболее часто используется Адам, и эффект по-прежнему очень хороший. Подробности см. на странице http://pytorch.org/docs/master/optim.html#algorithms.

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

7) Ссылка спасибо

Какой у вас опыт настройки параметров глубокого обучения (rnn, cnn)?

https://www.zhihu.com/question/41631631

Кто-нибудь может объяснить встраивание слов?

https://www.zhihu.com/question/32275069

Глубокое обучение без базового входа

https://zybuluo.com/hanbingtao/note/581764

Инициализация параметров PyTorch и Finetune

https://zhuanlan.zhihu.com/p/25983105

Переобучение и регуляризация

http://hpzhao.com/2017/03/29/Регуляризация в машинном обучении/#more

Batch Normalitions

https://discuss.pytorch.org/t/example-on-how-to-use-batch-norm/216/2


bamtercelboo — старший научный сотрудник в моей лаборатории.Опыт работы с галантерейными товарами, который я подытожил, когда только начинал, заслуживает внимания. Его гитхаб https://github.com/bamtercelboo, много сухого кода, добро пожаловать в гости.

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