Kötegelt gradiens süllyedés versus sztochasztikus gradiens süllyedés

Tegyük fel, hogy van valamilyen képzési készlet $ (x _ {(i)}, y _ {(i)}) $ a $ i = 1, \ dots, m $ esetén. Tegyük fel azt is, hogy valamilyen típusú felügyelt tanulási algoritmust futtatunk a képzési készleten. A hipotézisek $ h _ {\ theta} (x _ {(i)}) = \ theta_0 + \ theta_ {1} x _ {(i) 1} + \ cdots + \ theta_ { n} x _ {(i) n} $ . Meg kell találnunk a $ \ mathbf {\ theta} $ paramétereket, amelyek minimalizálják a $ y _ {(i) közötti távolságot. )} $ és $ h _ {\ theta} (x _ {(i)}) $ . Legyen $$ J (\ theta) = \ frac {1} {2} \ sum_ {i = 1} ^ {m} (y _ {(i)} – h _ {\ theta } (x _ {(i)}) ^ {2} $$

Ezután meg akarjuk találni $ \ theta $ minimalizálja a $ J (\ theta) $ -ot. Színátmenet-ereszkedésben minden paramétert inicializálunk, és a következő frissítést hajtjuk végre: $$ \ theta_j : = \ theta_j- \ alpha \ frac {\ részleges} {\ részleges \ theta_ {j}} J (\ theta) $$

Mi a legfontosabb különbség a kötegelt gradiens süllyedés és a sztochasztikus gradiens süllyedés között?

Mindkettő használja a fenti frissítési szabályt. De vajon jobb-e a másiknál?

Válasz

A kötegelt vagy sztochasztikus gradiens süllyedés alkalmazhatósága valóban a várható hiba sokaságától függ.

A kötegelt gradiens süllyedés a teljes adatkészlet felhasználásával kiszámítja a színátmenetet. Ez nagyszerű konvex, vagy viszonylag sima hibajelentéseknél. Ebben az esetben közvetlenül az optimális megoldás felé, akár helyi, akár globális szinten. Ezenkívül a kötegelt gradiens süllyedés, lágyított tanulási arány mellett, végül megtalálja a minimálisat, amely a vonzerő medencéjében található.

A sztochasztikus gradiens süllyedés (SGD) egyetlen minta felhasználásával számítja ki a színátmenetet. Az SGD valójában több mintából álló minikészletet használ, egy kicsit később megmagyarázandó okokból. Az SGD jól működik (gondolom, nem jól, de jobb, mint a kötegelt gradiens süllyedés) a sok helyi maximumot / minimumot tartalmazó hibajelentéseknél. A némileg zajosabb gradiens, amelyet a csökkentett mintaszám alapján számolunk, hajlamos a modellt a helyi minimumokból kirekeszteni egy olyan régióba, amely remélhetőleg optimálisabb. Az egyes minták valóban zajosak, míg a minibatchek általában a zaj egy részét átlagolják. , akkor jó egyensúly érhető el, ha a kis adag mérete elég kicsi ahhoz, hogy elkerülje a gyenge helyi minimumokat, de elég nagy ahhoz, hogy ne kerülje el a globális minimumokat vagy a jobban teljesítő l okai minimumok. (Egyébiránt ez azt feltételezi, hogy a legjobb minimumoknak nagyobb és mélyebb vonzómedencéjük van, és ezért könnyebb belemenni.)

Az SGD egyik előnye, hogy számítási szempontból sokkal gyorsabban. az adatkészletek gyakran nem tárolhatók a RAM-ban, ezáltal a vektorizálás sokkal kevésbé hatékony. Inkább minden mintát vagy mintacsoportot be kell tölteni, meg kell dolgozni, az eredményeket tárolni stb. A Minibatch SGD-t viszont általában szándékosan elég kicsivé teszik ahhoz, hogy számítási szempontból kezelhető legyen.

Általában ez a számítási előny kihasználható az SGD sokkal több iterációjának végrehajtásával, ami sokkal több lépést tesz meg, mint a hagyományos kötegelt gradiens süllyedés . Ez általában egy olyan modellt eredményez, amely nagyon közel áll ahhoz, amelyet a kötegelt gradiens süllyedés során találhatunk meg, vagy jobb.

Úgy gondolom, hogy miként működik az SGD, ha azt képzelem, hogy van egy pontom, az én bemeneti eloszlásomat képviseli. A modellem megpróbálja megtanulni ezt a bemeneti eloszlást. A bemeneti eloszlás körül egy árnyékos terület jelenik meg, amely az összes lehetséges minikészlet bemeneti eloszlását ábrázolja. Általában igazságos feltételezés, hogy a minibatch bemeneti eloszlások közel vannak a valódi bemeneti eloszláshoz. A kötegelt gradiens süllyedés minden lépésnél a legmeredekebb utat választja a valódi bemeneti eloszlás eléréséhez. Az SGD másrészt választ egy véletlenszerű pont az árnyékolt területen belül, és a legmeredekebb utat választja e pont felé. Az egyes iterációknál azonban új pontot választ. Ezen lépések átlaga megközelítőleg meg fogja közelíteni a valódi bemeneti eloszlást.

Megjegyzések

  • A gyakorlatban senki nem használja a Batch Gradient Descent programot. Ez ‘ egyszerűen túl számítási szempontból drága, nem is annyira nyereség. (Az a nyereség, hogy ‘ valóban lemond a ” true ” gradiens.) Ha rendkívül konvex veszteségfüggvényed van, akkor csak a helyes irányba kell lépned, és ‘ l végül összefogsz n helyi minimum. Így minibatch SGD.
  • @Jason_L_Bens van olyan referenciád (papírok vagy online szövegek), ahol többet tudhatok meg ezekről az algoritmusokról?
  • @ user110320 Nem a fejem tetején van, nem, bár vannak ‘ nagyon általános algoritmusok, ezért egy csomó kereséssel rengeteg erőforrásnak kell rendelkezésre állnia a témában. Ha ‘ általános megközelítést keres, akkor ‘ ajánlom elolvasni Yoshua Bengio ‘ s Mély architektúrák tanulása az AI számára. ‘ itt kezdtem el.

Válasz

Amint azt más válasz is sugallja, az SGD használatának fő oka az, hogy csökkentse a színátmenet számítási költségét, miközben továbbra is nagyrészt megtartja a színátmenet irányát, ha sok mini-tétel vagy minta átlagát veszi figyelembe – ez biztosan segít elérni a helyi minimumokat.

  1. Miért működik a minibatch .

A mögöttes matematika hogy a költségfüggvény ” true ” színátmenete (az általánosítási hiba vagy a végtelenül nagy minta-készlet gradiense) az elvárás a gradiens $ g $ értéke a valódi adatelosztó eloszláshoz képest $ p_ {data} $ ; a tényleges színátmenet $ \ hat {g} $ egy mintadarab alapján kiszámítva, mindig megközelíti a valódi gradienst az empirikus adatok eloszlásával $ \ hat {p} _ {data} $ . $$ \ hat {g} = E _ {\ hat {p} _ {data}} ({\ részleges J (\ theta) \ over \ részleges \ theta}) $$ A kötegelt gradiens süllyedés az összes adatmintát megadva megadhatja a lehetséges ” optimális ” színátmenetet, ez nem a ” igaz ” színátmenet. Egy kisebb tétel (azaz egy minibatch) valószínűleg nem olyan optimális, mint a teljes tétel, de mindkettő közelítő érték – így az egymintás minibatch (SGD) is.

Feltételezve, hogy a $ m $ minta egy kis adagban, a kiszámított $ \ hat {g} (m) $ elfogulatlan a valódi gradiens becslése. A becslések (négyzetes) standard hibái a különféle kis adagméretekkel fordítottan arányosak a minibatch méretével. Vagyis $$ {SE ({\ hat {g} (n)}) \ SE felett ({\ hat {g} (m)})} = {\ sqrt { m \ over n}} $$ Vagyis: a standard hiba csökkentése a minta méretének növekedésének négyzetgyöke. Ez azt jelenti, hogy ha a minibatch mérete kicsi, akkor a tanulási aránynak is csekélynek kell lennie annak érdekében, hogy a nagy szórásnál nagyobb stabilitást érjen el. Ha a minták nem függetlenek, az elfogulatlan becslés tulajdonságát már nem tartják fenn. Ehhez meg kell keverni a mintákat az edzés előtt, ha a minták szekvenciája nem elég véletlenszerű.

  1. Miért lehet jobban működik .

Először is, a minibatch egyes tanulási problémákat technikailag megoldhatatlanná tesz, hogy kezelhetővé tegye a kisebb kötegmérettel csökkent számítási igény miatt.

Másodszor, a csökkentett adagméret nem feltétlenül jelenti a csökkent gradiens pontosságot. A képzési minták sokaknak sok zajt, kiugrást vagy torzítást tartalmaznak. A véletlenszerűen mintavételezett minikészlet tükrözi a valódi adatokat, ami jobban (vagy nem rosszabban) generálja az elosztást, mint az eredeti teljes köteg. Ha a minibatch gradiens frissítésének egyes iterációi jobb becslést nyújtanak, összességében egy korszak átlagolt eredménye jobb lehet, mint a teljes tételből kiszámított gradiens.

Harmadszor, a minibatch nemcsak a kellemetlen események kezelésében segít. adatminták, de segítenek kezelni a kellemetlen költségfüggvényt is, amelynek sok helyi minimumja van. Ahogy Jason_L_Bens megemlíti, néha a hibajegyek könnyebben be tudják csapni a szabályos színátmenetet egy helyi minimumba, míg a minidarabbal kiszámított ideiglenesen véletlenszerű gradienst nehezebben.

Végül, gradiens süllyedéssel nem vagy a globális minimumok elérése egy lépésben, de a hibasorozaton ismétlődik. A színátmenet nagyrészt csak az ismétlés irányát adja meg. A minibatch segítségével sokkal gyorsabban lehet iterálni. Sok esetben minél több az iteráció, annál jobb pontot érhet el. Nem igazán érdekel minden időjárás esetén, a pont optimális globálisan vagy akár lokálisan. Csak egy ésszerű modellt szeretne elérni, amely elfogadható általánosítási hibát eredményez. A minibatch megkönnyíti ezt.

Megtalálhatja Ian Goodfellow et al., A ” Mély tanulás című könyvet ” nagyon jó vitákat folytat erről a témáról, ha figyelmesen végigolvassa.

Megjegyzések

  • Konvex optimalizálási problémák esetén az általad elmondottak rendben vannak.De ha nem konvex függvényeken használunk gradiens módszereket, elmulasztott egy nagyon kritikus okot, miszerint az SGD jobb, mint a kötegelt GD. datascience.stackexchange.com/questions/16807/…
  • @horaceT válaszom megtekintése Köszönöm a hozzászólásod. Mivel az Ön által említett pontot Jason_L_Bens fentebb leírta részletekkel, nem zavartam megismételni, hanem a megfelelő tisztelettel utaltam az utolsó harmadik bekezdésben szereplő válaszára. A gradiens süllyedés optimalizálási problémájához a nem konvexet tükrözik a helyi minimumok, beleértve a nyeregpontot is (lásd az utolsó harmadik bekezdést); és a leírás kedvéért a válaszom az SGD-t minibatch-ként írja le, de 1-es tételmérettel (lásd a harmadik bekezdést).
  • Miért mondtad gyakorlatilag a * -ban, végül egy korszakban, gyakorlatilag számolsz a gradiensek átlaga az összes megadott minta alapján. *? Ne ‘ nem gondolja, hogy ez az állítás téves az egyes lépések súlyának frissítése miatt?
  • @Media Igazad van. ‘ eltávolítottam az utolsó bekezdést. Köszönöm.

Válasz

Számomra a kötegelt gradiens hasonlít a sovány színátmenetre. Széles gradiens esetén a kötegméretet úgy választják meg, hogy minden frissítendő paraméter egymástól függetlenül, de nem feltétlenül ortogonálisan változik a kötegben. Például, ha a köteg 10 kísérletet és 10 sort tartalmaz, akkor lehetőség van $ 2 ^ {10-1} = 512 $ független oszlopok létrehozására. 10 sor lehetővé teszi az 512 paraméter független, de nem ortogonális frissítését.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük