Я трохи експериментував з різними реалізаціями Perceptron і хочу переконатися, чи правильно я розумію "ітерації".
Первісне правило персептрона Розенблатта
Наскільки я розумію, в класичному алгоритмі Розенблатта ваги одночасно оновлюються після кожного прикладу тренувань через
де - це правило навчання. І цільове, і фактичне значення є пороговими (-1 або 1). Я реалізував це як 1 ітерація = 1 прохід над тренувальним зразком, але вектор ваги оновлюється після кожного тренувального зразка.
І я обчислюю "фактичне" значення як
Стохастичний градієнтний спуск
Те ж саме , як правило персептрон, однак, target
і actual
НЕ пороги , а реальні значення. Крім того, я рахую "ітерацію" як шлях до навчальної вибірки.
І SGD, і класичне правило perceptron сходяться в цьому лінійно відокремленому випадку, однак у мене виникають проблеми з реалізацією градієнта.
Спуск градієнта
Тут я переглядаю зразок тренувань та підсумовую зміни ваги за 1 прохід над тренувальним зразком та оновлюю ваги після цього, наприклад,
для кожного зразка навчання:
...
після 1 проходу через навчальний набір:
Мені цікаво, чи правильне це припущення чи я щось пропускаю. Я спробував різні (до нескінченно малих) темпів навчання, але ніколи не міг змусити його проявити ознаки конвергенції. Отже, мені цікаво, чи я неправильно зрозумів що-небудь. тут.
Спасибі, Себастьян