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