Optimera modeller med hjälp av gradient descent
Vi såg hur kostnadsfunktioner utvärderar hur väl modeller presterar med hjälp av data. Optimeraren är den sista pusselbiten.
Optimerarens roll är att ändra modellen på ett sätt som förbättrar dess prestanda. Den gör den här ändringen genom att granska modellens utdata och kostnader och föreslå nya parametrar för modellen.
I vårt jordbruksscenario har vår linjära modell till exempel två parametrar: linjens skärningspunkt och linjens lutning. Om linjens skärningspunkt är fel underskattar eller överskattar modellen temperaturer i genomsnitt. Om lutningen är fel gör modellen inte ett bra jobb med att visa hur temperaturerna har förändrats sedan 1950-talet. Optimeraren ändrar dessa två parametrar så att de gör ett optimalt jobb med att modellera temperaturer över tid.
Gradient descent (gradientsänkning)
Den vanligaste optimeringsalgoritmen idag är gradient descent. Det finns flera varianter av den här algoritmen, men alla använder samma grundläggande begrepp.
Gradient descent använder kalkyl för att beräkna hur ändring av varje parameter ändrar kostnaden. Om du till exempel ökar en parameter kan du förutsäga att kostnaden minskas.
Gradient descent namnges som sådan eftersom den beräknar toningen (lutningen) för relationen mellan varje modellparameter och kostnaden. Parametrarna ändras sedan för att flytta nedför den här lutningen.
Den här algoritmen är enkel och kraftfull, men den är inte garanterad att hitta de optimala modellparametrarna som minimerar kostnaden. De två huvudsakliga felkällorna är lokal minima och instabilitet.
Lokal minima
Vårt tidigare exempel verkade göra ett bra jobb, förutsatt att kostnaden skulle fortsätta att öka när parametern var mindre än 0 eller större än 10:
Det här jobbet verkar inte vara så bra om parametrar som är mindre än noll eller större än 10 resulterar i lägre kostnader, som i den här bilden:
I föregående diagram skulle ett parametervärde på minus sju vara en bättre lösning än fem, eftersom det har en lägre kostnad. Gradient descent känner inte till den fullständiga relationen mellan varje parameter och kostnaden – som representeras av den streckade linjen – i förväg. Därför är den benägen att hitta lokal minima: parameterberäkningar som inte är den bästa lösningen, men toningen är noll.
Instabilitet
Ett relaterat problem är att gradient descent ibland visar instabilitet. Den här instabiliteten uppstår vanligtvis när stegstorleken eller inlärningshastigheten – mängden som varje parameter justeras av varje iteration – är för stor. Parametrarna justeras sedan för långt för varje steg, och modellen blir faktiskt sämre för varje iteration:
Att ha en långsammare inlärningsfrekvens kan lösa det här problemet, men kan också leda till problem. För det första kan långsammare inlärningsgrader innebära att det tar lång tid att träna, eftersom det krävs fler steg. För det andra gör mindre steg det mer troligt att träningen sätter sig på en lokal minima:
Däremot kan en snabbare inlärningstakt göra det enklare att undvika att nå lokala minima, eftersom större steg kan hoppa över lokala maxima:
Som vi ser i nästa övning finns det en optimal stegstorlek för varje problem. Att hitta detta optimala är något som ofta kräver experimentering.