Come abbiamo visto precedentemente il metodo della discesa del gradiente presenta alcune problematicità di efficienza nel caso di plateau e di disomogeneità rilevanti del gradiente nelle varie dimensioni.
Per rendere il metodo più efficiente vengono solitamente utilizzate delle versioni più evolute del metodo, in grado di accelerare la ricerca e contrastare i casi patologici.
Un metodo particolarmente efficiente nello smorzare ampie oscillazioni nei passi dovute a disomogeneità forti del gradiente lungo diverse dimensioni, è quello di utilizzare al posto del gradiente \(\nabla f ({\bf x}^{(t-1)}) \) la media esponenziale \({\bf v}_t\) sui valori del gradiente stesso:
\(\begin{cases} {\bf v}_t=\beta {\bf v}_{t-1} + (1 -\beta)\nabla f({\bf x}^{(t-1)}) \quad , \quad {\bf v}_0=0 \\ {\bf x}^{(t)} = {\bf x}^{(t-1)}-\alpha {\bf v}_t \end{cases}\)
dove il coefficiente \(\beta <1\) indica il peso assegnato nella media ai gradienti precedenti. Generalmente viene utilizzato un \(\beta \approx 0.9\) e la media viene calcolata biased come presentato nella formula, ovvero senza correttivo per i primi \({\bf v}_t\) che avranno modulo ridotto.
L'utilizzo del momento smorzerà le oscillazioni e contribuirà ad una discesa verso il minimo con meno passi.
Un'altra variante consiste nell'armonizzare i passi nelle varie dimensioni, smorzando o amplificando le varie componenti del gradiente in ragione della loro media.
In particolare prenderemo in considerazione la radice della media esponenziale biased dei quadrati:
\(\displaystyle \forall \ i \ \begin{cases} s_i^{(t)}=\beta s_i^{(t-1)}+(1-\beta) \left[ \frac{\partial f}{\partial x_i}({\bf x}^{(t-1)}) \right]^2 \ \ , \ \ s_i^{(0)}=0 \\ x_i^{(t)}=x_i^{(t-1)} - \alpha \frac{\frac{\partial f}{\partial x_i}({\bf x}^{(t-1)})}{\sqrt{s_i^{(t)}}+\varepsilon} \end{cases} \)
dove il coefficiente \(\beta <1\) indica il peso assegnato nella media ai coefficienti \(s_i \) precedenti. Generalmente viene utilizzato un \(\beta \approx 0.99\) e la media viene calcolata unbiased come presentato nella formula, ovvero senza correttivo per i primi \(s_i\) che avranno modulo ridotto.
Viene anche introdotto un \(\varepsilon \approx 10^{-8}\) al denominatore per evitare errori dovuti a \(s_i\) prossimi a zero.
RMSprop da un lato armonizza lo sviluppo dei passi tra le dimensioni non omogenee del gradiente, smorzando quelle di modulo maggiore e amplificando quelle di modulo minore, dall'altro "accelera" la fuga da zone di plateau, dove le componenti del gradiente diventano prossime allo zero.
L' algoritmo Adam combina la discesa con Momento e RMSprop per integrare in modo efficace i benefici di entrambi gli algoritmi.
A differenza degli algoritmi singoli, Adam utilizza generalmente le medie esponenziali unbiased ovvero normalizzate dividendole per un fattore \((1-\beta ^t)\) che riequilibri in particolare i primi valori della media.
Per ogni dimensione avremo quindi:
\(\displaystyle \forall \ i \ \begin{cases} v_i^{(t)}=\beta_1 v_i^{(t-1)}+(1-\beta_1) \left[ \frac{\partial f}{\partial x_i}({\bf x}^{(t-1)}) \right] \ \ , \ \ v_i^{(0)}=0 \\ s_i^{(t)}=\beta_2 s_i^{(t-1)}+(1-\beta_2) \left[ \frac{\partial f}{\partial x_i}({\bf x}^{(t-1)}) \right]^2 \ \ , \ \ s_i^{(0)}=0 \\ x_i^{(t)}=x_i^{(t-1)} - \alpha \frac{v_i^{(t)}}{(1-\beta_1^t)\sqrt{\frac{s_i^{(t)}}{(1-\beta_2^t)}}+\varepsilon} \end{cases} \)
Dove valori tipici dei parametri sono \(\beta_1=0.9 \ , \ \beta_2=0.99 \ , \ \varepsilon=10^{-8}\)
Adam è frequentemente utilizzato come algoritmo di discesa del gradiente in ambito di deep learning