Когда я начинал с искусственных нейронных сетей (NN), я думал, что мне придется бороться с переоснащением в качестве основной проблемы. Но на практике я даже не могу заставить свой NN пройти барьер 20% ошибок. Я даже не могу побить свой счет в случайном лесу!
Я ищу какой-то очень общий или не очень общий совет о том, что нужно сделать, чтобы NN начал фиксировать тенденции в данных.
Для реализации NN я использую Theano Stacked Auto Encoder с кодом из учебника, который отлично работает (менее 5% ошибок) для классификации набора данных MNIST. Это многослойный персептрон с верхним слоем softmax, каждый из которых затем скрыт, предварительно обученный как автоэнкодер (полностью описан в учебнике , глава 8). Есть ~ 50 входных функций и ~ 10 выходных классов. NN имеет сигмовидные нейроны, и все данные нормированы на [0,1]. Я перепробовал множество разных конфигураций: количество скрытых слоев и нейронов в них (100-> 100-> 100, 60-> 60-> 60, 60-> 30-> 15 и т. Д.), Различное обучение и предварительная подготовка ставки и т. д.
И самое лучшее, что я могу получить, - это 20% ошибок в наборе проверки и 40% ошибок в тестовом наборе.
С другой стороны, когда я пытаюсь использовать Random Forest (из scikit-learn), я легко получаю 12% ошибок в наборе проверки и 25% (!) В наборе тестов.
Как может быть, что мой глубокий NN с предварительной тренировкой ведет себя так плохо? Что я должен попробовать?
источник
Вам может быть интересно прочитать следующую статью исследователей Microsoft Research:
У них были такие же проблемы, как у вас:
Чтобы решить проблему, они использовали пропущенную архитектуру. При этом они обучили очень глубокие сети (1202 уровня) и достигли наилучшего результата в задаче ILSVRC 2015.
источник