Olen varma, että monet ihmiset vastaavat linkkeihin ”anna minun googlata sen sinulle”, joten haluan sanoa, että olen yrittänyt selvittää anteeksi, joten anna anteeksi ymmärtämättömyyteni täällä, mutta en voi selvittää, miten hermoverkon käytännön toteutus todella toimii.

Ymmärrän syöttökerroksen ja kuinka tiedot normalisoidaan, ymmärrän myös ennakko-yksikön, mutta kun on kyse piilotetusta kerroksesta, mikä on tosiasiallinen laskelma kyseisessä kerroksessa ja miten se kartoittaa tuotos on vain vähän sumuinen. Olen nähnyt kaavioita kysymysmerkeillä piilotetussa kerroksessa, loogiset toiminnot, kuten AND / OR / XOR, aktivointitoiminnot ja syöttösolmut, jotka kartoittavat kaikki piilotetut yksiköt ja syöttösolmut, jotka yhdistävät vain muutamaan piilotettuun yksikköön ja niin Minulla on vain muutama kysymys käytännön näkökulmasta. Tietenkin yksinkertainen selitys koko hermoverkkoprosessista, kuten selität lapselle, olisi mahtavaa.

Mitä laskelmia tehdään piilotetussa kerroksessa ?

Kuinka nämä laskelmat yhdistetään lähtökerrokseen?

Kuinka ouput-kerros toimii? Poistetaanko piilotetun kerroksen tiedot?

Miksi ovatko jotkut tulokerroksen kerrokset yhdistetty piilotettuun kerrokseen ja jotkut eivät?

Kommentit

  • Ihmiset täällä ovat mukavia, en ole koskaan nähnyt ”anna minun googlata sitä sinulle” -vastaus, mutta monia yllättävän perusteellisia ja oivaltavia vastauksia aluksi peruskysymyksille. Valitettavasti en voi ’ auttaa sinua w sinun, mutta se näyttää melko merkitykselliseltä, joten äänestän siitä mielelläni.
  • Kiitos kommentista ja äänestyksestä Gael, olen luultavasti hieman jaded NIIN yhteisö, koska me kaikki tiedämme, kuinka nuo ihmiset voivat saada 🙂 On ilo nähdä enemmän yhteistyön henkeä täällä kuin yrittää ansaita merkkejä ja pisteitä muokkaamalla / sulkemalla kysymyksiä.
  • En ole erityisesti hermoverkkojen asiantuntija, vaikka olenkin mukana niiden sovelluksissa ja menetelmissä. Ehkä ei-niin-hyödyllinen vastaukseni olisi, että piilotetut tietyt laskelmat riippuvat ’ -toiminnosta ’ että olet määrätä omalle ryhmällesi, eli mitä yrität saavuttaa. Jos esimerkiksi haluat ryhmitellä syöttöelementit klustereiksi, lasketaan piilotetun kerroksen elementtien väliset etäisyydet. Tämä voi käydä läpi useita kerroksia ja optimointisyklejä tässä kerroksessa, kunnes täytät virhekriteerin, jonka avulla prosessi voi jättää ’ tämän tason.

vastaus

Kolmen lauseen versio:

  • Jokainen taso voi käyttää mitä tahansa haluamaasi funktiota edelliseen kerrokseen (yleensä lineaarinen muunnos, jota seuraa squashing epälineaarisuus).

  • Piilotettujen kerrosten tehtävä on muuntaa syötteet mihin tahansa, jota ulostulotaso voi käyttää.

  • Tulostustaso muuntaa piilokerroksen aktivaatiot mihin tahansa mittakaavaan, jonka haluat lähtösi olevan.

Kuten sinä ”re 5:

Jos haluat tietokoneen kertovan, onko kuvassa väylä, tietokoneella voi olla helpompaa aikaa, jos sillä olisi oikeat työkalut.

Bussi-ilmaisimesi voi siis olla valmistettu pyöränilmaisimesta (auttaakseen sinua kertomaan ”ajoneuvoksi”) ja laatikkoilmaisimesta (koska väylä on muotoinen kuin iso laatikko) ja kokotunnistimesta (kertoa sinulle se on liian iso ollakseen auto). Nämä ovat piilotetun kerroksesi kolme elementtiä: ne eivät ole osa raakakuvaa, ne ovat työkaluja, jotka olet suunnitellut auttamaan bussien tunnistamisessa.

Jos kaikki nämä kolme ilmaisinta kytkeytyvät päälle (tai ehkä jos ne ovat erityisen aktiivisia), on hyvät mahdollisuudet, että edessäsi on bussi.

Neuroverkot ovat hyödyllisiä l koska on olemassa hyviä työkaluja (kuten backpropagation) monien ilmaisimien rakentamiseen ja yhdistämiseen.


Kuten sinäkin, olet aikuinen

Siirto eteenpäin -hermoverkko soveltaa sarjaan toimintoja tietoihin. Tarkat toiminnot riippuvat käyttämästäsi hermoverkosta: useimmiten nämä toiminnot laskevat kukin edellisen kerroksen lineaarisen muunnoksen ja sen jälkeen epätasaisen epälineaarisuuden. Joskus toiminnot tekevät jotain muuta (kuten esimerkiksi loogisten toimintojen laskeminen esimerkeissäsi) tai keskiarvo viereisten pikselien suhteen kuvassa). Joten eri kerrosten roolit voivat riippua siitä, mitä toimintoja lasketaan, mutta yritän olla hyvin yleinen.

Soitetaan tulo vektori $ x $, piilokerroksen aktivaatiot $ h $ ja lähtöaktivointi $ y $. Sinulla on jokin toiminto $ f $, joka kartoittaa välillä $ x $ – $ h $, ja toinen funktio $ g $, joka kartoittaa $ h $ kohtaan $ y $.

Joten piilotetun kerroksen aktivointi on $ f (x) $ ja verkon ulostulo on $ g (f (x)) $.

Miksi kaksi toimintoa ($ f $ ja $ g $) ovat vain yhden?

Jos funktion monimutkaisuus on rajallinen, $ g (f (x)) $ voi laskea asioita, joita $ f $ ja $ g $ eivät voi tehdä erikseen.


Esimerkki loogisista funktioista:

Esimerkiksi, jos sallimme vain $ f $ ja $ g $ yksinkertaisiksi loogisiksi operaattoreiksi, kuten ”AND”, ”OR” ja ”NAND”, niin et voi laskea muita toimintoja, kuten ”XOR”, vain yhdellä niistä. Toisaalta voisimme laskea ”XOR”, jos olisimme halukkaita kerrostamaan nämä toiminnot päällekkäin:

Ensimmäisen kerroksen toiminnot:

  • Varmista, että ainakin yksi elementti on TOSI (käyttäen TAI)
  • Varmista, etteivät ne kaikki ole TOSI (NAND-merkintää käyttäviä)

Toisen kerroksen toiminto:

  • Varmista, että molemmat ensimmäisen kerroksen kriteerit täyttyvät (AND: n avulla)

Verkon lähtö on vain toisen toiminnon tulos. Ensimmäinen kerros muuntaa syötteet sellaiseksi, mitä toinen kerros voi käyttää, jotta koko verkko voi suorittaa XOR: n.


Esimerkki kuvista:

Dia 61 tästä keskustelusta – myös käytettävissä täällä yhtenä kuvana – näyttää (yksi tapa visualisoida), mitä tietyn hermoverkon eri piilotetut kerrokset etsivät.

Ensimmäinen kerros etsii kuvasta lyhyitä reunoja: ne on helppo löytää raakapikselitiedoista, mutta ne eivät ole sinänsä kovinkaan hyödyllisiä kertoakseen, katsotko kasvoja tai väylää tai norsu.

Seuraava kerros sävyttää reunat: jos alemman piilotetun kerroksen reunat sopivat yhteen tietyllä tavalla, yksi vasemmanpuoleisen sarakkeen keskellä olevista silmänilmaisimista saattaa käynnisty . Olisi vaikea tehdä yhtä kerrosta, joka olisi niin hyvä löytämään jotain niin spesifistä raakapikseleistä: silmänilmaisimia on paljon helpompi rakentaa reuna-ilmaisimista kuin raakapikseleistä.

Seuraava kerros ylöspäin säveltää silmänilmaisimet ja nenänilmaisimet kasvoihin. Toisin sanoen nämä syttyvät, kun edellisen kerroksen silmänilmaisimet ja nenänilmaisimet käynnistyvät oikealla kuviolla. Nämä ovat erittäin hyviä etsimään tietyntyyppisiä kasvoja: jos yksi tai useampi niistä syttyy, tuloskerrasi tulisi ilmoittaa, että kasvot ovat läsnä.

Tämä on hyödyllistä, koska kasvontunnistimet on helppo rakentaa silmänilmaisimista ja nenänilmaisimista, mutta todella vaikea rakentaa pikselien voimakkuudesta.

Joten jokainen kerros vie sinut kauemmas raakapikseleistä ja lähemmäksi lopullista tavoitettasi (esim. kasvojentunnistus tai väylän tunnistus).


valikoituja muita kysymyksiä

”Miksi jotkut tulotason kerrokset on kytketty piilotettuun kerrokseen ja jotkut eivät?”

Verkkoon kytkettyjä solmuja kutsutaan ”bias” -solmuiksi. Siellä on todella mukava selitys täällä . Lyhyt vastaus on, että he ”pitävät sieppaustermeistä regressiossa.

” Missä ovatko kuvan esimerkin ”silmänilmaisimet” kuvat peräisin? ”

En ole tarkistanut tarkasti niitä linkitettyjä kuvia, mutta yleensä nämä visualisoinnit näyttävät joukon pikselit tulokerroksessa, jotka maksimoivat vastaavan hermosolun aktiivisuuden. Joten jos ajattelemme hermosolua silmänilmaisimena, tämä on kuva, jota hermosolu pitää silmänmuotoisimpana. (mäen kiipeily) -menetelmä.

tässä artikkelissa jotkut Google-ihmiset, joilla on yksi maailman suurimmista hermoverkoista, osoittavat. ”kasvojentunnistimen” hermosolu ja ”kissailmaisimen” hermosolu tällä tavalla, samoin kuin toinen tapa: Ne näyttävät myös todelliset kuvat , jotka aktivoivat hermosolujen voimakkaimmin (kuva 3, kuva 16). Toinen lähestymistapa on mukava, koska se osoittaa verkon joustavuuden ja epälineaarisuuden – nämä korkean tason ”ilmaisimet” ovat herkkiä kaikille näille kuville, vaikka ne eivät näytä erityisen samanlaisilta pikselitasolla.


Kerro minulle, jos jotain tässä on epäselvää tai jos sinulla on vielä kysyttävää.

Kommentit

  • Onko siis määritelty vain yksi algoritmi jokaiselle tietyn kerroksen solmulle ja painot tekevät niistä lähdöt erilaisiksi? Vai voitko ohjelmoida jokaisen kerroksen solmun erilaiseksi?
  • @GeorgeMcDowd tämä saa avainkysymyksen: tarkastelemalla pikselit ja väylien tunnistaminen on vaikeaa, kuten ehdotit. Onneksi pikselien tarkastelu ja reunojen löytäminen on helppoa – että ’ s kaikki ensimmäinen piilotettu kerros yrittää tehdä. Seuraava kerros yrittää tehdä päätelmiä reunojen perusteella, mikä on paljon helpompaa kuin yrittää tehdä se pikselien perusteella.
  • SO: n pitäisi antaa sinulle jotain muuta palkintoa (paitsi pisteitä) tähän vastaukseen käyttämästäsi ajasta ja vaivasta!
  • @JoshuaEnfield Mielestäni logiikka vuonna 1980 ’ s oli yhdistelmä siitä, että ne olivat samanlaisia kuin ihmiset ajattelivat aivojen toimivan, että ne olivat erilainen kaikkialla ja että arvot olivat rajattuja kuten mainitsit. Siitä lähtien ihmiset ovat huomanneet, että f(x) = max(x, 0) (oikotettu lineaarinen yksikkö ” ”) on usein toimii paremmin, vaikka sillä ei ’ ole monia näistä ominaisuuksista.
  • Väyläesimerkki ja toimintaketju vain naulasivat sen. Älä ’ ymmärrä, miksi oppikirjat eivät ’ voi olla tätä kuvaavaa.

Vastaus

Yritän lisätä intuitiiviseen toimintakuvaukseen …

Hyvä intuitiivinen tapa ajatella hermoverkkoa on ajatella Lineaarinen regressio vie joitain syötteitä ja keksi lineaarisen mallin, joka ottaa kukin tuloarvo kertaa jonkin mallin optimaalisen painotuskertoimen ja yrittää kartoittaa näiden tulosten summan lähdön vasteeseen, joka on läheisesti vastaa todellista tulosta. Kertoimet määritetään etsimällä arvot, jotka minimoivat jonkin verran virhemittaria halutun lähtöarvon ja mallin oppiman arvon välillä. Toinen tapa sanoa on, että lineaarinen malli yrittää luoda kerroinkertoimia kutakin tuloa varten ja summaat ne kaikki yrittääksesi määrittää suhde (moninkertaisen) tulon ja (tyypillisesti yhden) ulostulon val ues. Samaa mallia voidaan melkein ajatella hermoverkon peruselementtinä; yhden yksikön perceptroni.

Mutta yhden yksikön perceptronissa on vielä yksi kappale, joka käsittelee painotetun datan summan epälineaarisesti. Se käyttää tyypillisesti puristustoimintoa (sigmoid tai tanh) tämän saavuttamiseksi. Joten sinulla on piilotetun kerroksen perusyksikkö, joka on lohko, joka laskee yhteen painotettujen panosten joukon – se siirtää sitten yhteenlasketun vastauksen epälineaariseen toimintoon (piilokerroksen) ulostulosolmuvasteen luomiseksi. Biasyksikkö on aivan kuten lineaarisessa regressiossa, vakio offset, joka lisätään kuhunkin käsiteltävään solmuun. Epälineaarisen käsittelylohkon takia et ole enää rajoitettu vain lineaarisiin vastauksiin (kuten lineaarisen regressiomallin yhteydessä).

Ok, mutta kun monet yksittäisistä perceptronyksiköistä työskentelevät yhdessä, kukin voi olla eri tulopainokertoimet ja erilaiset vasteet (vaikka KAIKKI prosessoi saman tulojoukon samalla ei-lineaarisella lohkolla, joka on aiemmin kuvattu). Vastaukset tekee erilaisista, että jokaisella on eri kerroinpainot, jotka hermoverkko oppii harjoittelun avulla (joissakin muodoissa on kaltevuuslasku). Kaikkien perceptronien tulos käsitellään sitten uudelleen ja siirretään ulostulokerrokseen samalla tavalla kuin yksittäiset lohkot käsiteltiin. Kysymys kuuluu sitten, kuinka oikeat painot määritetään kaikille lohkoille?

Yleinen tapa oppia oikeat painot on aloittaa satunnaispainoilla ja mitata todellisen todellisen tuotoksen ja opitun välinen virhereaktio mallin ulostulo. Virhe kulkee tyypillisesti taaksepäin verkon läpi, ja takaisinkytkentäalgoritmi lisää tai pienentää näitä painoja erikseen suhteessa virheeseen. Verkko toistaa toistuvasti siirtymällä eteenpäin, mittaamalla lähtövasteen, päivittämällä sitten (siirtämällä taaksepäin painon säätöjä) ja korjaamalla painot, kunnes saavutetaan jokin tyydyttävä virhetaso. Siinä vaiheessa sinulla on regressiomalli, joka voi olla joustavampi kuin lineaarinen regressiomalli, sitä kutsutaan yleisesti universaaliksi funktion approksimaattoriksi.

Yksi tapa, joka todella auttoi minua oppimaan, miten hermoverkko todella toimii, on tutkia hermoverkon toteutuksen koodia ja rakentaa se. Yksi parhaista peruskoodiselvityksistä löytyy (vapaasti saatavilla olevan) ”The Scientist and Engineers DSP” -sivun hermoverkkoluvusta. 26. Se on kirjoitettu enimmäkseen hyvin peruskielellä (mielestäni se oli fortran), joka todella auttaa sinua näkemään mitä tapahtuu.

Vastaa

Aion kuvata näkemykseni tästä kahdessa vaiheessa: syöttö-piilotettu vaihe ja piilotettu-lähtö-vaihe. Suoritan ensin piilotettu-ulostulo-vaiheen, koska se tuntuu vähemmän mielenkiintoiselta (minulle).

Piilotettu-lähtö

Piilotetun kerroksen ulostulo voi olla erilainen, mutta oletetaan nyt, että ne tulevat ulos sigmoidiset aktivointitoiminnot. Joten ne ovat arvoja välillä 0 ja 1, ja monille tuloille ne voivat olla vain 0 ”s ja 1” s.

Haluan ajatella näiden piilotettujen neuronien ”lähtöjen ja ulostulokerroksen välistä muutosta vain käännöksenä (kielellisessä mielessä, ei geometrisessa mielessä). Tämä on varmasti totta, jos muunnos on kääntyvä , ja jos ei, niin jotain menetettiin käännöksessä. Mutta sinulla on pohjimmiltaan vain piilotettujen hermosolujen ulostulot eri näkökulmasta.

Sisään piilotettu

Sanotaan, että sinulla on 3 tulohermoneuroa (vain jotta voin helposti kirjoita yhtälöt tähän) ja piilotettuja neuroneja. Jokainen piilotettu neuroni saa syötteenä painotetun summan syötteistä, joten esimerkiksi ehkä

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3) 

Tämä tarkoittaa, että hidden_1 -arvo on hyvin herkkä arvolle input_1, ei lainkaan herkkä input_2: lle ja vain hieman herkkä input_3.

Voit siis sanoa, että hidden_1 sieppaa syötteen tietyn aspektin , jota voit kutsua nimellä input_1 on tärkeä ”näkökohta.

Tulos lähteestä hidden_1 muodostetaan yleensä johtamalla tulo jonkin toiminnon läpi, joten sanotaan ”s sanotaan, että käytät sigmoid -funktiota. Tämä toiminto saa arvot välillä 0 ja 1; joten ajattele sitä kytkimenä, joka sanoo, että joko input_1 on tärkeä tai se ei ole ”t”.

Joten piilotettu kerros tekee näin! Se poimii syötetilan näkökohdat tai ominaisuudet .

Nyt myös painot voivat olla negatiivisia! Mikä tarkoittaa, että saat näkökohtia, kuten ”input_1 on tärkeä, MUTTA MYÖS input_2 poistaa tärkeyden”:

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3) 

tai input_1 ja input_3 on ”jaettu” merkitys:

hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3) 

Lisää geometriaa

Jos tiedät joitain lineaarinen algebra, voit ajatella geometrisesti heijastamalla tietyissä suunnissa. Yllä olevassa esimerkissä heijastin input_1 -suuntaa pitkin.

Tarkastellaan seuraavaksi hidden_1 Kun arvo kohdassa input_1 on riittävän suuri, sigmoidiaktivointitoiminnon lähtö pysyy vain arvossa 1, se ei tule suuremmaksi . Toisin sanoen yhä useammilla input_1 ei ole merkitystä tuotokselle. Vastaavasti, jos se liikkuu vastakkaiseen (eli negatiiviseen) suuntaan, pisteen jälkeen tulos ei muutu.

Okei, hieno. Oletetaan kuitenkin, että emme halua herkkyyttä äärettömyyden suuntaan tietyssä suunnassa, ja haluamme sen aktivoituvan vain tietylle rivin alueelle . Tarkoitus, että hyvin negatiivisille arvoille ei ole vaikutusta , ja erittäin positiivisten arvojen kohdalla ei ole vaikutusta, mutta sanojen 5 ja 16 välissä oleville arvoille haluat, että se herää. Tässä käytetään säteittäistä perustoimintoa aktivointitoiminnollesi.

Yhteenveto

Piilotettu taso poimii syöttötilan ominaisuudet, ja ulostulotaso kääntää ne haluttuun kontekstiin. Siinä voi olla paljon enemmän kuin tämä, mitä monikerroksisissa verkoissa ja vastaavissa, mutta tämän ymmärrän toistaiseksi.

MUOKKAA: Tämä sivu upeilla interaktiivisilla kaavioillaan tekee parempaa työtä kuin yllä oleva pitkä ja hankala vastaukseni voisi koskaan tehdä : http://neuralnetworksanddeeplearning.com/chap4.html

Kommentit

  • Kuten OP, olen ’ hämmentynyt piilotetusta kerroksesta hermoverkoissa. Kuinka NN-algoritmi löytää esimerkissäsi piilotettujen_1, piilotettujen_2 ja piilotettujen hermosolujen painot? Ja koska hidden_1, hidden_2 ja hidden_3 ovat peräisin samoista syöttömuuttujista, eikö ’ t painot yhtyisi samaan ratkaisuun?

Vastaus

Otetaan luokittelun tapaus. Lähtökerros yrittää arvioida ehdollisen todennäköisyyden siitä, että otoksesi kuuluu tiettyyn luokkaan, eli kuinka todennäköinen on, että näyte kuuluu tiettyyn luokkaan. Geometrisesti sanottuna kerrosten yhdistäminen epälineaarisesti kynnystoimintojen avulla antaa hermoverkkoille mahdollisuuden ratkaista ei-kuperia ongelmia (puheen tunnistaminen, kohteen tunnistus ja niin edelleen), jotka ovat mielenkiintoisimpia. Toisin sanoen, lähtöyksiköt pystyvät tuottamaan ei-kuperia päätösfunktioita, kuten ne, jotka on kuvattu täällä .

Piilotetuissa tasoissa olevat yksiköt voidaan tarkastella monimutkaisten ominaisuuksien oppimisena tiedoista, joiden avulla lähtökerros pystyy erottamaan luokan paremmin toisesta ja luomaan tarkempia päätöksentekorajoja. Esimerkiksi kasvojentunnistuksen yhteydessä ensimmäisten kerrosten yksiköt oppivat reunan kaltaisia ominaisuuksia (havaitsevat reunat tietyissä suunnissa ja asennoissa) ja ylempi kerros oppii yhdistämään ne kasvojen piirteiden, kuten nenän, suun tai silmien, ilmaisimiksi. Kunkin piilotetun yksikön painot edustavat näitä ominaisuuksia, ja sen lähtö (olettaen, että se on sigmoidi) edustaa todennäköisyyttä, että kyseinen ominaisuus on läsnä otoksessasi.

Yleisesti ottaen tuotoksen ja piilotetut kerrokset riippuvat ongelmasta, jota yrität ratkaista (regressio, luokittelu) ja käyttämästäsi häviöfunktiosta (ristiin entropia, vähiten neliönmuotoiset virheet …)

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *