Programmering

Hvad er dyb læring? Algoritmer, der efterligner den menneskelige hjerne

Dyb læring defineret

Dyb læring er en form for maskinlæring, der modellerer mønstre i data som komplekse netværk i flere lag. Fordi dyb læring er den mest generelle måde at modellere et problem på, har det potentialet til at løse vanskelige problemer - såsom computersyn og naturlig sprogbehandling - der overgår både konventionel programmering og andre maskinlæringsteknikker.

Dyb læring kan ikke kun producere nyttige resultater, hvor andre metoder mislykkes, men kan også bygge mere nøjagtige modeller end andre metoder og kan reducere den tid, det tager at bygge en nyttig model. Uddannelse af dyb læringsmodeller kræver dog meget computerkraft. En anden ulempe ved dyb læring er vanskeligheden ved at fortolke dyb læringsmodeller.

Det afgørende kendetegn ved dyb læring er, at den model, der trænes, har mere end en skjult lag mellem input og output. I de fleste diskussioner betyder dyb læring at bruge dybe neurale netværk. Der er dog et par algoritmer, der implementerer dyb læring ved hjælp af andre former for skjulte lag udover neurale netværk.

Dyb læring vs. maskinindlæring

Jeg nævnte, at dyb læring er en form for maskinelæring. Jeg vil henvise til ikke-dyb maskinlæring som klassisk maskinindlæring, for at overholde almindelig brug.

Generelt kører klassiske maskinlæringsalgoritmer meget hurtigere end dyb læringsalgoritmer; en eller flere CPU'er er ofte tilstrækkelige til at træne en klassisk model. Deep learning-modeller har ofte brug for hardwareacceleratorer såsom GPU'er, TPU'er eller FPGA'er til træning og også til implementering i stor skala. Uden dem tog modellerne måneder at træne.

For mange problemer vil nogle klassiske maskinlæringsalgoritmer producere en ”god nok” model. For andre problemer har klassiske maskinlæringsalgoritmer ikke fungeret rigtig godt tidligere.

Deep learning applikationer

Der er mange eksempler på problemer, der i øjeblikket kræver dyb læring for at producere de bedste modeller. Naturlig sprogbehandling (NLP) er god.

I efteråret 2016 forbedredes kvaliteten af ​​Google Translate-output for engelsk-fransk, engelsk-kinesisk og engelsk-japansk sprogpar pludselig dramatisk, fra at skabe ordsalat til at producere sætninger tæt på kvaliteten af ​​en professionel oversættelse af et menneske. Hvad der skete bag kulisserne er, at Google Brain og Google Translate-holdene moderniserede Google Translate fra at bruge sine gamle sætningsbaserede statistiske maskinoversættelsesalgoritmer (en slags klassisk maskinlæring) til at bruge et dybt neuralt netværk, der er trænet med ordindlejringer ved hjælp af Googles TensorFlow-ramme .

Det var ikke et let projekt. Det tog mange forskere på ph.d.-niveau måneders arbejde med modeller og tusinder af GPU-uger for at træne modellerne. Det ansporede også Google til at oprette en ny type chip, en Tensor Processing Unit (TPU), til at køre neurale netværk i målestok for Google Translate.

Ud over det sprogoversættelsesproblem, som Google Translate adresserer, omfatter store NLP-opgaver automatisk opsummering, co-referenceopløsning, diskursanalyse, morfologisk segmentering, navngivet enhedsgenkendelse, generering af naturligt sprog, forståelse af naturligt sprog, tagging af tale, stemning analyse og talegenkendelse.

Et andet godt eksempel på anvendelse af dyb læring er billedklassificering. Fordi levende organismer behandler billeder med deres visuelle cortex, har mange forskere taget arkitekturen i den visuelle cortex fra pattedyr som en model for neurale netværk designet til at udføre billedgenkendelse. Den biologiske forskning går tilbage til 1950'erne.

Gennembruddet i det neurale netværksfelt for vision var Yann LeCuns 1998 LeNet-5, et syv-niveau nedviklede neurale netværk (CNN) til genkendelse af håndskrevne cifre digitaliseret i 32x32 pixelbilleder. For at analysere billeder med højere opløsning skal LeNet-5-netværket udvides til flere neuroner og flere lag.

Dagens bedste modeller for klassificering af dybe billeder kan identificere forskellige kataloger over objekter i HD-opløsning i farve. Ud over rene dybe neurale netværk (DNN) bruger nogle gange hybridvisionsmodeller, som kombinerer dyb læring med klassiske maskinlæringsalgoritmer, der udfører specifikke underopgaver.

Andre synsproblemer udover grundlæggende billedklassifikation, der er løst med dyb læring, inkluderer billedklassifikation med lokalisering, objektsøgning, objektsegmentering, billedstiloverførsel, billedfarvning, billedrekonstruktion, billed-superopløsning og billedsyntese.

Billedklassifikation kan udvides til videoklassificering ved at udtrække de enkelte rammer fra en video og klassificere hver ramme. Registrerede objekter i videoklip kan spores fra ramme til ramme.

Ifølge Goodfellow, Bengio og Courville, der skrev i 2016, er dyb læring blevet brugt med succes til at forudsige, hvordan molekyler vil interagere for at hjælpe farmaceutiske virksomheder med at designe nye lægemidler, til at søge efter subatomære partikler og til automatisk at analysere mikroskopbilleder, der bruges til at konstruere et 3-D kort over den menneskelige hjerne.

Deep learning neurale netværk

Idéerne til "kunstige" neurale netværk går tilbage til 1940'erne. Det væsentlige koncept er, at et netværk af kunstige neuroner bygget ud af sammenkoblede tærskelafbrydere kan lære at genkende mønstre på samme måde som en dyrehjerne og nervesystem (inklusive nethinden) gør.

Backpropagation

Læringen i dybe neurale netværk sker ved at styrke forbindelsen mellem to neuroner, når begge er aktive på samme tid under træning. I moderne neuralt netværkssoftware er dette oftest et spørgsmål om at øge vægtværdierne for forbindelserne mellem neuroner ved hjælp af en regel kaldet backpropagation af fejl, backprop eller BP.

Neuroner

Hvordan modelleres neuronerne? Hver har en formeringsfunktion, der transformerer output fra de tilsluttede neuroner, ofte med en vægtet sum. Udbredelsen af ​​udbredelsesfunktionen overgår til en aktiveringsfunktion, der udløses, når dens indgang overstiger en tærskelværdi.

Aktiveringsfunktioner

I 1940'erne og 1950'erne brugte kunstige neuroner en trinaktiveringsfunktion og blev kaldt perceptrons. Moderne neurale netværk kan sige de bruger perceptroner, men de har faktisk glatte aktiveringsfunktioner, såsom logistik- eller sigmoidfunktionen, den hyperbolske tangens og den opretstående lineære enhed (ReLU). ReLU er normalt det bedste valg til hurtig konvergens, selvom det har et spørgsmål om, at neuroner "dør" under træning, hvis læringshastigheden er indstillet for høj.

Outputtet fra aktiveringsfunktionen kan overføres til en outputfunktion for yderligere formgivning. Ofte er outputfunktionen imidlertid identitetsfunktionen, hvilket betyder, at output fra aktiveringsfunktionen sendes til de nedstrømsforbundne neuroner.

Neurale netværkstopologier

Nu hvor vi kender neuronerne, er vi nødt til at lære om de almindelige neurale netværkstopologier. I et feed-forward-netværk er neuronerne organiseret i forskellige lag: et inputlag, et vilkårligt antal skjulte behandlingslag og et outputlag, og outputene fra hvert lag går kun til det næste lag.

I et feed-forward-netværk med genvejsforbindelser kan nogle forbindelser springe over et eller flere mellemliggende lag. I tilbagevendende neurale netværk kan neuroner påvirke sig selv, enten direkte eller indirekte gennem det næste lag.

Uddannelse

Overvåget læring af et neuralt netværk udføres ligesom enhver anden maskinindlæring. Du præsenterer netværket med grupper af træningsdata, sammenligner netværksoutputtet med det ønskede output, genererer en fejlvektor og anvender korrektioner til netværket baseret på fejlvektoren. Batcher af træningsdata, der køres sammen, inden der anvendes korrektioner, kaldes epoker.

For dem der er interesseret i detaljerne, bruger backpropagation gradienten af ​​fejlfunktionen (eller omkostningen) med hensyn til modelens vægt og forspænding for at finde den rigtige retning for at minimere fejlen. To ting styrer anvendelsen af ​​korrektioner: Optimeringsalgoritmen og indlæringshastighedsvariablen, som normalt skal være lille for at sikre konvergens og undgå at forårsage døde ReLU-neuroner.

Optimerer

Optimizers til neurale netværk bruger typisk en eller anden form for gradientafstamningsalgoritme til at drive backpropagation, ofte med en mekanisme, der hjælper med at undgå at sidde fast i lokale minima, såsom optimering af tilfældigt udvalgte mini-batches (Stochastic Gradient Descent) og anvendelse momentum korrektioner til gradienten. Nogle optimeringsalgoritmer tilpasser også læringshastighederne for modelparametrene ved at se på gradienthistorikken (AdaGrad, RMSProp og Adam).

Som med al maskinindlæring skal du kontrollere forudsigelserne for det neurale netværk mod et separat valideringsdatasæt. Uden at gøre det risikerer du at oprette neurale netværk, der kun husker deres input i stedet for at lære at blive generaliserede forudsigere.

Ægte DNN'er

Et dybt neuralt netværk for et reelt problem kan have op til 10 skjulte lag. Dens topologi kan være enkel eller ret kompleks.

Jo flere lag i netværket, jo flere egenskaber kan det genkende. Desværre, jo flere lag i netværket, jo længere tid tager det at beregne, og jo sværere bliver det at træne.

Dyb læringsalgoritmer

Som jeg nævnte tidligere, foregår mest dyb læring med dybe neurale netværk. Convolutionsneurale netværk (CNN) bruges ofte til maskinsyn. Tilbagevendende neurale netværk (RNN) bruges ofte til naturligt sprog og anden sekvensbehandling, ligesom Long Short-Term Memory (LSTM) netværk og opmærksomhedsbaserede neurale netværk. Tilfældige skove, også kendt som tilfældige beslutningsskove, som ikke er neurale netværk, er nyttige til en række klassificerings- og regressionsproblemer.

CNN neurale netværk

Konvolutionsneurale netværk bruger typisk foldnings-, pooling-, ReLU-, fuldt tilsluttet og tab af lag til at simulere en visuel cortex. Det foldede lag tager grundlæggende integralerne i mange små overlappende regioner. Puljelaget udfører en form for ikke-lineær nedprøve. ReLU-lag anvender den ikke-mættende aktiveringsfunktion f (x) = maks (0, x). I et fuldt tilsluttet lag har neuronerne forbindelser til alle aktiveringer i det forrige lag. Et tabslag beregner, hvordan netværkstræningen straffer afvigelsen mellem de forudsagte og sande etiketter ved hjælp af en Softmax- eller cross-entropi-tabsfunktion til klassificering eller en euklidisk tabsfunktion til regression.

RNN, LSTM og opmærksomhedsbaserede neurale netværk

I feed-forward neurale netværk strømmer information fra input gennem de skjulte lag til output. Dette begrænser netværket til at håndtere en enkelt tilstand ad gangen.

I tilbagevendende neurale netværk skifter informationen gennem en loop, som gør det muligt for netværket at huske de seneste tidligere output. Dette muliggør analyse af sekvenser og tidsserier. RNN'er har to almindelige problemer: eksploderende gradienter (let løst ved at klemme gradienterne) og forsvindende gradienter (ikke så let at rette).

I LSTM'er er netværket i stand til at glemme (gating) tidligere oplysninger eller huske det, i begge tilfælde ved at ændre vægte. Dette giver effektivt en LSTM både langvarig og kortvarig hukommelse og løser det forsvindende gradientproblem. LSTM'er kan håndtere sekvenser med hundredvis af tidligere input.

Opmærksomhedsmoduler er generaliserede porte, der anvender vægte på en vektor af input. En hierarkisk neural opmærksomhedskoder bruger flere lag af opmærksomhedsmoduler til at håndtere titusinder af tidligere input.

Tilfældige skove

En anden form for dyb læringsalgoritme - ikke et dybt neuralt netværk - er Random Forest eller Random Decision Forest. En tilfældig skov er konstrueret af mange lag, men i stedet for neuroner er den konstrueret af beslutningstræer og udsender et statistisk gennemsnit (forudsætning for klassificering eller middel for regression) af forudsigelserne for de enkelte træer. De randomiserede aspekter af tilfældige skove er brugen af ​​bootstrap-aggregering (aka bagging) for individuelle træer og tage tilfældige undergrupper af funktionerne.

Rammer for dyb læring

Mens du kunne skrive dyb læringsprogrammer ud fra de første principper, er det langt mere effektivt at bruge dyb læringsrammer, især i betragtning af at de er optimeret til brug sammen med GPU'er og andre acceleratorer. Den fremtrædende ramme er TensorFlow, der stammer fra Google. Den foretrukne API på højt niveau til TensorFlow er Keras, som også kan bruges med andre back-end-rammer.

PyTorch, fra Facebook og andre, er et stærkt alternativ til TensorFlow og skelner mellem at støtte dynamiske neurale netværk, hvor topologien i netværket kan ændre sig fra epoke til epoke. Fastai er et tredjeparts-API på højt niveau, der bruger PyTorch som en back-end.

MXNet fra Amazon og andre er et andet stærkt alternativ til TensorFlow med krav om bedre skalerbarhed. Gluon er det foretrukne imperative API på højt niveau til MXNet.

Chainer fra IBM, Intel og andre var på nogle måder inspiration for PyTorch, da det definerer det neurale netværk ved kørsel og understøtter dynamiske neurale netværk.

Mens alle ovennævnte rammer primært er Python, er Deeplearning4j (DL4J), oprindeligt fra Skymind og nu et Apache-projekt, primært Java og Scala. DL4J er kompatibel med Apache Spark og Hadoop.

ONNX blev oprindeligt foreslået som et åbent økosystem for udskiftelige AI-modeller. ONNX har nu en runtime ud over interchange-filformatet.