Hemneurala nätverk. Neurala nätverk: praktisk tillämpning


Många av termerna i neurala nätverk är biologiskt relaterade, så låt oss börja från början:

Hjärnan är en komplex sak, men den kan också delas in i flera huvuddelar och operationer:

Det orsakande medlet kan vara inre(som en bild eller en idé):

Låt oss nu titta på det grundläggande och förenklade delarhjärna:


Hjärnan är i allmänhet som ett kabelnätverk.

Nervcell- den grundläggande kalkylenheten i hjärnan, den tar emot och bearbetar kemiska signaler från andra nervceller, och, beroende på ett antal faktorer, gör antingen ingenting eller genererar en elektrisk impuls, eller Action Potential, som sedan skickar signaler till angränsande genom synapser bundennervceller:

Drömmar, minnen, självreglerande rörelser, reflexer och i allmänhet allt som du tänker eller gör - allt händer tack vare den här processen: miljoner eller till och med miljarder neuroner arbetar på olika nivåer och skapar anslutningar som skapar olika parallella delsystem och representerar en biologisk neural nätverk.

Naturligtvis är allt detta förenklingar och generaliseringar, men tack vare dem kan vi beskriva ett enkelt
neuralt nätverk:

Och för att beskriva det formaliserat med hjälp av en graf:

Några förtydliganden krävs här. Cirklarna är nervceller och linjerna är kopplingarna mellan dem,
och för att inte komplicera i detta skede, relationrepresenterar den direkta förflyttningen av information från vänster till höger... Den första neuronen är för närvarande aktiv och markerad i grått. Vi tilldelade också ett nummer till det (1 om det fungerar, 0 om inte). Siffrorna mellan neuronerna visas viktkommunikation.

Diagrammen ovan visar tidpunkten för nätverket, för en mer exakt visning måste du dela den i tidsintervall:

För att skapa ditt eget neurala nätverk måste du förstå hur vikter påverkar nervceller och hur neuroner tränas. Låt oss ta en kanin (testkanin) som ett exempel och sätt den under förutsättningarna för ett klassiskt experiment.

När en säker luftström riktas mot dem blinkar kaniner, som människor:

Detta beteende kan ritas med grafer:

Som i föregående diagram visar dessa grafer bara det ögonblick då kaninen känner andan och därmed vi kodningwhiff som boolean. Vi beräknar också om den andra neuronen skjuter utifrån viktvärdet. Om det är lika med 1 utlöses sensorisk neuron, vi blinkar; om vikten är mindre än 1 blinkar vi inte: den andra neuronen har begränsa- 1.

Låt oss introducera ytterligare ett element - säkert ljudsignal:

Vi kan modellera kaninintressen så här:

Huvudskillnaden är att vikten är nu noll-så vi fick inte en blinkande kanin, ja, åtminstone inte ännu. Nu ska vi lära kaninen att blinka på kommandot och blanda
irriterande (pip och andetag):

Det är viktigt att dessa händelser äger rum vid olika tidpunkter epok, i grafer kommer det att se ut så här:

Ljudet i sig gör ingenting, men luftflödet får ändå kaninen att blinka, och vi visar detta genom vikterna gånger stimuli (i rött).

Träningkomplexa beteenden kan förenklas som en gradvis förändring i vikt mellan länkade nervceller över tiden.

För att träna kaninen, upprepa stegen:

För de tre första försöken kommer kretsarna att se ut så här:

Observera att vikten för ljudstimulansen växer efter varje upprepning (markerad med rött), detta värde är nu godtyckligt - vi valde 0,30, men antalet kan vara vad som helst, till och med negativt. Efter den tredje repetitionen kommer du inte att märka en förändring i kaninens beteende, men efter den fjärde repetitionen kommer något fantastiskt att hända - beteendet kommer att förändras.

Vi tog bort exponeringen med luft, men kaninen blinkar fortfarande när han hör pipet! Vårt sista diagram kan förklara detta beteende:

Vi tränade kaninen att svara på ljud genom att blinka.


I ett verkligt experiment av detta slag kan det ta mer än 60 repetitioner för att uppnå resultatet.

Nu lämnar vi hjärnans och kaninens biologiska värld och försöker anpassa allt som
lärt sig att skapa ett konstgjort neuralt nätverk. Låt oss börja med en enkel uppgift.

Låt oss säga att vi har en maskin med fyra knappar som matar ut mat när man trycker på rätt.
knappar (väl eller energi om du är en robot). Uppgiften är att ta reda på vilken knapp som ger belöningen:

Vi kan (schematiskt) skildra vad knappen gör när du trycker på den på följande sätt:

Det är bättre att lösa detta problem i sin helhet, så låt oss titta på alla möjliga resultat, inklusive det rätta:


Klicka på den tredje knappen för att få din middag.

För att reproducera ett neuralt nätverk i kod måste vi först skapa en modell eller ett diagram som vi kan kartlägga nätverket med. Här är en graf som passar uppgiften, och den visar också sin biologiska motsvarighet väl:

Detta neurala nätverk tar bara emot input - i det här fallet kommer det att vara uppfattningen om vilken knapp som trycktes ned. Därefter ersätter nätverket ingångsinformationen med vikter och drar en slutsats baserat på tillägget av lagret. Det låter lite förvirrande, men låt oss se hur knappen representeras i vår modell:


Observera att alla vikter är 0, så det neurala nätverket, som en baby, är helt tomt men helt sammankopplat.

Således associerar vi den externa händelsen med ingångsskiktet i det neurala nätverket och beräknar värdet vid dess utgång. Det kan eller kanske inte sammanfaller med verkligheten, men vi kommer att ignorera detta för tillfället och börja beskriva uppgiften på ett datorförståeligt sätt. Låt oss börja med att ange vikterna (vi använder JavaScript):

Var ingångar \u003d; var vikter \u003d; // För enkelhets skull kan dessa vektorer kallas
Nästa steg är att skapa en funktion som samlas inmatningsvärden och vikt och beräknar utgångsvärdet:

FunktionsutvärderingNeuralNetwork (inputVector, weightVector) (var result \u003d 0; inputVector.forEach (function (inputValue, weightIndex) (layerValue \u003d inputValue * weightVector; result + \u003d layerValue;)); return (result.toFixed (2));) / / Det kan verka komplicerat, men allt det gör är att matcha vikt / inmatningspar och lägga till resultatet
Som förväntat, om vi kör den här koden får vi samma resultat som i vår modell eller graf ...

EvaluateNeuralNetwork (ingångar, vikter); // 0,00
Liveexempel: Neural Net 001.

Nästa steg för att förbättra vårt neurala nätverk kommer att vara ett sätt att kontrollera sin egen produktion eller resulterande värden som är jämförbara med den verkliga situationen,
låt oss först koda denna specifika verklighet till en variabel:

För att upptäcka inkonsekvenser (och hur många) lägger vi till en felfunktion:

Error \u003d Reality - Neural Net Output
Med det kan vi utvärdera prestanda för vårt neurala nätverk:

Men ännu viktigare, hur är det med situationer där verkligheten är positiv?

Nu vet vi att vår neurala nätverksmodell inte fungerar (och vi vet hur mycket), bra! Det här är bra eftersom vi nu kan använda felfunktionen för att kontrollera vårt lärande. Men allt detta är vettigt om vi omdefinierar felfunktionen enligt följande:

Fel \u003d Önskad utmatning - Neuralt nettoutgång
En omärklig men så viktig skillnad som tyst visar att vi kommer att göra det
använda tidigare erhållna resultat för jämförelse med framtida åtgärder
(och för träning, som vi kommer att se senare). Detta finns också i verkligheten, komplett
upprepande mönster, så det kan bli en evolutionär strategi (ja, i
flesta fall).

Var ingång \u003d; var vikter \u003d; var önskat Resultat \u003d 1;
Och en ny funktion:

Funktion evaluera NeuralNetError (önskad, faktisk) (retur (önskad - faktisk);) // Efter att ha utvärderat både nätverket och felet skulle vi få: // "Neural Net output: 0.00 Error: 1"
Liveexempel: Neural Net 002.

Låt oss sammanfatta det mellanliggande resultatet... Vi började med en uppgift, klarade det enkel modell i form av ett biologiskt neuralt nätverk och fick ett sätt att mäta dess prestanda i jämförelse med verkligheten eller det önskade resultatet. Nu måste vi hitta ett sätt att korrigera inkonsekvensen - en process som kan ses som lärande för både datorer och människor.

Hur tränar jag ett neuralt nätverk?

Grunden för att lära sig både biologiska och artificiella neurala nätverk är repetition
och inlärningsalgoritmerså vi kommer att arbeta med dem separat. Låt oss börja med
träningsalgoritmer.

I naturen förstås inlärningsalgoritmer som förändringar i fysikaliska eller kemiska
egenskaper hos neuroner efter experiment:

En dramatisk illustration av hur två nervceller förändras över tiden i koden och vår inlärningsalgoritmmodell innebär att vi helt enkelt kommer att förändra något över tiden för att göra vårt liv enklare. Låt oss därför lägga till en variabel för att ange graden av livets lätthet:

Var learningRate \u003d 0,20; // Ju större värde desto snabbare blir inlärningsprocessen :)
Och vilken skillnad gör det?

Detta kommer att ändra vikterna (precis som en kanin!), Speciellt vikten på den produktion vi vill få:

Hur man kodar en sådan algoritm är ditt val, för enkelhets skull lägger jag till en inlärningsfaktor till vikten, här är den som en funktion:

Funktionsinlärning (inputVector, weightVector) (weightVector.forEach (funktion (vikt, index, vikter) (om (inputVector\u003e 0) (vikter \u003d vikt + learningRate;))));)
När den används kommer denna inlärningsfunktion helt enkelt att lägga till vår inlärningsfaktor i viktvektorn aktiv neuron, före och efter inlärningsomgången (eller repetitionen) blir resultaten följande:

// Originalviktsvektor: // Neural nettoutgång: 0,00 Fel: 1 inlärning (inmatning, vikter); // Ny viktvektor: // Neural nettoutmatning: 0,20 Fel: 0,8 // Om det inte är uppenbart är produktionen från neuralnätverket nära 1 (utgång från en kyckling) - det är vad vi ville ha, så vi kan dra slutsatsen att vi flyttar in rätt riktning
Liveexempel: Neural Net 003.

Okej, nu när vi går i rätt riktning kommer den sista biten i detta pussel att implementeras upprepningar.

Det är inte så svårt, i naturen gör vi bara samma sak om och om igen, och i koden anger vi bara antalet repetitioner:

Var försök \u003d 6;
Och implementeringen av funktionen för antalet repetitioner i vårt träningsneurala nätverk kommer att se ut så här:

Funktionståg (försök) (för (i \u003d 0; i< trials; i++) { neuralNetResult = evaluateNeuralNetwork(input, weights); learn(input, weights); } }
Vår slutrapport:

Neural nettoutgång: 0,00 Fel: 1,00 Viktvektor: Neural nettoutgång: 0,20 Fel: 0,80 Viktvektor: Neuralt nettoutgång: 0,40 Fel: 0,60 Viktvektor: Neuralt nettoutmatning: 0,60 Fel: 0,40 Viktvektor: Neuralt nettoutgång: 0,80 Fel : 0,20 Viktvektor: Neural nettoutgång: 1,00 Fel: 0,00 Viktvektor: // Chicken Dinner!
Liveexempel: Neural Net 004.

Nu har vi en viktvektor som bara ger ett resultat (kyckling till middag) om inmatningsvektorn matchar verkligheten (genom att trycka på den tredje knappen).

Så vad är så coolt vi just gjorde?

I det här specifika fallet kan vårt neurala nätverk (efter träning) känna igen ingångsdata och säga, vilket leder till önskat resultat (vi kommer fortfarande att behöva programmera specifika situationer):

Dessutom är det en skalbar modell, leksak och verktyg för vår träning med dig. Vi kunde lära oss något nytt om maskininlärning, neurala nätverk och artificiell intelligens.

Varning för användare:

  • Mekanismen för lagring av de studerade vikterna tillhandahålls inte, så detta neurala nätverk kommer att glömma allt det vet. När du uppdaterar eller kör om koden tar det minst sex framgångsrika försök för att nätverket ska lära sig om du tror att en person eller en maskin kommer att trycka på knapparna i slumpmässig ordning ... Det tar lite tid.
  • Biologiska nätverk för att lära sig viktiga saker har en inlärningshastighet på 1, så det behövs bara en lyckad upprepning.
  • Det finns en inlärningsalgoritm som mycket liknar biologiska nervceller, med ett fängslande namn: widroff-hoff-regel, eller widroff-hoff-utbildning.
  • Neurontrösklar (1 i vårt exempel) och effekter av överanpassning (med ett stort antal repetitioner kommer resultatet att vara större än 1) beaktas inte, men de är mycket viktiga till sin natur och ansvarar för stora och komplexa block av beteendemässiga svar. Samt negativa vikter.

Anteckningar och bibliografi för vidare läsning

Jag har försökt att undvika matematik och hårda termer, men om du är intresserad har vi byggt en perceptron, som definieras som en övervakad inlärningsalgoritm (övervakad inlärning) för dubbla klassificerare - en svår sak.

Hjärnans biologiska struktur är inte ett enkelt ämne, dels på grund av felaktighet, dels på grund av dess komplexitet. Bättre att börja med neurovetenskap (Purves) och kognitiv neurovetenskap (Gazzaniga). Jag har modifierat och anpassat kaninexemplet från Gateway to Memory (Gluck), vilket också är en bra guide till grafvärlden.

En annan stor resurs, En introduktion till neurala nätverk (Gurney), passar alla dina AI-behov.

Nu i Python! Tack till Ilya Andshmidt för att tillhandahålla Python-versionen:

Ingångar \u003d vikter \u003d önskad_resultat \u003d 1 inlärningshastighet \u003d 0,2 försök \u003d 6 def utvärdera_neuralt nätverk (input_array, weight_array): resultat \u003d 0 för i inom intervallet (len (input_array)): lagervärde \u003d input_array [i] * vikt_array [i] resultat + \u003d lagervärde skriv ut ("evaluera_neuralt_nätverk:" + str (resultat)) skriva ut ("vikter:" + str (vikter)) returnera resultat def evaluera_fel (önskat, faktiskt): fel \u003d önskat - faktiskt tryck ("utvärdera_fel:" + str (fel) ) returnera fel def inlärning (input_array, weight_array): skriv ut ("learning ...") för i inom intervallet (len (input_array)): om input_array [i]\u003e 0: weight_array [i] + \u003d learning_rate def train (försök ): för jag inom intervallet (prövningar): neural_net_result \u003d evaluera_neuralt nätverk (ingångar, vikter) lära sig (ingångar, vikter) träna (försök)
Nu på GO! För den här versionen tackar jag Kieran Macher.

Paketets huvudimport ("fmt" "matematik") func main () (fmt.Println ("Skapa ingångar och vikter ...") ingångar: \u003d float64 (0.00, 0.00, 1.00, 0.00) vikter: \u003d float64 (0.00, 0,00, 0,00, 0,00) önskat: \u003d 1,00 learningRate: \u003d 0,20 försök: \u003d 6 tåg (försök, ingångar, vikter, önskat, learningRate)) funk tåg (försök int, ingångar float64, vikter float64, önskad float64, learningRate float64) ( för i: \u003d 1; i< trials; i++ { weights = learn(inputs, weights, learningRate) output:= evaluate(inputs, weights) errorResult:= evaluateError(desired, output) fmt.Print("Output: ") fmt.Print(math.Round(output*100) / 100) fmt.Print("\nError: ") fmt.Print(math.Round(errorResult*100) / 100) fmt.Print("\n\n") } } func learn(inputVector float64, weightVector float64, learningRate float64) float64 { for index, inputValue:= range inputVector { if inputValue > 0.00 (weightVector \u003d weightVector + learningRate)) returviktVector) func utvärdera (inputVector float64, weightVector float64) float64 (resultat: \u003d 0.00 för index, inputValue: \u003d intervall inputVector (layerValue: \u003d inputValue * weightVector result \u003d result + layerValue) return result ) func valuError (önskad float64, faktisk float64) float64 (retur önskad - faktisk)

Du kan hjälpa till och överföra pengar för att utveckla webbplatsen

 

Under första hälften av 2016 hörde världen om en hel del utveckling inom området neurala nätverk - deras algoritmer demonstrerades av Google (nätverksspelaren i farten AlphaGo), Microsoft (ett antal tjänster för bildidentifiering), startups MSQRD, Prisma och andra.

Till bokmärken

Sidans redaktörer berättar vad neurala nätverk är för, vad de är för, varför de fångade planeten just nu och inte år tidigare eller senare, hur mycket pengar man kan tjäna på dem och vem som är de viktigaste marknadsaktörerna. Experter från MIPT, Yandex, Mail.Ru Group och Microsoft delade också sina åsikter.

Vad är neurala nätverk och vilka uppgifter de kan lösa

Neurala nätverk är en av riktningarna i utvecklingen av system för artificiell intelligens. Tanken är att simulera så nära som möjligt hur det mänskliga nervsystemet fungerar - nämligen dess förmåga att lära sig och korrigera fel. Detta är huvud funktion vilket neuralt nätverk som helst - det kan självständigt lära sig och agera på grundval av tidigare erfarenheter, varje gång gör färre och färre misstag.

Neurala nätverket imiterar inte bara aktivitet utan också strukturen i det mänskliga nervsystemet. Ett sådant nätverk består av ett stort antal enskilda beräkningselement ("neuroner"). I de flesta fall hänvisar varje "neuron" till ett specifikt nätverksskikt. Ingångsdata behandlas sekventiellt i alla nätverkslager. Parametrarna för varje "neuron" kan ändras beroende på de resultat som erhållits på tidigare uppsättningar av inmatade data, vilket ändrar ordningen på hela systemet.

Andrey Kalinin, chef för Mail.ru Search på Mail.Ru Group, konstaterar att neurala nätverk kan lösa samma problem som andra maskininlärningsalgoritmer, den enda skillnaden är i tillvägagångssättet för inlärning.

Alla uppgifter som neurala nätverk kan lösa är på något sätt relaterade till lärande. Bland de viktigaste användningsområdena för neurala nätverk är prognoser, beslutsfattande, mönsterigenkänning, optimering, dataanalys.

Vlad Shershulsky, chef för Microsofts tekniska samarbetsprogram i Ryssland, konstaterar att neurala nätverk nu används i stor utsträckning: ”Till exempel använder många stora webbplatser dem för att göra reaktioner på användarnas beteende mer naturliga och användbara för publiken. Neurala nätverk är kärnan i de flesta moderna system taligenkänning och syntes samt bildigenkänning och bearbetning. De används i vissa navigationssystem, vare sig det är industriella robotar eller självkörande bilar. Neurala nätverksbaserade algoritmer skyddar informationssystem från skadliga attacker och hjälper till att identifiera olagligt innehåll i nätverket. "

På kort sikt (5-10 år) tror Shershulsky att neurala nätverk kommer att användas ännu bredare:

Föreställ dig en jordbruksskördare vars ställdon är utrustade med flera videokameror. Det tar fem tusen bilder per minut av varje växt i sin bana och analyserar med hjälp av ett neuralt nätverk om det är ett ogräs, om det är infekterat med en sjukdom eller skadedjur. Och han behandlar varje växt individuellt. Fantasi? Inte riktigt längre. Och om fem år kan det bli normen. - Vlad Shershulsky, Microsoft

Chef för laboratoriet för neurala system och djupinlärning vid centrumet för levande system vid Moskva institutet för fysik och teknik Mikhail Burtsev ger en preliminär karta över utvecklingen av neurala nätverk för 2016-2018:

  • system för igenkänning och klassificering av objekt i bilder;
  • röstinteraktionsgränssnitt för sakernas internet;
  • övervakningssystem för servicekvalitet i callcenter;
  • felsökningssystem (inklusive tidsförutsägare underhåll), avvikelser, cyber-fysiska hot;
  • intelligenta säkerhets- och övervakningssystem;
  • bots som ersätter några av funktionerna hos callcenteroperatörer;
  • videoanalyssystem;
  • självlärningssystem som optimerar materialflödeshantering eller placeringen av föremål (i lager, transport);
  • intelligenta, självlärande styrsystem för produktionsprocesser och enheter (inklusive robotar);
  • framväxten av universella översättningssystem "on the fly" för konferenser och personligt bruk;
  • framväxten av bots konsulter teknisk support eller personliga assistenter, i funktioner nära en person.

Grigory Bakunov, direktör för teknikdistribution vid Yandex, tror att grunden för spridningen av neurala nätverk de närmaste fem åren kommer att vara förmågan hos sådana system att acceptera olika lösningar: ”Det viktigaste som neuronnätverk gör för en person nu är att rädda honom från onödigt beslutsfattande. Så de kan användas nästan överallt där inte alltför intellektuella beslut fattas av en levande person. Under de kommande fem åren är det denna färdighet som kommer att utnyttjas som kommer att ersätta mänskligt beslutsfattande med en enkel maskin. ”

Varför neurala nätverk har blivit så populära just nu

Forskare har utvecklat artificiella neurala nätverk i över 70 år. Det första försöket att formalisera ett neuralt nätverk går tillbaka till 1943, då två amerikanska forskare (Warren McCulloch och Walter Pitts) presenterade en artikel om den logiska beräkningen av mänskliga idéer och neural aktivitet.

Men tills nyligen, säger Andrey Kalinin från Mail.Ru Group, var hastigheten på neurala nätverk för låg för att kunna användas i stor utsträckning, och därför användes sådana system huvudsakligen i utvecklingen relaterad till datorsyn och andra algoritmer användes inom andra områden. maskininlärning.

En mödosam och tidskrävande del av utvecklingen av nervnätverket är att träna den. För att det neurala nätverket ska kunna lösa de tilldelade uppgifterna korrekt är det nödvändigt att "köra" sin verksamhet på tiotals miljoner indata. Det är med framväxten av olika accelererade inlärningsteknologier som Andrei Kalinin och Grigory Bakunov associerar spridningen av neurala nätverk.

Det viktigaste som har hänt nu är att olika knep har dykt upp som gör det möjligt att skapa neurala nätverk som är mycket mindre mottagliga för omskolning. - Grigory Bakunov, Yandex

”För det första finns det ett stort och offentligt tillgängligt utbud av märkta bilder (ImageNet) som du kan lära dig av. För det andra tillåter moderna grafikkort att du tränar och använder neurala nätverk hundratals gånger snabbare. För det tredje har färdiga, förutbildade neurala nätverk dykt upp som känner igen bilder, på grundval av vilka du kan skapa dina applikationer utan att ta lång tid att förbereda det neurala nätverket för arbete. Allt detta ger en mycket kraftfull utveckling av neurala nätverk inom området mönsterigenkänning, säger Kalinin.

Vad är volymerna på marknaden för neurala nätverk

”Det är väldigt enkelt att räkna. Du kan ta alla områden som använder lågutbildad arbetskraft - till exempel callcenteroperatörer - och helt enkelt subtrahera alla mänskliga resurser. jag skulle säga att det kommer om en multimiljardmarknad även inom ett enda land. Hur många människor i världen som är sysselsatta i lågutbildade jobb är lätt att förstå. Så även på ett mycket abstrakt sätt tror jag att vi pratar om marknaden för hundra miljarder dollar över hela världen, säger Grigory Bakunov, chef för teknikdistribution på Yandex.

Enligt vissa uppskattningar kommer mer än hälften av yrkena att automatiseras - det här är den maximala volymen med vilken marknaden för maskininlärningsalgoritmer (och särskilt neurala nätverk) kan ökas. - Andrey Kalinin, Mail.Ru Group

”Maskininlärningsalgoritmer är nästa steg i att automatisera alla processer, i utvecklingen av alla programvara... Därför sammanfaller marknaden åtminstone med hela programvarumarknaden, utan överträffar den, eftersom det blir möjligt att skapa nya intelligenta lösningar som är otillgängliga för gammal programvara, fortsätter Andrey Kalinin, chef för Mail.ru Search på Mail.Ru Group.

Varför utvecklar neurala nätverk mobilappar för massmarknader

Under de senaste månaderna har flera högprofilerade underhållningsprojekt som använder neurala nätverk dykt upp på marknaden på en gång - detta är också en populär videotjänst som socialt nätverk Facebook och ryska applikationer för bildbehandling (investeringar från Mail.Ru Group i juni) och andra.

Förmågan hos deras egna neurala nätverk demonstrerades både av Google (AlphaGo-tekniken slog mästaren i Go; i mars 2016 auktionerade företaget 29 målningar ritade av neurala nätverk och så vidare), och Microsoft (CaptionBot-projektet, som känner igen bilder i bilder och automatiskt genererar bildtexter till dem ; WhatDog-projektet, som bestämmer rasen av en hund från ett foto; HowOld-tjänsten, som bestämmer en persons ålder i bilden och så vidare), och Yandex (i juni byggde teamet en tjänst för att känna igen bilar i bilder i Auto.ru-applikationen; presenterade en musikal inspelad av neurala nätverk album; i maj skapade hon projektet LikeMo.net för att rita i stil med kända artister).

Sådana underhållningstjänster skapas snarare inte för att lösa globala problem som neurala nätverk är inriktade på, utan för att visa kapaciteten hos ett neuralt nätverk och genomföra dess utbildning.

”Spel är ett karakteristiskt inslag i vårt beteende som art. Å ena sidan kan nästan alla typiska scenarier för mänskligt beteende simuleras i spelsituationer, och å andra sidan kan spelskapare och i synnerhet spelare få mycket nöje från processen. Det finns också en rent utilitaristisk aspekt. Ett väldesignat spel ger inte bara spelarna tillfredsställelse: när de spelar tränar de en neuronal nätverksalgoritm. Neurala nätverk är trots allt baserade på lärande med gott exempel, säger Vlad Shershulsky från Microsoft.

”Först och främst görs detta för att visa teknikens möjligheter. Det finns egentligen ingen annan anledning. Om vi \u200b\u200bpratar om Prisma är det tydligt varför de gjorde det. Killarna har byggt någon form av pipeline som gör att de kan arbeta med bilder. För att demonstrera detta valde de ett ganska enkelt sätt att utforma. Varför inte? Detta är bara en demonstration av hur algoritmerna fungerar, säger Grigory Bakunov från Yandex.

Andrey Kalinin från Mail.Ru Group har en annan åsikt: ”Naturligtvis är det imponerande ur allmänhetens synvinkel. Å andra sidan skulle jag inte säga att underhållningsprodukter inte kan appliceras på mer användbara områden. Till exempel är uppgiften att stilisera bilder extremt relevant för ett antal branscher (design, datorspel, animering är bara några exempel) och full användning av neurala nätverk kan avsevärt optimera kostnaden och metoderna för att skapa innehåll för dem. "

Stora aktörer på marknaden för neurala nätverk

Som Andrei Kalinin konstaterar skiljer sig i stort sett de flesta neurala nätverk som finns på marknaden lite från varandra. ”Tekniken är ungefär densamma för alla. Men användningen av neurala nätverk är ett nöje som inte alla har råd med. För att självständigt träna ett neuralt nätverk och utföra många experiment på det behöver du stora träningsuppsättningar och en maskinpark med dyra grafikkort. Uppenbarligen har stora företag sådana möjligheter, säger han.

Bland de största marknadsaktörerna nämner Kalinin Google och dess Google DeepMind-division, som skapade AlphaGo-nätverket, och Google Brain. Microsoft har sin egen utveckling inom detta område - de hanteras av Microsofts forskningslaboratorium. Neurala nätverk skapas av IBM, Facebook (en division av Facebook AI Research), Baidu (Baidu Institute of Deep Learning) och andra. Mycket utveckling pågår vid tekniska universitet runt om i världen.

Grigory Bakunov, direktör för teknikdistribution vid Yandex, konstaterar att intressant utveckling inom området neurala nätverk också finns bland nystartade företag. ”Jag kommer till exempel ihåg ClarifAI-företaget. Detta är en liten start som görs en gång av personer från Google. Nu är de kanske de bästa i världen för att identifiera innehållet i en bild. " Dessa startups inkluderar MSQRD, Prisma och andra.

I Ryssland är inte bara nystartade företag utan även stora teknikföretag engagerade i utveckling inom neuronnätverk - till exempel använder Mail.Ru Group-anläggningen neurala nätverk för att bearbeta och klassificera texter i Sök och analysera bilder. Företaget genomför också experimentell utveckling relaterad till bots och dialogsystem.

Yandex är också engagerad i skapandet av sina egna neurala nätverk: ”I princip används sådana nätverk redan för att arbeta med bilder, med ljud, men vi utforskar också deras möjligheter inom andra områden. Nu gör vi många experiment för att använda neurala nätverk för att arbeta med text. " Utvecklingen genomförs vid universitet: Skoltech, MIPT, Moscow State University, HSE och andra.

Ett artificiellt neuralt nätverk är en samling neuroner som interagerar med varandra. De kan ta emot, bearbeta och skapa data. Detta är lika svårt att föreställa sig som den mänskliga hjärnans arbete. Neuralnätverket i vår hjärna fungerar så att du kan läsa detta nu: våra nervceller känner igen bokstäver och sätter ord på dem.

Ett konstgjort neuralt nätverk är som en hjärna. Det var ursprungligen programmerat för att förenkla vissa komplexa beräkningar. Idag har neurala nätverk mycket fler möjligheter. Några av dem finns i din smartphone. En annan del har redan skrivit ner till sig själv i databasen att du har öppnat den här artikeln. Hur allt detta händer och varför, läs vidare.

Hur allt började

Människor ville verkligen förstå var en persons sinne kommer ifrån och hur hjärnan fungerar. I mitten av förra seklet insåg den kanadensiska neuropsykologen Donald Hebb detta. Hebb studerade neurons interaktion med varandra, undersökte hur de kombineras i grupper (vetenskapligt - ensembler) och föreslog den första algoritmen inom vetenskapen för inlärning av neurala nätverk.

Flera år senare modellerade en grupp amerikanska forskare ett konstgjort neuralt nätverk som kunde skilja fyrkantiga former från andra former.

Hur fungerar ett neuralt nätverk?

Forskare har funnit att ett neuralt nätverk är en samling av lager av nervceller, som var och en ansvarar för att känna igen ett specifikt kriterium: form, färg, storlek, struktur, ljud, styrka etc. År efter år som ett resultat av miljontals experiment och massor av beräkningar till det enklaste nätverket fler och fler lager av neuroner tillsattes. De växlar om att arbeta. Till exempel bestämmer den första om det är en kvadrat eller inte en kvadrat, den andra förstår om kvadraten är röd eller inte, den tredje beräknar kvadratstorleken och så vidare. Inte rutor, inte röda och olämpliga storlekssiffror faller i nya grupper av nervceller och undersöks av dem.

Vad är neurala nätverk och vad de kan göra

Forskare har utvecklat neurala nätverk så att de kan skilja mellan komplexa bilder, videor, texter och tal. Det finns många typer av neurala nätverk idag. De klassificeras beroende på arkitekturen - uppsättningar dataparametrar och vikten av dessa parametrar, en viss prioritet. Nedan följer några av dem.

Konvolutionsneurala nätverk

Neuroner delas in i grupper, varje grupp beräknar en given egenskap. 1993 visade den franska forskaren Jan Lecun världen LeNet 1, det första neurologiska nätverket som snabbt och noggrant kunde känna igen handskrivna siffror på papper. Se efter själv:

Idag används neurologiska nätverk främst för multimediaändamål: de arbetar med grafik, ljud och video.

Återkommande neurala nätverk

Neuroner minns sekventiellt information och bygger ytterligare åtgärder baserat på denna data. 1997 modifierade tyska forskare de enklaste återkommande nätverken till nätverk med långt korttidsminne. På grundval av dessa utvecklades sedan nätverk med kontrollerade återkommande nervceller.

Idag, med hjälp av sådana nätverk, skrivs och översätts texter, bots programmeras som leder meningsfulla dialoger med en person, sidkoder och program skapas.

Att använda denna typ av neurala nätverk är förmågan att analysera och generera data, sammanställa databaser och till och med göra förutsägelser.

År 2015 släppte SwiftKey världens första tangentbord som drivs av ett återkommande neurala nätverk med kontrollerade nervceller. Sedan gav systemet ledtrådar under den skrivna texten baserat på de senast angivna orden. Förra året utbildade utvecklarna det neurala nätverket för att studera kontexten för den skrivna texten, och tipsen blev meningsfulla och användbara:

Kombinerade neurala nätverk (fällning + återkommande)

Sådana neurala nätverk kan förstå vad som finns i bilden och beskriva den. Och tvärtom: rita bilder enligt beskrivningen. Det tydligaste exemplet demonstrerades av Kyle MacDonald, som tog ett neuralt nätverk för en promenad runt Amsterdam. Nätverket bestämde omedelbart vad som låg framför det. Och nästan alltid exakt:

Neurala nätverk är ständigt självlärande. Genom denna process:

1. Skype har infört samtidig översättning för tio språk. Bland dessa finns det en minut ryska och japanska - några av de svåraste i världen. Naturligtvis kräver kvaliteten på översättningen en seriös översyn, men det faktum att du redan nu kan kommunicera med kollegor från Japan på ryska och vara säker på att de förstår dig är inspirerande.

2. Yandex skapade två sökalgoritmer baserade på neurala nätverk: Palekh och Korolev. Den första hjälpte till att hitta de mest relevanta platserna för lågfrekventa frågor. Palekh studerade sidtitlarna och jämförde deras mening med innebörden av förfrågningarna. På grundval av "Palekh" dök upp "Korolev". Denna algoritm utvärderar inte bara titeln, utan hela textinnehållet på sidan. Sökningen blir mer exakt och webbplatsägare börjar närma sig att fylla sidor mer intelligent.

3. Kollegor från SEO-specialister från Yandex har skapat ett musikaliskt neuralt nätverk: hon skriver poesi och skriver musik. Neurogruppen kallas symboliskt Neurona och har redan sitt första album:

4. Google Inbox använder neurala nätverk för att svara på ett meddelande. Utvecklingen av teknik är i full gång och idag studerar nätverket redan korrespondens och genererar möjliga alternativ svar. Du behöver inte slösa bort tid på utskrift och inte vara rädd att glömma någon viktig överenskommelse.

5. YouTube använder neurala nätverk för att rangordna videor, och enligt två principer på en gång: det ena neuronnätverket studerar videor och publikens reaktioner på dem, det andra forskar om användare och deras preferenser. Det är därför YouTube-rekommendationer alltid är i rampljuset.

6. Facebook arbetar aktivt med DeepText AI, ett kommunikationsprogram som förstår jargong och tar bort obscent språk från chattrum.

7. Applikationer som Prisma och Fabby, byggda på neurala nätverk, skapar bilder och videor:

Colorize återställer färger i svartvita foton (överraskning mormor!).

MakeUp Plus väljer det perfekta läppstiftet för tjejer från ett riktigt sortiment av riktiga varumärken: Bobbi Brown, Clinique, Lancome och YSL är redan i branschen.


8.
Apple och Microsoft uppgraderar ständigt sina neurala Siri och Contana. Hittills genomför de bara våra order, men inom en snar framtid kommer de att ta initiativ: att ge rekommendationer och förutse våra önskningar.

Vad mer väntar oss i framtiden?

Självlärande neurala nätverk kan ersätta människor: de börjar med textförfattare och korrekturläsare. Robotar skapar redan texter med mening och utan fel. Och de gör det mycket snabbare än människor. Fortsätter med callcenterpersonal, teknisk support, moderatorer och administratörer av publik i sociala nätverk. Neurala nätverk kan redan lära sig manuset och återge det med röst. Vad sägs om andra områden?

Jordbrukssektorn

Neurala nätverket kommer att introduceras i specialutrustning. Skördarna kommer att autopilotera, skanna växter och studera marken och överföra data från ett neuralt nätverk. Hon bestämmer om hon ska vattna, befrukta eller spraya mot skadedjur. Istället för ett par dussin arbetare behövs högst två specialister: en handledare och en teknisk.

Medicinen

Microsoft arbetar nu aktivt med ett cancerläkemedel. Forskare är engagerade i bioprogrammering - de försöker digitalisera processen för uppkomst och utveckling av tumörer. När allt fungerar, kan programmerare hitta ett sätt att blockera en sådan process, analogt kommer ett läkemedel att skapas.

Marknadsföring

Marknadsföring är mycket personlig. Redan nu kan neurala nätverk avgöra i sekunder till vilken användare, vilket innehåll och till vilket pris. I framtiden kommer en marknadsförares inblandning i processen att minimeras: neurala nätverk förutsäger förfrågningar baserade på data om användarnas beteende, skannar marknaden och ger de mest lämpliga erbjudandena när en person tänker köpa.

E-handel

E-handel kommer att rullas ut överallt. Du behöver inte längre gå till webbutiken med länken: du kan köpa allt där du ser det med ett enda klick. Till exempel läser du den här artikeln några år senare. Du gillar verkligen läppstiftet på skärmen från MakeUp Plus-applikationen (se ovan). Du klickar på den och går direkt till korgen. Eller titta på en video om senaste Modell Hololens (mixed reality-glasögon) och gör omedelbart en beställning direkt från YouTube.

På nästan alla områden kommer specialister med kunskap eller åtminstone en förståelse för strukturen i neurala nätverk, maskininlärning och artificiell intelligenssystem att uppskattas. Vi kommer att existera sida vid sida med robotar. Och ju mer vi vet om dem, desto fredligare kommer vi att leva.

P. S. Zinaida Falls är ett Yandex neuralt nätverk som skriver poesi. Utvärdera arbetet som maskinen skrev efter att ha lärt sig i Mayakovsky (stavning och skiljetecken bevaras):

« Det»

detta
bara
något
i framtiden
och kraft
från den personen
är allt i världen eller inte
det är blod runt
handla
växer fett
ära på
landa
med en sprakande näbb

Imponerande, eller hur?

Det hände så att ämnet neurala nätverk vid universitetet lyckades passera min specialitet, trots det stora intresset från min sida. Försök till självutbildning slogs flera gånger av en okunnig panna mot de oförstörbara väggarna i vetenskapens citadell i form av obegripliga "på ett slag" termer och förvirrade förklaringar på universitetets läroböcker.

I den här artikeln (en serie artiklar?) Kommer jag att försöka täcka ämnet neurala nätverk ur en oinitierad persons synvinkel, enkelt språkanvänder enkla exempel, lägger ut allt på hyllorna och inte "en rad neuroner bildar en perceptron, som arbetar enligt ett välkänt, beprövat schema."

De intresserade, snälla, under katt.

Mål
Vad är neurala nätverk för?
Ett neuralt nätverk är ett inlärningssystem. Det fungerar inte bara i enlighet med en given algoritm och formler utan också på grundval av tidigare erfarenheter. Ett slags barn som fullbordar pusslet varje gång och gör färre misstag.

Låt oss komma överens om att en neuron bara är någon slags imaginär svart låda, som har en massa inlopp och ett utlopp.
Dessutom kan både inkommande och utgående information vara analog (oftast kommer den).

Hur utsignalen bildas från ingångshögen bestäms av neurons interna algoritm.

Till exempel kommer vi att skriva ett litet program som känner igen enkla bilder, säg bokstäverna i ryska språket bitmappar.
Låt oss komma överens om att vårt system i början har ett "tomt" minne, dvs. en slags nyfödd hjärna, redo för strid.
För att få det att fungera korrekt måste vi spendera tid på att lära oss.

Dodging tomaterna som flyger mot mig, jag kommer att säga att vi kommer att skriva i Delphi (vid tidpunkten för detta skrivande var det till hands). Om behovet uppstår hjälper jag till att översätta exemplet till andra språk.

Jag ber dig också vara oseriös om kvaliteten på koden - programmet skrevs på en timme, bara för att förstå ämnet, sådan kod är knappast tillämplig för allvarliga uppgifter.

Så, baserat på uppgiften, hur många exitalternativ kan det finnas? Det stämmer, så många bokstäver som vi kommer att kunna definiera. Det finns bara 33 av dem i alfabetet hittills, och vi kommer att dröja vid det.

Som ett resultat måste du skapa 33 neuroner, som alla har 30x30 \u003d 900 ingångar.
Låt oss skapa en klass för vår neuron:

Skriv Neuron \u003d klassnamn: sträng; // Här är namnet på neuronen - bokstaven som den är associerad med input: array of heltal; // Här är en ingångsmatris 30x30 utgång: heltal; // Här kommer han att säga att han bestämde minne: array of integer; // Här kommer den att lagra upplevelsen av den tidigare upplevelsens slut;

Låt oss skapa en rad neuroner, med antalet bokstäver:

För i: \u003d 0 till 32 börja neuro_web [i]: \u003d Neuron.Create; neuro_web [i] .output: \u003d 0; // Låt neuro_web [i] vara tyst för tillfället .name: \u003d chr (Ord ("A") + i); // Bokstäver från A till Ö slutar;

Nu är frågan - var ska vi lagra "minnet" i det neurala nätverket när programmet inte fungerar?
För att inte gå djupt in i INI eller, förbjuda Gud, databaser, bestämde jag mig för att lagra dem i samma 30x30 bitmappar.
Till exempel minnet av neuron "K" efter att ha kört programmet i olika teckensnitt:

Som du kan se motsvarar de mest mättade områdena de vanligaste pixlarna.
Vi kommer att ladda "minne" i varje neuron när det skapas:
p: \u003d TBitmap.Create; p.LoadFromFile (ExtractFilePath (Application.ExeName) + "\\ res \\" + neuro_web [i] .name + ". bmp")

I början av ett otränat program kommer minnet av varje neuron att vara en blank plats på 30x30.

Neuronen kommer att kännas igen enligt följande:

Ta den första pixeln
- Jämför det med 1m pixel i minnet (det finns ett värde på 0..255)
- Jämför skillnaden med en viss tröskel
- Om skillnaden är mindre än tröskeln anser vi att bokstaven vid denna tidpunkt liknar den i minnet, lägg till +1 till neuronets vikt.

Och så vidare för alla pixlar.

Vikten av ett neuron är ett visst antal (i teorin upp till 900), vilket bestäms av graden av likhet mellan den bearbetade informationen och den som lagras i minnet.
I slutet av erkännandet kommer vi att ha en uppsättning neuroner, som alla tror att det är rätt med någon procentsats. Dessa procentsatser är neuronets vikt. Ju mer vikt, desto mer sannolikt är det att denna neuron har rätt.

Nu kommer vi att mata programmet en godtycklig bild och köra varje neuron över det:

För x: \u003d 0 till 29 gör för y: \u003d 0 till 29 börjar n: \u003d neuro_web [i] .memory; m: \u003d neuro_web [i] .input; om ((abs (m-n))<120)) then // Порог разницы цвета if m<250 then neuro_web[i].weight:=neuro_web[i].weight+1; // Кроме того, не будем учитывать белые пиксели, чтобы не получать лишних баллов в весах if m<>0 börja sedan om m<250 then n:=round((n+(n+m)/2)/2); neuro_web[i].memory:=n; end else if n<>0 så om m<250 then n:=round((n+(n+m)/2)/2); neuro_web[i].memory:=n; end;

Så snart cykeln för den sista neuronen är över väljer vi bland alla med den högsta vikten:

Om neuro_web [i] .weight\u003e max börja max: \u003d neuro_web [i] .weight; max_n: \u003d i; slutet;

Det är med detta värde på max_n som programmet kommer att berätta för oss vad vi anser att vi släppte det.
Först kommer detta inte alltid att vara sant, så du måste skapa en inlärningsalgoritm.

S: \u003d InputBox ("Ange bokstaven", 'programmet tycker att det är en bokstav' + neuro_web.name, neuro_web.name); för i: \u003d 0 till 32 gör börja // Kör igenom neuronerna om neuro_web [i] .namn \u003d s börjar sedan // Uppdatera minnet i önskat neuron för x: \u003d 0 till 29 börja för y: \u003d 0 till 29 börja p.Canvas.Pixels: \u003d RGB (neuro_web [i] .memory, neuro_web [i] .memory, neuro_web [i] .memory); // Skriv det nya värdet på minnets pixeländ; slutet; p.SaveToFile (ExtractFilePath (Application.ExeName) + "\\ res \\" + neuro_web [i] .name + ". bmp");

Vi kommer att göra den faktiska minnesuppdateringen enligt följande:

N: \u003d rund (n + (n + m) / 2);

De där. om en viss punkt saknas i neuronens minne, men läraren säger att det finns i det här brevet, kommer vi ihåg det, men inte helt, men bara hälften. Med vidareutbildning kommer effekten av denna lektion att öka.

Här är några iterationer för bokstaven G:

Detta avslutar vårt program.

Träning
Låt oss börja lära oss.
Vi öppnar bilderna på bokstäverna och pekar tålmodigt programmet på dess fel:

Efter ett tag börjar programmet stabilt upptäcka även tidigare okända bokstäver:

Slutsats
Programmet representerar en kontinuerlig nackdel - vårt neurala nätverk är väldigt dumt, det skyddas inte från användarfel under träning och igenkänningsalgoritmerna är så enkla som en pinne.
Men det ger grundläggande kunskap om hur neurala nätverk fungerar.

Om den här artikeln är av intresse för de respekterade Habraviterna, kommer jag att fortsätta cykeln, gradvis komplicera systemet, införa ytterligare anslutningar och vikter, överväga några av de populära neurala nätverksarkitekturerna etc.

Du kan göra narr av vårt nyfödda intellekt genom att ladda ner programmet tillsammans med källan

Från vc.ru, hur man skapar ett enkelt neuralt nätverk i några steg och lär det att känna igen kända företagare i foton.

Steg 0. Förstå hur neurala nätverk fungerar

Det enklaste sättet att förstå principerna för neurala nätverk är Teachable Machine, ett utbildningsprojekt från Google.

Som input - vad som behöver bearbetas av neurala nätverk - använder Teachable Machine en bild från en bärbar kamera. Som utgång - vad det neurala nätverket ska göra efter bearbetning av indata - kan du använda en GIF eller ett ljud.

Du kan till exempel lära den lärbara maskinen att säga "Hej" med handflatan uppåt. Med en upphöjd tumme - "Cool" och med ett förvånat ansikte med en öppen mun - "Wow".

Först måste du träna det neurala nätverket. För att göra detta höjer du handflatan och trycker på knappen Train Green - tjänsten tar flera dussin bilder för att hitta ett mönster i bilderna. En uppsättning sådana ögonblicksbilder kallas vanligtvis en "dataset".

Nu återstår bara att välja den åtgärd som ska kallas vid erkännande av bilden - säg en fras, visa en GIF eller spela ett ljud. På samma sätt tränar vi det neurala nätverket för att känna igen ett förvånat ansikte och en tumme.

När neuralt nätverk har tränats kan det användas. The Teachable Machine visar ”förtroendefaktorn” - hur säker systemet är att det visas en av färdigheterna.

Steg 1. Förbereda datorn för att arbeta med ett neuralt nätverk

Låt oss nu skapa vårt eget neurala nätverk, som när du skickar en bild rapporterar vad som visas på bilden. Först lär vi det neurala nätverket att känna igen blommor i en bild: kamomill, solros, maskros, tulpan eller ros.

För att skapa ditt eget neurala nätverk behöver du Python - ett av de mest minimalistiska och vanliga programmeringsspråken, och TensorFlow - Googles öppna bibliotek för att skapa och träna neurala nätverk.

Installera Python

Dela detta