Wat zijn softmax en cross-entropy? Logits omzetten in waarschijnlijkheden en trainingsverlies
Softmax en cross-entropy vormen een combinatie waarmee een multiclass neuraal netwerk kan uitdrukken welke klasse van meerdere kandidaten juist is als waarschijnlijkheden en numeriek kan beoordelen hoeveel die voorspelling afwijkt van het juiste antwoord. Softmax zet de ruwe uitvoerwaarden van het model, logits genoemd, om in een waarschijnlijkheidsverdeling waarvan de som 1 is. Cross-entropy berekent het verschil tussen die waarschijnlijkheidsverdeling en de doelverdeling als verlies. Training is het proces waarbij de gewichten van het model worden aangepast om dit verlies te verkleinen.
Stel bijvoorbeeld dat je een afbeelding classificeert als kat, hond of vogel. Het model antwoordt in eerste instantie vaak niet met iets als „70% waarschijnlijkheid op kat”. Het produceert in plaats daarvan logits: vergelijkende scores voor de drie klassen. Softmax normaliseert deze scores tot onderling vergelijkbare waarschijnlijkheden, en cross-entropy kent een straf toe op basis van hoeveel waarschijnlijkheid het model aan het werkelijke antwoord gaf. Als je beide samen begrijpt, kun je veelvoorkomende verwarring over de uiteindelijke uitvoerlaag, labelindelingen en configuratie van de verliesfunctie verminderen.
Wat doet de softmaxfunctie?
Softmax is een functie die een vector met logits voor klassen omzet in klassewaarschijnlijkheden . De waarschijnlijkheid van klasse wordt als volgt berekend.
Hier geeft de exponentiële functie klassen met hogere scores een groter relatief gewicht. Omdat de noemer de som is van de geëxponentialiseerde scores voor alle klassen, ligt elke uitvoer tussen 0 en 1 en is de totale waarschijnlijkheid 1. Softmaxuitvoer vertegenwoordigt dus de relatieve waarschijnlijkheid dat een invoer tot elke klasse behoort als één enkele waarschijnlijkheidsverdeling. De PyTorch-documentatie beschrijft softmax ook als het herschalen van elk invoerelement naar het bereik van 0 tot 1, zodat de elementen samen 1 zijn. docs.pytorch.org
Softmax is vooral geschikt wanneer de kandidaten wederzijds uitsluitend zijn. Met andere woorden: als één kandidaat waar is, kunnen de andere niet het juiste antwoord zijn. Voorbeelden zijn het classificeren van een afbeelding waarvan het hoofdonderwerp precies één van kat, hond of vogel is, of het toewijzen van een zin aan precies één vooraf gedefinieerde sentimentcategorie.
Softmaxwaarschijnlijkheden zijn daarentegen niet onafhankelijk van elkaar. Als de waarschijnlijkheid van kat stijgt, moet die van hond of vogel relatief dalen om de som van de drie waarschijnlijkheden gelijk aan 1 te houden. Dit kenmerk is meestal niet geschikt voor gevallen waarin meerdere labels tegelijk waar kunnen zijn, zoals een probleem waarin zowel een persoon als een fiets op één afbeelding kunnen voorkomen. Overweeg in dat geval om sigmoid onafhankelijk op elke klasse toe te passen.
Waarin verschillen logits van waarschijnlijkheden?
Een logit is een ongenormaliseerde score die door een laatste lineaire laag of vergelijkbaar onderdeel wordt geproduceerd. Logits kunnen negatief of groter dan 1 zijn, en de som van logits over klassen heeft geen bijzondere betekenis. Bijvoorbeeld: kan een verzameling logits voor drie klassen zijn, maar is geen waarschijnlijkheidsvector.
Een belangrijk kenmerk van logits is dat de verschillen tussen klassen meer tellen dan hun absolute waarden. Het toevoegen van dezelfde constante aan elke logit verandert het softmaxresultaat niet.
Dit komt doordat zowel teller als noemer met de gemeenschappelijke factor worden vermenigvuldigd, die wegvalt. Daarom kunnen logits en verschillende ruwe scores lijken, maar dezelfde softmaxwaarschijnlijkheden opleveren. Softmax zet relatieve verschillen tussen kandidaten, en niet het referentiepunt van de scores, om in waarschijnlijkheden.
Wat meet cross-entropy?
Cross-entropy is een verliesfunctie die aangeeft hoeveel de werkelijke doelverdeling verschilt van de door het model voorspelde verdeling . De basale multiclassvorm is als volgt.
Hier is het gewicht dat het werkelijke label aan klasse toekent, en de door het model voorspelde waarschijnlijkheid voor klasse . Een kleiner verlies betekent dat de voorspelde verdeling dichter bij de doelverdeling ligt. Wanneer de natuurlijke logaritme wordt gebruikt, is de eenheid de nat.
Deze formule is niet simpelweg een berekening die goede en foute antwoorden in 0 of 1 scheidt. Ze weerspiegelt niet alleen of het model het antwoord goed had, maar ook hoe zeker het ervan was dat het antwoord juist was. Een voorspelling die 0,51 aan de juiste klasse toekent en een die 0,99 toekent, kunnen dezelfde nauwkeurigheid hebben als de klasse met de hoogste waarschijnlijkheid in beide gevallen juist is. Cross-entropy geeft de tweede voorspelling echter een lager verlies. Daarom stimuleert training het model niet alleen om het juiste antwoord bovenaan te rangschikken, maar ook om er een hogere waarschijnlijkheid aan toe te kennen.
Waarom vereenvoudigt de formule voor one-hotlabels?
Doelen voor wederzijds uitsluitende classificatie worden vaak weergegeven als one-hotvectoren. Als de eerste klasse juist is van drie klassen, is het label . Omdat alleen doelklasse heeft en de rest 0, wordt cross-entropy gereduceerd tot het volgende.
Met andere woorden: het verlies wordt uitsluitend bepaald door de voorspelde waarschijnlijkheid van de juiste klasse. Als 1 nadert, nadert 0. Als daarentegen kleiner wordt, groeit het verlies snel. Door deze eigenschap krijgen voorspellingen die een lage waarschijnlijkheid aan het juiste antwoord toekennen — vooral voorspellingen die met zeer hoge zekerheid een onjuist antwoord geven — tijdens training een grote straf.
Theoretisch is ongedefinieerd en divergeert het verlies naar oneindig als de waarschijnlijkheid van de juiste klasse exact 0 is. Werkelijke implementaties van neurale netwerken gebruiken gewoonlijk stabiele berekeningen op basis van logits, waardoor wordt voorkomen dat eerst expliciet een waarschijnlijkheid van 0 wordt geproduceerd en vervolgens de logaritme daarvan wordt genomen.
Hoe hangen softmax en cross-entropy samen?
Het laatste deel van een typisch multiclassmodel kan in drie stappen worden begrepen.
- De laatste lineaire laag voert klasselogits uit.
- Softmax zet de logits om in waarschijnlijkheden .
- Cross-entropy vergelijkt de waarschijnlijkheden met het doellabel om het verlies te berekenen.
Voor een one-hotdoel kan deze samenhang als volgt worden uitgeschreven.
Deze uitdrukking wordt vaak softmax cross-entropy of categorische cross-entropy genoemd. De eerste term, , wordt kleiner wanneer de logit van de juiste klasse stijgt, terwijl de tweede term, , ook rekening houdt met de scores van elke concurrerende klasse. Het model leert dus de score van de juiste klasse te verhogen en die relatief prominenter te maken dan onjuiste klassen.
Softmax en cross-entropy moeten hier conceptueel worden onderscheiden. Softmax is een functie die de representatie van uitvoer verandert, terwijl cross-entropy een verliesfunctie is die het trainingsdoel kwantificeert. In praktische frameworks worden de twee stappen echter vaak aangeboden als één gecombineerde verliesfunctie, waardoor ze één functie kunnen lijken.
Wat laat de berekening met getallen zien?
Beschouw een probleem met drie klassen en logits . Toepassing van softmax geeft geschatte waarschijnlijkheden van . Het softmaxvoorbeeld van TensorFlow presenteert dezelfde geschatte waarschijnlijkheden voor deze logits. docs.pytorch.org
Als de eerste klasse juist is, is het one-hotlabel en is het verlies als volgt.
De eerste klasse heeft de hoogste waarschijnlijkheid van de drie kandidaten, en die waarschijnlijkheid is ongeveer 0,665, dus het verlies is relatief klein. „Klein” duidt echter niet op een absolute slaagdrempel. Een passende verliesgrootte kan verschillen door het aantal klassen, de moeilijkheid van de gegevens, labelonzekerheid en de vraag of verlies over een batch wordt opgeteld of gemiddeld.
Als bij dezelfde logits de derde klasse daadwerkelijk juist was, zou het verlies zijn en dus veel groter. Het model zag de derde klasse als de minst waarschijnlijke kandidaat. Zo weerspiegelt cross-entropy gevoelig niet alleen of een voorspelling fout is, maar ook hoe zeker die fout is.
Waarom moeten waarschijnlijkheidsrangschikking en verlieswaarde samen worden bekeken?
Nauwkeurigheid selecteert gewoonlijk de enkele klasse met de grootste waarschijnlijkheid en telt of die met het juiste antwoord overeenkomt. Daarom tellen een voorspelling van wanneer de eerste klasse juist is en een voorspelling van wanneer de eerste klasse juist is beide als één correcte voorspelling.
Cross-entropy behandelt deze niet gelijk. De eerste voorspelling onderscheidt nauwelijks tussen de drie klassen, terwijl de tweede een zeer hoge waarschijnlijkheid aan het juiste antwoord toekent. Omgekeerd varieert het verlies, wanneer de klasse met de hoogste waarschijnlijkheid onjuist is, ook afhankelijk van hoe laag de waarschijnlijkheid van de juiste klasse was. Daarom minimaliseert training doorgaans cross-entropy, terwijl evaluatie ook afzonderlijke metriekwaarden zoals nauwkeurigheid controleert volgens het doel van de taak.
Waarom moeten logits rechtstreeks aan de trainingsverliesfunctie worden doorgegeven?
De gecombineerde verliesfuncties van veel deep-learningframeworks ontvangen logits, geen softmaxwaarschijnlijkheden, als invoer. softmax_cross_entropy_with_logits van TensorFlow accepteert, zoals de naam aangeeft, bijvoorbeeld logits en voert intern de berekeningen uit die overeenkomen met softmax en cross-entropy. De documentatie waarschuwt tegen het aanleveren van uitvoer waarop softmax al is toegepast. www.tensorflow.org
Als je deze regel schendt door softmax aan het einde van het model toe te passen en het resultaat vervolgens door te geven aan een verliesfunctie die voor logits bedoeld is, kunnen de waarschijnlijkheden opnieuw als logits worden geïnterpreteerd in plaats van de bedoelde enkele softmaxtoepassing te krijgen. Dit verandert de betekenis van het verlies en de gradiënten, waardoor de trainingsconfiguratie onjuist wordt. Of een verliesfunctie „intern softmax bevat” of „reeds omgezette waarschijnlijkheden accepteert”, moet worden gecontroleerd aan de hand van het invoercontract van de API, niet alleen aan de functienaam.
Het doel van inferentie of weergave is anders. Na training kun je softmax op logits toepassen wanneer je klassewaarschijnlijkheden wilt tonen of nabewerking op basis van waarschijnlijkheden wilt uitvoeren. Het kernpunt is niet dat softmax nooit mag worden gebruikt, maar dat het precies eenmaal moet worden toegepast in de invoerfase die de trainingsverliesfunctie verwacht.
Waarom is numerieke stabiliteit belangrijk?
De softmaxformule bevat exponentiëlen en logaritmen. Als logits extreem groot of klein zijn, kan het berekenen van het bereik overschrijden dat een computer kan weergeven, met risico op overflow of underflow. Eerst waarschijnlijkheden berekenen en daarna afzonderlijk logaritmen toepassen, kan kwetsbaar zijn voor deze problemen.
Gecombineerde verliesfuncties en implementaties uit de log_softmax-familie gebruiken doorgaans stabiele manieren om te berekenen. De PyTorch-documentatie legt ook uit dat log_softmax betere numerieke eigenschappen heeft dan softmax en logaritme afzonderlijk berekenen. docs.pytorch.org
De eerder beschreven eigenschap van constante verschuiving kan ook voor stabilisatie worden gebruikt. Het aftrekken van de maximale waarde van elke logit verandert het softmaxresultaat niet.
Hierdoor wordt de grootste exponentiële term , wat de noodzaak vermindert om onnodig grote getallen te verwerken. In productiecode heeft het echter doorgaans de voorkeur om een door het framework geleverde gecombineerde verliesfunctie op basis van logits of een stabiele log-softmaxbewerking te gebruiken, in plaats van de componenten zelf afzonderlijk te implementeren.
Moeten labels one-hotvectoren of gehele getallen zijn?
De labelrepresentatie hangt samen met het invoercontract van de verliesfunctie. Veelvoorkomende indelingen zijn one-hot- of waarschijnlijkheidslabels en sparse integer-labels.
| Labelindeling | Voorbeeld wanneer de eerste klasse juist is van drie | Kenmerken |
|---|---|---|
| One-hotlabel | [1, 0, 0] | Een vector met dezelfde lengte als het aantal klassen; alleen de juiste positie is 1. |
| Waarschijnlijkheidslabel | [0.8, 0.1, 0.1] | Een doelverdeling waarvan de elementen niet-negatief zijn en samen 1 zijn. |
| Sparse integer-label | 0 | Slaat alleen de index van de juiste klasse op. |
One-hotlabels komen rechtstreeks overeen met de basale cross-entropieformule. Sparse integer-labels kunnen dezelfde informatie compacter opslaan, wat nuttig kan zijn bij veel klassen. De twee indelingen hebben echter verschillende tensorvormen en gegevenstypen, dus je moet de indeling gebruiken die een bepaalde verliesfunctie vereist.
De TensorFlow-documentatie voor logitgebaseerde softmax cross-entropy legt uit dat labelvectoren geldige waarschijnlijkheidsverdelingen moeten zijn en onderscheidt verwante labelindelingen voor wederzijds uitsluitende classificatie. www.tensorflow.org Het direct doorgeven van één geheel getal aan een verliesfunctie voor one-hotlabels, of een one-hotvector aan een functie voor sparse integer-labels, berekent bijvoorbeeld mogelijk niet de bedoelde grootheid.
Waarschijnlijkheidslabels versoepelen de aanname dat precies één klasse de waarde 1 moet hebben. Dit betekent echter niet hetzelfde als een multilabelprobleem waarin meerdere klassen onafhankelijk waar kunnen zijn. Bij softmaxclassificatie vertegenwoordigen waarschijnlijkheidslabels nog steeds één verdeling waarvan de elementen samen 1 zijn.
Waarin verschillen binaire classificatie, multiclassclassificatie en multilabelclassificatie?
Uitvoerfuncties en verliezen moeten niet uitsluitend worden gekozen op basis van het aantal klassen. Bepaal eerst of doelgebeurtenissen tegelijk kunnen optreden. Het volgende onderscheid is in de praktijk nuttig.
| Probleemstructuur | Voorbeeld | Typische uitvoerrepresentatie | Typisch verlies |
|---|---|---|---|
| Wederzijds uitsluitende multiclassclassificatie | Eén van kat, hond of vogel | Softmax over alle klassen | Softmax cross-entropy |
| Binaire classificatie | Waar/onwaar, goedkeuren/afwijzen | Eén sigmoid of two-class softmax | Binaire cross-entropy of softmax cross-entropy |
| Multilabelclassificatie | Een foto bevat zowel een persoon als een fiets | Klassengewijze sigmoid | Klassengewijze binaire cross-entropy |
Bij multiclassclassificatie is het natuurlijk dat de klassewaarschijnlijkheden samen 1 zijn. Als de waarschijnlijkheid dat een afbeelding een kat is stijgt, moet de waarschijnlijkheid dat dezelfde afbeelding een hond of vogel is relatief dalen. De TensorFlow-documentatie onderscheidt eveneens het gebruik van softmax cross-entropy wanneer labels wederzijds uitsluitend zijn van situaties met onafhankelijke meerdere labels, waarvoor een andere opzet nodig is. www.tensorflow.org
Bij multilabelclassificatie lijkt elke uitvoer meer op een afzonderlijke vraag: „Is er een persoon?”, „Is er een fiets?” en „Is er een boom?” kunnen allemaal tegelijk met ja worden beantwoord. Als softmax de totale som tot 1 dwingt, verlaagt het verhogen van de waarschijnlijkheid van één label de waarschijnlijkheden van andere labels, wat mogelijk niet bij de probleemstructuur past. Door sigmoid op elke klasse toe te passen, kan de waarschijnlijkheid van elk item onafhankelijk worden behandeld.
Binaire classificatie kan bijzonder verwarrend zijn omdat beide benaderingen mogelijk lijken. Sigmoid toepassen op één uitvoer vertegenwoordigt rechtstreeks de waarschijnlijkheid van de positieve klasse. Softmax toepassen op twee logits vertegenwoordigt positief en negatief als een verdeling met twee klassen die samen 1 zijn. Welke benadering je ook kiest, de labelcodering en de verliesfunctie moeten bij die uitvoerindeling passen.
Betekent cross-entropy minimaliseren dat verdelingen worden gematcht?
Wanneer zowel het doel als de voorspelling geldige waarschijnlijkheidsverdelingen zijn, kan cross-entropy via de relatie met entropie en KL-divergentie als volgt worden uitgedrukt.
Hier is de entropie die de onzekerheid van de werkelijke verdeling zelf weergeeft, en de KL-divergentie die het verschil tussen de werkelijke verdeling en de voorspelde verdeling weergeeft. Als de doelverdeling in de trainingsgegevens vastligt, verandert niet met de modelparameters. Afgezien van die constante kan het verkleinen van cross-entropy daarom worden geïnterpreteerd als het verkleinen van de KL-divergentie tussen en .
Deze interpretatie toont waarom cross-entropy veel wordt gebruikt als leerdoel voor waarschijnlijkheidsverdelingen. Het model wordt niet alleen ertoe aangezet de juiste klasse bovenaan te plaatsen, maar ook om waarschijnlijkheden te verdelen die dicht bij de waargenomen doelverdeling liggen.
Deze vergelijking kent echter aannamen. Zowel als moeten waarschijnlijkheidsverdelingen zijn: hun componenten moeten in het juiste bereik liggen en samen 1 zijn. Logits zijn zelf geen waarschijnlijkheidsverdelingen en worden dus niet rechtstreeks in deze relatie ingevuld. Logits worden via softmax of een gecombineerde verliesfunctie op basis van logits verbonden met berekeningen voor waarschijnlijkheidsverdelingen.
Wat zijn veelvoorkomende misvattingen en fouten?
De eerste misvatting is dat logits waarschijnlijkheden zijn. De klasse met de grootste logit heeft ook de grootste softmaxwaarschijnlijkheid, maar logitwaarden zelf kunnen niet als percentages worden gelezen. Hoeveel een logitverschil zoals 2 tegenover 1 zich vertaalt in een waarschijnlijkheidsverschil, wordt pas bepaald nadat softmax samen met alle andere logits is toegepast.
De tweede misvatting is dat classificatietraining alleen werkt als softmax aan het einde van het model wordt toegevoegd. Als je een gecombineerde cross-entropieverliesfunctie gebruikt die logits accepteert, is het gebruikelijk om tijdens training niet expliciet een laatste softmax toe te voegen. Dit ondersteunt de interne berekening en numerieke stabiliteit. www.tensorflow.orgdocs.pytorch.org
De derde misvatting is dat softmax cross-entropy geschikt is voor elk classificatieprobleem. Deze verliescombinatie is natuurlijk wanneer klassen wederzijds uitsluitend zijn. Als meerdere juiste tags voor één voorbeeld naast elkaar kunnen bestaan, kan softmax, dat de totale klassewaarschijnlijkheid tot 1 beperkt, de betekenis van de gegevens mogelijk niet goed weergeven.
De vierde misvatting is dat cross-entropy en nauwkeurigheid dezelfde metriek zijn. Nauwkeurigheid kijkt doorgaans alleen naar de enkele klasse met de hoogste waarschijnlijkheid, terwijl cross-entropy de volledige waarschijnlijkheid weerspiegelt die aan het juiste antwoord is toegekend. Twee modellen met dezelfde nauwkeurigheid kunnen daarom verschillende cross-entropiewaarden hebben. Dit is ook een reden waarom trainingsverlies kan afnemen zonder dat de nauwkeurigheid bij elke stap monotoon stijgt.
De vijfde fout is uit één verlieswaarde alleen afleiden of een model goed of slecht is. Cross-entropiewaarden worden beïnvloed door het aantal klassen, de moeilijkheid van de taak, de labelindeling en de aggregatiemethode. Het is geschikter om veranderingen onder dezelfde taak en configuratie, verlies op validatiegegevens en afzonderlijke evaluatiemetriekwaarden die bij de taak passen te beschouwen.
Wat moet je controleren voordat je het model configureert?
Voordat je softmax en cross-entropy toepast, helpt het om de volgende vragen op volgorde te controleren.
- Heeft elk voorbeeld precies één juiste klasse? Zo ja, dan is multiclassclassificatie op basis van softmax een kandidaat. Als meerdere labels tegelijk waar kunnen zijn, overweeg dan eerst klassengewijze sigmoid en binair verlies.
- Is de uiteindelijke uitvoer van het model logits of al waarschijnlijkheden? Logits zijn onbegrensde ruwe scores, terwijl waarschijnlijkheden genormaliseerde waarden zijn. Als het gecombineerde verlies logits verwacht, pas dan niet vooraf softmax toe.
- Komt de labelindeling overeen met de verliesfunctie? Controleer of deze one-hot- of waarschijnlijkheidsvectoren, of gehele indices accepteert. Controleer naast de indeling ook de batchdimensie en de positie van de klassedimensie.
- Heb je de doelen van training en inferentie onderscheiden? Bereken tijdens training met een stabiel verlies op basis van logits. Gebruik tijdens inferentie softmax wanneer je waarschijnlijkheden moet weergeven of regels op basis van waarschijnlijkheden moet toepassen.
- Interpreteer je verlies en evaluatiemetriekwaarden afzonderlijk? Cross-entropy is een trainingsdoel dat de kwaliteit van waarschijnlijkheidsvoorspellingen weerspiegelt, terwijl nauwkeurigheid meet of de uiteindelijke keuze overeenkomt met het doel. Interpreteer ze samen volgens de taak.
Deze checklist is niet beperkt tot een bepaalde bibliotheek. Zelfs wanneer werkelijke API-namen op elkaar lijken, kunnen ze verschillen in de vraag of ze logits, waarschijnlijkheden of integer-labels als invoer verwachten. Controleer vlak vóór de implementatie de officiële documentatie voor de functie die je gebruikt om de invoervorm te bevestigen en na te gaan of die een interne activatiefunctie bevat.
Conclusie: begrijp waarschijnlijkheidsconversie en verliesberekening vanuit hun rollen
Softmax zet meerdere logits om in een waarschijnlijkheidsverdeling die samen 1 is en de relatieve waarschijnlijkheid van wederzijds uitsluitende klassen weergeeft. Cross-entropy berekent het verschil tussen die voorspelde verdeling en de doelverdeling als verlies, en kent een grotere straf toe aan voorspellingen die een lage waarschijnlijkheid aan het juiste antwoord toekennen. Voor een one-hotdoel vereenvoudigt het verlies tot , waardoor het leerdoel van het verhogen van de waarschijnlijkheid van de juiste klasse duidelijk wordt.
In de praktijk worden softmax en cross-entropy vaak niet afzonderlijk berekend. In plaats daarvan wordt een gecombineerde verliesfunctie gebruikt die logits accepteert. Dit behoudt het wiskundige doel en maakt tegelijk numeriek stabielere berekening mogelijk. Deze combinatie is echter het meest natuurlijk wanneer de probleemstructuur „multiclassclassificatie met precies één juist antwoord” is. Bij het selecteren van uitvoer en verliezen is het belangrijk om vóór het aantal klassen te bekijken of labels wederzijds uitsluitend zijn en welke invoer de verliesfunctie verwacht.