Förlustfunktion
Vid träning av ett neuralt nätverk är det nödvändigt att mäta hur exakt modellen förutsäger de korrekta resultaten. Detta görs med hjälp av en förlustfunktion, som beräknar skillnaden mellan modellens förutsägelser och de faktiska målvärdena. Målet med träningen är att minimera denna förlust, så att förutsägelserna blir så nära de sanna utdata som möjligt.
För binär klassificering är en av de mest använda förlustfunktionerna korsentropiförlusten, som är särskilt effektiv för modeller som ger sannolikheter som utdata.
Härledning av korsentropiförlust
För att förstå korsentropiförlusten kan man utgå från maximum likelihood-principen. I ett problem med binär klassificering är målet att träna en modell som uppskattar sannolikheten y^ att en given indata tillhör klass 1. Den sanna etiketten y kan anta ett av två värden: 0 eller 1.
En effektiv modell bör tilldela höga sannolikheter till korrekta förutsägelser. Denna idé formaliseras genom likelihoodfunktionen, som representerar sannolikheten att observera de faktiska data givet modellens förutsägelser.
För ett enskilt träningsexempel, under antagande om oberoende, kan likelihood uttryckas som:
P(y∣x)=y^y(1−y^)1−yDetta uttryck betyder följande:
- Om y=1, då P(y∣x)=y^ — modellen bör tilldela en hög sannolikhet till klass 1;
- Om y=0, då P(y∣x)=1−y^ — modellen bör tilldela en hög sannolikhet till klass 0.
I båda fallen är målet att maximera sannolikheten som modellen tilldelar den korrekta klassen.
P(y∣x) betyder sannolikheten att observera den faktiska klassetiketten y givet indata x.
För att förenkla optimeringen används log-likelihood istället för sannolikhetsfunktionen eftersom logaritmering omvandlar produkter till summor, vilket gör derivering enklare:
logP(y∣x)=ylog(y^)+(1−y)log(1−y^)Eftersom träningen syftar till att maximera log-likelihood definieras förlustfunktionen som dess negativa värde så att optimeringsprocessen blir ett minimeringsproblem:
L=−(ylog(y^)+(1−y)log(1−y^))Detta är binär korsentropiförlustfunktion, som ofta används för klassificeringsproblem.
Givet att variabeln output representerar y^ för ett visst tränings-exempel, och variabeln target representerar y för detta tränings-exempel, kan denna förlustfunktion implementeras enligt följande:
import numpy as np
loss = -(target * np.log(output) + (1 - target) * np.log(1 - output))
Varför denna formel?
Korsentropiförlust har en tydlig intuitiv tolkning:
- Om y=1 förenklas förlusten till −log(y^), vilket innebär att förlusten är låg när y^ är nära 1 och mycket hög när y^ är nära 0;
- Om y=0 förenklas förlusten till −log(1−y^), vilket innebär att förlusten är låg när y^ är nära 0 och mycket hög när den är nära 1.
Eftersom logaritmer växer negativt stort när deras indata närmar sig noll, straffas felaktiga förutsägelser kraftigt, vilket uppmuntrar modellen att göra säkra och korrekta förutsägelser.
Om flera exempel skickas under framåtriktad propagiering beräknas den totala förlusten som medelförlusten över alla exempel:
L=−N1i=1∑N(yilog(y^i)+(1−yi)log(1−y^i))där N är antalet träningsprover.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 4
Förlustfunktion
Svep för att visa menyn
Vid träning av ett neuralt nätverk är det nödvändigt att mäta hur exakt modellen förutsäger de korrekta resultaten. Detta görs med hjälp av en förlustfunktion, som beräknar skillnaden mellan modellens förutsägelser och de faktiska målvärdena. Målet med träningen är att minimera denna förlust, så att förutsägelserna blir så nära de sanna utdata som möjligt.
För binär klassificering är en av de mest använda förlustfunktionerna korsentropiförlusten, som är särskilt effektiv för modeller som ger sannolikheter som utdata.
Härledning av korsentropiförlust
För att förstå korsentropiförlusten kan man utgå från maximum likelihood-principen. I ett problem med binär klassificering är målet att träna en modell som uppskattar sannolikheten y^ att en given indata tillhör klass 1. Den sanna etiketten y kan anta ett av två värden: 0 eller 1.
En effektiv modell bör tilldela höga sannolikheter till korrekta förutsägelser. Denna idé formaliseras genom likelihoodfunktionen, som representerar sannolikheten att observera de faktiska data givet modellens förutsägelser.
För ett enskilt träningsexempel, under antagande om oberoende, kan likelihood uttryckas som:
P(y∣x)=y^y(1−y^)1−yDetta uttryck betyder följande:
- Om y=1, då P(y∣x)=y^ — modellen bör tilldela en hög sannolikhet till klass 1;
- Om y=0, då P(y∣x)=1−y^ — modellen bör tilldela en hög sannolikhet till klass 0.
I båda fallen är målet att maximera sannolikheten som modellen tilldelar den korrekta klassen.
P(y∣x) betyder sannolikheten att observera den faktiska klassetiketten y givet indata x.
För att förenkla optimeringen används log-likelihood istället för sannolikhetsfunktionen eftersom logaritmering omvandlar produkter till summor, vilket gör derivering enklare:
logP(y∣x)=ylog(y^)+(1−y)log(1−y^)Eftersom träningen syftar till att maximera log-likelihood definieras förlustfunktionen som dess negativa värde så att optimeringsprocessen blir ett minimeringsproblem:
L=−(ylog(y^)+(1−y)log(1−y^))Detta är binär korsentropiförlustfunktion, som ofta används för klassificeringsproblem.
Givet att variabeln output representerar y^ för ett visst tränings-exempel, och variabeln target representerar y för detta tränings-exempel, kan denna förlustfunktion implementeras enligt följande:
import numpy as np
loss = -(target * np.log(output) + (1 - target) * np.log(1 - output))
Varför denna formel?
Korsentropiförlust har en tydlig intuitiv tolkning:
- Om y=1 förenklas förlusten till −log(y^), vilket innebär att förlusten är låg när y^ är nära 1 och mycket hög när y^ är nära 0;
- Om y=0 förenklas förlusten till −log(1−y^), vilket innebär att förlusten är låg när y^ är nära 0 och mycket hög när den är nära 1.
Eftersom logaritmer växer negativt stort när deras indata närmar sig noll, straffas felaktiga förutsägelser kraftigt, vilket uppmuntrar modellen att göra säkra och korrekta förutsägelser.
Om flera exempel skickas under framåtriktad propagiering beräknas den totala förlusten som medelförlusten över alla exempel:
L=−N1i=1∑N(yilog(y^i)+(1−yi)log(1−y^i))där N är antalet träningsprover.
Tack för dina kommentarer!