Налагодження нейронних мереж


10

Я створив штучну нейронну мережу в python, використовуючи функцію оптимізації scipy.optimize.minimize (Conjugate gradient).

Я здійснив перевірку градієнта, двічі перевірив все тощо, і я впевнений, що він працює правильно.

Я запускав його кілька разів, і він досягає "Оптимізація успішно припиняється", але коли я збільшую кількість прихованих шарів, вартість гіпотези збільшується (все інше зберігається однаково) після її успішного припинення.

Інтуїтивно виглядає так, ніби вартість повинна зменшуватися при збільшенні кількості прихованих шарів, оскільки вона здатна генерувати більш складну гіпотезу, яка може краще відповідати даним, однак, здається, це не так.

Мені буде цікаво зрозуміти, що тут відбувається, чи я неправильно реалізував нейронну мережу?

Відповіді:


9

Існує так багато способів помилитися з нейронною сіткою, що налагодити її буде важко. Крім того, щоб вирішити свою інтуїцію, кожен додатковий прихований шар ускладнює навчання. З урахуванням сказаного, ось деякі можливості:

  1. Ви додали зменшення ваги. Додавання більшої кількості шарів додає більше ваг, що збільшує ваші витрати на регуляризацію.
  2. Проблема досить проста, що достатньо моделі з одним прихованим шаром. Додавання більше прихованих шарів ускладнює мережу навчанню (проблема складнішої оптимізації).
  3. Метод оптимізації не справляється з великою роботою (я віддаю перевагу кліну, ніж scipy.optimize).
  4. Ви використовуєте функцію активації сигмоїд / танг. Сигмоїдна функція викликає зникаючу градієнтну проблему, яка ускладнює навчання з більшою кількістю шарів. Спробуйте скористатися функцією ReLu.

Навчання нейронних мереж вимагає багато практики, удачі та терпіння. Удачі.


1
Хороша відповідь. Зрозумійте, що 2, 3, 4 можуть взаємодіяти складними способами. Налагодження можна здійснити, перевіривши значення активації ANN, величину ваг ANN, слідкуючи за помилкою вибірки та помилкою поза вибіркою та конвергенцією оптимізатора тощо.
Def_Os

3

Збільшення кількості прихованих шарів для стандартної нейронної мережі фактично не поліпшить результати в більшості випадків. Зміна розміру прихованого шару буде.

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

Гарне вступне відео на цю тему на YouTube


2
Глибоке навчання - це збільшення кількості прихованих шарів. Інакше це буде називатися жирним навчанням :)
Емре

@Emre напевно це означав. Прокляття мого пунктуації!
eric chiang
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.