Неделя 6 обучения машинному обучению с помощью проектного подхода
Это была последняя неделя для классификации цифр проекта. К концу этой недели я испробовал множество различных идей и моделей и действительно многому научился. Мой результат и позиция в таблице лидеров хорошие, но хотелось бы, чтобы они были лучше. В любом случае, мы переходим к следующему конкурсу на следующей неделе. Уроки этой недели:
Изменения в генераторе данных изображения
На прошлой неделе я попытался внести некоторые изменения в генератор данных изображений, которые применяли к изображениям нормализацию по функциям, отбеливание ZCA и небольшое сглаживание. Я определенно ошибся с одной из этих дополнительных опций, потому что модель не обучалась должным образом. После некоторой дополнительной настройки я обнаружил, что источником проблемы была нормализация функций.
Причина этого очень проста. Нормализация по функциям берет каждую функцию и нормализует ее значение для каждой выборки, что на самом деле не имеет смысла для набора данных, над которым мы работаем.
В любом случае, простое добавление Shear к параметрам генератора значительно улучшило оценку модели. Были предприняты дополнительные эксперименты с увеличением диапазона этих значений, но оценка осталась почти такой же.
K-кратная проверка
К моему удивлению, метод проверки K-кратности не работал так хорошо с моделью CNN. Техника перекрестной проверки K Fold смогла улучшить оценку каждой модели, которую я обучал раньше. Но этого не произошло с нейронными сетями. Было два способа применить перекрестную проверку K-Fold в случае нейронных сетей:
- Разделите общее количество эпох обучения между каждой из K складок.
- Выполните общее количество эпох на отдельных моделях для каждой из K складок.
Первый просто создаст одну модель, которая будет обучена и проверена на большом количестве данных. Второй создаст ансамбль моделей. Я попробовал только второй подход, который показал незначительное улучшение производительности. Количество эпох тоже увеличилось, но особых улучшений не наблюдалось. Моя цель состояла в том, чтобы попробовать оба этих подхода, но, возможно, это можно было бы сделать для любого другого соревнования, которое мы увидим на этом пути.
Изменения в оптимизаторе
Оптимизаторы нейронных сетей — это основные алгоритмы, которые заставляют нейронные сети обучаться. Они решают, как параметры сети изменяются по отношению к градиенту, который мы вычисляем. В основном нейронные сети используют оптимизаторы первого порядка, такие как Adam, RMSProp и так далее. Стохастический градиентный спуск — это простейшая модель оптимизатора первого порядка, другие оптимизаторы, такие как RMSProp, AdaGrad, AdaDelta и Adam, являются улучшениями SGD за счет добавления различных терминов, таких как импульс и история градиентов.
Выбор оптимизатора снова является методом проб и ошибок. Но некоторая интуиция также играет роль в выборе оптимизатора; очевидно, из многолетней практики.
Для этой проблемы модель, которую мы использовали, RMSProp показалась лучшей. Я попытался изменить оптимизатор на Адама, но улучшение было не очень хорошим.
Ренет Модель
После проверки некоторых модификаций простой CNN я перешел на CNN на основе остаточной сети. В этой записной книжке описываются Renet и их реализация:
ResNets — это круто! (современный) | Kaggle
В дополнение к прямому пути слоя свертки и объединения, остаточные слои добавляют один дополнительный путь, напрямую соединяющий вход и выход. Это приводит к лучшему распространению. Это соединение с пропуском помогает рассчитанному градиенту лучше распространяться по сети, помогая сетям эффективно изучать набор данных.
Слои Resnet в сочетании с некоторой предварительной обработкой данных привели к увеличению количества баллов, что является моим лучшим результатом в этом конкурсе.
Как выбрать архитектуру CNN?
Это вопрос, который в какой-то момент своей жизни задавал почти каждый, кто начинает работать с Deep Learning. Как мы решаем, какая нейронная сеть лучше соответствует модели, а какая нет. Это снова метод проб и ошибок, и он различается для разных наборов данных. Эта записная книжка очень эффективно объясняет концепцию выбора архитектуры.
Как выбрать CNN Architecture MNIST | Kaggle
Примерное количество слоев можно определить, просмотрев набор данных. После этого нужно просто проверить, сколько слоев дает наилучший результат, какие шаги, отступы и размер окна свертки работают лучше всего и так далее. Я определенно попытаюсь использовать методы, упомянутые в этой записной книжке, для решения одной из следующих задач, которые я выберу.
Заключение и дальнейшая работа
Как я уже сказал, на этой неделе наконец завершается работа над конкурсом Digit Recognizer. Это было действительно здорово. После конкурса «Титаник» мне пришлось опробовать методы исследования данных и методы, не относящиеся к глубокому обучению, которые я изучил на этом конкурсе. Я также узнал о методах уменьшения размерности (PCA, LDA и tSNE) и печально известных сверточных нейронных сетях и попробовал некоторые из них.
Давайте посмотрим, через какое испытание мы пройдем, начиная со следующей недели!