Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Förlustfunktion | Neuronnätverk Från Grunden
Introduktion till neurala nätverk

bookFö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^\hat{y} att en given indata tillhör klass 1. Den faktiska etiketten yy 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(yx)=y^y(1y^)1yP(y|x) = \hat{y}^y(1 - \hat{y})^{1-y}

Detta uttryck betyder helt enkelt:

  • Om y=1y = 1, då är P(yx)=y^P(y|x) = \hat{y}, vilket innebär att vi vill maximera y^\hat{y} (sannolikheten tilldelad till klass 1);
  • Om y=0y = 0, då är P(yx)=1y^P(y|x) = 1 - \hat{y}, vilket innebär att vi vill maximera 1y^1 - \hat{y} (sannolikheten tilldelad till klass 0).
Note
Notering

P(yx)P(y|x) betyder sannolikheten att observera den faktiska klassetiketten yy givet indata xx.

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(yx)=ylog(y^)+(1y)log(1y^)\log P(y|x) = y\log(\hat{y}) + (1-y)\log(1-\hat{y})

Eftersom målet är maximering definierar vi förlustfunktionen som den negativa log-likelihooden, vilket vi vill minimera:

L=(ylog(y^)+(1y)log(1y^))L = -(y\log(\hat{y}) + (1-y)\log(1-\hat{y}))

Detta är binär korsentropiförlustfunktion, vanligt förekommande vid klassificeringsproblem.

Givet att variabeln output representerar y^\hat{y} för ett specifikt träningsfall, och variabeln target representerar yy 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=1y = 1 förenklas förlusten till log(y^)-\log(\hat{y}), vilket innebär att förlusten är låg när y^\hat{y} är nära 1 och mycket hög när y^\hat{y} är nära 0;
  • Om y=0y = 0 förenklas förlusten till log(1y^)-\log(1 - \hat{y}), vilket innebär att förlusten är låg när y^\hat{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=1Ni=1N(yilog(y^i)+(1yi)log(1y^i))L = -\frac1N \sum_{i=1}^N (y_i\log(\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i))

Där NN är antalet träningsprover.

question mark

Vilket av följande beskriver bäst syftet med korsentropiförlustfunktionen vid binär klassificering?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 6

Fråga AI

expand

Fråga AI

ChatGPT

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

bookFö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^\hat{y} att en given indata tillhör klass 1. Den faktiska etiketten yy 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(yx)=y^y(1y^)1yP(y|x) = \hat{y}^y(1 - \hat{y})^{1-y}

Detta uttryck betyder helt enkelt:

  • Om y=1y = 1, då är P(yx)=y^P(y|x) = \hat{y}, vilket innebär att vi vill maximera y^\hat{y} (sannolikheten tilldelad till klass 1);
  • Om y=0y = 0, då är P(yx)=1y^P(y|x) = 1 - \hat{y}, vilket innebär att vi vill maximera 1y^1 - \hat{y} (sannolikheten tilldelad till klass 0).
Note
Notering

P(yx)P(y|x) betyder sannolikheten att observera den faktiska klassetiketten yy givet indata xx.

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(yx)=ylog(y^)+(1y)log(1y^)\log P(y|x) = y\log(\hat{y}) + (1-y)\log(1-\hat{y})

Eftersom målet är maximering definierar vi förlustfunktionen som den negativa log-likelihooden, vilket vi vill minimera:

L=(ylog(y^)+(1y)log(1y^))L = -(y\log(\hat{y}) + (1-y)\log(1-\hat{y}))

Detta är binär korsentropiförlustfunktion, vanligt förekommande vid klassificeringsproblem.

Givet att variabeln output representerar y^\hat{y} för ett specifikt träningsfall, och variabeln target representerar yy 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=1y = 1 förenklas förlusten till log(y^)-\log(\hat{y}), vilket innebär att förlusten är låg när y^\hat{y} är nära 1 och mycket hög när y^\hat{y} är nära 0;
  • Om y=0y = 0 förenklas förlusten till log(1y^)-\log(1 - \hat{y}), vilket innebär att förlusten är låg när y^\hat{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=1Ni=1N(yilog(y^i)+(1yi)log(1y^i))L = -\frac1N \sum_{i=1}^N (y_i\log(\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i))

Där NN är antalet träningsprover.

question mark

Vilket av följande beskriver bäst syftet med korsentropiförlustfunktionen vid binär klassificering?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 6
some-alt