Tapefunksjon
Ved trening av et nevralt nettverk trenger vi en metode for å måle hvor godt modellen vår presterer. Dette gjøres ved hjelp av en tapfunksjon, som kvantifiserer forskjellen mellom de predikerte utgangene og de faktiske målene. Målet med treningen er å minimere dette tapet, slik at prediksjonene våre blir så nær de faktiske verdiene som mulig.
En av de mest brukte tapfunksjonene for binær klassifisering er kryssentropi-tapet, som fungerer godt med modeller som gir sannsynligheter som utdata.
Utledning av kryssentropi-tap
For å forstå kryssentropi-tapet, starter vi med maksimum likelihood-prinsippet. I et binært klassifiseringsproblem er målet å trene en modell som estimerer sannsynligheten y^ for at en gitt input tilhører klasse 1. Den faktiske etiketten y kan være enten 0 eller 1.
En god modell bør maksimere sannsynligheten for å forutsi alle treningsdataene korrekt. Dette betyr at vi ønsker å maksimere likelihood-funksjonen, som representerer sannsynligheten for å observere dataene gitt modellens prediksjoner.
For et enkelt trenings-eksempel, under antakelse om uavhengighet, kan likelihood skrives som:
P(y∣x)=y^y(1−y^)1−yDette uttrykket betyr ganske enkelt:
- Hvis y=1, da er P(y∣x)=y^, altså ønsker vi å maksimere y^ (sannsynligheten tildelt klasse 1);
- Hvis y=0, da er P(y∣x)=1−y^, altså ønsker vi å maksimere 1−y^ (sannsynligheten tildelt klasse 0).
P(y∣x) betyr sannsynligheten for å observere den faktiske klasseetiketten y gitt inputtene x.
For å gjøre optimaliseringen enklere, bruker vi log-sannsynlighet i stedet for selve sannsynligheten (siden logaritmer gjør produkter om til summer, noe som forenkler derivasjon):
logP(y∣x)=ylog(y^)+(1−y)log(1−y^)Siden målet er maksimering, definerer vi tapfunksjonen som negativ log-sannsynlighet, som vi ønsker å minimere:
L=−(ylog(y^)+(1−y)log(1−y^))Dette er binær kryssentropi-tapfunksjonen, som ofte brukes for klassifiseringsproblemer.
Gitt at variabelen output
representerer y^ for et bestemt trenings-eksempel, og variabelen target
representerer y for dette trenings-eksemplet, kan denne tapfunksjonen implementeres slik:
import numpy as np
loss = -(target * np.log(output) + (1 - target) * np.log(1 - output))
Hvorfor denne formelen?
Kryssentropi-tap har en tydelig intuitiv tolkning:
- Hvis y=1, forenkles tapet til −log(y^), noe som betyr at tapet er lavt når y^ er nær 1 og svært høyt når y^ er nær 0;
- Hvis y=0, forenkles tapet til −log(1−y^), noe som betyr at tapet er lavt når y^ er nær 0 og svært høyt når det er nær 1.
Siden logaritmer blir negativt store når input nærmer seg null, blir feil prediksjoner sterkt straffet, noe som oppmuntrer modellen til å gjøre selvsikre og korrekte prediksjoner.
Hvis flere eksempler sendes gjennom fremoverpropagering, beregnes det totale tapet som gjennomsnittlig tap på tvers av alle eksempler:
L=−N1i=1∑N(yilog(y^i)+(1−yi)log(1−y^i))hvor N er antall treningsprøver.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Can you explain how cross-entropy loss differs from mean squared error?
Why do we use the negative log-likelihood instead of just the likelihood?
Can you show how this loss function is used during neural network training?
Awesome!
Completion rate improved to 4
Tapefunksjon
Sveip for å vise menyen
Ved trening av et nevralt nettverk trenger vi en metode for å måle hvor godt modellen vår presterer. Dette gjøres ved hjelp av en tapfunksjon, som kvantifiserer forskjellen mellom de predikerte utgangene og de faktiske målene. Målet med treningen er å minimere dette tapet, slik at prediksjonene våre blir så nær de faktiske verdiene som mulig.
En av de mest brukte tapfunksjonene for binær klassifisering er kryssentropi-tapet, som fungerer godt med modeller som gir sannsynligheter som utdata.
Utledning av kryssentropi-tap
For å forstå kryssentropi-tapet, starter vi med maksimum likelihood-prinsippet. I et binært klassifiseringsproblem er målet å trene en modell som estimerer sannsynligheten y^ for at en gitt input tilhører klasse 1. Den faktiske etiketten y kan være enten 0 eller 1.
En god modell bør maksimere sannsynligheten for å forutsi alle treningsdataene korrekt. Dette betyr at vi ønsker å maksimere likelihood-funksjonen, som representerer sannsynligheten for å observere dataene gitt modellens prediksjoner.
For et enkelt trenings-eksempel, under antakelse om uavhengighet, kan likelihood skrives som:
P(y∣x)=y^y(1−y^)1−yDette uttrykket betyr ganske enkelt:
- Hvis y=1, da er P(y∣x)=y^, altså ønsker vi å maksimere y^ (sannsynligheten tildelt klasse 1);
- Hvis y=0, da er P(y∣x)=1−y^, altså ønsker vi å maksimere 1−y^ (sannsynligheten tildelt klasse 0).
P(y∣x) betyr sannsynligheten for å observere den faktiske klasseetiketten y gitt inputtene x.
For å gjøre optimaliseringen enklere, bruker vi log-sannsynlighet i stedet for selve sannsynligheten (siden logaritmer gjør produkter om til summer, noe som forenkler derivasjon):
logP(y∣x)=ylog(y^)+(1−y)log(1−y^)Siden målet er maksimering, definerer vi tapfunksjonen som negativ log-sannsynlighet, som vi ønsker å minimere:
L=−(ylog(y^)+(1−y)log(1−y^))Dette er binær kryssentropi-tapfunksjonen, som ofte brukes for klassifiseringsproblemer.
Gitt at variabelen output
representerer y^ for et bestemt trenings-eksempel, og variabelen target
representerer y for dette trenings-eksemplet, kan denne tapfunksjonen implementeres slik:
import numpy as np
loss = -(target * np.log(output) + (1 - target) * np.log(1 - output))
Hvorfor denne formelen?
Kryssentropi-tap har en tydelig intuitiv tolkning:
- Hvis y=1, forenkles tapet til −log(y^), noe som betyr at tapet er lavt når y^ er nær 1 og svært høyt når y^ er nær 0;
- Hvis y=0, forenkles tapet til −log(1−y^), noe som betyr at tapet er lavt når y^ er nær 0 og svært høyt når det er nær 1.
Siden logaritmer blir negativt store når input nærmer seg null, blir feil prediksjoner sterkt straffet, noe som oppmuntrer modellen til å gjøre selvsikre og korrekte prediksjoner.
Hvis flere eksempler sendes gjennom fremoverpropagering, beregnes det totale tapet som gjennomsnittlig tap på tvers av alle eksempler:
L=−N1i=1∑N(yilog(y^i)+(1−yi)log(1−y^i))hvor N er antall treningsprøver.
Takk for tilbakemeldingene dine!