Чи нейронні мережі зазвичай потребують певного часу, щоб "піднятися" під час тренувань?


10

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

Отже, моя конволюційна нейронна мережа має 8 шарів (5 згорткових, 3 повністю пов'язаних). Усі ваги та ухили ініціалізуються на невеликі випадкові числа. Потім я встановлюю розмір кроку і продовжую тренування з міні-партіями, використовуючи Адамін оптимізатор Tensor Flow.

Дивна поведінка, про яку я говорю, полягає в тому, що приблизно за перші 10 циклів через мої дані тренінгу втрата тренувань взагалі не зменшується. Ваги оновлюються, але втрати на тренуванні залишаються приблизно приблизно однаковими, часом піднімаючись, а іноді знижуючись між міні-партіями. Він залишається таким чином деякий час, і я завжди створюю враження, що втрати ніколи не зменшаться.

Потім раптом втрата тренувань різко зменшується. Наприклад, протягом приблизно 10 циклів через дані тренувань, точність тренувань становить приблизно від 20% до приблизно 80%. З цього моменту все закінчується красиво. Те саме відбувається щоразу, коли я запускаю навчальний конвеєр з нуля, а нижче - графік, що ілюструє один приклад пробігу.

введіть тут опис зображення

Отже, що мені цікаво, чи це нормальна поведінка при навчанні глибоких нейронних мереж, внаслідок чого потрібно "певний час". Або ймовірно, що я щось роблю неправильно, що викликає цю затримку?

Дуже дякую!


Я думаю, я трохи запізнююся на вечірку. Але, можливо, я все-таки можу додати певної цінності розмові. Так ... для мене це звучить як функція активації сигмоїдів. Оскільки похідна сигмоїда мала для дуже малих або дуже великих значень, тренування може бути повільним для "насичених нейронів". На жаль, я не можу точно сказати, як виглядає ваш CNN з опису, який ви давали.
Німа Мусаві

Відповіді:


7

Те, що алгоритм знадобився певний час, щоб «запустити», не особливо дивно.

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

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