Biztos vagyok benne, hogy sokan olyan linkekkel válaszolnak, hogy „hadd google-lalom google-ozni neked”, ezért azt akarom mondani, hogy megpróbáltam kitalálni kérem, bocsásson meg, hogy itt nem értem megértésemet, de nem tudom kitalálni, hogy a neurális hálózat gyakorlati megvalósítása hogyan működik.
Megértem a bemeneti réteget és az adatok normalizálásának módját, megértem az elfogultsági egységet is, de amikor a rejtett rétegről van szó, mi a tényleges számítás ebben a rétegben, és hogyan térképez kimenet csak egy kicsit ködös. Láttam diagramokat a rejtett réteg kérdőjeleivel, logikai függvényekkel, mint például az AND / OR / XOR, aktiválási függvényekkel és bemeneti csomópontokkal, amelyek az összes rejtett egységhez és bemeneti csomóponthoz társulnak, amelyek csak néhány rejtett egységhez kapcsolódnak, és így tovább Csak néhány kérdésem lenne a gyakorlati szempontból. Természetesen félelmetes lenne az egész ideghálózati folyamat egyszerű magyarázata, amelyet elmagyarázna egy gyermeknek.
Milyen számításokat végeznek a rejtett rétegben ?
Hogyan vannak hozzárendelve ezek a számítások a kimeneti réteghez?
Hogyan működik az ouput réteg? Az rejtett réteg adatainak normalizálása?
Miért a bemeneti réteg egyes rétegei összekapcsolódnak a rejtett réteggel, mások pedig nem?
Megjegyzések
- Az emberek itt kedvesek, még soha nem láttam egy válasz „engedd, hogy ezt guglizjam neked”, de sok meglepően alapos és éleslátó válasz az elsőnek tűnő alapvető kérdésekre. Sajnos ‘ nem tudok segíteni a tiétek, de elég relevánsnak tűnik, ezért boldogan szavazok rá.
- Köszönöm a megjegyzést és a szavazatot Gael, valószínűleg
a SO közösség, mivel mindannyian tudjuk, hogy ezek az emberek hogyan juthatnak el 🙂 Örülök, hogy itt inkább az együttműködés szellemét látom, nem pedig azzal, hogy megpróbálok kitűzőket és pontokat megszerezni kérdések szerkesztésével / lezárásával.
Válasz
Három mondatos változat:
-
Minden réteg tetszőleges függvényt alkalmazhat az előző rétegre (általában lineáris transzformációt, amelyet squashing nemlinearitás követ).
-
A rejtett rétegek feladata a bemenetek átalakítása olyanná, amelyet a kimeneti réteg használhat.
-
A kimeneti réteg átalakítja a rejtett réteg aktivációit bármilyen skálára, amelyen a kimenetet szeretné megjeleníteni.
Mint te “re 5:
Ha azt szeretné, hogy a számítógép megmondja, van-e busz a képen, a számítógépnek könnyebb lehet a dolga, ha megfelelő eszközökkel rendelkezik.
Tehát a buszérzékelője lehet kerékérzékelő (hogy segítsen megmondani, hogy “jármű”) és egy dobozérzékelő (mivel a busz nagy doboz alakú) és egy méretérzékelő (hogy elmondjam neked) túl nagy ahhoz, hogy autó legyen). Ez a rejtett réteg három eleme: nem képezik a nyers kép részét, hanem olyan eszközöket jelentenek, amelyeket a buszok felismerésében terveztek.
Ha mindhárom detektor bekapcsol (vagy ha különösen aktívak), akkor jó eséllyel busz áll előtted.
A neurális hálók hasznát veszik l, mert vannak jó eszközök (például a szaporítás) a sok detektor felépítéséhez és összerakásához.
Mint te, felnőtt
Az előremenő neurális hálózat számos funkciót alkalmaz az adatokra. A pontos függvények az Ön által használt neurális hálózattól függenek: leggyakrabban ezek a függvények mindegyike kiszámítja az előző réteg lineáris transzformációját, majd egy squashing nemlinearitást követ. Néha a függvények mást fognak csinálni (például a logikai függvények kiszámítása a példákban) vagy a kép szomszédos képpontjainak átlaga). Tehát a különböző rétegek szerepei függhetnek attól, hogy milyen függvényeket számolnak, de megpróbálok nagyon általános lenni.
Hívjuk meg a bemenetet vektor $ x $, a rejtett réteg aktiválásai $ h $ és a kimeneti aktiválás $ y $. Van valami $ f $ függvényed, amely $ x $ -tól $ h $ -ig térképez, és egy másik $ g $ függvény, amely $ h $ -tól térképez a $ y $ értékre.
Tehát a rejtett réteg aktiválása $ f (x) $, a hálózat kimenete pedig $ g (f (x)) $.
Miért van két funkció ($ f $ és $ g $) egy helyett?
Ha a funkciók bonyolultsága korlátozott, akkor a $ g (f (x)) $ kiszámíthatja azokat a dolgokat, amelyeket a $ f $ és a $ g $ nem képesek külön-külön.
Példa logikai függvényekkel:
Például, ha csak $ f $ -t engedélyezzük és $ g $ olyan egyszerű logikai operátorok, mint az “AND”, az “OR” és a “NAND”, akkor nem lehet más funkciókat, mint például az “XOR”, csak az egyikükkel kiszámítani. Másrészt ki tudnánk számítani az “XOR” kifejezést, ha hajlandóak lennénk ezeket a függvényeket egymásra rétegezni:
Az első réteg funkciói:
- Győződjön meg arról, hogy legalább egy elem “IGAZ” (az OR használatával)
- Győződjön meg arról, hogy ezek nem minden “IGAZ” (a NAND használatával)
Második réteg funkció:
- Győződjön meg arról, hogy az első réteg mindkét feltétele teljesül (az AND használatával)
A hálózat kimenete csak a ennek a második funkciónak az eredménye. Az első réteg átalakítja a bemeneteket olyanná, amelyet a második réteg használhat, hogy az egész hálózat XOR-t hajtson végre.
Példa képekkel:
61. dia erről a beszélgetésről – szintén elérhető itt egyetlen képként – megmutatja (a megjelenítés egyik módja), hogy mit keresnek az adott ideghálózat különböző rejtett rétegei.
Az első réteg rövid éldarabokat keres a képen: ezeket nagyon könnyű megtalálni a nyers pixeladatokból, de önmagukban nem túl hasznosak arra, hogy megmondják, ha arcot vagy buszt néznek, vagy elefánt.
A következő réteg alkotja az éleit: ha az alsó rejtett réteg szélei bizonyos módon illeszkednek egymáshoz, akkor a bal oldali oszlop közepén lévő egyik szemérzékelő bekapcsolhat . Nehéz lenne egyetlen réteget készíteni, amely olyan jó lenne, hogy a nyers pixelekből valami olyasmit találjon: a szemérzékelőket sokkal könnyebb felépíteni élérzékelőkből, mint nyers pixelekből.
A következő réteg felfelé komponálja a szemérzékelőket és az orrérzékelőket arcokká. Más szavakkal, ezek akkor világítanak, amikor az előző réteg szem- és orrérzékelői megfelelő mintával bekapcsolnak. Ezek nagyon alkalmasak bizonyos típusú arcok keresésére: ha egy vagy több közülük világít, akkor a kimeneti rétegnek jelentenie kell, hogy van egy arc.
Ez azért hasznos, mert arcérzékelőket könnyű felépíteni a szemérzékelőkből és az orrérzékelőkből, de nagyon nehéz felépíteni a pixelintenzitásokból.
Tehát minden réteg egyre távolabb kerül a nyers pixelektől, és közelebb kerül a végső célhoz (pl. arc- vagy buszérzékelés).
Válaszok válogatott egyéb kérdések
“Miért vannak az input réteg egyes rétegei a rejtett réteghez kapcsolódva, mások pedig nem?”
A hálózatban leválasztott csomópontokat “torzító” csomópontoknak nevezzük. Nagyon szép magyarázat van itt . A rövid válasz az, hogy “tetszenek az elfogott kifejezések regresszióban.
” Hol vannak a képpéldában szereplő “szemérzékelő” képek származnak? “
Még nem ellenőriztem azokat a képeket, amelyekhez linkeltem, de általában ezek a vizualizációk mutatják a pixelek a bemeneti rétegben, amelyek maximalizálják a megfelelő idegsejt aktivitását. Tehát, ha az idegsejtet szemdetektornak gondoljuk, akkor ez az a kép, amelyet az idegsejt a leginkább szemszerűnek tart. Az emberek általában optimalizálással találják meg ezeket a pixelsorozatokat (hegymászás) eljárás.
ebben a cikkben egyes Google-emberek a világ egyik legnagyobb ideghálójával mutatják, egy “arcérzékelő” neuron és egy “macskaérzékelő” idegsejt, valamint egy második út: Megmutatják azokat a tényleges képeket is, amelyek a legerősebben aktiválják az idegsejtet (3. ábra, 16. ábra). A második megközelítés azért jó, mert megmutatja, hogy a hálózat mennyire rugalmas és nemlineáris – ezek a magas szintű “detektorok” érzékenyek ezekre a képekre, annak ellenére, hogy nem tűnnek hasonlónak a pixel szintjén.
Tudassa velem, ha valami nem világos itt, vagy további kérdése van.
Megjegyzések
- Tehát csak egy van megadva egy adott réteg minden egyes csomópontjának algoritmusa és a súlyok különböztetik meg a kimeneteket? Vagy programozhatja a réteg minden csomópontját másra?
- @GeorgeMcDowd ez rátér a legfontosabb kérdésre: A pixelek és a buszok azonosítása nehéz, ahogy Ön javasolta. Szerencsére a pixeleket megnézni és az éleket megtalálni könnyű – ‘ az első rejtett réteg megpróbálja megtenni. A következő réteg megpróbálja élek alapján következtetéseket levonni, ami sokkal könnyebb, mint pixelek alapján megpróbálni.
- A SO-nak tehát más jutalmat (nem csak pontokat) kell adnia a válaszért fordított idő és erőfeszítés miatt!
- @JoshuaEnfield szerintem az 1980-as logika ‘ s olyan kombináció volt, amely hasonló volt ahhoz, ahogyan az emberek azt gondolták, hogy az agy működik, hogy mindenütt megkülönböztethető, és hogy az értékek korlátozódnak, ahogyan te említetted. Azóta az emberek azt tapasztalták, hogy a
f(x) = max(x, 0)
(a ” kijavított lineáris egység “) gyakran jobban működik, annak ellenére, hogy nem ‘ nincs sok ilyen tulajdonságuk. - A buszpélda és a függvénylánc éppen szögezte le. Ne ‘ ne értse, miért nem lehetnek a tankönyvek ‘ ilyen leírók.
Válasz
Megpróbálom hozzáadni az intuitív működési leírást …
A neurális hálózatról való gondolkodás jó intuitív módja a gondolkodás A lineáris regresszióhoz néhány bemenetre van szükség, és egy lineáris modell jön létre, amely minden egyes bemeneti értéket megszoroz egyes modellek optimális súlyozási együtthatóival, és megpróbálja feltérképezni az eredmények összegét egy kimeneti válaszra, amely szorosan összekapcsolódik egyezik a valódi kimenettel. Az együtthatókat olyan értékek megtalálásával határozzuk meg, amelyek minimalizálják a kívánt kimeneti érték és a modell által megtanult érték közötti hibamutatókat. Egy másik módja annak mondani, hogy a lineáris modell megpróbál együttható szorzókat létrehozni minden bemenetnél, és összesítse őket, hogy megpróbálja meghatározni a (többszörös) bemenet és (általában egy) kimenet közötti kapcsolatot ues. Ugyanez a modell szinte felfogható az ideghálózat alapvető építőelemeként; egyetlen egység perceptron.
De az egyetlen egység perceptronnak van még egy darabja, amely nem lineáris módon dolgozza fel a súlyozott adatok összegét. Ennek megvalósításához tipikusan egy összecsapási funkciót (sigmoid vagy tanh) használ. Tehát megvan a rejtett réteg alapegysége, amely egy blokk, amely összegezi a súlyozott bemenetek halmazát – ezután az összesített választ átadja egy nemlineáris függvénynek, hogy létrehozzon egy (rejtett rétegű) kimeneti csomópont választ. Az előfeszítő egység ugyanolyan, mint a lineáris regresszióban, egy állandó eltolás, amelyet minden feldolgozandó csomóponthoz hozzáadunk. A nemlineáris feldolgozási blokk miatt már nem korlátozódik csak a lineáris válaszokra (mint a lineáris regressziós modellben).
Oké, de ha az egyes perceptron egységek közül sok együtt dolgozik, akkor mindegyik különböző bemeneti súlyszorzókkal és különböző válaszokkal rendelkezhetnek (annak ellenére, hogy az ALL ugyanazt a bemeneti halmazt dolgozza fel ugyanazzal a korábban nemlineáris mondattal). Különbözővé teszi a válaszokat az, hogy mindegyiknek más-más együtthatósúlya van, amelyeket az ideghálózat edzés útján tanul meg (egyes formák tartalmazzák a gradiens süllyedést). Ezután az összes perceptron eredményét újra feldolgozzuk és átadjuk egy kimeneti rétegnek, ahogy az egyes blokkokat is feldolgoztuk. Ekkor az a kérdés, hogy hogyan határozzák meg a helyes súlyokat az összes blokkhoz?
A helyes súlyok elsajátításának általános módja az, ha véletlenszerű súlyokkal indulunk, és megmérjük a valódi tényleges kimenet és a megtanult hiba közötti válaszreakciót. modell kimenet. A hiba általában visszafelé kerül a hálózaton keresztül, és a visszacsatolási algoritmus egyenként növeli vagy csökkenti ezeket a súlyokat a hiba bizonyos arányával. A hálózat ismételten ismétlődik előre haladással, a kimeneti válasz mérésével, majd frissítéssel (visszafelé történő súlybeállítások átadásával) és a súlyok korrigálásával, amíg valamilyen kielégítő hibaszintet el nem érnek. Ezen a ponton van egy regressziós modellje, amely rugalmasabb lehet, mint a lineáris regressziós modell, ezt szokás univerzális függvény-közelítőnek nevezni.
Az egyik módszer, amely valóban segített abban, hogy megtanuljam, hogyan működik egy neurális hálózat, egy neurális hálózat megvalósításának kódjának tanulmányozása és felépítése. Az egyik legjobb alapkódmagyarázat a (szabadon elérhető) “A tudós és mérnök DSP útmutatója” fejezet neurális hálózatának fejezetében található. 26. Leginkább nagyon alapnyelven íródott (azt hiszem, a fortran volt), amely valóban segít abban, hogy lássa, mi történik.
Válasz
Ennek a nézetét két lépésben fogom leírni: A bemenet-rejtett lépés és a Rejtett-kimenet lépés. Először a rejtett-kimenet lépést fogom megtenni, mert az kevésbé tűnik érdekesnek (számomra).
Rejtett-kimenetre
A rejtett réteg kimenete különböző dolgok lehetnek, de most tegyük fel, hogy sigmoidális aktiválási funkciók. Tehát 0 és 1 közötti értékek, és sok bemenetnél csak 0 “és 1” s lehetnek.
Szeretem a rejtett neuronok “kimenetei és a kimeneti réteg közötti átalakulást csak fordításnak gondolni (nyelvi értelemben, nem pedig geometriai értelemben). Ez minden bizonnyal igaz, ha az átalakítás invertibilis , és ha nem, akkor valami elveszett a fordításban. De alapvetően csak a rejtett idegsejtek “kimeneteit látja más perspektívából.
Rejtett bemenet
Mondjuk, hogy 3 bemeneti neuronod van (csak azért, hogy könnyen tudjam írjon ide néhány egyenletet) és néhány rejtett neuront. Minden rejtett neuron bemenetként kap egy súlyozott összeg bemenetet, így például talán
hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)
Ez azt jelenti, hogy a hidden_1
értéke nagyon érzékeny a , egyáltalán nem érzékeny a input_2
iránt, és csak kissé érzékeny a input_3
.
Tehát azt mondhatja, hogy a hidden_1
rögzíti a bemenet egy adott aspektusát , amelyet hívhat a “input_1
fontos “szempont.
A hidden_1
kimenete általában úgy jön létre, hogy a bemenetet átadják valamilyen függvénynek, tehát mondjuk, hogy sigmoid függvényt használ. Ez a függvény 0 és 1 közötti értékeket vesz fel; úgy gondolja, hogy ez egy kapcsoló, amely azt mondja, hogy vagy input_1
fontos, vagy nem “t”.
Tehát ezt teszi a rejtett réteg! Kivonja a bemeneti tér aspektusait vagy jellemzőit .
Most a súlyok is negatívak lehetnek! Ami azt jelenti, hogy olyan aspektusokat kaphat, mint a “input_1
fontos, DE SZINTEN input_2
is elveszi ezt a fontosságot”:
hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)
vagy input_1
és input_3
“megosztott” jelentőséggel bír:
hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)
További geometria
Ha tudsz néhányat lineáris algebra, geometrikusan gondolkodhat bizonyos irányok mentén történő vetítés szempontjából. A fenti példában az input_1
irány mentén vetítettem.
Nézzük meg újra a hidden_1
-t, innen: Ha az input_1
érték elég nagy, a sigmoid aktiválási függvény kimenete csak 1-nél marad, nem lesz nagyobb . Más szóval, egyre több input_1
nem tesz különbséget a kimeneten. Hasonlóképpen, ha ellentétes (azaz negatív) irányba mozog, akkor egy pont után a kimenet nem lesz hatással.
Rendben, rendben van. De tegyük fel, hogy nem akarunk bizonyos irányú érzékenységet a végtelenség irányába, és azt akarjuk, hogy csak egy vonal bizonyos tartományára aktiválódjon. Nagyon negatív értékek jelentése nincs hatás , és nagyon pozitív értékek esetén nincs hatás, de mondjuk 5 és 16 közötti értékeknél ébreszteni akarja. Itt használhat egy radiális alapú függvényt az aktiválási funkcióhoz.
Összegzés
A rejtett réteg kivonja a bemeneti terület jellemzőit, és a kimeneti réteg lefordítja őket a kívánt kontextusba. Lehet, hogy ennél sokkal többről van szó, mi van a többrétegű hálózatokkal meg ilyenekkel, de ezt eddig értettem.
SZERKESZTÉS: Ez a csodálatos interaktív grafikonokkal rendelkező oldal jobb munkát végez, mint a fenti hosszú és nehézkes válaszom valaha is megtehette volna : http://neuralnetworksanddeeplearning.com/chap4.html
megjegyzések
- Az OP-hoz hasonlóan én is ‘ kissé összezavarodtam a rejtett réteg miatt ideghálózatokban. Példájában az NN algoritmus hogyan találja meg a rejtett_1, a rejtett_2 és a rejtett_3 idegsejt súlyát? És mivel a hidden_1, hidden_2 és hidden_3 ugyanazokból a bemeneti változókból származik, nem ‘ nem jönnének a súlyok ugyanazon megoldásba?
Válasz
Vegyük az osztályozás esetét. A kimeneti réteg arra törekszik, hogy megbecsülje annak a feltételes valószínűségét, hogy a mintája egy adott osztályhoz tartozik, vagyis mennyire valószínű, hogy az adott minta egy adott osztályhoz tartozik. Geometriai értelemben a rétegek nemlineáris kombinálása a küszöbfüggvényeken keresztül lehetővé teszi az ideghálózatok számára a nem konvex problémák (beszédfelismerés, objektumfelismerés stb.) Megoldását, amelyek a legérdekesebbek. Más szavakkal, a kimeneti egységek képesek nem konvex döntési függvényeket létrehozni, mint például az itt ábrázoltak.
A rejtett rétegekben lévő egységeket úgy tekinthetjük meg, mint olyan összetett jellemzőket tanulni az adatokból, amelyek lehetővé teszik a kimeneti réteg számára, hogy jobban meg tudja különböztetni az egyik osztályt a másiktól, és pontosabb döntési határokat generáljon. Például az arcfelismerés esetében az első rétegben lévő egységek megtanulják az élszerű tulajdonságokat (észlelik az éleket adott tájolásban és helyzetben), a magasabb réteg pedig megtanulja ezeket kombinálni olyan arcvonások detektorává, mint az orr, a száj vagy a szem. Minden rejtett egység súlya képviseli ezeket a jellemzőket, és a kimenete (feltételezve, hogy ez sigmoid) annak valószínűségét képviseli, hogy az adott tulajdonság jelen van a mintájában.
Általában a kimenet és a kimenet jelentése a rejtett rétegek a megoldani kívánt problémától (regresszió, osztályozás) és az alkalmazott veszteségfüggvénytől (kereszt entrópia, legkevesebb négyzet alakú hibák, …) függenek