Pfoe wat zie ik hier veel misverstanden over neurale netwerken en software langskomen. Zal eens een poging te doen het toegankelijk inzichtelijk te maken.
Software wordt vanouds ontwikkeld door 1 of meer bestanden met 'broncode' te
compileren op een computer tot een
executable ("iets dat uitgevoerd kan worden"), zoals `winword.exe` voor MS Word. Als er bugs opgelost of features toegevoerd worden herhaalt iedere keer zich datzelfde proces - alle broncodes tezamen worden weer opnieuw gecompileerd tot een nieuwe executable. Dat uitvoeren gebeurt al meer dan 50 jaar primair op een Central Processing Unit of CPU, een general-purpose chip die
alle taken in een computer kan aansturen, zonder ergens bijzonder specifiek goed in te zijn.
In de jaren '90 ontstond een vraagstuk dat de ouderwetse CPU maar moeilijk in kon vullen - 3D games. De hoeveelheid wiskundige berekeningen ("floating point matrix-calculaties" voor intimi) die nodig is om 60 keer per seconde een paar miljoen pixels aan 3D wereld op je scherm te toveren is idioot groot, en vanouds was complex rekenwerk maar 1 van de 1000 taakjes die een CPU moet uitvoeren. Hij kon het wel, maar niet idioot goed of snel. Er werden daarom speciale chips ontwikkeld die andersom eigenlijk juist maar 1 ding konden, floating point rekenwerk stampen, maar dat dan wel idioot goed en snel. De Graphical Processing Unit of GPU was geboren.
Naarmate die GPU's beter werden ontstond vanuit met name de wetenschappelijke wereld ook de vraag of al die enorme rekenkracht niet ook voor andere dingen dan 3D games inzetbaar was. Modellen doorrekenen, hypotheses valideren en grootschalige analyse van meetdata zijn allemaal taken die neerkomen op floating point rekenwerk. In 2007 kwam CUDA uit, de eerste officiele manier om niet-grafisch rekenwerk op GPU's uit te voeren. Sindsdien heeft dit een enorme vlucht genomen en kopen universiteiten meer van de allerzwaarste Nvidia-kaarten dan verstokte gamers.
Neurale netwerken bestaan zelf al vele tientallen jaren. De basisconcepten erachter zijn redelijk simpel, het is spiekwerk bij het menselijk brein. Feitelijk is een neuraal netwerk een bijzonder specifiek soort programma dat een enorm floating point rekenmodel aanstuurt en maar 3 taken kan uitvoeren (
heel kort door de bocht for sake of clarity):
- Kijk, een appel
- Kijk, geen appel
- Is dit een appel?
Het 'trainen' van een neuraal netwerk komt dus neer op dat je hem een miljoen foto's geeft van appels, en 10 miljoen foto's van geen appels, en daarna kan hij met redelijk grote zekerheid vertellen of een nieuwe foto die je hem voert een appel is. Hoe meer trainingsdata, hoe beter de betrouwbaarheid - met 100 appels zal hij 50% van de tijd fout zitten, met 1000 10%, met 10.000 1%, met een miljoen 0.1%, enzovoorts.
Hoewel we het concept van neurale netwerken al een halve eeuw kennen is iedere poging door de jaren heen om ze grootschalig in te zetten gefaald, simpelweg omdat "we" de rekenkracht ontbeerden om er wat nuttigs mee te doen. Pas nu we de afgelopen 10 jaar via GPU's in clusters een theoretisch oneindige rekenkracht ertegenaan kunnen gooien worden de (vele) toepassingen ervan praktisch haalbaar.
Een neural netwerk kun je prima
kopieren. Dus nadat je een NN hebt getraind kun je gewoon een dumpje pakken van wat er in het geheugen van je computer zit, dat naar iemand emailen, en dan kan hij daarmee ook appels herkennen. Yay. Dat neemt echter niet weg dat wat je dan opstuurt een
complete black box is, net zoals de hersenen van een mens. We zien dat het werkt, maar kunnen er niet in peuteren om dingen te veranderen - je kunt er alleen nog meer trainingsdata in stoppen om de werking te beinvloeden.
Gaan we bovenstaand vertalen naar je Tesla dan zullen een hoop dingen op hun plek vallen. Tesla doet de training in supercomputers ("Dojo"), maakt een snapshot, en stuurt dat over-the-air op naar alle auto's. Trainen in de auto's zelf is
volstrekt nutteloos, immers het toevoegen van 1 foto van een appel is een druppel op een gloeiende plaat op een netwerk dat al getraind is op miljoenen appels. Nee, het enige wat je kunt doen is proberen te detecteren dat de auto de appel niet goed zag, en er eventueel een foto van terugsturen, en daarmee de centrale trainingset aanpassen.
Voor de mensen onder ons met kinderen: iets afleren wat al is aangeleerd is meestal schier onmogelijk, en soms vraag je je af of je niet beter het hele kind weg kunt gooien en opnieuw moet beginnen. Tesla heeft die luxe wel, en traint in die supercomputers iedere keer hele neurale netwerken opnieuw, from scratch, met miljoenen of zelfs miljarden samples aan data. Die data die wordt, goeddeels handmatig ook nog,
gelabeld, oftewel voorzien van informatie over wat het NN ervan moet leren. Kijk, een fiets. Kijk, dit is geen fiets voor jou want die zit achterop een auto. Kijk, een fiets met de mens ernaast ipv erop, dus dat is een voetganger. Melden honderdduizend auto's dat ze vaak moeite hebben met fietsen goed herkennen, en oh hoi hier heb je ook nog de bijbehorende 5 miljoen foto's, dan kun je daar wat mee, dat zijn nog eens significante getallen.
In de supercomputers spelen Karpathy en zijn team continu met de trainingsdata, en in welke verhouding ze foto's met welke labels ze erin moeten voeren. Die supercomputers maken daarmee duizenden keren per dag nieuwe neurale netwerken, die vervolgens automatisch worden getest op veel,
heel veel testdata en -scenario's, of ze nog steeds alles goed genoeg herkennen, en liefst ook nog net wat beter dan gisteren. Afhankelijk van de resultaten gaan ze dan weer nieuwe NN's maken die daarop voortborduren, en daarvan krijgen de auto's eens in de zoveel tijd een snapshot.
Resumerend: al het echt zware stampwerk doet Tesla op z'n supercomputers in de VS, en daar gaan die uploads van je auto naar iedere rit heen. Die worden gefilterd door computers, waar daar door komt wordt gecontroleerd door mensen en gelabeld, en dat levert uiteindelijk weer een nieuw, from scratch getraind, NN op dat op jouw auto komt. Cirkeltje rond.
Waarom is HW3 dan zo belangrijk - omdat ook als je alleen vragen stelt aan een NN en niet traint er enorme hoeveelheden rekenwerk uitgevoerd moeten worden. 60 keer per seconde 8 HD videobeelden analyseren, tis niet niets. HW3 is dan ook een chip die voor merendeel bestaat uit GPU technologie om dat als een gek te kunnen doen. De rest van de chip bestaat uit een kleine CPU, wat RAM, wat logica om videobeelden te kunnen verwerken. Naast de NN's doet je auto niet zoveel speciaals, die CPU wordt amper gebruikt voor BMS en de feitelijke rijlogica e.d. Voor perspectief - de Space Shuttles hebben tot op de laatste dag gevlogen met processors equivalent aan een Commodore 64 (!!!) terwijl smartphones op dat moment al letterlijk een miljoen keer sneller waren. Maar voor simpelweg "als ik harder wil rijden dan m'n voorganger en er is links ruimte ga dan naar links" heb je al die gigahertzen niet nodig. HW3 is vooral het voortschrijdend inzicht over hoe enorm zwaar het rekenwerk achter NN's is om, op 60fps, op 8 camera's, met meer dan 99.9% zekerheid al die dingen in de 'real world' te kunnen herkennen. HW2.5 bleek daar uiteindelijk te traag voor, dus kwam er een nieuwe chip met 21x meer kracht op dat gebied. Een factor 21 is geen kattenpis.
Gaat HW4 op een dag komen? Sure. Maar we beginnen nu in de "long tail" te komen. HW2.5 was de rek uit, maar het werkt 99.9% van de tijd prima (vergis je niet - 1 phantom brake op een rit van een uur is 1 seconde fout op een uur met verder geen fouten, een foutmarge van 1/3600 oftewel 0.027%). HW3 heeft alle potentie om daar 99.999% van te kunnen maken. HW4 zal er vast 99.99999% van kunnen maken, maar op een gegeven moment ga je de "goed genoeg" brug over. En laten we eerlijk zijn, die brug staan we al op op dit moment met auto's die netto beter en veiliger rijden dan merendeel van de mensen op de weg. HW 4, 5 en 6 gaan enkel nog over hoe ver je door kunt lopen na de brug.