Роз'яснення щодо правила Perceptron vs. Gradient Descent проти Stohastic Gradient Descent


15

Я трохи експериментував з різними реалізаціями Perceptron і хочу переконатися, чи правильно я розумію "ітерації".

Первісне правило персептрона Розенблатта

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

Δw(t+1)=Δw(t)+η(targetactual)xi

де - це правило навчання. І цільове, і фактичне значення є пороговими (-1 або 1). Я реалізував це як 1 ітерація = 1 прохід над тренувальним зразком, але вектор ваги оновлюється після кожного тренувального зразка.eta

І я обчислюю "фактичне" значення як

sign(wwTxx)=sign(w0+w1x1+...+wdxd)

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

Δw(t+1)=Δw(t)+η(targetactual)xi

Те ж саме , як правило персептрон, однак, targetі actualНЕ пороги , а реальні значення. Крім того, я рахую "ітерацію" як шлях до навчальної вибірки.

І SGD, і класичне правило perceptron сходяться в цьому лінійно відокремленому випадку, однак у мене виникають проблеми з реалізацією градієнта.

Спуск градієнта

Тут я переглядаю зразок тренувань та підсумовую зміни ваги за 1 прохід над тренувальним зразком та оновлюю ваги після цього, наприклад,

для кожного зразка навчання:

Δwnew+=Δw(t)+η(targetactual)xi

...

після 1 проходу через навчальний набір:

Δw+=Δwnew

Мені цікаво, чи правильне це припущення чи я щось пропускаю. Я спробував різні (до нескінченно малих) темпів навчання, але ніколи не міг змусити його проявити ознаки конвергенції. Отже, мені цікаво, чи я неправильно зрозумів що-небудь. тут.

Спасибі, Себастьян

Відповіді:


20

Δ

Perceptron:

ww(t+1)=ww(t)+ηt(y(i)y^(i))xx(i)

де у ( я )- прогноз моделі наy^(i)=sign(wwxx(i))ith

Це можна розглядати як метод стохастичного субградієнта спуску за такою функцією "втрата перцептрона" *:

Втрати перцептрону:

Lww(y(i))=max(0,y(i)wwxx(i))

Lww(y(i))={0}, if y(i)wwxx(i)>0{y(i)xx(i)}, if y(i)wwxx(i)<0[1,0]×y(i)xx(i), if wwxx(i)=0

Оскільки perceptron вже є формою SGD, я не впевнений, чому оновлення SGD має відрізнятися від оновлення perceptron. Те, як ви написали крок SGD, з непороговими значеннями, ви зазнаєте збитків, якщо передбачити відповідь занадто правильно. Це погано.

Ваш крок градієнта партії неправильний, оскільки ви використовуєте "+ =", коли слід використовувати "=". Поточні ваги додаються для кожного навчального екземпляра . Іншими словами, так, як ви це написали,

шш(т+1)=шш(т)+i=1н{шш(т)-ηтLшш(т)(у(i))} .

Що має бути:

шш(т+1)=шш(т)-ηтi=1нLшш(т)(у(i)) .

ηт=η0т


шшхх(i)=0), L=[-1,0]×у(i)хх(i), так 00L, тож вам дозволили б не робити кроку. Відповідно, втрати перцептрону можна мінімізувати пришш=00, що марно. Але в алгоритмі перцептрона вам потрібно розірвати зв’язки та використовувати підградієнтний напрямокy(i)xx(i)L if you choose the wrong answer.

So they're not exactly the same, but if you work from the assumption that the perceptron algorithm is SGD for some loss function, and reverse engineer the loss function, perceptron loss is what you end up with.


Thank you Sam, and I do apologize for my messy question. I don't know where the deltas come from, but the "+=" was the the thing that went wrong. I completely overlooked that part. Thanks for the thorough answer!
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.