AI-For-Beginners/translations/sv/lessons/5-NLP/17-GenerativeNetworks
localizeflow[bot] c55d809b23 chore(i18n): sync translations with latest source changes (chunk 1/1, 201 changes) 2026-01-30 02:00:53 +00:00
..
lab chore(i18n): sync translations with latest source changes (chunk 1/1, 201 changes) 2026-01-30 02:00:53 +00:00
GenerativePyTorch.ipynb Fallback snapshot commit due to git add failure 2026-01-15 12:40:29 +00:00
GenerativeTF.ipynb Fallback snapshot commit due to git add failure 2026-01-15 12:40:29 +00:00
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 201 changes) 2026-01-30 02:00:53 +00:00

README.md

Generativa nätverk

Quiz före föreläsning

Recurrent Neural Networks (RNNs) och deras varianter med grindade celler, såsom Long Short Term Memory Cells (LSTMs) och Gated Recurrent Units (GRUs), erbjuder en mekanism för språkmodellering genom att de kan lära sig ordordning och ge förutsägelser för nästa ord i en sekvens. Detta gör att vi kan använda RNNs för generativa uppgifter, såsom vanlig textgenerering, maskinöversättning och till och med bildbeskrivning.

Tänk på alla gånger du har haft nytta av generativa uppgifter, som textkomplettering när du skriver. Gör lite research om dina favoritapplikationer för att se om de använde RNNs.

I RNN-arkitekturen som vi diskuterade i föregående enhet, producerade varje RNN-enhet nästa dolda tillstånd som en output. Men vi kan också lägga till en annan output till varje återkommande enhet, vilket skulle göra det möjligt att generera en sekvens (som är lika lång som den ursprungliga sekvensen). Dessutom kan vi använda RNN-enheter som inte tar emot en input vid varje steg, utan bara tar en initial tillståndsvektor och sedan producerar en sekvens av outputs.

Detta möjliggör olika neurala arkitekturer som visas i bilden nedan:

Bild som visar vanliga mönster för återkommande neurala nätverk.

Bild från blogginlägget Unreasonable Effectiveness of Recurrent Neural Networks av Andrej Karpaty

  • One-to-one är ett traditionellt neuralt nätverk med en input och en output
  • One-to-many är en generativ arkitektur som tar emot ett inputvärde och genererar en sekvens av outputvärden. Till exempel, om vi vill träna ett nätverk för bildbeskrivning som skulle producera en textuell beskrivning av en bild, kan vi ta en bild som input, passera den genom en CNN för att få dess dolda tillstånd och sedan låta en återkommande kedja generera beskrivningen ord för ord.
  • Many-to-one motsvarar RNN-arkitekturerna vi beskrev i föregående enhet, såsom textklassificering.
  • Many-to-many, eller sequence-to-sequence, motsvarar uppgifter som maskinöversättning, där vi först har en RNN som samlar all information från inputsekvensen till det dolda tillståndet, och en annan RNN-kedja som rullar ut detta tillstånd till outputsekvensen.

I denna enhet kommer vi att fokusera på enkla generativa modeller som hjälper oss att generera text. För enkelhetens skull kommer vi att använda tokenisering på teckennivå.

Vi kommer att träna denna RNN att generera text steg för steg. Vid varje steg tar vi en sekvens av tecken med längden nchars och ber nätverket att generera nästa outputtecken för varje inputtecken:

Bild som visar ett exempel på RNN-generering av ordet 'HELLO'.

När vi genererar text (under inferens), börjar vi med en prompt, som passeras genom RNN-celler för att generera dess mellanliggande tillstånd, och sedan börjar genereringen från detta tillstånd. Vi genererar ett tecken i taget och skickar tillståndet och det genererade tecknet till en annan RNN-cell för att generera nästa, tills vi har genererat tillräckligt många tecken.

Bild av författaren

✍️ Övningar: Generativa nätverk

Fortsätt ditt lärande i följande notebooks:

Mjuk textgenerering och temperatur

Outputen från varje RNN-cell är en sannolikhetsfördelning av tecken. Om vi alltid tar tecknet med högst sannolikhet som nästa tecken i den genererade texten, kan texten ofta bli "cyklisk" mellan samma teckensekvenser om och om igen, som i detta exempel:

today of the second the company and a second the company ...

Men om vi tittar på sannolikhetsfördelningen för nästa tecken, kan det vara så att skillnaden mellan några av de högsta sannolikheterna inte är stor, t.ex. ett tecken kan ha sannolikheten 0.2, ett annat 0.19, etc. Till exempel, när vi letar efter nästa tecken i sekvensen 'play', kan nästa tecken lika gärna vara ett mellanslag eller e (som i ordet player).

Detta leder oss till slutsatsen att det inte alltid är "rättvist" att välja tecknet med högst sannolikhet, eftersom att välja det näst högsta fortfarande kan leda till meningsfull text. Det är klokare att sampla tecken från sannolikhetsfördelningen som nätverket ger som output. Vi kan också använda en parameter, temperatur, som kommer att jämna ut sannolikhetsfördelningen om vi vill lägga till mer slumpmässighet, eller göra den brantare om vi vill hålla oss mer till tecken med högst sannolikhet.

Utforska hur denna mjuka textgenerering implementeras i de notebooks som är länkade ovan.

Slutsats

Även om textgenerering kan vara användbar i sig, kommer de största fördelarna från möjligheten att generera text med RNNs från en initial funktionsvektor. Till exempel används textgenerering som en del av maskinöversättning (sequence-to-sequence, i detta fall används tillståndsvektorn från encoder för att generera eller dekoda det översatta meddelandet), eller för att generera textuell beskrivning av en bild (i vilket fall funktionsvektorn skulle komma från CNN-extraktorn).

🚀 Utmaning

Ta några lektioner på Microsoft Learn om detta ämne

Quiz efter föreläsning

Granskning & Självstudier

Här är några artiklar för att utöka din kunskap

Uppgift

Vi har sett hur man genererar text tecken för tecken. I labben kommer du att utforska textgenerering på ordnivå.