Разъяснение о реализации правила перцептрона против градиентного спуска против стохастического градиентного спуска

15

Я немного поэкспериментировал с различными реализациями Perceptron и хочу убедиться, правильно ли я понимаю «итерации».

Оригинальное правило персептрона Розенблатта

Насколько я понимаю, в классическом алгоритме персептрона Розенблатта веса обновляются одновременно после каждого примера обучения через

Δвес(T+1)знак равноΔвес(T)+η(TaрграммеT-aсTUaL)Икся

где еTa - это правило обучения здесь. И цель, и фактическая имеют пороговое значение (-1 или 1). Я реализовал это как 1 итерация = 1 проход по тренировочной выборке, но вектор весов обновляется после каждой тренировочной выборки.

И я рассчитываю «фактическое» значение как

sяграммN(весвесTИксИкс)знак равноsяграммN(вес0+вес1Икс1+,,,+весdИксd)

Стохастический градиентный спуск

Δвес(T+1)знак равноΔвес(T)+η(TaрграммеT-aсTUaL)Икся

Однако, это то же самое, что и правило персептрона, targetи actualэто не пороговые значения, а реальные значения. Кроме того, я считаю «итерацию» как путь к обучающему образцу.

И SGD, и классическое правило персептрона сходятся в этом линейно отделимом случае, однако у меня возникают проблемы с реализацией градиентного спуска.

Градиентный спуск

Здесь я просматриваю тренировочную выборку и суммирую изменения веса за 1 проход по тренировочной выборке и обновляю веса после этого, например,

для каждого образца обучения:

ΔвесNевес+знак равноΔвес(T)+η(TaрграммеT-aсTUaL)Икся

...

после 1 прохода над тренировочным набором:

Δвес+знак равноΔвесNевес

Мне интересно, верно ли это предположение или я что-то упускаю. Я пробовал разные (до бесконечно малых) скорости обучения, но никогда не мог заставить их показать какие-либо признаки сходимости. Итак, мне интересно, если я неправильно понял, что-н. Вот.

Спасибо Себастьян


источник

Ответы:

20

У вас есть пара ошибок в ваших обновлениях. Я думаю, что в общем случае вы путаете значение текущих весов с разницей между текущими весами и предыдущими весами. У вас есть символы, разбросанные там, где их не должно быть, и + = там, где вы должны иметь =.Δ

Perceptron:

,весвес(T+1)знак равновесвес(T)+ηT(Y(я)-Y^(я))ИксИкс(я)

где у ( я ) = знак ( шэто предсказание модели ная т ч примере обучения.Y^(я)знак равноподписать(весвесИксИкс(я))яTчас

Это можно рассматривать как метод стохастического субградиентного спуска для следующей функции «потери перцептрона» *:

Потеря персептрона:

.Lвесвес(Y(я))знак равноМаксимум(0,-Y(я)весвесИксИкс(я))

.Lвесвес(Y(я))знак равно{0}, если Y(я)весвесИксИкс(я)>0{-Y(я)ИксИкс(я)}, если Y(я)весвесИксИкс(я)<0[-1,0]×Y(я)ИксИкс(я), если весвесИксИкс(я)знак равно0

Поскольку персептрон уже является формой SGD, я не уверен, почему обновление SGD должно отличаться от обновления перцептрона. То, как вы написали шаг SGD, с не пороговыми значениями, вы понесете убытки, если ответите слишком правильно. Плохо.

Ваш шаг пакетного градиента неверен, потому что вы используете "+ =", когда вы должны использовать "=". Текущие веса добавляются для каждого обучающего экземпляра . Другими словами, как ты это написал,

весвес(T+1)знак равновесвес(T)+Σязнак равно1N{весвес(T)-ηTLвесвес(T)(Y(я))}

Что должно быть:

весвес(T+1)знак равновесвес(T)-ηTΣязнак равно1NLвесвес(T)(Y(я))

ηTзнак равноη0T


весвесИксИкс(я)знак равно0Lзнак равно[-1,0]×Y(я)ИксИкс(я)00Lвесвесзнак равно00-Y(я)ИксИкс(я)L

Таким образом, они не совсем одинаковы, но если вы исходите из предположения, что алгоритм персептрона является SGD для некоторой функции потерь, и реинжинирируете функцию потерь, потеря перцептрона - это то, что вы в конечном итоге получите.

Сэм Томсон
источник
Спасибо, Сэм, и я прошу прощения за мой грязный вопрос. Я не знаю, откуда берутся дельты, но «+ =» был тем, что пошло не так. Я полностью упустил из виду эту часть. Спасибо за подробный ответ!