Torna alle sfide
Facile 0 risolte 0% di accettazione

Inizializzazione dei pesi Xavier e He

Calcola l'intervallo o la deviazione standard usati per inizializzare i pesi di uno strato.

Cosa imparerai

  • Calcolare gli intervalli di inizializzazione di un layer
  • Scegliere tra Xavier e He
  • Capire perché l'inizializzazione è importante

Problema

Pesi iniziali troppo grandi o troppo piccoli rendono difficile addestrare le reti profonde. Due metodi standard scelgono la scala in base alla dimensione dello strato, dove fan_in è il numero di input e fan_out il numero di output:

methodrestituisce
"xavier_uniform"limite √(6 / (fan_in + fan_out)), pesi estratti da [-limite, limite]
"xavier_normal"deviazione standard √(2 / (fan_in + fan_out))
"he_uniform"limite √(6 / fan_in)
"he_normal"deviazione standard √(2 / fan_in)

Xavier (Glorot) è adatto agli strati sigmoide e tanh; He agli strati ReLU.

Implementa init_bound(method, fan_in, fan_out).

Input

method: Uno tra "xavier_uniform", "xavier_normal", "he_uniform" o "he_normal".

fan_in, fan_out: Il numero di input e di output dello strato.

Output

Restituisci il limite o la deviazione standard come numero decimale.

Vincoli

1 ≤ fan_in, fan_out ≤ 100.000

Esempi

Esempio 1
Input:
fan_in = 3
method = "xavier_uniform"
fan_out = 3

Output atteso:
expected = 1.0
Input:
long long fan_in = 3;
std::string method = "xavier_uniform";
long long fan_out = 3;

Output atteso:
double expected = 1.0;
Input:
long fan_in = 3;
string method = "xavier_uniform";
long fan_out = 3;

Output atteso:
double expected = 1.0;

Spiegazione

√(6 / (3 + 3)) = √1 = 1, quindi i pesi vengono estratti da [-1, 1].

Esempio 2
Input:
fan_in = 50
method = "he_normal"
fan_out = 10

Output atteso:
expected = 0.2
Input:
long long fan_in = 50;
std::string method = "he_normal";
long long fan_out = 10;

Output atteso:
double expected = 0.2;
Input:
long fan_in = 50;
string method = "he_normal";
long fan_out = 10;

Output atteso:
double expected = 0.2;

Spiegazione

He usa solo fan_in: √(2 / 50) = √0.04 = 0.2.

Come affrontarlo

Prova prima da solo, poi apri un suggerimento alla volta.

Suggerimento 1

Ogni metodo dipende solo dalle dimensioni del layer e dal fatto che serva un bound o una dispersione.

Suggerimento 2

Usa solo fan_in per i metodi He, e fan_in più fan_out per i metodi Xavier.

Suggerimento 3

Non confondere le formule uniformi e normali, perché una restituisce un limite e l'altra una deviazione standard.

Complessità attesa

tempo O(1), spazio aggiuntivo O(1)

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.