|
|
||
|---|---|---|
| .. | ||
| lab | ||
| IntroKeras.ipynb | ||
| IntroKerasTF.ipynb | ||
| IntroPyTorch.ipynb | ||
| README.md | ||
README.md
Ramverk för neurala nÀtverk
Som vi redan har lÀrt oss, för att kunna trÀna neurala nÀtverk effektivt behöver vi göra tvÄ saker:
- Arbeta med tensorer, t.ex. multiplicera, addera och berÀkna funktioner som sigmoid eller softmax.
- BerÀkna gradienter för alla uttryck för att kunna utföra gradientnedstigningsoptimering.
Förtest
Medan biblioteket numpy kan hantera den första delen, behöver vi en mekanism för att berÀkna gradienter. I vÄrt ramverk som vi utvecklade i föregÄende avsnitt var vi tvungna att manuellt programmera alla derivatafunktioner i metoden backward, som utför backpropagation. Idealt sett bör ett ramverk ge oss möjlighet att berÀkna gradienter för vilket uttryck som helst som vi kan definiera.
En annan viktig aspekt Àr att kunna utföra berÀkningar pÄ GPU eller andra specialiserade berÀkningsenheter, som TPU. TrÀning av djupa neurala nÀtverk krÀver vÀldigt mycket berÀkningar, och att kunna parallellisera dessa berÀkningar pÄ GPU:er Àr mycket viktigt.
â Begreppet 'parallellisera' betyder att fördela berĂ€kningarna över flera enheter.
De tvÄ mest populÀra ramverken för neurala nÀtverk idag Àr: TensorFlow och PyTorch. BÄda erbjuder ett lÄg-nivÄ API för att arbeta med tensorer pÄ bÄde CPU och GPU. Utöver lÄg-nivÄ API finns det ocksÄ hög-nivÄ API, kallade Keras respektive PyTorch Lightning.
| LÄg-nivÄ API | TensorFlow | PyTorch |
|---|---|---|
| Hög-nivÄ API | Keras | PyTorch Lightning |
LÄg-nivÄ API i bÄda ramverken lÄter dig bygga sÄ kallade berÀkningsgrafer. Denna graf definierar hur man berÀknar utdata (vanligtvis förlustfunktionen) med givna indata och kan skickas för berÀkning pÄ GPU, om sÄdan finns tillgÀnglig. Det finns funktioner för att differentiera denna berÀkningsgraf och berÀkna gradienter, som sedan kan anvÀndas för att optimera modellparametrar.
Hög-nivÄ API betraktar i stort sett neurala nÀtverk som en sekvens av lager, vilket gör konstruktionen av de flesta neurala nÀtverk mycket enklare. Att trÀna modellen krÀver vanligtvis att man förbereder data och sedan anropar en fit-funktion för att utföra jobbet.
Hög-nivÄ API gör det möjligt att snabbt konstruera typiska neurala nÀtverk utan att behöva oroa sig för mÄnga detaljer. Samtidigt erbjuder lÄg-nivÄ API mycket mer kontroll över trÀningsprocessen och anvÀnds dÀrför ofta inom forskning, nÀr man arbetar med nya arkitekturer för neurala nÀtverk.
Det Àr ocksÄ viktigt att förstÄ att du kan anvÀnda bÄda API:erna tillsammans, t.ex. kan du utveckla din egen nÀtverkslagerarkitektur med lÄg-nivÄ API och sedan anvÀnda den i ett större nÀtverk som konstrueras och trÀnas med hög-nivÄ API. Eller sÄ kan du definiera ett nÀtverk med hög-nivÄ API som en sekvens av lager och sedan anvÀnda din egen lÄg-nivÄ trÀningsloop för att utföra optimering. BÄda API:erna bygger pÄ samma grundlÀggande koncept och Àr designade för att fungera bra tillsammans.
LĂ€rande
I den hÀr kursen erbjuder vi det mesta av innehÄllet bÄde för PyTorch och TensorFlow. Du kan vÀlja ditt föredragna ramverk och endast gÄ igenom motsvarande anteckningsböcker. Om du inte Àr sÀker pÄ vilket ramverk du ska vÀlja, lÀs nÄgra diskussioner pÄ internet om PyTorch vs. TensorFlow. Du kan ocksÄ titta pÄ bÄda ramverken för att fÄ en bÀttre förstÄelse.
DÀr det Àr möjligt kommer vi att anvÀnda hög-nivÄ API för enkelhetens skull. Men vi anser att det Àr viktigt att förstÄ hur neurala nÀtverk fungerar frÄn grunden, sÄ i början börjar vi med att arbeta med lÄg-nivÄ API och tensorer. Om du dÀremot vill komma igÄng snabbt och inte vill spendera mycket tid pÄ att lÀra dig dessa detaljer, kan du hoppa över dem och gÄ direkt till anteckningsböckerna för hög-nivÄ API.
âïž Ăvningar: Ramverk
FortsÀtt ditt lÀrande i följande anteckningsböcker:
| LÄg-nivÄ API | TensorFlow+Keras Notebook | PyTorch |
|---|---|---|
| Hög-nivÄ API | Keras | PyTorch Lightning |
Efter att ha bemÀstrat ramverken, lÄt oss repetera begreppet överanpassning.
Ăveranpassning
Ăveranpassning Ă€r ett extremt viktigt koncept inom maskininlĂ€rning, och det Ă€r mycket viktigt att förstĂ„ det rĂ€tt!
TÀnk pÄ följande problem med att approximera 5 punkter (representerade av x pÄ graferna nedan):
![]() |
![]() |
|---|---|
| LinjÀr modell, 2 parametrar | Icke-linjÀr modell, 7 parametrar |
| TrÀningsfel = 5.3 | TrÀningsfel = 0 |
| Valideringsfel = 5.1 | Valideringsfel = 20 |
- Till vÀnster ser vi en bra rak linje-approximation. Eftersom antalet parametrar Àr tillrÀckligt, fÄngar modellen korrekt punkternas fördelning.
- Till höger Àr modellen för kraftfull. Eftersom vi bara har 5 punkter och modellen har 7 parametrar, kan den justeras sÄ att den passerar genom alla punkter, vilket gör trÀningsfelet till 0. Detta hindrar dock modellen frÄn att förstÄ det korrekta mönstret i data, vilket resulterar i ett mycket högt valideringsfel.
Det Àr mycket viktigt att hitta en korrekt balans mellan modellens komplexitet (antal parametrar) och antalet trÀningsprover.
Varför överanpassning uppstÄr
- För lite trÀningsdata
- För kraftfull modell
- För mycket brus i indata
Hur man upptÀcker överanpassning
Som du kan se frÄn grafen ovan kan överanpassning upptÀckas genom ett mycket lÄgt trÀningsfel och ett högt valideringsfel. Normalt under trÀning ser vi bÄde trÀnings- och valideringsfel minska, och sedan vid nÄgon punkt kan valideringsfelet sluta minska och börja öka. Detta Àr ett tecken pÄ överanpassning och en indikation pÄ att vi förmodligen bör sluta trÀna vid denna punkt (eller Ätminstone spara en ögonblicksbild av modellen).
Hur man förhindrar överanpassning
Om du mÀrker att överanpassning uppstÄr kan du göra nÄgot av följande:
- Ăka mĂ€ngden trĂ€ningsdata
- Minska modellens komplexitet
- AnvÀnd nÄgon regulariseringsteknik, som Dropout, vilket vi kommer att gÄ igenom senare.
Ăveranpassning och Bias-Variance-avvĂ€gning
Ăveranpassning Ă€r faktiskt ett fall av ett mer generellt problem inom statistik som kallas Bias-Variance-avvĂ€gning. Om vi betraktar möjliga felkĂ€llor i vĂ„r modell kan vi se tvĂ„ typer av fel:
- Bias-fel orsakas av att vÄr algoritm inte kan fÄnga relationen mellan trÀningsdata korrekt. Det kan bero pÄ att vÄr modell inte Àr tillrÀckligt kraftfull (underanpassning).
- Variansfel, som orsakas av att modellen approximera brus i indata istÀllet för meningsfulla relationer (överanpassning).
Under trÀning minskar bias-fel (eftersom vÄr modell lÀr sig att approximera data), och variansfel ökar. Det Àr viktigt att sluta trÀna - antingen manuellt (nÀr vi upptÀcker överanpassning) eller automatiskt (genom att införa regularisering) - för att förhindra överanpassning.
Slutsats
I denna lektion lÀrde du dig om skillnaderna mellan de olika API:erna för de tvÄ mest populÀra AI-ramverken, TensorFlow och PyTorch. Dessutom lÀrde du dig om ett mycket viktigt Àmne, överanpassning.
đ Utmaning
I de medföljande anteckningsböckerna hittar du 'uppgifter' lÀngst ner; arbeta igenom anteckningsböckerna och slutför uppgifterna.
Eftertest
Granskning & SjÀlvstudier
Gör lite forskning om följande Àmnen:
- TensorFlow
- PyTorch
- Ăveranpassning
StÀll dig sjÀlv följande frÄgor:
- Vad Àr skillnaden mellan TensorFlow och PyTorch?
- Vad Àr skillnaden mellan överanpassning och underanpassning?
Uppgift
I denna labb ska du lösa tvÄ klassificeringsproblem med hjÀlp av enkla och flerskiktade fullt anslutna nÀtverk med PyTorch eller TensorFlow.


