Cet article est une sortie facile à comprendre du chapitre 7 Deep Learning à partir de zéro, avec votre propre compréhension des techniques d'apprentissage. J'ai pu le comprendre moi-même, j'espère donc que vous pourrez le lire confortablement. De plus, je serais plus qu'heureux que vous puissiez vous y référer lorsque vous étudiez ce livre.
class Momentum:
def __init__(self, lr=0.01, momentum=0.9):
self.lr = lr #Taux d'apprentissage
self.momentum = momentum #Constante de momentum
self.v = None #la vitesse
def update(self, params, grads):
if self.v is None: #Initialisez la vitesse de chaque paramètre uniquement au début
self.v = {}
for key,val in params.items():
self.v[key] = np.zeros_like(val) #Initialiser en mettant à zéro la vitesse de chaque paramètre
for key in params.keys():
self.v[key] = self.momentum *self.v[key] - self.lr * grads[key] #Trouvez la vitesse à l'emplacement actuel
params[key] = params[key] + self.v[key]
La méthode Momentum utilise le concept de vitesse, alors créez d'abord la vitesse avec des variables d'instance.
Trouvez la vitesse au point actuel de la pente et ajoutez-la aux paramètres de pondération actuels pour mettre à jour les paramètres.
class AdaGrad: #Le coefficient d'apprentissage peut être atténué pour chaque paramètre
def __init__(self, lr=0.01):
self.lr = lr
self.h = None
def update(self, params, grads):
if self.h is None:
self.h = {}
for key,val in params.items():
self.h[key] = np.zeros_like(val)
for key in params.keys():
self.h[key] = self.h[key] + (grads[key] * grads[key]) #Mettez la somme des carrés des gradients de chaque paramètre dans h
params[key] = params[key] - ((self.lr * grads[key] )/ (np.sqrt(self.h[key]) + 1e-7))
Quant à la méthode AdaDrad, il n'est pas nécessaire de l'expliquer car elle implémente simplement la formule écrite dans l'article précédent.
Diminuez petit à petit le coefficient d'apprentissage et soustrayez comme SGD.
Recommended Posts