Förlustfunktion
Vid träning av ett neuralt nätverk behöver vi ett sätt att mäta hur väl vår modell presterar. Detta görs med hjälp av en förlustfunktion, som kvantifierar skillnaden mellan de förutsagda utgångarna och de faktiska målvärdena. Målet med träningen är att minimera denna förlust, så att våra förutsägelser blir så nära de faktiska värdena som möjligt.
En av de vanligaste förlustfunktionerna för binär klassificering är korsentropiförlusten, som fungerar väl med modeller som ger sannolikhetsutdata.
Härledning av korsentropiförlust
För att förstå korsentropiförlust börjar vi med 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 faktiska etiketten y kan vara antingen 0 eller 1.
En bra modell bör maximera sannolikheten att korrekt förutsäga alla träningsdata. Detta innebär att vi vill maximera likelihoodfunktionen, som representerar sannolikheten att observera data givet modellens förutsägelser.
För ett enskilt träningsfall, under antagande om oberoende, kan likelihooden skrivas som:
P(y∣x)=y^y(1−y^)1−yDetta uttryck betyder helt enkelt:
- Om y=1, då är P(y∣x)=y^, vilket innebär att vi vill maximera y^ (sannolikheten tilldelad till klass 1);
- Om y=0, då är P(y∣x)=1−y^, vilket innebär att vi vill maximera 1−y^ (sannolikheten tilldelad till klass 0).
P(y∣x) betyder sannolikheten att observera den faktiska klassetiketten y givet indata x.
För att förenkla optimeringen använder vi log-likelihood istället för själva likelihood (eftersom logaritmer omvandlar produkter till summor, vilket gör derivering enklare):
logP(y∣x)=ylog(y^)+(1−y)log(1−y^)Eftersom målet är maximering definierar vi förlustfunktionen som den negativa log-likelihooden, vilket vi vill minimera:
L=−(ylog(y^)+(1−y)log(1−y^))Detta är binär korsentropiförlustfunktion, vanligt förekommande vid klassificeringsproblem.
Givet att variabeln output
representerar y^ för ett specifikt träningsfall, och variabeln target
representerar y för detta träningsfall, 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, korrekta förutsägelser.
Om flera exempel skickas under framåtriktad propagiering beräknas den totala förlusten som genomsnittlig förlust ö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 behöver vi ett sätt att mäta hur väl vår modell presterar. Detta görs med hjälp av en förlustfunktion, som kvantifierar skillnaden mellan de förutsagda utgångarna och de faktiska målvärdena. Målet med träningen är att minimera denna förlust, så att våra förutsägelser blir så nära de faktiska värdena som möjligt.
En av de vanligaste förlustfunktionerna för binär klassificering är korsentropiförlusten, som fungerar väl med modeller som ger sannolikhetsutdata.
Härledning av korsentropiförlust
För att förstå korsentropiförlust börjar vi med 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 faktiska etiketten y kan vara antingen 0 eller 1.
En bra modell bör maximera sannolikheten att korrekt förutsäga alla träningsdata. Detta innebär att vi vill maximera likelihoodfunktionen, som representerar sannolikheten att observera data givet modellens förutsägelser.
För ett enskilt träningsfall, under antagande om oberoende, kan likelihooden skrivas som:
P(y∣x)=y^y(1−y^)1−yDetta uttryck betyder helt enkelt:
- Om y=1, då är P(y∣x)=y^, vilket innebär att vi vill maximera y^ (sannolikheten tilldelad till klass 1);
- Om y=0, då är P(y∣x)=1−y^, vilket innebär att vi vill maximera 1−y^ (sannolikheten tilldelad till klass 0).
P(y∣x) betyder sannolikheten att observera den faktiska klassetiketten y givet indata x.
För att förenkla optimeringen använder vi log-likelihood istället för själva likelihood (eftersom logaritmer omvandlar produkter till summor, vilket gör derivering enklare):
logP(y∣x)=ylog(y^)+(1−y)log(1−y^)Eftersom målet är maximering definierar vi förlustfunktionen som den negativa log-likelihooden, vilket vi vill minimera:
L=−(ylog(y^)+(1−y)log(1−y^))Detta är binär korsentropiförlustfunktion, vanligt förekommande vid klassificeringsproblem.
Givet att variabeln output
representerar y^ för ett specifikt träningsfall, och variabeln target
representerar y för detta träningsfall, 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, korrekta förutsägelser.
Om flera exempel skickas under framåtriktad propagiering beräknas den totala förlusten som genomsnittlig förlust ö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!