Неделя 6 обучения машинному обучению с помощью проектного подхода

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

Изменения в генераторе данных изображения

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

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

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

K-кратная проверка

К моему удивлению, метод проверки K-кратности не работал так хорошо с моделью CNN. Техника перекрестной проверки K Fold смогла улучшить оценку каждой модели, которую я обучал раньше. Но этого не произошло с нейронными сетями. Было два способа применить перекрестную проверку K-Fold в случае нейронных сетей:

  • Разделите общее количество эпох обучения между каждой из K складок.
  • Выполните общее количество эпох на отдельных моделях для каждой из K складок.

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

Изменения в оптимизаторе

Оптимизаторы нейронных сетей — это основные алгоритмы, которые заставляют нейронные сети обучаться. Они решают, как параметры сети изменяются по отношению к градиенту, который мы вычисляем. В основном нейронные сети используют оптимизаторы первого порядка, такие как Adam, RMSProp и так далее. Стохастический градиентный спуск — это простейшая модель оптимизатора первого порядка, другие оптимизаторы, такие как RMSProp, AdaGrad, AdaDelta и Adam, являются улучшениями SGD за счет добавления различных терминов, таких как импульс и история градиентов.

(151) В чем разница между правилами обновления, такими как AdaDelta, RMSProp, AdaGrad и AdaM? — Квора

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

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

Ренет Модель

После проверки некоторых модификаций простой CNN я перешел на CNN на основе остаточной сети. В этой записной книжке описываются Renet и их реализация:

ResNets — это круто! (современный) | Kaggle

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

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

Как выбрать архитектуру CNN?

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

Как выбрать CNN Architecture MNIST | Kaggle

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

Заключение и дальнейшая работа

Как я уже сказал, на этой неделе наконец завершается работа над конкурсом Digit Recognizer. Это было действительно здорово. После конкурса «Титаник» мне пришлось опробовать методы исследования данных и методы, не относящиеся к глубокому обучению, которые я изучил на этом конкурсе. Я также узнал о методах уменьшения размерности (PCA, LDA и tSNE) и печально известных сверточных нейронных сетях и попробовал некоторые из них.

Давайте посмотрим, через какое испытание мы пройдем, начиная со следующей недели!