Programmering

Hva er dyp læring? Algoritmer som etterligner den menneskelige hjerne

Dyp læring definert

Dyp læring er en form for maskinlæring som modellerer mønstre i data som komplekse flerlagsnettverk. Fordi dyp læring er den mest generelle måten å modellere et problem på, har det potensialet til å løse vanskelige problemer - som datasyn og naturlig språkbehandling - som overgår både konvensjonell programmering og andre maskinlæringsteknikker.

Dyp læring kan ikke bare gi nyttige resultater der andre metoder mislykkes, men kan også bygge mer nøyaktige modeller enn andre metoder, og kan redusere tiden det tar å bygge en nyttig modell. Imidlertid krever trening av dype læringsmodeller mye datakraft. En annen ulempe med dyp læring er vanskeligheten med å tolke dype læringsmodeller.

Det definerende kjennetegnet ved dyp læring er at modellen som trenes har mer enn en skjult lag mellom inngangen og utgangen. I de fleste diskusjoner betyr dyp læring å bruke dype nevrale nettverk. Det er imidlertid noen få algoritmer som implementerer dyp læring ved hjelp av andre typer skjulte lag i tillegg til nevrale nettverk.

Dyp læring vs maskinlæring

Jeg nevnte at dyp læring er en form for maskinlæring. Jeg vil referere til ikke-dyp maskinlæring som klassisk maskinlæring, for å samsvare med vanlig bruk.

Generelt kjører klassiske maskinlæringsalgoritmer mye raskere enn dyplæringsalgoritmer; en eller flere CPUer vil ofte være tilstrekkelig til å trene en klassisk modell. Deep learning-modeller trenger ofte maskinvareakseleratorer som GPUer, TPUer eller FPGAer for trening, og også for distribusjon i stor skala. Uten dem ville modellene ta måneder å trene.

For mange problemer vil noen klassiske maskinlæringsalgoritmer produsere en "god nok" modell. For andre problemer har klassiske maskinlæringsalgoritmer ikke fungert veldig bra tidligere.

Dype læringsapplikasjoner

Det er mange eksempler på problemer som for tiden krever dyp læring for å produsere de beste modellene. Naturlig språkbehandling (NLP) er bra.

Høsten 2016 forbedret kvaliteten på Google Translate-produksjonen for engelsk-fransk, engelsk-kinesisk og engelsk-japansk språkpar dramatisk, fra å lage ordsalat til å produsere setninger nær kvaliteten til en profesjonell oversettelse av et menneske. Det som skjedde bak kulissene er at Google Brain og Google Translate-teamene fornyet Google Translate fra å bruke sine gamle setningsbaserte statistiske maskinoversettelsesalgoritmer (en slags klassisk maskinlæring) til å bruke et dypt nevralt nettverk trent med ordinnbedding ved hjelp av Googles TensorFlow-rammeverk. .

Det var ikke et enkelt prosjekt. Det tok mange forskere på doktorgradsnivå måneder med å jobbe med modeller, og tusenvis av GPU-uker for å trene modellene. Det ansporet også Google til å lage en ny type chip, en Tensor Processing Unit (TPU), for å kjøre nevrale nettverk i stor skala for Google Translate.

I tillegg til språkoversettelsesproblemet adressert av Google Translate, inkluderer store NLP-oppgaver automatisk oppsummering, ko-referanseoppløsning, diskursanalyse, morfologisk segmentering, navngitt enhetsgjenkjenning, generering av naturlig språk, forståelse av naturlig språk, tagging av tale, følelser analyse og talegjenkjenning.

Et annet godt eksempel på anvendelse av dyp læring er bildeklassifisering. Fordi levende organismer behandler bilder med sin visuelle cortex, har mange forskere tatt arkitekturen til den visuelle cortex fra pattedyr som en modell for nevrale nettverk designet for å utføre bildegjenkjenning. Den biologiske forskningen går tilbake til 1950-tallet.

Gjennombruddet i det nevrale nettverksfeltet for visjon var Yann LeCuns 1998 LeNet-5, et syv-nivå konvolusjonelle nevrale nettverk (CNN) for gjenkjenning av håndskrevne sifre digitalisert i bilder på 32x32 piksler. For å analysere bilder med høyere oppløsning, må LeNet-5-nettverket utvides til flere nevroner og flere lag.

Dagens beste modeller for dyp bildeklassifisering kan identifisere forskjellige kataloger av objekter med HD-oppløsning i farger. I tillegg til rene dype nevrale nettverk (DNN), bruker noen ganger hybridvisjonsmodeller, som kombinerer dyp læring med klassiske maskinlæringsalgoritmer som utfører spesifikke underoppgaver.

Andre synsproblemer i tillegg til grunnleggende bildeklassifisering som er løst med dyp læring inkluderer bildeklassifisering med lokalisering, gjenkjenning av objekter, objektsegmentering, bildestiloverføring, bildefarging, bildekonstruksjon, bildeoppløsning og bildesyntese.

Bildeklassifisering kan utvides til videoklassifisering ved å trekke ut de enkelte rammene fra en video og klassifisere hver ramme. Oppdagede objekter i videoklipp kan spores fra ramme til ramme.

I følge Goodfellow, Bengio og Courville, som skrev i 2016, har dyp læring blitt brukt med hell for å forutsi hvordan molekyler vil samhandle for å hjelpe farmasøytiske selskaper med å designe nye legemidler, for å søke etter subatomære partikler og for automatisk å analysere mikroskopbilder som ble brukt til å konstruere. et 3D-kart over den menneskelige hjerne.

Deep learning neurale nettverk

Ideene for “kunstige” nevrale nettverk går tilbake til 1940-tallet. Det essensielle konseptet er at et nettverk av kunstige nevroner bygget ut av sammenkoblede terskelbrytere, kan lære å gjenkjenne mønstre på samme måte som en dyrehjerne og nervesystem (inkludert netthinnen) gjør.

Backpropagation

Læringen i dype nevrale nettverk skjer ved å styrke forbindelsen mellom to nevroner når begge er aktive samtidig under trening. I moderne nevrale nettverksprogramvare er dette oftest et spørsmål om å øke vektverdiene for forbindelsene mellom nevroner ved hjelp av en regel som kalles backpropagation of error, backprop eller BP.

Nevroner

Hvordan modelleres nevronene? Hver har en forplantningsfunksjon som transformerer utgangene til de tilkoblede nevronene, ofte med en vektet sum. Utgangen fra forplantningsfunksjonen går til en aktiveringsfunksjon, som utløses når inngangen overskrider en terskelverdi.

Aktiveringsfunksjoner

På 1940- og 1950-tallet brukte kunstige nevroner en trinnaktivering og ble kalt perceptrons. Moderne nevrale nettverk kan si de bruker perceptroner, men de har faktisk jevne aktiveringsfunksjoner, for eksempel logistikk- eller sigmoidfunksjonen, den hyperbolske tangensen og den opprettholdte lineære enheten (ReLU). ReLU er vanligvis det beste valget for rask konvergens, selv om det har et spørsmål om at neuroner "dør" under trening hvis læringsgraden er satt for høyt.

Utgangen fra aktiveringsfunksjonen kan overføres til en utgangsfunksjon for ytterligere forming. Ofte er imidlertid utgangsfunksjonen identitetsfunksjonen, noe som betyr at utgangen fra aktiveringsfunksjonen blir sendt til de nedstrøms tilkoblede nevronene.

Nevrale nettverkstopologier

Nå som vi vet om nevronene, må vi lære om de vanlige nevrale nettverkstopologiene. I et feed-forward-nettverk er nevronene organisert i forskjellige lag: ett inngangslag, et hvilket som helst antall skjulte behandlingslag og ett utgangslag, og utgangene fra hvert lag går bare til neste lag.

I et feed-forward-nettverk med snarveiforbindelser, kan noen tilkoblinger hoppe over ett eller flere mellomlag. I tilbakevendende nevrale nettverk kan nevroner påvirke seg selv, enten direkte eller indirekte gjennom neste lag.

Opplæring

Overvåket læring av et nevralt nettverk gjøres akkurat som enhver annen maskinlæring. Du presenterer nettverket med grupper med treningsdata, sammenligner nettverksutgangen med ønsket utgang, genererer en feilvektor og bruker korreksjoner til nettverket basert på feilvektoren. Batcher av treningsdata som kjøres sammen før du bruker korreksjoner kalles epoker.

For de som er interessert i detaljene, bruker backpropagation gradienten til feilfunksjonen (eller kostnad) med hensyn til modellens vekter og forspenninger for å oppdage riktig retning for å minimere feilen. To ting styrer anvendelsen av korreksjoner: optimaliseringsalgoritmen og læringsfrekvensvariabelen, som vanligvis må være liten for å garantere konvergens og unngå å forårsake døde ReLU-neuroner.

Optimaliserere

Optimaliseringsprogrammer for nevrale nettverk bruker vanligvis en eller annen form for gradient-nedstigningsalgoritme for å drive backpropagation, ofte med en mekanisme for å unngå å bli sittende fast i lokale minima, for eksempel å optimalisere tilfeldig utvalgte mini-batches (Stochastic Gradient Descent) og bruke momentum korreksjoner til gradienten. Noen optimaliseringsalgoritmer tilpasser også læringshastighetene til modellparametrene ved å se på gradienthistorikken (AdaGrad, RMSProp og Adam).

Som med all maskinlæring, må du kontrollere spådommene til nevrale nettverk mot et eget valideringsdatasett. Uten å gjøre det risikerer du å skape nevrale nettverk som bare husker innspillene sine i stedet for å lære å bli generaliserte prediktorer.

Ekte DNN

Et dypt nevralt nettverk for et reelt problem kan ha opptil 10 skjulte lag. Dens topologi kan være enkel eller ganske kompleks.

Jo flere lag i nettverket, jo flere egenskaper kan det gjenkjenne. Dessverre, jo flere lag i nettverket, jo lenger tid tar det å beregne, og jo vanskeligere blir det å trene.

Dyplæringsalgoritmer

Som jeg nevnte tidligere, gjøres mest dyp læring med dype nevrale nettverk. Konvolusjonelle nevrale nettverk (CNN) brukes ofte til maskinsyn. Gjentatte nevrale nettverk (RNN) brukes ofte til naturlig språk og annen sekvensbehandling, i likhet med Long Short-Term Memory (LSTM) nettverk og oppmerksomhetsbaserte nevrale nettverk. Tilfeldige skoger, også kjent som tilfeldige beslutningsskoger, som ikke er nevrale nettverk, er nyttige for en rekke klassifiserings- og regresjonsproblemer.

CNN nevrale nettverk

Konvolusjonelle nevrale nettverk bruker vanligvis konvolusjons-, pooling-, ReLU-, fullt tilkoblede og tapslag for å simulere en visuell cortex. Konvolusjonslaget tar i utgangspunktet integralene i mange små overlappende regioner. Bassenglaget utfører en form for ikke-lineær nedprøving. ReLU-lag bruker den ikke-mettende aktiveringsfunksjonen f (x) = maks (0, x). I et fullt koblet lag har nevronene forbindelser til alle aktiveringer i forrige lag. Et tapslag beregner hvordan nettverksopplæringen straffer avviket mellom de forutsagte og sanne etikettene, ved hjelp av en Softmax- eller kryss-entropi-tapfunksjon for klassifisering, eller en euklidisk tapfunksjon for regresjon.

RNN, LSTM og oppmerksomhetsbaserte nevrale nettverk

I feed-forward nevrale nettverk flyter informasjon fra inngangen, gjennom de skjulte lagene, til utgangen. Dette begrenser nettverket til å håndtere en enkelt stat om gangen.

I tilbakevendende nevrale nettverk sykler informasjonen gjennom en sløyfe, som gjør at nettverket kan huske nylige tidligere utganger. Dette muliggjør analyse av sekvenser og tidsserier. RNN-er har to vanlige problemer: eksploderende gradienter (lett løst ved å klemme gradienter) og forsvinnende gradienter (ikke så lett å fikse).

I LSTM er nettverket i stand til å glemme (gating) tidligere informasjon eller huske det, i begge tilfeller ved å endre vekter. Dette gir en LSTM effektivt både langtids- og kortsiktig minne og løser det forsvinnende gradientproblemet. LSTM kan håndtere sekvenser med hundrevis av tidligere innganger.

Oppmerksomhetsmoduler er generaliserte porter som legger vekt på en vektor av innganger. En hierarkisk nevral oppmerksomhetskoder bruker flere lag med oppmerksomhetsmoduler for å håndtere titusenvis av tidligere innganger.

Tilfeldige skoger

En annen slags dyplæringsalgoritme - ikke et dypt nevralt nettverk - er Random Forest, eller Random Decision Forest. En tilfeldig skog er konstruert fra mange lag, men i stedet for nevroner er den konstruert fra beslutningstrær, og gir et statistisk gjennomsnitt (modus for klassifisering eller middel for regresjon) av prediksjonene til de enkelte trærne. De randomiserte aspektene ved tilfeldige skoger er bruken av bootstrap-aggregering (a.k.a. bagging) for individuelle trær og tar tilfeldige delmengder av funksjonene.

Dype læringsrammer

Mens du kan skrive dyp læringsprogrammer fra de første prinsippene, er det langt mer effektivt å bruke rammer for dyp læring, spesielt med tanke på at de er optimalisert for bruk med GPUer og andre akseleratorer. Det fremtredende rammeverket er TensorFlow, som stammer fra Google. Den favoriserte API-en på høyt nivå for TensorFlow er Keras, som også kan brukes med andre back-end-rammer.

PyTorch, fra Facebook og andre, er et sterkt alternativ til TensorFlow, og har skillet mellom å støtte dynamiske nevrale nettverk, der topologien i nettverket kan endres fra epoke til epoke. Fastai er et høyt nivå tredjeparts-API som bruker PyTorch som en back-end.

MXNet, fra Amazon og andre, er et annet sterkt alternativ til TensorFlow, med krav om bedre skalerbarhet. Gluon er det foretrukne tvingende API på høyt nivå for MXNet.

Chainer, fra IBM, Intel og andre, var på noen måter inspirasjonen til PyTorch, gitt at den definerer det nevrale nettverket ved å kjøre og støtter dynamiske nevrale nettverk.

Mens alle rammene nevnt ovenfor først og fremst er Python, er Deeplearning4j (DL4J), opprinnelig fra Skymind og nå et Apache-prosjekt, primært Java og Scala. DL4J er kompatibel med Apache Spark og Hadoop.

ONNX ble opprinnelig foreslått som et åpent økosystem for utskiftbare AI-modeller. ONNX har nå en kjøretid i tillegg til utvekslingsfilformatet.

$config[zx-auto] not found$config[zx-overlay] not found