Keras 2.0: Suppression des NN MaxoutDense et Highway

Publié le 25 mars 2017 par Lionelo @investirblog

Keras 2.0: Une bonne nouvelle ?

Notre ami frenchy François Chollet, vient de publier a version 2.0 du framework de deep learning keras.
Vous pouvez l'installer simplement mais pour les utilisateurs avancés, cette version reserve une mauvaise surprise, les layers Highway et MaxoutDense sont supprimés
Les sources de ces layers sont toujours disponibles, mais leur maintenance n'est plus assurée. C'est dommage parce que ces outils donnaient accès au pékin moyen à des travaux de recherche récents et prometteurs (. J'utilise pour ma part ces deux Layers et je pense qu'ils peuvent servir au plus grand nombre, alors pourquoi les supprimer ? Petit tour de ces deux essentiels.

Highway networks

Les Highway networks sont des réseaux qui tirent parti des avancées sur les réseaux récurrents à mémoire longue (LTSM) pour résoudre le problème des vanishing gradients sur des réseaux qui affectent les architectures avec de nombreux niveaux.
On connait depuis longtemps le résultat théorique qu'un réseau de neurones peut approximer n'importe quelle fonction, mais cette propriété théorique occulte le fait que les réseaux plus profonds convergent plus rapidement, et surtout qu'ils ont un pouvoir de généralisation beaucoup plus fort. Avoir la possibilité d'étendre son réseau sans encourir de pénalité est donc primordial, et la décision de Keras de reléguer cette fonctionnalité à la marge est surprenante.
En python avec keras, on avait le code suivant:
def get_Highway_model(l, n_highway=4):
model = Sequential()
model.add(Dense(3 * l, input_dim=l))
model.add(Dropout(0.2))
for i in range(n_highway):
model.add(Highway())
model.add(Dropout(0.2))
model.add(Dense(1))
model.compile(loss='mse', optimizer='rmsprop')
return model

Max out Networks

Les Max Out networks sont une extension de la technique du Drop Out, une technique de régularisation des poids qui réduit effectivement le degré d'overfitting associé à une optimisation.
Les Maxout networks peuvent être assimilé à un moyennage de modèle, plusieurs versions d'un même réseau contribuant au résultat final.
def get_MaxOut_model(l):
model = Sequential()
model.add(MaxoutDense(3 * l, input_dim=l))
model.add(Dropout(0.2))
model.add(MaxoutDense(3 * l))
model.add(Dropout(0.2))
model.add(Dense(1))
model.compile(loss='mse', optimizer='rmsprop')
return model

Je suis en train  d’essayer de combiner ces deux layers... Mais pour l'instant, pas question de passer à la version 2.0 de Keras.