Коли я почав працювати зі штучними нейронними мережами (NN), я вважав, що мені доведеться боротися з надмірною обробкою як основну проблему. Але на практиці я навіть не можу змусити NN пройти 20-відсотковий бар'єр помилок. Я навіть не можу побити свій рахунок у випадковому лісі!
Я шукаю дуже загальну чи не настільки загальну пораду щодо того, що слід зробити, щоб НН почав фіксувати тенденції в даних.
Для реалізації 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% (!) На тестовому наборі.
Як може бути так, що моя глибока мережа з попередньою підготовкою поводиться так погано? Що слід спробувати?