Generativ & Multimodal AI
Om stora språkmodeller lärde AI att förstå och manipulera mänskligt språk, så lärde nästa våg av modeller den att skapa. Vi går nu in i den generativa erans tidsålder, där AI inte bara analyserar befintligt innehåll, utan skapar helt nytt: text, bilder, musik, kod och video.
Tekniken bakom magin: Från Kaos till Konst
Medan LLMs bygger på Transformer-arkitekturen, drivs många av de mest kända bildgeneratorerna, som Midjourney och Stable Diffusion, av en annan idé: Diffusionsmodeller.
Problemet: Hur skapar man något från inget?
Tidigare generativa modeller som GANs (Generative Adversarial Networks) var smarta, men ofta instabila och svåra att träna. "Konstförfalskaren" och "konstexperten" kunde hamna i en låst duell, eller så lärde sig förfalskaren bara att skapa en sorts bild som var extra bra på att lura just den experten. Man behövde ett mer robust och kontrollerbart sätt att guida en AI från en slumpmässig startpunkt till ett specifikt, önskat konstverk.
Lösningen: Att skapa ur brus
Diffusionsprocessen är både elegant och kontraintuitiv. Den bygger på insikten att det är lätt att förstöra information, men svårt att återskapa den.
- Framåtprocessen (Brusläggning): Under träningen tar modellen en bild och gör det enkla: den lägger systematiskt till en liten mängd slumpmässigt "brus" (tänk TV-brus eller en mild snöstorm) i hundratals små steg, tills bilden är helt oigenkännlig – bara ett fält av statiskt kaos. Modellen får se hela denna resa från bild till brus.
- Bakåtprocessen (Brusreducering): Därefter tränas modellen på att göra den exakt motsatta, och otroligt svåra, resan. Dess enda uppgift är: "Givet denna extremt brusiga bild, och vetskapen om att vi är i steg 87 av 100, exakt vilken liten bit brus behöver jag ta bort för att komma till steg 86?" Genom att träna på miljontals bilder blir den en exceptionellt skicklig på att "eliminera brus".
En visuell representation av diffusionsprocessen. En serie bilder som går från vänster till höger. Längst till vänster, en klar bild av en katt. Pilen pekar till nästa bild, där katten är lite brusig. Nästa bild är ännu brusigare, och så vidare, tills bilden längst till höger är rent slumpmässigt brus. Under detta, en pil som pekar från höger till vänster, märkt "AI:ns uppgift: Lär dig att gå baklänges".
När modellen väl är tränad kan den skapa. Den startar med en helt ny, slumpmässig brusbild och använder sin inlärda förmåga för att steg för steg ta bort bruset. Men hur vet den om den ska forma fram en katt eller en astronaut? Den behöver en guide.
Den magiska guiden: Hur texten styr bilden
Detta är det verkliga genidraget. Brusreduceringen styrs inte i blindo. Vid varje litet steg får brusreduceringsmodellen hjälp av en annan, redan tränad multimodal AI (som t.ex. CLIP, som vi snart ska titta närmare på).
Processen vid varje steg ser ut ungefär så här:
- Gissning: Brusreduceraren tittar på den nuvarande brusiga bilden och gissar: "Jag tror att om jag tar bort detta brus, kommer bilden att se ut så här."
- Kontroll: Den multimodala "guiden" tittar på denna lilla, lite mindre brusiga gissning och jämför den med textprompten ("en astronaut som rider på en häst").
- Feedback: Guiden ger feedback: "Din gissning är 7/10 lik 'en astronaut som rider på en häst'. För att bli mer lik, försök förstärka de här pixlarna och tona ner de där."
- Justering: Brusreduceraren tar denna feedback och justerar vilket brus den tar bort i just detta steg.
Denna cykel av gissning, kontroll och justering upprepas hundratals gånger. Bilden av astronauten "dras" eller "lockas" fram ur bruset, styrd vid varje litet steg av textpromptens innebörd. Men hur fungerar denna "brusreducerare" och "guide" i praktiken?
Arkitekturen under huven: U-Net och textstyrning
Den "brusreducerare" vi talar om är oftast en specialiserad arkitektur som kallas U-Net. Den är designad för att förstå en bild på flera abstraktionsnivåer samtidigt, från fina detaljer till övergripande komposition, vilket gör den perfekt för att förutsäga och ta bort brus. Arkitekturen ser ut som bokstaven "U".
-
Den nedåtgående vägen (Encoder): Den vänstra sidan av "U:et" fungerar som en klassisk CNN-encoder. Den tar den brusiga bilden och processar den genom flera lager. För varje lager blir bilden mindre i storlek, men djupare i information. Längst ner i U:et har nätverket en mycket komprimerad, abstrakt förståelse av bildens innehåll.
-
Den uppåtgående vägen (Decoder): Den högra sidan av "U:et" gör den motsatta resan. Den bygger successivt upp bilden till sin ursprungliga storlek igen.
-
Genidraget – "Skip Connections": Det som gör ett U-Net unikt är genvägarna, eller "skip connections", som går direkt från vänster till höger sida. Dessa låter detaljrik information från de tidiga lagren flöda direkt över till de senare. Detta gör att U-Net kan kombinera den abstrakta förståelsen ("detta ska nog bli ett ansikte") med de finkorniga detaljerna ("...och här fanns det pixlar som såg ut som ett öga").
I denna arkitektur blir textstyrningen väldigt konkret. Den textvektor som skapas av CLIP-modellen injiceras i U-Net-modellen under den nedåtgående resan. Mer specifikt matas text-vektorn in i U-Nets attention-lager och fungerar som ett villkor (conditioning) som tvingar nätverket att tolka bruset i kontexten av textprompten. U-Net lär sig då att "När jag ser denna textvektor, då ska jag tolka detta brusiga mönster som en hjälm, inte som en måne."
En diagram som tydligt visar U-formen. Vänstra sidan av U:et visar block som blir mindre nedåt (Encoder/Downsampling). Högra sidan visar block som blir större uppåt (Decoder/Upsampling). Horisontella pilar (Skip Connections) kopplar samman motsvarande block på vänster och höger sida. Detta visar visuellt hur detaljinformation från tidiga lager kan "hoppa över" till senare lager för att hjälpa till att återskapa en skarp bild.
En av de stora utmaningarna med tidiga textstyrda modeller var att de ibland var lite för kreativa och ignorerade viktiga nyckelord i prompten. För att lösa detta utvecklades tekniken Classifier-Free Guidance (CFG), som idag är standard.
Man kan se CFG som att tvinga modellen att överdriva skillnaden mellan att "drömma fritt" och att följa en order. Vid varje brusreduceringssteg gör U-Net-modellen två beräkningar parallellt:
- En ovillkorad prediktion: Hur bilden skulle se ut utan någon textstyrning.
- En villkorad prediktion: Hur bilden skulle se ut med textstyrningen ("en astronaut").
Genom att beräkna skillnaden mellan dessa två kan modellen isolera exakt vad som gör bilden mer "astronaut-lik". Den slutgiltiga justeringen blir då att röra sig i den villkorade riktningen, men extra långt, förstärkt av denna skillnad. Detta är anledningen till att en hög CFG-skala ofta ger skarpare, mer detaljerade bilder som följer prompten nitiskt.
Formellt beräknas den slutgiltiga prediktionen med en enkel formel:
slutlig_prediktion = ovillkorad_prediktion + guidance_skala * (villkorad_prediktion - ovillkorad_prediktion)
Detta visar hur modellen tar sin "fria" gissning och knuffar den en extra bit i den riktning som texten pekar ut, där styrkan på knuffen bestäms av guidance_skala.
Effektivitetsrevolutionen: Latent Diffusion
De tidiga diffusionsmodellerna hade en enorm nackdel: de arbetade direkt i pixel-rymden, vilket är extremt beräkningsintensivt. Stable Diffusion bygger på genombrottet Latent Diffusion, som löser detta.
Idén är att inte köra den tunga diffusionsprocessen på den högupplösta bilden, utan på en mycket mindre, komprimerad version av den – en latent representation. För detta används en Variational Autoencoder (VAE).
- VAE Encoder: Komprimerar en högupplöst bild till en liten "latent karta" (t.ex. 64x64) som fångar dess koncept.
- VAE Decoder: Återskapar den högupplösta bilden från den lilla latenta kartan.
Med detta verktyg kan hela diffusionsprocessen flyttas:
- Start: Vi skapar en liten, slumpmässig 64x64 latent brus-karta.
- Diffusion i latent rymd: Hela den dyra U-Net-processen sker nu på denna lilla karta, vilket är exponentiellt snabbare.
- Final: När U-Net är klar har vi en "ren" 64x64 latent karta. Vi skickar denna genom VAE-decodern en enda gång för att få den färdiga, högupplösta bilden.
Detta är den enskilt största anledningen till att Stable Diffusion kan köras på vanliga konsumentgrafikkort. Den tunga arbetsbördan har flyttats från den dyra pixel-rymden till den billiga, latenta rymden.
Framtiden: Från slumpmässig diffusion till raka flöden
Även med Latent Diffusion kvarstår en fundamental ineffektivitet: den stegvisa brusreduceringen är en stokastisk (slumpmässig) process. Nätverket tar hundratals små, osäkra steg för att hitta från kaos till bild. Men tänk om man kunde lära modellen att hitta den absolut rakaste, snabbaste och mest direkta vägen?
Detta är idén bakom en nyare generation av generativa modeller, som Flow Matching och Rectified Flow. Istället för att lära sig att ta bort brus, lär sig dessa modeller ett vektorfält – en slags universell GPS för den latenta rymden.
- Målet: Istället för att fråga "vilket brus ska bort?", frågar man "Givet denna punkt i den latenta rymden, vilken är den exakta riktning och hastighet jag behöver röra mig i för att komma närmare en färdig bild?".
Processen kan liknas vid att omvandla en slingrande grusväg till en spikrak motorväg:
-
Träning (Hitta den raka vägen): Under träningen tar modellen en startpunkt (en slumpmässig brusbild) och en slutpunkt (en äkta bild). Istället för att simulera en slumpmässig resa mellan dem, drar modellen en rak linje mellan deras positioner i den latenta rymden. Modellen tränas sedan på att förutsäga den konstanta hastighet och riktning som krävs för att färdas längs just den linjen.
-
Generering (Följ den raka vägen): När modellen ska generera en ny bild startar den med en slumpmässig brusbild och frågar sin inlärda "GPS": "Vilken riktning?". Den tar sedan ett stort, självsäkert kliv i den riktningen. Eftersom vägen är mycket rakare, behövs inte hundratals små steg. Ofta kan bilder av mycket hög kvalitet genereras på bara 10-30 steg istället för 100-1000.
Denna övergång från en slumpmässig process (beskriven av stokastiska differentialekvationer) till en deterministisk (beskriven av ordinära differentialekvationer) är ett stort forskningsgenombrott. Tekniker som Rectified Flow, som används i Stability AI:s senaste modell Stable Diffusion 3, representerar nästa steg mot nästan omedelbar bildgenerering av hög kvalitet.
Multimodal AI
Problemet med tidigare AI var att de levde i separata världar. En språkmodell förstod text, en bildmodell förstod pixlar, men ingen av dem förstod att ordet "katt" och en bild på en katt representerade exakt samma koncept.
Multimodal AI löser detta genom att bygga en bro mellan dessa världar. Målet är att skapa ett gemensamt "meningsrum" – en slags universell karta där både bilder och ord kan placeras som punkter.
Grundstenen: Att Lära en Transformer att Se (Vision Transformer)
Men hur kan en Transformer, som är designad för att läsa sekvenser av ord, överhuvudtaget förstå en bild? Svaret är ett enkelt men genialt trick: Man får bilden att se ut som en mening.
- Klipp upp bilden: Först delas bilden upp i ett rutnät av mindre, fasta bildrutor, ungefär som att klippa ett fotografi i 16 eller 64 lika stora pusselbitar (dessa kallas "patches").
- Behandla varje bit som ett "ord": Varje liten pusselbit omvandlas sedan till en platt vektor (en lång rad med siffror). För att behålla positionsinformationen adderas, precis som i en språk-transformer, en positionskodning till varje "bild-vektor".
- Lägg till ett "Sammanfattnings-ord": I början av denna sekvens av bild-vektorer lägger man till en extra, speciell vektor:
[CLS]-token (classification token). Denna token har ingen bildinformation i sig, utan fungerar som en tom behållare som nätverket lär sig att fylla med en sammanfattning av hela bilden.
Plötsligt har vi inte längre en 2D-bild, utan en sekvens av "bild-ord". Denna sekvens kan vi sedan mata in i en helt vanlig Transformer-encoder. Precis som en språk-Transformer använder Attention för att förstå hur ordet "den" relaterar till "bollen", kan en Vision Transformer (ViT) använda Attention för att förstå hur "pusselbiten-med-ett-kattöra" relaterar till "pusselbiten-med-en-svans", oavsett var i bilden de befinner sig. Efter att ha passerat genom alla lager, används den slutgiltiga vektorn för [CLS]-token som en representation av hela bilden, redo att skickas till ett klassificeringshuvud.
Detta ger modellen en omedelbar, global förståelse av bildens innehåll, vilket visat sig vara extremt kraftfullt.
Den hemliga såsen: CLIP och Kontrastiv Träning
Den banbrytande tekniken för att skapa denna karta kallas CLIP (Contrastive Language-Image Pre-training). Träningsprocessen är genial i sin enkelhet:
- Samla data: Man samlar in hundratals miljoner bilder från internet tillsammans med deras tillhörande bildtexter.
- Två experter: Man använder två separata nätverk:
- En Bild-Encoder, som ofta är en Vision Transformer (ViT).
- En Text-Encoder (en vanlig Transformer).
- Det enda målet: Hela systemet tränas sedan med ett enda, enkelt mål: För en given bild och dess text, se till att deras vektorer hamnar så nära varandra som möjligt på den gemensamma kartan. Samtidigt, se till att vektorn för bilden hamnar så långt bort som möjligt från vektorerna för alla andra texter i träningsbatchen.
Hur uppnås detta matematiskt? När modellen tränas på en batch av, säg, 256 bild-text-par, gör den följande:
- Alla 256 bilder körs genom bild-encodern för att skapa 256 bildvektorer.
- Alla 256 texter körs genom text-encodern för att skapa 256 textvektorer.
- Modellen beräknar sedan likheten mellan varje bildvektor och varje textvektor. Ett vanligt mått för detta är cosinuslikhet, som mäter vinkeln mellan två vektorer i det flerdimensionella rummet. En liten vinkel (nära 0 grader) betyder hög likhet, och en stor vinkel (nära 90 grader) betyder låg likhet.
- Resultatet blir en 256x256-matris av likhetspoäng.
- Målet (contrastive loss): Träningsalgoritmen försöker nu justera vikterna i båda encodrarna för att uppnå en sak: att maximera poängen längs diagonalen i denna matris (där bild nr 1 matchas med text nr 1, bild nr 2 med text nr 2, etc.) och samtidigt minimera poängen på alla andra platser.
Genom att göra detta miljontals gånger tvingas nätverken att lära sig abstrakta koncept. Bild-encodern lär sig att ignorera oviktiga detaljer (om katten är svart eller vit) och fokusera på det som är "katthet". Text-encodern lär sig göra detsamma för ord.
Resultatet är en slags universell koncept-översättare för AI. Detta är den grundläggande mekanism som gör att du kan:
- Styra en diffusionsmodell med en textprompt (U-Net använder denna vektor).
- Ställa frågor till en bild (GPT-4V kan titta på en bild av ditt kylskåp och föreslå ett recept).
Denna förmåga att koppla samman språk och perception är ett avgörande steg mot en mer generell och mänsklig-liknande intelligens.
En enad arkitektur: Diffusion Transformers (DiT)
Vi såg precis hur Vision Transformers (ViT) lärde sig att "läsa" en bild genom att dela upp den i "ord" (patches). Detta var ett genombrott för bildklassificering. Men nyligen har forskare tagit idén ett steg längre: Vad händer om vi byter ut hela U-Net-arkitekturen inuti en diffusionsmodell mot en Transformer?
Resultatet är en Diffusion Transformer (DiT). Arkitekturen fungerar så här:
- Från bild till sekvens: Precis som med ViT, tar man den brusiga latenta bilden (t.ex. 64x64) och delar upp den i ett rutnät av mindre patcher (t.ex. 4x4). Varje patch omvandlas till en "token" eller vektor.
- Transformer som brusreducerare: Denna sekvens av "brus-tokens" matas sedan, tillsammans med information om tidsteget och textprompten, in i en stor Transformer-arkitektur.
- Global förståelse: Tack vare Attention-mekanismen kan Transformern omedelbart se och förstå relationerna mellan alla delar av bilden samtidigt. Den är inte begränsad av U-Nets lokala konvolutionella filter. Den kan resonera om att "om denna patch ska bli ett öga, då måste patchen långt borta på andra sidan bilden bli det andra ögat" i ett enda beräkningssteg.
- Från sekvens till bild: Outputen från Transformern är en ny sekvens av "renare" tokens, som sedan pusslas ihop igen för att forma den mindre brusiga latenta bilden, redo för nästa steg.
Modeller som OpenAI:s video-generator Sora och Stable Diffusion 3 bygger på denna DiT-arkitektur. Det visar på en kraftfull trend inom AI-forskningen: konvergens. De eleganta och skalbara principerna från Transformer-arkitekturen, som först knäckte språkkoden, visar sig nu vara så generella att de även håller på att bli den dominerande arkitekturen för att generera bilder och video. Den "uppmärksamhet" som en gång lärde sig förstå relationen mellan ord, lär sig nu att förstå relationen mellan pixlar i tid och rum.
Från Teori till Praktik: Bildgenerering med diffusers
Att träna en egen diffusionsmodell är en enorm uppgift, men att använda en färdigtränad modell är idag förvånansvärt enkelt tack vare bibliotek som diffusers från Hugging Face. Koden nedan visar hur du med några få rader Python kan ladda en toppmodern modell (Stable Diffusion) och generera en bild från en textprompt.
För att köra denna kod behöver du först installera biblioteken: pip install diffusers transformers torch accelerate.
# stable_diffusion_example.py
import torch
from diffusers import StableDiffusionPipeline
# 1. Ladda en färdigtränad modell
# Modellen laddas ner från Hugging Face Hub första gången du kör koden.
# "runwayml/stable-diffusion-v1-5" är en populär och vältestad version.
# torch_dtype=torch.float16 använder mindre minne, vilket kan vara nödvändigt.
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
)
# Flytta modellen till GPU:n om en sådan finns tillgänglig (rekommenderas starkt!)
if torch.cuda.is_available():
pipe = pipe.to("cuda")
else:
print("Kör på CPU. Detta kommer att vara mycket långsamt.")
# 2. Definiera din prompt
prompt = "A high-quality photo of an astronaut riding a horse on Mars"
# 3. Generera bilden
# Processen tar en stund, särskilt på en CPU.
image = pipe(prompt).images[0]
# 4. Spara eller visa bilden
image.save("astronaut_on_mars.png")
print("Bilden har sparats som astronaut_on_mars.png")
# För att visa bilden direkt (om du kör i en miljö som stödjer det)
# image.show()
Detta kodexempel illustrerar perfekt "använd etablerat verktyg"-principen. Den komplexa teorin om U-Nets, CLIP-styrning och latent diffusion är inkapslad bakom ett enkelt .pipe()-anrop. Detta gör det möjligt för utvecklare att snabbt bygga applikationer som utnyttjar kraften i generativ AI utan att behöva träna modellerna själva.
Oändliga Världar: Generativ AI och Procedurell Generering
Långt innan DALL-E och Midjourney fanns en form av generativ AI som var central för spelutveckling: Procedurell Generering (Procedural Content Generation, PCG). Istället för att manuellt designa varje grotta, planet eller träd, skriver utvecklarna algoritmer som kan skapa enorma, varierade spelvärldar automatiskt.
Spel som Minecraft använder PCG för att skapa sina oändliga landskap. No Man's Sky använder det för att generera ett helt universum med unika planeter, kompletta med egen flora och fauna. Detta är en tidigare form av generativ AI, där regler och algoritmer, snarare än djupinlärning, används för att skapa innehåll. Det visar att drömmen om att automatisera skapandet är en gammal drivkraft inom datavetenskapen som vi nyligen hittat nya sätt att utföra.
Perspektiv på den generativa eran
Det ekonomiska perspektivet: Kreativ Destruktion
Den generativa revolutionen har skapat en våg av det som ekonomen Joseph Schumpeter kallade kreativ destruktion. Nya möjligheter och yrken skapas, samtidigt som gamla hotas.
En central konflikt i den generativa eran handlar om den data som modellerna tränats på. År 2023 stämde bildbyrån Getty Images företaget Stability AI (skaparna av Stable Diffusion) med argumentet att deras AI hade tränats på miljontals upphovsrättsskyddade bilder från Gettys databas utan tillstånd.
- Gettys argument: Stability AI har begått storskalig upphovsrättsintrång. De menar att de AI-genererade bilderna ofta innehåller förvrängda versioner av Gettys vattenstämpel, vilket bevisar att modellen har "memorerat" och kopierat delar av deras skyddade material, inte bara "lärt sig" från det.
- Stability AI:s försvar (förväntat): Deras agerande faller under "fair use" (rimligt bruk), en juridisk doktrin som tillåter begränsad användning av upphovsrättsskyddat material för "transformativa" syften som forskning och utbildning. De hävdar att modellen lär sig stilar och koncept, precis som en mänsklig konstnär, och inte lagrar kopior av bilderna.
Detta rättsfall är avgörande eftersom dess utgång kan sätta en standard för framtiden: Är det lagligt att träna AI på all data som finns öppet på internet, eller måste AI-företag licensiera sin träningsdata? Svaret kommer att forma hela den framtida ekonomin för generativ AI.
- Nya Arbetsmarknader: Samtidigt som jobben för illustratörer och fotografer är under press, växer nya roller fram, som "Prompt Engineer" och "AI Content Creator". Frågan är om de nya jobben kommer att vara lika många eller lika välbetalda som de gamla.
Det sociologiska perspektivet: Sanningens Upplösning?
Den kanske mest djupgående konsekvensen av generativ AI är dess påverkan på vår gemensamma verklighetsuppfattning.
- Deepfakes och Desinformation: När vem som helst kan skapa fotorealistiska bilder och videor av händelser som aldrig har ägt rum, blir det allt svårare att skilja på sant och falskt. Risken för politisk desinformation, personliga påhopp och bedrägerier ökar exponentiellt.
- AI-influencers och Autenticitet: Vi ser nu framväxten av helt AI-skapade virtuella influencers med miljontals följare. Detta utmanar våra normer kring vad som är "äkta". Om en AI-karaktär kan skapa en genuin känslomässig koppling till sina följare, spelar det då någon roll att den inte "existerar" i traditionell mening? Detta är en direkt fortsättning på den sociala konstruktionen av verkligheten, men nu med AI som en aktiv deltagare.
Begreppet "The Liar's Dividend" (Lögnarens Utdelning) beskriver en farlig bieffekt av deepfake-teknologin. När vi vet att perfekt förfalskade videor existerar, blir det lättare för skyldiga personer att avfärda äkta bevis som "deepfakes". Teknologin ger alltså en fördel till lögnare genom att underminera förtroendet för all typ av inspelat material.
Detta leder till ett djupare psykologiskt problem: Verklighetens Plasticitet. Forskning om falska minnen har visat att det är förvånansvärt lätt att få människor att "minnas" händelser som aldrig har inträffat, bara genom att visa dem manipulerade bilder.
Frågan: Vad händer med vårt förtroende för våra egna sinnen i en värld full av AI-genererat innehåll? Om du ser en bild på dig själv på en plats du aldrig har besökt, men bilden ser helt verklig ut – hur påverkar det ditt minne av din egen historia? Generativ AI tvingar oss att bli mer kritiska, inte bara till media, utan till våra egna sinnen och minnen. Vilket ansvar har plattformar att vattenmärka eller på annat sätt tydligt märka AI-genererat innehåll? Och räcker det, när innehållet är designat för att vara så övertygande som möjligt?
Det kognitiva & psykologiska perspektivet: Verklighetens Plasticitet
Vad händer med vårt förtroende för våra egna sinnen i en värld full av AI-genererat innehåll? Forskning om falska minnen har visat att det är förvånansvärt lätt att få människor att "minnas" händelser som aldrig har inträffat, bara genom att visa dem manipulerade bilder. När vi ständigt översköljs av fotorealistiska men falska AI-bilder, riskerar vi att vårt förtroende för våra egna minnen och till och med vår egen världsuppfattning äventyras.
Om du ser en bild på dig själv på en plats du aldrig har besökt, men bilden ser helt verklig ut – hur påverkar det ditt minne av din egen historia? Generativ AI tvingar oss att bli mer kritiska, inte bara till media, utan till våra egna sinnen.
Övningar
Generativ & Multimodal AI
I dessa övningar kommer vi att agera dirigent för vår AI-orkester. Vi kommer att interagera med varje nyckelkomponent vi just diskuterat för att förstå deras unika roller i den kreativa processen.
Verktyg: Visual Studio Code med Python-installation, Google Colab.
Förberedelser: Installation
För de lokala övningarna, öppna en terminal i VS Code och installera de bibliotek vi behöver. diffusers är Hugging Faces bibliotek för diffusionsmodeller.
pip install transformers torch diffusers accelerate Pillow
Övning 1: Dirigenten i Aktion (Prompt Engineering)
Syfte: Att praktiskt förstå och bemästra "Instrument 1: Hjärnan". En modells förmåga att skapa en fantastisk bild är helt beroende av kvaliteten på de instruktioner (vektorer) den får från text-encodern. Detta är konsten att skriva bra prompter.
Verktyg: Använd en valfri webbaserad bildgenerator (t.ex. Midjourney, DALL-E 3, eller Stable Diffusion via webbgränssnitt).
Instruktioner:
- Grundläggande Prompt: Börja med en enkel prompt:
en katt. Notera resultatet. - Lägg till Detaljer (Subjekt & Miljö): Förfina prompten:
ett porträtt av en fluffig siamesisk katt med blå ögon, som sitter i en bokhylla fylld med gamla böcker. Jämför kvaliteten och detaljrikedomen. - Styr Stilen: Lägg till stil-modifierare. Prova:
...i stil av Van Gogh...fotorealistiskt, 8k, studiobelysning, professionellt fotografi...anime-stil, digital konst
- Använd Negativa Prompter: De flesta verktyg har ett fält för "negativ prompt", där du specificerar vad du inte vill se. Använd din bästa prompt från steget ovan, men generera en version med en negativ prompt som
dålig anatomi, extra ben, suddig, tecknad. Ser du en skillnad i kvalitet?
Du har precis interagerat direkt med modellens "hjärna". Hur påverkar specificiteten i din prompt resultatet? Varför tror du att en negativ prompt hjälper modellen att skapa bättre bilder? (Svar: Det hjälper till att styra den bort från vanliga fellägen den sett under träningen).
Övning 2: Bron i Aktion (Bild-till-Text & Visuell Frågestund)
Syfte: Att testa "Instrument 2: Bron" och se hur en multimodal modell kan översätta från pixelspråk till ordspråk.
Verktyg: Visual Studio Code (denna övning kräver ingen GPU).
Instruktioner:
- Skapa en fil: Skapa filen
test_the_bridge.py. - Del 1: Bildbeskrivning (Image Captioning)
from transformers import pipeline
from PIL import Image
import requests
# Ladda en pipeline för bildbeskrivning
captioner = pipeline("image-to-text", model="Salesforce/blip-image-captioning-large")
# Använd bilden du skapade i förra övningen
# Se till att filen 'astronaut_horse.png' ligger i samma mapp,
# eller byt URL till en bild på nätet.
# image_url = "http://images.cocodataset.org/val2017/000000039769.jpg" # Exempel på nätet
image_path = "astronaut_horse.png"
description = captioner(image_path)
print("--- Bildbeskrivning ---")
print(description[0]['generated_text']) - Del 2: Visuell Frågestund (Visual Question Answering - VQA)
# Ladda en pipeline för VQA
vqa_pipeline = pipeline("visual-question-answering", model="dandelin/vilt-b32-finetuned-vqa")
question = "Vad gör astronauten?"
answer = vqa_pipeline(image=image_path, question=question)
print("\n--- Visuell Frågestund ---")
print(f"Fråga: {question}")
print(f"Svar: {answer[0]['answer']} (Säkerhet: {answer[0]['score']:.2%})")
question2 = "Vilken färg har hästen?"
answer2 = vqa_pipeline(image=image_path, question=question2)
print(f"\nFråga: {question2}")
print(f"Svar: {answer2[0]['answer']} (Säkerhet: {answer2[0]['score']:.2%})") - Kör och Analysera: Kör skriptet (
python test_the_bridge.py). Hur väl lyckades modellen beskriva bilden? Svarade den korrekt på dina frågor? Du har nu sett CLIP-liknande modeller i praktiken – de har skapat en bro mellan pixlar och ord.
Del 3: Hitta den Bästa Matchningen (Zero-Shot Classification)
Syfte: Att direkt se CLIP-modellens kärnfunktion: att mäta likheten mellan en bild och flera textbeskrivningar.
- Lägg till i din fil
test_the_bridge.py:# Ladda en pipeline för zero-shot image classification med en CLIP-modell
clip_pipeline = pipeline("zero-shot-image-classification", model="openai/clip-vit-large-patch14")
# Samma bild som innan
image_to_classify = image_path
# En lista med möjliga beskrivningar
candidate_labels = ["ett foto av en hund", "en teckning av en katt", "en astronaut som rider på en häst", "ett landskap"]
# Be modellen att beräkna likheten för varje etikett
scores = clip_pipeline(image_to_classify, candidate_labels=candidate_labels)
print("\n--- Zero-Shot Klassificering ---")
print(f"Bilden matchades mot etiketterna:")
for score in scores:
print(f"- {score['label']}: {score['score']:.2%}") - Kör och Analysera: Kör skriptet igen. Se hur modellen korrekt identifierar den bästa textbeskrivningen för bilden, trots att den aldrig explicit tränats på just dessa etiketter. Detta är kraften i det delade "meningsrummet".
Övning 3: Konstnären i Aktion (Stable Diffusion med Kod)
Syfte: Att interagera med "Instrument 4: Konstnären" och styra diffusionsprocessen direkt från Python, samt att utforska den latenta rymden.
Verktyg: Google Colab (för att få tillgång till en GPU).
Del 1: Generera en Bild
Instruktioner:
-
Sätt upp Colab: Öppna en ny Colab-notebook och se till att du har aktiverat en
T4 GPUunderRuntime -> Change runtime type. -
Kör Koden: Klistra in och kör följande kod i en cell i din notebook.
# 1. Installera nödvändiga bibliotek
!pip install diffusers transformers accelerate invisible_watermark -q
import torch
from diffusers import StableDiffusionPipeline
# 2. Ladda Stable Diffusion-modellen.
# Detta kan ta några minuter första gången då modellen laddas ner.
# 'torch_dtype=torch.float16' gör att den använder mindre minne.
model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
# Skicka modellen till GPU:n
pipe = pipe.to("cuda")
# 3. Definiera din prompt
prompt = "ett foto av en astronaut som rider på en häst på månen"
# 4. Generera och spara bilden
# Detta är steget där diffusionsprocessen körs.
image = pipe(prompt).images[0]
# Visa bilden direkt i Colab
display(image)
# Spara bilden till en fil
image.save("astronaut_horse.png") -
Experimentera:
- Ändra
prompttill något helt annat och kör igen. - Styr processen: Lägg till parametrar i
pipe()-anropet för att styra "konstnären". Prova att ändra dessa och se vad som händer:num_inference_steps=15: Hur många steg ska brusreduceringen ta? (Färre = snabbare men sämre kvalitet).guidance_scale=15.0: Hur strikt ska modellen följa din prompt? (Högre värde = mer strikt, Lägre värde = mer kreativ).
- Ändra
Du har nu direkt styrt diffusionsprocessen. Hur påverkade num_inference_steps och guidance_scale den slutgiltiga bilden? Du har gått från att bara ge en beställning till att styra exakt hur konstnären ska arbeta.
Del 2: Utforska den Latenta Rymden
Syfte: Att se den komprimerade "idén" av en bild som diffusionsprocessen faktiskt arbetar med.
- Lägg till en ny cell i Colab: Klistra in och kör följande kod. Den använder
pipefrån Del 1.import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np
# Ladda bilden vi just skapade
image_path = "astronaut_horse.png"
image = Image.open(image_path).convert("RGB")
# Förbered bilden för VAE-encodern
transform = transforms.Compose([
transforms.Resize((512, 512)),
transforms.ToTensor(),
transforms.Normalize([0.5], [0.5])
])
tensor = transform(image).unsqueeze(0).to("cuda", dtype=torch.float16)
# 1. Koda bilden till den latenta rymden
with torch.no_grad():
latent_representation = pipe.vae.encode(tensor).latent_dist.sample() * pipe.vae.config.scaling_factor
# 2. Visualisera den latenta representationen
# Vi visar bara de 3 första kanalerna som RGB
latent_viz = latent_representation[0].cpu().numpy()
latent_viz = (latent_viz - latent_viz.min()) / (latent_viz.max() - latent_viz.min())
plt.imshow(np.transpose(latent_viz[:3], (1, 2, 0)))
plt.title("Latent Representation (64x64)")
plt.show()
# 3. Avkoda den latenta representationen tillbaka till en bild
with torch.no_grad():
decoded_image_tensor = pipe.vae.decode(latent_representation / pipe.vae.config.scaling_factor).sample
# Konvertera tillbaka till en bild som kan visas
decoded_image = pipe.image_processor.postprocess(decoded_image_tensor, output_type="pil")[0]
print("Bild återskapad från latent rymd:")
display(decoded_image)
Du har nu sett den komprimerade 'idén' av en bild (den lilla, färggranna och brusiga bilden). Hur hjälper det att köra den tunga diffusionsprocessen på denna lilla latenta bild istället för den stora originalbilden, när det gäller hastighet och minnesanvändning?
Övning 4: Upplev Framtiden (Stable Diffusion 3)
Syfte: Att förstå den inverkan en arkitektonisk förändring (från U-Net till Transformer) har på en modells prestanda.
Denna övning är förberedd för Stable Diffusion 3, den första modellen i serien som bygger på den nya Diffusion Transformer (DiT)-arkitekturen. När modellen blir allmänt tillgänglig i diffusers-biblioteket kommer du att kunna köra den med en minimal kodändring.
Instruktioner (När SD3 är tillgänglig):
- Gå tillbaka till din Colab-notebook från Övning 3.
- Byt modell-ID: Hitta raden
model_id = "runwayml/stable-diffusion-v1-5"och byt ut den mot det officiella modell-ID:t för Stable Diffusion 3 (t.ex."stabilityai/stable-diffusion-3-medium"). - Kör om cellen: Ladda den nya modellen och generera bilder med exakt samma prompter som du använde tidigare.
- Stable Diffusion 3 använder en Transformer-arkitektur (DiT) istället för ett U-Net. Jämför bilderna du genererar med SD3 med de från den gamla SD1.5-modellen.
- Märker du någon skillnad i kvalitet, särskilt när det gäller att följa komplexa prompter eller att rendera text korrekt inuti bilden? Detta är den praktiska effekten av ett arkitektoniskt skifte.
Övning 5: Kreativ Workshop - AI som din Partner
Syfte: Att utforska olika sätt att samarbeta med en bildgenerator som en kreativ partner, istället för att bara se den som en orderutförare.
Instruktioner:
- Välj ett enkelt koncept, t.ex. "ett ensamt träd på en kulle".
- Metod 1: Den exakta regissören. Skriv en extremt detaljerad prompt för att försöka styra allt: art, årstid, tid på dygnet, väder, komposition och stil. Blev bilden som du tänkte dig?
- Metod 2: Den nyfikna utforskaren. Skriv en mycket kort och vag prompt ("ensamt träd"). Välj det mest intressanta förslaget och bygg vidare på det genom att variera eller "remixa" bilden i en visuell dialog med AI:n.
- Jämför och reflektera: Vilken process var mest kreativ? Vilken ledde till det mest överraskande resultatet? Beskriv skillnaden mellan att använda AI för att förverkliga en färdig idé, jämfört med att använda den för att upptäcka en ny.
Övning 6: Deepfake eller Verklighet? (Kritiskt Test)
Syfte: Att testa och träna din egen förmåga att skilja på äkta och AI-genererade bilder.
Instruktioner:
- Gå till en webbsida designad för att testa din förmåga att se skillnad på äkta foton och AI-genererade bilder (t.ex. "Which Face Is Real?").
- Genomför testet. Hur många rätt fick du?
- Diskutera i grupp: Vilka ledtrådar letade ni efter? Blev ni överraskade över hur svårt det var? Vilka konsekvenser får detta för vårt förtroende för det vi ser online?
Övning 7: Sociologisk Analys - AI-influencern
Syfte: Att analysera det sociala fenomenet med virtuella, AI-drivna influencers.
Instruktioner:
- Hitta en AI-influencer på sociala medier.
- Skrolla igenom flödet och läs kommentarerna från följarna.
- Analysera i grupp: Hur interagerar följarna? Behandlar de den som ett företag, en karaktär eller en person? Varför tror ni att folk väljer att engagera sig med en karaktär de vet inte är "verklig"? Vad säger detta om "autenticitet" i den digitala tidsåldern?
Övning 8: Etiken kring Skapandet (Diskussion)
Syfte: Att reflektera över de komplexa samhälleliga och etiska frågor som den generativa revolutionen för med sig.
Diskutera i grupp:
- Upphovsrätt och Ägande: Läs textrutan om Getty Images stämning mot Stability AI i läroboken.
- Vems "fel" är det om en AI genererar en bild som är väldigt lik en upphovsrättsskyddad bild? Är det användarens som skrev prompten? Företaget som skapade AI:n? Eller kan en AI inte begå upphovsrättsbrott?
- Anser ni att det är rättvist att träna AI-modeller på bilder från hela internet utan att fråga konstnärerna om lov? Varför/varför inte?
- Sanningens Upplösning & "The Liar's Dividend":
- Brainstorma fram tre konkreta exempel på hur deepfake-teknologi skulle kunna användas för att skada individer eller samhället.
- Hur kan vi som samhälle skydda oss mot desinformation när det blir omöjligt att med blotta ögat se skillnad på äkta och AI-genererat material? Vilket ansvar har plattformar som Facebook, X och TikTok?