Я немного поэкспериментировал с различными реализациями Perceptron и хочу убедиться, правильно ли я понимаю «итерации».
Оригинальное правило персептрона Розенблатта
Насколько я понимаю, в классическом алгоритме персептрона Розенблатта веса обновляются одновременно после каждого примера обучения через
где - это правило обучения здесь. И цель, и фактическая имеют пороговое значение (-1 или 1). Я реализовал это как 1 итерация = 1 проход по тренировочной выборке, но вектор весов обновляется после каждой тренировочной выборки.
И я рассчитываю «фактическое» значение как
Стохастический градиентный спуск
Однако, это то же самое, что и правило персептрона, target
и actual
это не пороговые значения, а реальные значения. Кроме того, я считаю «итерацию» как путь к обучающему образцу.
И SGD, и классическое правило персептрона сходятся в этом линейно отделимом случае, однако у меня возникают проблемы с реализацией градиентного спуска.
Градиентный спуск
Здесь я просматриваю тренировочную выборку и суммирую изменения веса за 1 проход по тренировочной выборке и обновляю веса после этого, например,
для каждого образца обучения:
...
после 1 прохода над тренировочным набором:
Мне интересно, верно ли это предположение или я что-то упускаю. Я пробовал разные (до бесконечно малых) скорости обучения, но никогда не мог заставить их показать какие-либо признаки сходимости. Итак, мне интересно, если я неправильно понял, что-н. Вот.
Спасибо Себастьян