Robocikowo>ROBOCIKOWO

Sieci neuronowe od podstaw do nowoczesnej AI · Sekwencje: RNN, LSTM i GRU

Vanishing i exploding gradients w głębokich RNN

Sekwencje: RNN, LSTM i GRU

Wprowadzenie

Klasyczna RNN, mimo elegancji parameter sharingu, ma w praktyce poważny defekt: gradient płynący wstecz przez T kroków BPTT zwykle albo zanika do zera (vanishing), albo eksploduje wykładniczo (exploding). Bengio, Simard i Frasconi 1994 ("Learning long-term dependencies with gradient descent is difficult") sformułowali to jako fundamentalny problem: ∂h_T/∂h_1 = ∏_{t=2..T} ∂h_t/∂h_{t-1}, czyli iloczyn T-1 jakobianów. Pascanu, Mikolov, Bengio 2013 ("On the difficulty of training recurrent neural networks") podali precyzyjną analizę: jeśli największa wartość singularna jakobianu σ_max(∂h_t/∂h_{t-1}) < 1, iloczyn dąży do zera wykładniczo z T (vanishing), jeśli > 1 — rośnie wykładniczo (exploding). Vanishing oznacza, że odległe wczesne tokeny "nie uczą" wag — model nie potrafi nauczyć się long-range dependencies. Exploding daje gradient o normie 10^6, NaN-y w wagach, total fail. Dwa praktyczne lekarstwa: (1) gradient clipping (Pascanu et al. 2013) — obetnij gradient gdy jego norma przekracza próg, prosty i skuteczny przeciw exploding; (2) lepsze inicjalizacje — orthogonal init (Saxe et al. 2014), identity init dla relu RNN (IRNN, Le Jaitly Hinton 2015). Trzecie, najbardziej radykalne lekarstwo to bramki — LSTM (Hochreiter Schmidhuber 1997) wprowadza CEC (constant error carousel), gdzie gradient płynie wstecz po prostym dodawaniu zamiast mnożeniu, omijając problem. To prowadzi nas do następnych lekcji o LSTM i GRU.