Je comprends que la descente de gradient stochastique peut être utilisée pour optimiser un réseau de neurones en utilisant la rétropropagation en mettant à jour chaque itération avec un échantillon différent de l'ensemble de données d'apprentissage. Quelle doit être la taille du lot?
49
Réponses:
La « taille de l' échantillon » vous parlez est appelée la taille des lots , . Le paramètre de taille de lot est l’un des hyper-paramètres que vous réglerez lors de la formation d’un réseau de neurones avec une descente de gradient stochastique en mini-lots (SGD) et dépend des données. La méthode la plus simple de recherche par hyper-paramètre consiste à effectuer une recherche sur la grille sur la vitesse d'apprentissage et la taille du lot afin de trouver une paire qui fasse converger le réseau.B
Pour comprendre la taille du lot, il est important de voir la relation entre la descente en gradient de lot, le SGD en ligne et le SGD de mini-lot. Voici la formule générale pour l'étape de mise à jour du poids dans SGD en mini-lot, qui est une généralisation des trois types. [ 2 ]
Notez qu'avec 1, la fonction de perte n'est plus une variable aléatoire ni une approximation stochastique.
SGD converge plus rapidement que la descente de gradient normale "par lots" car il met à jour les poids après avoir examiné un sous-ensemble de l'ensemble d'apprentissage sélectionné de manière aléatoire. Soit notre ensemble d’entraînement et . La taille du lot est juste la cardinalité de :.x m⊂x B m B=|m|
La descente de gradient par lots met à jour les poids utilisant les gradients de l'ensemble de données ; alors que SGD met à jour les poids en utilisant une moyenne des gradients pour un mini-lot . (L'utilisation de la moyenne par opposition à la somme empêche l'algorithme de prendre des mesures trop volumineuses si le jeu de données est très volumineux. Sinon, vous devrez ajuster votre taux d'apprentissage en fonction de la taille du jeu de données.) l'approximation stochastique du gradient utilisé dans SGD est égale au gradient déterministe utilisé dans la descente en gradient par lots. .θ x m E[∇LSGD(θ,m)]=∇L(θ,x)
Chaque fois que nous prenons un échantillon et mettons à jour nos poids, il s’appelle un mini-lot . Chaque fois que nous parcourons l'intégralité du jeu de données, cela s'appelle une époque .
Supposons que nous ayons un vecteur de données , un vecteur de poids initial paramétrant notre réseau de neurones, et une fonction de perte que nous essayons de minimiser . Si nous avons exemples de formation et une taille de lot de , nous pouvons alors scinder ces exemples de formation en mini-lots C:x:RD θ0:RS L(θ,x):RS→RD→RS T B
Par souci de simplicité, nous pouvons supposer que T est divisible par B. Même si, dans le cas contraire, comme souvent, un poids correct doit être attribué à chaque mini-lot en fonction de sa taille.
Un algorithme itératif pour SGD à époques est donné ci-dessous:M
Remarque: dans la réalité, nous lisons ces exemples d’entraînement dans la mémoire et, en raison de la pré-extraction de cache et autres astuces de mémoire effectuées par votre ordinateur, votre algorithme fonctionnera plus rapidement si les accès à la mémoire sont fusionnés , c.-à-d. Lorsque vous lisez la mémoire. dans l'ordre et ne saute pas au hasard. Ainsi, la plupart des implémentations SGD mélangent le jeu de données puis chargent les exemples en mémoire dans l'ordre dans lequel ils seront lus.
Les principaux paramètres du SGD vanille (sans élan) décrits ci-dessus sont les suivants:
J'aime penser à epsilon en fonction du nombre d'époques jusqu'à un taux d'apprentissage. Cette fonction s'appelle la planification du taux d'apprentissage .
Si vous souhaitez que le taux d’apprentissage soit fixe, définissez simplement epsilon en tant que fonction constante.
La taille du lot détermine le nombre d’exemples que vous consultez avant d’effectuer une mise à jour du poids. Plus il est bas, plus le signal d’entraînement sera bruyant, plus il sera haut, plus il faudra de temps pour calculer le gradient pour chaque étape.
Citations et lectures supplémentaires:
la source
For simplicity we can assume that D is evenly divisible by B
. Ne voulez-vous pas dire que T devrait être divisible par B?B is typically chosen between 1 and a few hundreds, e.g. B = 32 is a good default value, with values above 10 taking advantage of the speed-up of matrix-matrix products over matrix-vector products.
(extrait du papier de Bengio de 2012)