Lager på lager
Kunna förklara varför flera lager kan känna igen mer komplicerade mönster.
Förkunskaper
- CNeuronnät — intuitionenkrävs
- CVrid på rattarna: vikterkrävs
Vardagsförklaring
Ett lager kan dra en rak gräns. Det räcker långt — men inte alltid.
Ett lager klarar detta: Men inte detta:
○ ○ │ ● ● ○ ● │ ● ○
○ ○ │ ● ● ● ○ │ ○ ●
↑ ↑
en rak linje räcker ingen rak linje funkar
Det högra mönstret (kallas XOR) kräver två gränser. Ett lager kan inte göra två.
Lösningen är att stapla lager. Första lagret drar några raka gränser. Andra lagret kombinerar dem: «innanför gräns 1 OCH utanför gräns 2».
Med flera lager kan nätet bygga hur krångliga former som helst av raka bitar — precis som du kan bygga en rund form av många små raka Lego-bitar.
Intuition
Hierarkin i ett bildnät är det tydligaste exemplet:
| Lager | Vad det hittar |
|---|---|
| 1 | kanter och ljusövergångar |
| 2 | hörn och bågar (kombinationer av kanter) |
| 3 | ögon, hjul, bokstäver (kombinationer av hörn) |
| 4 | ansikten, bilar, ord |
Varje lager bygger på det förra. Ingen har programmerat den ordningen — den uppstår av att varje lager bara ser utdata från det föregående.
Den avgörande detaljen: aktiveringsfunktionen.
Utan den är staplade lager meningslösa. Två raka gränser efter varandra blir bara... en rak gräns till. Matematiskt: en linjär funktion av en linjär funktion är fortfarande linjär. Tio lager utan aktiveringsfunktion kan exakt samma sak som ett.
Aktiveringsfunktionen är en liten böj mellan lagren. Den vanligaste, ReLU, är löjligt enkel:
om talet är negativt → 0
annars → talet självt
Den enda böjen är allt som behövs. Med den kan staplade lager bygga vilka former som helst; utan den kan de bara dra en linje.
Djupt eller brett? Ett enda tillräckligt brett lager kan i teorin approximera vilken funktion som helst. Men i praktiken behöver det vara absurt brett. Flera smalare lager är nästan alltid effektivare — precis som det är enklare att bygga något av delar som återanvänds än att göra allt i ett stycke.
Interaktivt
Se det själv i TensorFlow Playground (playground.tensorflow.org). Fem experiment, tio minuter.
| # | Gör | Vad som händer |
|---|---|---|
| 1 | Välj det runda datasetet, 0 dolda lager | felet fastnar högt — en rak linje kan inte omsluta en cirkel |
| 2 | Lägg till 1 dolt lager med 4 neuroner | felet sjunker, gränsen blir en mångkant runt cirkeln |
| 3 | Välj spiral-datasetet, behåll 1 lager | fastnar igen — spiralen är för krånglig |
| 4 | Lägg till ett andra lager | nu klarar den det, men behöver fler varv |
| 5 | Sätt aktivering = Linear på spiralen | felet fastnar oavsett hur många lager du lägger till |
Experiment 5 är det viktigaste. Det visar konkret att lager utan aktiveringsfunktion inte tillför någonting — hundra linjära lager är fortfarande bara en linje.
Titta också på bilderna inne i neuronerna medan den tränar. I första lagret ser du enkla raka gränser i olika riktningar. I andra lagret ser du hur de kombineras till hörn och områden. Hierarkin är synlig direkt.
Fråga att fundera på: vad händer om du lägger till tio lager på det enkla datasetet? (Svar: det fungerar fortfarande, men tränar långsammare och blir instabilare. Mer är inte alltid bättre.)
Behärskning innebär
- Förklarar vad ett extra lager tillför
- Vet varför aktiveringsfunktionen behövs
- Ger exempel på mönster som kräver flera lager
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- TensorFlow Playground (Apache-2.0) — Apache-2.0
- Dive into Deep Learning (CC BY-SA 4.0) — CC BY-SA 4.0
- CS Unplugged (CC BY-SA 4.0) — CC BY-SA 4.0