Як боротися з недостатністю в глибокій нервовій мережі


50

Коли я почав працювати зі штучними нейронними мережами (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% (!) На тестовому наборі.

Як може бути так, що моя глибока мережа з попередньою підготовкою поводиться так погано? Що слід спробувати?

Відповіді:


34

Проблема з глибокими мережами полягає в тому, що у них багато гіперпараметрів для налаштування та дуже малий простір рішення. Таким чином, пошук хороших - це скоріше мистецтво, а не інженерне завдання. Я б почав із робочого прикладу з підручника і розібрався з його параметрами, щоб побачити, як змінюються результати - це дає добру інтуїцію (хоча і не формальне пояснення) щодо залежностей між параметрами та результатами (як кінцевими, так і проміжними).

Також дуже корисними були такі документи:

Вони обидва описують УЗМ, але містять загальну інформацію про глибокі мережі загалом. Наприклад, одним із ключових моментів є те, що в мережах потрібно налагоджувати налагоджувальні шари - якщо попередній шар не забезпечує хорошого представлення функцій, подальші шари майже не мають шансів виправити це.


14

Хоча відповідь ffriend дає чудові вказівки для того, щоб дізнатися більше про те, як нейронні мережі можуть бути (надзвичайно) важко налаштувати належним чином, я подумав, що може бути корисним перерахувати пару конкретних прийомів, які зараз використовуються в найкращих архітектурах класифікації в нейронній мережі література.

Випрямлені лінійні активації

Перше, що може допомогти у вашому випадку - це переключити функцію активації вашої моделі з логістичної сигмоїди - - на a випрямлений лінійний (aka relu) - .f(z)=(1+ez)1f(z)=max(0,z)

Активація relu має дві великі переваги:

  • його вихід - справжній нуль (не просто мале значення, близьке до нуля) для іz0
  • її похідна є постійною або 0 для або 1 для .z0z>0

Мережа релу-одиниць в основному діє як ансамбль експоненціально багатьох лінійних мереж, тому що одиниці, які отримують вхід , по суті є "вимкненими" (їх вихід 0), тоді як одиниці, які отримують вхід згортаються на єдину лінійну модель для цього вводу. Також важливі постійні похідні, оскільки глибока мережа з активацією relu має тенденцію уникнути зникаючої проблеми з градієнтом і може бути навчена без пошарового пошуку.z0z>0

Див. "Нейрові мережі глибоких випрямлених випрямлячів" від Glorot, Bordes та Bengio ( http://jmlr.csail.mit.edu/proceedings/papers/v15/glorot11a/glorot11a.pdf ) для отримання хорошого документу з цих тем.

Викинути

Багато дослідницьких груп за останні кілька років виступають за використання «відпаду» у класифікаційних мережах, щоб уникнути перенавчання. (Див., Наприклад, "Випадання: простий спосіб запобігти перенапруження нейронних мереж" Srivastava, Hinton, Krizhevsky, Sutskever, & Salakhutdinov http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf ) In випадання, під час тренування, деяка постійна частка одиниць у даному шарі випадковим чином задається 0 на кожен вхід, який обробляє мережа. Це змушує одиниці, які не встановлені на 0, "складати" для "відсутніх" одиниць. Випадання здається надзвичайно ефективним регулятором для моделей нейронних мереж у класифікаційних завданнях. Дивіться статтю в блозі про це за посиланням http: // fastml.


7
Але питання стосується недофінансування, а не перевиконання.
Валентас

8

Можливо, вам буде цікаво прочитати наступний документ дослідників Microsoft Research:

Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun: Глибоке залишкове навчання для розпізнавання зображень в Арксиві, 2015 рік.

У них були подібні проблеми, як у вас:

Коли більш глибокі мережі зможуть почати конвергенцію, виявляється проблема деградації: із збільшенням глибини мережі точність стає насиченою (що може бути не дивно), а потім швидко знижується. Несподівано така деградація не спричинена переобладнанням, а додавання більшої кількості шарів до належно глибокої моделі призводить до вищої помилки підготовки , про що повідомляється в [11, 42] та ретельно перевіреної нашими експериментами.

Щоб вирішити проблему, вони скористалися пропускною архітектурою. З цим вони тренували дуже глибокі мережі (1202 шари) та домоглися найкращого результату у виклику ILSVRC 2015.


Дякую за твої анш, ти береш на себе проблему з градієнтом, якщо у випадку, якщо аккаунт перевірки вищий, ніж навчання відповідно, то що робити? Це може бути випадковим для невеликої кількості даних у наборі val, але колись це не залежить від набору валів. Я запитую, чи є якась інша причина, коли Вал АКС вищий, ніж тренінг?
Судіп Дас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.