introduction
C'est le contenu du cours 2, semaine 1 (C2W1) de Spécialisation en apprentissage profond.
(C2W1L01) Train / Dev / Test sets
Contenu
- Le ML appliqué est un processus hautement itératif. Il est important d'exécuter efficacement le cycle Idée → Code → Expérience → Idée…
- Train set / dev set / test set
- Auparavant, il était dit que train: test = 70: 30 et train: dev (validation croisée): test = 60: 20: 20
――Récemment, la quantité de données a augmenté. S'il y a environ 1 million de données, 10 000 ensembles de développement et 10 000 ensembles de test suffisent.
--train: dev: test = 98: 1: 1, 99,5: 0,25: 0,25, etc.
- Assurez-vous que le développement et le test proviennent de la même distribution
--OK sans ensemble de test (même avec l'ensemble de développement seul)
--dev set est parfois appelé "test set"
(C2W1L02) Bias / Variance
Contenu
――Un biais élevé et une variance élevée peuvent être visualisés en 2 dimensions, mais pas en dimensions élevées.
train set error |
dev set error |
|
1% |
11% |
high variance |
15% |
16% |
high bias |
15% |
30% |
high bias & high variance |
0.5% |
1% |
low bias & low variance |
--Lorsque l'erreur (erreur optimale ou erreur de Bayes) lorsqu'elle est jugée par une personne est définie sur 0
(C2W1L03) Basic "recipe" for machine learning
Contenu
- En cas de biais élevé (vérifier les performances des données d'entraînement)
- bigger network
- train longer
- (recherche d'architecture NN) (peut ne pas être utile)
- Répéter jusqu'à ce que le biais élevé soit résolu
- Pour une variance élevée (vérifier avec les performances de l'ensemble de développement)
- (recherche d'architecture NN) (peut ne pas être utile)
- Le compromis entre biais et variance est devenu un problème dans les premiers réseaux de neurones
- Maintenant que nous avons plus de données, nous pouvons améliorer la variance sans détériorer le biais.
(C2W1L04) Regularization
Contenu
J\left(w, b\right) = \frac{1}{m} \sum^{m}_{i=1}L\left(\hat{y}^{(i)}, y^{(i)}\right) + \frac{\lambda}{2m}\|w\|^2_2
- $ \ lambda $; Paramètre de normalisation (l'un des hyper paramètres)
- L_2 regularization ; ||w||^2_2 = \sum^{n_x}_{j=1} w_j^2 = w^Tw
--lambda est une commande Python, alors écrivez `` lambd '' lors de la programmation en Python
J\left(w^{[1]}, b^{[1]}, \cdots , w^{[L]}, b^{[l]}\right) = \frac{1}{m} \sum^{m}_{i=1} L\left(\hat{y}^{(i)}, y^{(i)}\right) + \frac{\lambda}{2m} \sum^{L}_{l=1} \|w^{[l]}\|^2\\
\|w^{[l]}\|^2 = \sum^{n^{[l-1]}}_{i=1}\sum^{n^{[l]}}_{j=1}\left(w_{ij}^{[l]}\right)^2
-La dimension de $ w $ est $ (n ^ {[l-1]}, n ^ {[l]}) $
- || \cdot ||^2_2La norme Frobenius est-elle(|| \cdot ||_F^2)Aussi appelé
dw^{[l]} = \left( \textrm{from backprop} \right) + \frac{\lambda}{m}w^{[l]} \\
w^{[l]} = w^{[l]} - \alpha dw^{[l]} = \left(1 - \alpha \frac{\lambda}{m} \right)w^{[l]} - \alpha \left( \textrm{from backprop} \right)
--Cela s'appelle la décroissance du poids car $ dw ^ {[l]} $ devient plus petit en raison de la régularisation.
(C2W1L05) Why Regularization Reduces Overfitting
Contenu
-Si $ \ lambda $ est grand, il devient $ w ^ {[l]} \ sim 0 $. Ensuite, l'influence de l'unité cachée peut être réduite, et on considère que le réseau est devenu simple. Alors rapprochez-vous du biais élevé
-Si $ \ lambda $ est grand, il sera proche de la régression logistique.
-Si $ g (z) = \ tanh (z) $, si $ z $ est petit, la région linéaire de $ g (z) $ sera utilisée.
--Lorsque la fonction d'activation peut être considérée comme une fonction linéaire, il devient impossible de représenter un réseau compliqué. Par conséquent, il approche un biais élevé
- Lorsque vous utilisez la méthode de descente la plus raide pour confirmer que $ J $ devient plus petit à chaque itération, calculez $ J $ en incluant le deuxième terme.
(C2W1L06) Dropout Regularization
Contenu
- Supprimez chaque unité avec une certaine probabilité (abandonnez l'unité)
- Entraînement avec un réseau neuronal réduit
-Supposant $ l = 3 $ (couche 3). Soit keep_prob (= 0.8) la probabilité de survie (la probabilité que 1-keep_prob abandonne). Soit le vecteur de décrochage $ d3 $
d3 = \mathrm{np.random.rand(} a3 \mathrm{.shape[0], }\, a3 \mathrm{.shape[1])} < \mathrm{keep\_prob} \\
a3 = \mathrm{np.multiply(} a3, d3 \mathrm{)} \\
a3\ /= \mathrm{keep\_prob} \\
a^{[4]} = W^{[4]} a^{[3]} + b^{[4]}
--Enfin, conservez la valeur attendue de $ a ^ {[3]} $ en divisant par keep_prob.
- Changer le vecteur de décrochage $ d3 $ pour chaque répétition de la méthode de descente la plus raide
- N'implémentez pas de décrochage lors du calcul de l'ensemble de test (si le décrochage est inclus dans le test, il sera bruyant)
(C2W1L07) Understanding dropout
Contenu
- Intuition ; Can't rely on any one feature, so have to spread out weights
- Ne pas pondérer les entrées spécifiques → Distribuer les poids → Réduire l'effet des poids → Même effet que la régularisation $ L_2 $
- Vous pouvez également modifier la valeur de keep_prob pour chaque couche. Réduisez keep_prob pour $ W ^ {[l]} $ avec des dimensions plus grandes
--Il existe de nombreux cas d'abandon réussi en vision par ordinateur (le nombre de pixels = de nombreuses fonctionnalités et des données relativement petites, il a donc tendance à être une variance élevée)
- Inconvénients; Difficile de vérifier si la fonction de coût $ J $ est calculée correctement
--Countermeasure; Assurez-vous que $ J $ diminue avec keep_prob = 1 (il n'y a pas de problème de codage), puis activez keep_prob.
(C2W1L08) Other Regularization Methods
Contenu
- Data augmentation
- Empêcher le surajustement en retournant l'image à gauche et à droite ou en augmentant les données en tournant et en agrandissant
――Vous ne pouvez pas vous attendre à l'effet d'augmenter les données complètement indépendantes, mais vous pouvez augmenter les données à faible coût.
- Early stopping
- Vérifiez à la fois l'erreur d'entraînement (ou $ J $) et l'erreur de jeu de développement à chaque itération, et arrêtez le calcul de l'itération lorsque l'erreur de jeu de développement passe de décroissante à croissante.
―― L'inconvénient est que vous pensez à $ J $ et au surajustement en même temps, ce qui complique le problème.
- La solution de contournement consiste à utiliser la régularisation $ L_2 $ (l'inconvénient est que vous devez vous soucier de la valeur de $ \ lambda $)
(C2W1L09) Normalizing inputs
Contenu
- Normaliser la fonction d'entrée lorsque l'échelle de la fonction d'entrée est significativement différente. Ce faisant, la méthode de descente la plus raide peut être calculée rapidement.
\mu = \frac{1}{m} \sum^{m}_{i=1} x^{(i)} \\
x := x - \mu \\
\sigma^2 = \frac{2}{m} \sum^{m}_{i=1} x^{(i)} \ast\ast 2 \\
x \ /= \sigma^2
--Utiliser $ \ mu $ et $ \ sigma $ de l'ensemble de trains lors de la normalisation de l'ensemble de développement
(C2W1L10) Vanishing / exploding gradients
Contenu
- Lors de la formation d'un réseau de neurones très profond, la zone différentielle devient très petite ou grande. La méthode de descente la plus raide prend du temps, surtout lorsqu'elle est petite
- Le réseau de neurones actuel compte environ 150 couches
(C2W1L11) Weight initialization for deep networks
Contenu
- Plus il y a d'entités d'entrée, plus $ z $ est grand calculé par $ z = wx + b $. Par conséquent, lorsqu'il existe de nombreuses fonctionnalités d'entrée, réduisez w au moment de l'initialisation.
W^{[l]} = \mathrm{np.random.randn} \left( \cdots \right) \ast \mathrm{np.sqrt} \left( \frac{2}{n^{[l-1]}} \right)
--Pour ReLU, $ \ sqrt {\ frac {2} {n ^ {[l-1]}}} $ fonctionne bien
- $ \ tanh $ est $ \ sqrt {\ frac {1} {n ^ {[l-1]}}} $ (initialisation Xavier)
(C2W1L12) Numerial Approximation of Gradients
Contenu
- La valeur approximative de la différenciation est $ \ frac {f (\ theta + \ epsilon) --f (\ theta- \ epsilon)} {2 \ epsilon} $ avec $ \ epsilon $ comme petit nombre.
- L'ordre d'erreur est $ O (\ epsilon ^ 2) $
(C2W1L13) Gradient checking
Contenu
- Take W^{[1]},b^{[1]},\cdots ,W^{[L]},b^{[L]} and reshape into a big vector \theta
- Take dW^{[1]},db^{[1]},\cdots ,dW^{[L]},db^{[L]} and reshape into a big vector d\theta
- for each i :
d\theta_{approx}^{[i]} = \frac{J(\theta_1, \cdots, \theta_i+\epsilon, \cdots) - J(\theta_1, \cdots, \theta_i-\epsilon, \cdots)}{2\epsilon} \sim d\theta^{[i]}
--check ($ \ epsilon = 10 ^ {-7} $)
\frac{\|d\theta_{approx} - d\theta\|_2}{\|d\theta_{approx}\|_2 + \|d\theta\|_2}
value |
judgement |
10^{-7} |
great! |
10^{-5} |
Ça va peut-être, mais vérifiez |
10^{-3} |
Bug possible |
--Si cela ressemble à un bogue, vérifiez où la différence entre $ d \ theta_ {approx} $ et $ d \ theta $ est grande pour un $ i $ spécifique.
(C2W1L14) Gradient Checking Implementation Notes
Contenu
--Comment utiliser la vérification de gradient, comment gérer quand $ d \ theta_ {approx} $ et $ d \ theta $ sont différents, etc.
référence