Section 11.4 Neural ODE
il existe une variante de cette approche qui s'est développée fortement depuis plusieurs années pour construire des ANN. Elle est basée sur une analogie entre les réseaux de neurones et une ODE pour obtenir une nouvelle façon de construire des réseaux de neurones généraux (bien au-delà du problème d'apprendre une ODE). On se souvient de l'approche "ResNet" qui consiste à écrit une couche comme:
par exemple. L'ajout de l'indentité permettait notamment d'éviter des explosions/disparitions de gradient. On voit que cette forme est très proche de la discrétisation d'une ODE ou le réseau correspondrait au flux (comme précédemment). Lorsqu'on utilise cette analogie, on voit que mettre plus et plus de couches reviendraient à discrétiser de plus en plus l'ODE. L'idée du papier ... consiste à proposer un nouveau "réseau de neurones" appelé ODEnet ou Neural ODE.
Définition 11.5. Neural ODE.
On se donne une donnée d'entrée \(x\in\mathbb{R}^d\) et une donnée de sortie \(y\in\mathbb{R}^d\text{.}\) On appelle un Neural ODE une processus de transformation de la forme:
Lorsqu'on on utilise ce genre de représentation pour appendre une ODE à partir de données il n’y a pas de problème, mais lorsqu'on veut utiliser cette formulation pour des problèmes généraux comme la classification d'image il peut avoir un manque d'expressivité. En effet les poids sont les mêmes dans chaque couche et la variété d'une couche a l'autre vient du fait que dans les entrées il y a le temps. Afin d'ajouter de la variation dans les couches, on peut construire un réseau ou les poids dépendent du temps.
Définition 11.6. Neural ODE 2.
On se donne une donnée d'entrée \(x\in\mathbb{R}^d\) et une donnée de sortie \(y\in\mathbb{R}^d\text{.}\) On appelle un Neural ODE une processus de transformation de la forme:
avec \(\theta=(\theta_1,...,\theta_n)\) et \((z(0))_i=h_{\theta_i}(x_i)\text{.}\) Pour un problème d'apprentissage ODE sur des fonctions vectorielles avec des exemples de trajectoires on utilisera plutôt:
avec \(\bs{z}_{j}^i\) des exemples de solution au temps \(t_j\) associés à une condition initiale \(i\text{.}\)
En pratique il faut maintenant calculer le gradient de notre fonction de coût par rapport a nos entrées \(z(t),\theta,t\) et la méthode qu'on peut utiliser pour cela est celle de principe du maximum de Pontryagin. On va commence par regarder le gradient par rapport à l'état avant de généraliser. Dans le papier fondateur des ODEnet [1.16] les auteurs proposent une autre preuve plus formelle qu'on donnera ici.
Lemme 11.7. Gradient d'un ODE net.
Soit \(z(t)\) solution de Définition 11.5 ou Définition 11.6. On se donne le gradient \(\frac{\partial L}{\partial z(T)}\) alors le gradient est donné par:
pour Définition 11.5 et
pour Définition 11.6. Dans les deux cas le gradient par rapport à l'état est donné par:
avec \(a(t)\) solution de:
Preuve.
Cette démonstration formelle est tirée du papier [1.16]. Elle suppose une régularité importante des solutions du problème.
-
On commence par construire le gradient par rapport à l'état.
On commence par définir un état (qui en pratique est l'état adjoint du système) comme:
\begin{equation*} a(t)=\frac{d L}{d z(t)} \end{equation*}Pour commencer on souhaite montrer formellement que l'état adjoint est solution de
\begin{equation} \displaystyle{\frac{d a(t)}{d t}=-a(t)^{\top} \frac{\partial f(z(t), t, \theta)}{\partial z}}\tag{11.6} \end{equation}Dans un premier temps on essaye d'établir l'équivalent continu de la formule de récurrence qui relit le gradient de \(L\) par rapport aux paramètres d'une couche en fonction de celui par rapport aux paramètres de la couche suivante.
On commence par remarquer que:
\begin{equation*} a(t)=\frac{d L}{\partial z(t)}=\frac{d L}{d z(t+\varepsilon)} \frac{d z(t+\varepsilon)}{d z(t)} \end{equation*}et par définition de \(a(t)\)
\begin{equation*} a(t)=a(t+\epsilon)\frac{d z(t+\varepsilon)}{d z(t)} \end{equation*}A partir de la on peut attaquer le calcul de la dérivée de \(a(t)\text{.}\)
\begin{equation*} \begin{aligned} \frac{d a(t)}{d t} \amp =\lim _{\varepsilon \rightarrow 0^{+}} \frac{a(t+\varepsilon)-a(t)}{\varepsilon} \\ \amp =\lim _{\varepsilon \rightarrow 0^{+}} \frac{a(t+\varepsilon)-a(t+\varepsilon) \frac{\partial}{\partial z(t)} z(t+\varepsilon))}{\varepsilon} \\ \amp =\lim _{\varepsilon \rightarrow 0^{+}} \frac{a(t+\varepsilon)-a(t+\varepsilon) \frac{\partial}{\partial z(t)}\left(z(t)+\varepsilon f(z(t), t, \theta)+\mathcal{O}\left(\varepsilon^2\right)\right)}{\varepsilon} \\ \amp =\lim _{\varepsilon \rightarrow 0^{+}} \frac{a(t+\varepsilon)-a(t+\varepsilon)\left(I+\varepsilon \frac{\partial f(z(t), t, \theta)}{\partial z(t)}+\mathcal{O}\left(\varepsilon^2\right)\right)}{\varepsilon} \\ \amp =\lim _{\varepsilon \rightarrow 0^{+}} \frac{-\varepsilon a(t+\varepsilon) \frac{\partial f(z(t), t, \theta)}{\partial z(t)}+\mathcal{O}\left(\varepsilon^2\right)}{\varepsilon} \\ \amp =\lim _{\varepsilon \rightarrow 0^{+}}-a(t+\varepsilon) \frac{\partial f(z(t), t, \theta)}{\partial z(t)}+\mathcal{O}(\varepsilon) \\ \amp =-a(t) \frac{\partial f(z(t), t, \theta)}{\partial z(t)} \end{aligned} \end{equation*} -
On va maintenant en déduire le gradient complet. Pour cela on va réécrire une ODEnet de la façon suivante:
\begin{equation} \frac{d}{dt}\left(\begin{array}{c} z(t) \\ \theta(t) \end{array}\right) = \left(\begin{array}{c} f(z(t),\theta) \\ 0\end{array}\right)\tag{11.7} \end{equation}de la même façon on peut introduire
\begin{equation*} a_{total}(t)= \left(\begin{array}{l} a(t) \\ a_{\theta}(t)\end{array}\right) \end{equation*}avec \(a_{\theta}=\frac{d L}{d \theta(t)}\text{.}\) Lorsqu'on applique la formule (11.6) a l'équation augmentée (11.7) on obtient:
\begin{equation*} \frac{d a_{total}(t)}{dt}= - \left(\begin{array}{l} a(t)\frac{\partial f(z(t),\theta,t)}{\partial z(t) } \\ a(t)\frac{\partial f(z(t),\theta,t)}{\partial \theta(t)} \end{array}\right) \end{equation*}Dans le cadre du modèle Définition 11.6 on a donc obtenu le gradient. Dans le premier cas ou les poids ne dépendent pas du temps on intégre en temps pour obtenir le gradient par rapport aux paramètres \(\theta\) pour obtenir le résultat en partant du principe que \(\theta(T)=0\) (cela revient a dire qu'initialement les poids sont nuls).
Définition 11.8.
On définit le dual augmenté d'un ODEnet:
avec la condition initiale \((z(T),\frac{\partial L}{\partial z(T)},0)\)
Subsection 11.4.1 Propriété d'approximation universelle
Un des arguments qui justifie l'utilisation des réseaux de neurones c'est les théorèmes d'approximation universelle du type Théorème 5.8 - Théorème 5.9. Il est donc important d'obtenir des résultats du même type pour les Neural ODE.
On va commencer par le cas le plus simple \(h_{\theta_i}(x)=I_d\text{,}\) \(h_{\theta_e}(z)=I_d\) et des poids constant en temps. On résout donc
avec \(z(0)=x\) et \(z(T)=y\text{.}\) On chercha a approcher avec cela une fonction contiue \(y=f(x)\text{.}\) La question est donc de savoir quel est l'espace de fonction que l'on peut approcher en résolvant Définition 11.5. Ce type de réseau ne satisfait pas la propriété d'approximation universelle. On va donner un contre exemple rapide.
En construction
Subsection 11.4.2 Variantes
En construction
Subsection 11.4.3 Symplectique ODEnet
En construction