Introduktion till slumpmässig sökning

Hyperparameterjustering i Python

Alex Scriven

Data Scientist

Vad du redan vet

 

Liknar rutnätssökning:

  • Definiera en estimator, vilka hyperparametrar som ska justeras och värdeintervallet för var och en.
  • Vi anger fortfarande korsvalideringsschema och poängfunktion

 

MEN vi väljer istället ut rutnätsceller slumpmässigt.

Hyperparameterjustering i Python

Varför fungerar det här?

Bengio & Bergstra (2012):

Den här artikeln visar empiriskt och teoretiskt att slumpmässigt valda försök är effektivare för hyperparameteroptimering än försök på ett rutnät.

Två huvudsakliga skäl:

  1. Inte alla hyperparametrar är lika viktiga
  2. Ett litet sannolikhetstrick
Hyperparameterjustering i Python

Ett sannolikhetstrick

En rutnätssökning:

10x10 med olika modeller

Hur många modeller behöver vi köra för att ha 95% chans att få med en av de gröna rutorna?

Våra bästa modeller:

10x10 med olika modeller

Hyperparameterjustering i Python

Ett sannolikhetstrick

 

Om vi väljer hyperparameterkombinationer jämnt fördelade och slumpmässigt, låt oss se hur osannolikt det är att MISSA varje enskilt försök

  • Försök 1 = 0,05 chans att lyckas och (1 - 0,05) att missa

    • Försök 2 = (1-0,05) x (1-0,05) chans att missa intervallet
      • Försök 3 = (1-0,05) x (1-0,05) x (1-0,05) chans att missa igen
  • Med n försök har vi (1-0,05)^n chans att varje enskilt försök missar det önskade området.

Hyperparameterjustering i Python

Ett sannolikhetstrick

 

Hur många försök krävs för en hög (95%) chans att hamna inom det området?

  • Vi har (1-0,05)^n chans att missa allt.
  • Alltså måste vi ha (1 - missa allt) chans att hamna där, det vill säga (1-(1-0,05)^n)
  • Att lösa 1-(1-0,05)^n >= 0,95 ger oss n >= 59
Hyperparameterjustering i Python

Ett sannolikhetstrick

 

Vad innebär det här?

  • Det är osannolikt att du fortsätter att helt missa det "bra området" länge när du slumpmässigt väljer nya punkter
  • En rutnätssökning kan spendera mycket tid i ett "dåligt område" eftersom den täcker exhaustivt.
Hyperparameterjustering i Python

Viktiga noteringar

 

Kom ihåg:

  1. Maximumet är fortfarande bara så bra som det rutnät du definierar!

  2. För en rättvis jämförelse med rutnätssökning behöver du samma modelleringsbudget

Hyperparameterjustering i Python

Skapa ett slumpmässigt urval av hyperparametrar

Vi kan skapa ett eget slumpmässigt urval av hyperparameterkombinationer:

# Set some hyperparameter lists
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))
# Create list of combinations
from itertools import product
combinations_list = [list(x) for x in 
                    product(learn_rate_list, min_samples_leaf_list)]
# Select 100 models from our larger set
random_combinations_index = np.random.choice(
                            range(0,len(combinations_list)), 100, 
                            replace=False)
combinations_random_chosen = [combinations_list[x] for x in 
                            random_combinations_index]
Hyperparameterjustering i Python

Visualisera en slumpmässig sökning

Vi kan också visualisera täckningen för den slumpmässiga sökningen genom att plotta hyperparametervalen på en X- och Y-axel.

graf över täckning vid slumpmässig sökning

Lägg märke till hur spridningen är bred men inte djup?

Hyperparameterjustering i Python

Nu kör vi en övning!

Hyperparameterjustering i Python

Preparing Video For Download...