Vad är djupinlärning? Algoritmer som efterliknar den mänskliga hjärnan

Djupinlärning definierad

Djupinlärning är en form av maskininlärning som modellerar mönster i data som komplexa nätverk med flera lager. Eftersom djupinlärning är det mest allmänna sättet att modellera ett problem, har det potentialen att lösa svåra problem - som datorvision och naturlig språkbehandling - som överträffar både konventionell programmering och andra maskininlärningstekniker.

Djupinlärning kan inte bara ge användbara resultat där andra metoder misslyckas utan kan också bygga mer exakta modeller än andra metoder och kan minska tiden som krävs för att bygga en användbar modell. Träning av djupinlärningsmodeller kräver dock mycket datorkraft. En annan nackdel med djupinlärning är svårigheten att tolka djupinlärningsmodeller. 

Det definierande kännetecknet för djupinlärning är att modellen som tränas har mer än ett dolt lager mellan ingången och utgången. I de flesta diskussioner betyder djupt lärande att använda djupa neurala nätverk. Det finns dock några algoritmer som implementerar djup inlärning med andra typer av dolda lager förutom neurala nätverk.

Djupinlärning kontra maskininlärning

Jag nämnde att djupt lärande är en form av maskininlärning. Jag kommer att hänvisa till icke-djup maskininlärning som klassisk maskininlärning , för att överensstämma med vanlig användning.

Generellt går klassiska maskininlärningsalgoritmer mycket snabbare än djupinlärningsalgoritmer; en eller flera processorer är ofta tillräckliga för att utbilda en klassisk modell. Deep learning-modeller behöver ofta hårdvaruacceleratorer som GPU, TPU eller FPGA för träning och även för distribution i stor skala. Utan dem skulle modellerna ta månader att träna.

För många problem kommer någon klassisk maskininlärningsalgoritm att producera en "tillräckligt bra" -modell. För andra problem har klassiska algoritmer för maskininlärning inte fungerat så bra tidigare.

Applikationer för djupinlärning

Det finns många exempel på problem som för närvarande kräver djup inlärning för att producera de bästa modellerna. Naturlig språkbehandling (NLP) är bra.

Hösten 2016 förbättrades kvaliteten på Google Translate-produktionen för engelska-franska, engelska-kinesiska och engelska-japanska språkpar dramatiskt, från att skapa ordsallad till att producera meningar nära kvaliteten på en professionell översättning av en människa. Det som hände bakom kulisserna är att Google Brain- och Google Translate-teamen moderniserade Google Translate från att använda sina gamla fraserbaserade statistiska maskinöversättningsalgoritmer (en typ av klassisk maskininlärning) till att använda ett djupt neurala nätverk utbildat med ordinbäddningar med Googles TensorFlow-ramverk. .

Det var inte ett enkelt projekt. Det tog många forskare på forskarnivå månader att arbeta med modeller och tusentals GPU-veckor för att träna modellerna. Det uppmuntrade också Google att skapa en ny typ av chip, en Tensor Processing Unit (TPU), för att köra neurala nätverk i stor skala för Google Translate.

Förutom det språköversättningsproblem som Google Translate behandlar, inkluderar stora NLP-uppgifter automatisk sammanfattning, co-referensupplösning, diskursanalys, morfologisk segmentering, namngiven enhetsigenkänning, generering av naturligt språk, förståelse av naturligt språk, taggning av tal, tal analys och taligenkänning.

Ett annat bra exempel på tillämpning av djupinlärning är bildklassificering. Eftersom levande organismer bearbetar bilder med sin visuella cortex, har många forskare tagit arkitekturen hos däggdjursvisuella cortex som en modell för neurala nätverk utformade för att utföra bildigenkänning. Den biologiska forskningen går tillbaka till 1950-talet.

Genombrottet i det neurala nätverksfältet för vision var Yann LeCuns 1998 LeNet-5, ett sju-nivå fällt neuralt nätverk (CNN) för igenkänning av handskrivna siffror digitaliserade i 32x32 pixelbilder. För att analysera bilder med högre upplösning måste LeNet-5-nätverket utvidgas till fler nervceller och fler lager.

Dagens bästa modeller för djup bildklassificering kan identifiera olika kataloger av objekt med HD-upplösning i färg. Förutom rena djupa neurala nätverk (DNN) använder ibland människor hybridvisionsmodeller, som kombinerar djupinlärning med klassiska maskininlärningsalgoritmer som utför specifika deluppgifter.

Andra synproblem förutom grundläggande bildklassificering som har lösts med djupinlärning inkluderar bildklassificering med lokalisering, objektdetektering, objektsegmentering, bildstilsöverföring, bildfärgning, bildrekonstruktion, bildsupplösning och bildsyntes.

Bildklassificering kan utvidgas till videoklassificering genom att extrahera de enskilda ramarna från en video och klassificera varje bildruta. Upptäckta objekt i videoklipp kan spåras från bild till bild.

Enligt Goodfellow, Bengio och Courville, skrivande 2016, har djupt lärande använts framgångsrikt för att förutsäga hur molekyler kommer att interagera för att hjälpa läkemedelsföretag att designa nya läkemedel, att söka efter subatomära partiklar och att automatiskt analysera mikroskopbilder som används för att konstruera en 3D-karta över den mänskliga hjärnan.

Neurala nätverk med djupt lärande

Idéerna för ”artificiella” neurala nätverk går tillbaka till 1940-talet. Det väsentliga konceptet är att ett nätverk av konstgjorda nervceller byggda av sammankopplade tröskelomkopplare kan lära sig att känna igen mönster på samma sätt som en djurhjärna och nervsystem (inklusive näthinnan) gör.

Backpropagation

Lärandet i djupa neurala nätverk sker genom att stärka sambandet mellan två nervceller när båda är aktiva samtidigt under träningen. I modern neuronal nätverksprogramvara är detta oftast en fråga om att öka viktvärdena för förbindelserna mellan nervceller med en regel som kallas backpropagation of error , backprop eller BP.

Neuroner

Hur modelleras neuronerna? Var och en har en utbredningsfunktion som omvandlar utgångarna från de anslutna nervcellerna, ofta med en vägd summa. Utgången från utbredningsfunktionen övergår till en aktiveringsfunktion, som utlöses när dess inmatning överstiger ett tröskelvärde.

Aktiveringsfunktioner

På 1940- och 1950-talet använde konstgjorda neuroner en stegaktiveringsfunktion och kallades perceptroner . Moderna neurala nätverk kan säga att de använder perceptroner, men de har faktiskt smidiga aktiveringsfunktioner, såsom logistik- eller sigmoidfunktionen, den hyperboliska tangenten och den rättade linjära enheten (ReLU). ReLU är vanligtvis det bästa valet för snabb konvergens, även om det har en fråga om att nervceller "dör" under träning om inlärningshastigheten är inställd för hög.

Utgången från aktiveringsfunktionen kan passera till en utgångsfunktion för ytterligare formning. Ofta är dock utgångsfunktionen identitetsfunktionen, vilket innebär att utgången från aktiveringsfunktionen skickas till de nedströms anslutna nervcellerna.

Neurala nätverkstopologier

Nu när vi känner till neuronerna måste vi lära oss om de vanliga neurologiska nätverkstopologierna. I ett matningsnätverk organiseras neuronerna i olika lager: ett inmatningsskikt, valfritt antal dolda bearbetningsskikt och ett utgående lager, och utmatningarna från varje lager går bara till nästa lager.

I ett matningsnätverk med genvägsanslutningar kan vissa anslutningar hoppa över ett eller flera mellanliggande lager. I återkommande neurala nätverk kan neuroner påverka sig själva, antingen direkt eller indirekt genom nästa lager.

Träning

Övervakat lärande av ett neuralt nätverk görs precis som alla andra maskininlärningar. Du presenterar nätverket med grupper av träningsdata, jämför nätverksutmatningen med önskad utgång, genererar en felvektor och tillämpar korrigeringar i nätverket baserat på felvektorn. Massor av träningsdata som körs tillsammans innan korrigeringar tillämpas kallas epoker.

För dem som är intresserade av detaljerna använder backpropagation felgradens (eller kostnad) -funktionens gradient med avseende på modellens vikter och förspänningar för att upptäcka rätt riktning för att minimera felet. Två saker styr tillämpningen av korrigeringar: optimeringsalgoritmen och inlärningshastighetsvariabeln, som vanligtvis måste vara liten för att garantera konvergens och undvika att orsaka döda ReLU-neuroner.

Optimerare

Optimizers för neurala nätverk använder vanligtvis någon form av gradientnedstigningsalgoritm för att driva backpropagation, ofta med en mekanism för att undvika att fastna i lokala minima, såsom att optimera slumpmässigt utvalda minibatcher (Stochastic Gradient Descent) och applicera momentumkorrigeringar på lutningen . Vissa optimeringsalgoritmer anpassar också inlärningshastigheterna för modellparametrarna genom att titta på gradienthistoriken (AdaGrad, RMSProp och Adam).

Som med all maskininlärning måste du kontrollera prognoserna för det neurala nätverket mot en separat valideringsdatauppsättning. Utan att göra det riskerar du att skapa neurala nätverk som bara lagrar deras ingångar utan att lära sig att bli generaliserade prediktorer.

Riktiga DNN

Ett djupt neuralt nätverk för ett verkligt problem kan ha upp till 10 dolda lager. Dess topologi kan vara enkel eller ganska komplex.

Ju fler lager i nätverket, desto fler egenskaper kan det känna igen. Tyvärr, ju fler lager i nätverket, desto längre tid tar det att beräkna, och desto svårare blir det att träna.

Djupinlärningsalgoritmer

Som jag nämnde tidigare görs mest djupinlärning med djupa neurala nätverk. Konvolutionsneurala nätverk (CNN) används ofta för maskinsyn. Återkommande neurala nätverk (RNN) används ofta för naturligt språk och annan sekvensbehandling, liksom LSTM-nätverk (Long Short-Term Memory) och uppmärksamhetsbaserade neurala nätverk. Slumpmässiga skogar, även kända som slumpmässiga beslutskogar, som inte är neurala nätverk, är användbara för en rad klassificerings- och regressionsproblem.

Neurala CNN-nätverk

Convolutional neurala nätverk använder vanligtvis convolutional, pooling, ReLU, fullt anslutna och förlustskikt för att simulera en visuell cortex. Konvolutionsskiktet tar i princip integralerna i många små överlappande regioner. Poolskiktet utför en form av icke-linjär nedprovtagning. ReLU-lager använder den icke-mättande aktiveringsfunktionen f(x) = max(0,x). I ett helt anslutet lager har neuronerna kopplingar till alla aktiveringar i föregående lager. Ett förlustskikt beräknar hur nätverksutbildningen straffar avvikelsen mellan de förutsagda och sanna etiketterna med hjälp av en Softmax- eller korsentropiförlustfunktion för klassificering eller en euklidisk förlustfunktion för regression.

RNN, LSTM och uppmärksamhetsbaserade neurala nätverk

I framåtneurala nätverk flyter information från ingången, genom de dolda lagren, till utgången. Detta begränsar nätverket till att hantera en enda stat åt gången.

I återkommande neurala nätverk cyklar informationen genom en slinga, vilket gör att nätverket kan komma ihåg de senaste tidigare utgångarna. Detta möjliggör analys av sekvenser och tidsserier. RNN har två vanliga problem: exploderande lutningar (lätt fixade genom att klämma lutningarna) och försvinnande lutningar (inte så lätt att fixa).

I LSTM kan nätverket glömma (gating) tidigare information eller komma ihåg det, i båda fallen genom att ändra vikter. Detta ger effektivt en LSTM både långtids- och korttidsminne och löser det försvinnande gradientproblemet. LSTM kan hantera sekvenser med hundratals tidigare ingångar.

Uppmärksamhetsmoduler är generaliserade grindar som tillämpar vikter på en vektor av ingångar. En hierarkisk neural uppmärksamhet kodare använder flera lager av uppmärksamhet moduler för att hantera tiotusentals tidigare ingångar.

Slumpmässiga skogar

En annan typ av djupinlärningsalgoritm - inte ett djupt neurala nätverk - är Random Forest eller Random Decision Forest. En slumpmässig skog är konstruerad av många lager, men istället för neuroner är den konstruerad av beslutsträd och ger ett statistiskt medelvärde (klassificeringsläge eller medelvärde för regression) av förutsättningarna för de enskilda träden. De randomiserade aspekterna av slumpmässiga skogar är användningen av bootstrap-aggregering (aka bagging ) för enskilda träd och tar slumpmässiga delmängder av funktionerna.

Ramar för djupinlärning

Medan du kan skriva djupinlärningsprogram från de första principerna är det mycket effektivare att använda ramverk för djupinlärning, särskilt med tanke på att de har optimerats för användning med GPU: er och andra acceleratorer. Det främsta ramverket är TensorFlow, som härstammar från Google. Det gynnade högnivå-API för TensorFlow är Keras, som också kan användas med andra back-end-ramar.

PyTorch, från Facebook och andra, är ett starkt alternativ till TensorFlow och har åtskillnaden mellan att stödja dynamiska neurala nätverk, där topologin i nätverket kan förändras från epok till epok. Fastai är ett tredjeparts-API på hög nivå som använder PyTorch som en back-end.

MXNet, från Amazon och andra, är ett annat starkt alternativ till TensorFlow, med krav på bättre skalbarhet. Gluon är det föredragna högnivå-tvingande API för MXNet.

Chainer, från IBM, Intel och andra, var på vissa sätt inspiration för PyTorch, med tanke på att det definierar det neurala nätverket genom körning och stöder dynamiska neurala nätverk.

Medan alla ramar som nämns ovan huvudsakligen är Python, är Deeplearning4j (DL4J), ursprungligen från Skymind och nu ett Apache-projekt, främst Java och Scala. DL4J är kompatibel med Apache Spark och Hadoop.

ONNX föreslogs ursprungligen som ett öppet ekosystem för utbytbara AI-modeller. ONNX har nu en runtime utöver filformatet för utbyte.