Hallo en welkom bij deze tutorial.
Oké, dus in de vorige twee proeven hebben we de hersenen gemaakt of als je de hersenen nu voor de H3C
wilt, moeten we deze hersenen trainen.
Maar om deze hersenen te trainen, hebben we een optimizer nodig die deze tool zal gebruiken bij
stochastische gradiëntafdaling naar het gewicht, afhankelijk van hoeveel ze bijdragen aan de fout tussen de voorspellingen en de
doelen en wat we tot nu toe hebben gedaan.
In de eerste en tweede module hebben we de atom optimizer by torch gebruikt in de training.
Maar zoals ik je al zei, hebben we te maken met een zeer uitdagend probleem dat breakout is en het 3C-algoritme zelf is
niet voldoende om dit probleem op te lossen.
We hebben een aantal aangepaste optimizers en veel verschillende trucs nodig om dit probleem op te lossen zonder eeuwen te
wachten.
Dat is dus het doel om dit te doen.
En daarom hebben we een aparte custom optimizer op basis van de atom optimizer en die zit
in deze gedeelde atoomklasse.
En waarom zou atoom?
Het is omdat het eigenlijk de atom-optimizer is, maar dat werkt op gedeelde status.
Dus we gaan uitleggen hoe het werkt in deze tutorial.
Dus we gaan hier de verschillende functies doornemen zonder ze te knippen, want, weet je, we
willen wat energie overhouden voor de volgende implementatie.
Dat is de trein, die pauw, die meer dan honderd regels code nodig heeft.
Wees daar dus klaar voor.
En daarom zullen we proberen uit te leggen wat hier aan de hand is in één tutorial, deze tutorial.
En laten we nu meteen beginnen.
Oké, dus eerst introduceren we dit klasse-shirtitem dat drie functies zal bevatten, de init-functie,
de gedeelde geheugenfunctie en de stapfunctie.
Dus wat we eerst doen, is dat we dat atoom erven van AP'TIN, wat natuurlijk de atoomoptimalisatie is die we
krijgen van de bovenste module, van de fakkelbibliotheek.
Dus hier passen we overerving toe om de tools te krijgen die allemaal gerelateerd zijn aan de atom-optimizer en dan beginnen we
met de Init-functie.
Dus wat gebeurt hier?
Ten eerste hebben we een superfunctie gebruikt om van alle tools en alle
basisparameters van het atoom, die atoomklasse en deze basisparameters te erven voor leersnelheid, status, epsilon en
wachtverval.
En dan starten we een volledige loop, deze eerste volledige loop voor groeps- en autodidactische Perram-groepen.
Dus eerst, wat is Parum Group zelf dat Paran-groepen alle attributen van de optimizer bevatten?
En onder deze attributen hebben we de parameters die we moeten optimaliseren.
Deze parameters die we willen optimaliseren zijn de gewichten van het netwerk die zijn opgenomen in programma's
die zichzelf groeperen, zodat we een groep gaan behoren tot zichzelf die groepen groeperen.
En hier hebben we de tweede lus, die deze parameters zal krijgen die we willen
optimaliseren en die precies inhoud en zelf-parum-groepsprogramma's zijn.
Dus eigenlijk gaan we door zelf die programmagroepen die alle parameters bevatten en voor elke
groep parameters en zelfdoctorand groepen gaan we door de parameters die we willen
optimaliseren.
Daarom betekent voor P in groepsprogramma's hier voor elke tancer van gewichten die we willen optimaliseren.
Dus voor elke Tenzer aan gewichten die we willen optimaliseren.
En wat gebeurt er dan binnen deze groep met deze vier regels code?
Wat er in feite gebeurt, is dat de update van de Adam Optimizer is gebaseerd op een exponentieel voortschrijdend gemiddelde
van de gradiënt van deze coderegel hier, dat is het exponentiële voortschrijdend gemiddelde van de gradiënt van
momenten, een die van orde één is.
Maar de update van Adam is niet alleen daarop gebaseerd, het is ook gebaseerd op het exponentieel voortschrijdend gemiddelde
van het kwadraat, de gradiënt die een exponentieel voortschrijdend gemiddelde is van de gradiënt van momentum of de twee.
Dus hier is het exponentiële voortschrijdend gemiddelde van orde één.
En hier is het exponentiële voortschrijdend gemiddelde van de orde.
Twee voor elk van hen, de schatting van het verloop.
Dus wat hier en nu gebeurt, als je meer wilt weten over hoe het
exponentieel voortschrijdend gemiddelde werkt, nou, ik moedig je ten zeerste aan om dit onderzoeksartikel, Adam, te bekijken,
een methode voor stochastische optimalisatie, omdat in feite de De geoptimaliseerde Adam die we nu implementeren, is gebaseerd op het
algoritme hier.
Dus als je meer details wilt hebben over hoe het algoritme werkt, dan zal dit document zeker nuttig
zijn.
En dan heb je nog wat uitleg over het algoritme met de Adam's en de regels.
En dus, weet je, dat is alleen als je dit wilt aanvallen voordat je de grote trendfunctie aanvalt die
daarna zal maken.
OK, dus laten we teruggaan naar Python en nu verder gaan met de tweede functie, geheugen delen.
Dus nu ga ik gewoon een paar woorden zeggen.
Het idee van deze gedeelde geheugenfunctie is een beetje zoals Tenzer, dat Kouda, je weet wel, Kouda is een
versneller gebaseerd op de GPU.
Wat hier gebeurt, is dat we deze Tensa's van de staten hebben die hier, hier en hier geheugen
delen, die zich een beetje als Tenzer gedragen, die Kouda om de berekeningen te versnellen.
Maar het verschil is dat hier de sensoren die geheugen delen de berekeningen naar een deel van de
GPU of de CPU sturen dat toegankelijk is voor alle Pearlie-dreigingen.
Dus dat is eigenlijk wat hier wordt gedaan.
Dat is een beetje zoals Tenso die Kouda, maar het wordt alleen naar een deel van de GPU of CPU gestuurd dat toegankelijk is
voor de parallellisatie.
Het is goed.
En dan hebben we de laatste functiestap.
Dus, weet je, deze functie, het is als de stapmethode van de atom optimizer die we al in deze
cursus gebruiken.
En dus, nogmaals, dit is gebaseerd op het algoritme, een van hetzelfde papier dat we eerder zagen.
Dit algoritme dus.
Dus nogmaals, als u de volgende coderegels in detail wilt begrijpen.
Nou, nogmaals, ik moedig je aan om naar dit algoritme te kijken, een van deze paper.
En bovendien, wat hier wordt gedaan, is niet helemaal verplicht, want dit is eigenlijk een copy-paste van de
stapmethode van de uptime, die atoomklasse.
Dus eigenlijk, wat hier wordt gedaan, hadden we kunnen doen door onze erfenis te gebruiken, omdat we hier dat atoom
erven van Upton.
En dus om onze erfenis te gebruiken, nou, wat we kunnen doen in plaats van dit alles te doen, is gewoon dat ik hier ga
schrijven.
Die opmerking is gewoon de superfunctie gebruiken die we toepassen op onze gedeelde.
Adam klasse, dan ons object zelf, en hier voegen we gewoon stap toe met haakjes stap is de methode van de optie die
Adam klasse en dat is precies hetzelfde.
Daarom zei ik net dat hier slechts een copy-paste is van de stapmethode van de Upton that
Adam-klasse.
Dus ik denk dat als je dit allemaal vervangt door dit superfunctionele, ik Adam en de stapmethode graag wil
delen.
Nou, misschien krijgen we precies hetzelfde.
Oké, dus dat was interessant om er even naar te kijken, in principe kun je dit zien als
de optimizer.
Het is alsof we er dieper naar hebben gekeken.
Maar nogmaals, als je meer details over dit alles wilt geven en als je wilt begrijpen wat er
achter de schermen gebeurt, moedig ik je aan om dit onderzoekspaper te bekijken.
Ik zal de link hier in de reacties plaatsen.
Weet je, onthoud dat je alle codes tot in detail hebt gedocumenteerd.
Het is dus heel goed als je er eens naar kunt kijken.
En nu hoop ik dat je veel energie hebt, want we gaan verder met het treinbestand, dat deze enorme treinfunctie zal
bevatten en dat in feite onze hersenen zal trainen, wat we nu kunnen doen omdat
we onze optimizer hebben.
Dus nu lekker uitrusten.
Heb een goede nachtrust.
En als u zich in topvorm voelt, gaan we verder met de volgende stap.
Tot dan, geniet ervan.