Einführung
Dies ist der Inhalt von Kurs 2, Woche 1 (C2W1) von Deep Learning Specialization.
(C2W1L01) Train / Dev / Test sets
Inhalt
- Angewandte ML ist ein sehr iterativer Prozess. Es ist wichtig, den Zyklus von Idee → Code → Experiment → Idee… effizient auszuführen.
- Train set / dev set / test set
- Zuvor wurde gesagt, dass Zug: Test = 70: 30 und Zug: Dev (Kreuzvalidierung): Test = 60: 20: 20
―― In letzter Zeit hat die Datenmenge zugenommen. Wenn es ungefähr 1 Million Daten gibt, reichen 10.000 Entwicklungssätze und 10.000 Testsätze aus.
--train: dev: test = 98: 1: 1, 99,5: 0,25: 0,25 usw.
- Stellen Sie sicher, dass Entwickler und Test aus derselben Distribution stammen
--OK ohne Test-Set (auch mit Dev-Set alleine)
--dev set wird manchmal als "test set" bezeichnet
(C2W1L02) Bias / Variance
Inhalt
――Hohe Vorspannung und hohe Varianz können in zwei Dimensionen dargestellt werden, jedoch nicht in hohen Dimensionen.
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 |
--Wenn der Fehler (optimaler Fehler oder Bayes-Fehler) bei der Beurteilung durch eine Person auf 0 gesetzt wird
(C2W1L03) Basic "recipe" for machine learning
Inhalt
- Bei hoher Verzerrung (überprüfen Sie die Leistung der Trainingsdaten)
- bigger network
- train longer
- (NN-Architektur-Suche) (möglicherweise nicht nützlich)
- Wiederholen, bis die hohe Vorspannung behoben ist
- Für hohe Varianz (überprüfen Sie mit der Leistung des Entwicklers)
- (NN-Architektur-Suche) (möglicherweise nicht nützlich)
- Der Kompromiss zwischen Bias und Varianz wurde in frühen neuronalen Netzen zu einem Problem
- Jetzt, da wir mehr Daten haben, können wir die Varianz verbessern, ohne die Verzerrung zu verschlechtern.
(C2W1L04) Regularization
Inhalt
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 $; Normalisierungsparameter (einer der Hyperparameter)
- L_2 regularization ; ||w||^2_2 = \sum^{n_x}_{j=1} w_j^2 = w^Tw
--lambda ist ein Python-Befehl. Schreiben Sie also beim Programmieren in Python `` `lambd```
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
-Die Dimension von $ w $ ist $ (n ^ {[l-1]}, n ^ {[l]}) $
- || \cdot ||^2_2Ist Frobenius Norm(|| \cdot ||_F^2)Auch genannt
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)
- Es wird Gewichtsabnahme genannt, weil $ dw ^ {[l]} $ aufgrund der Regularisierung kleiner wird.
(C2W1L05) Why Regularization Reduces Overfitting
Inhalt
-Wenn $ \ lambda $ groß ist, wird es zu $ w ^ {[l]} \ sim 0 $. Dann kann der Einfluss der verborgenen Einheit verringert werden, und es wird angenommen, dass das Netzwerk einfach geworden ist. Kommen Sie also der hohen Tendenz näher
-Wenn $ \ lambda $ groß ist, kommt es der logistischen Regression nahe.
-Wenn $ g (z) = \ tanh (z) $ ist und $ z $ klein ist, wird der lineare Bereich von $ g (z) $ verwendet.
- Wenn die Aktivierungsfunktion als lineare Funktion betrachtet werden kann, wird es unmöglich, ein kompliziertes Netzwerk darzustellen. Daher nähert es sich einer hohen Vorspannung
- Wenn Sie die Methode mit dem steilsten Abstieg verwenden, um zu bestätigen, dass $ J $ für jede Iteration kleiner wird, berechnen Sie $ J $ einschließlich des zweiten Terms.
(C2W1L06) Dropout Regularization
Inhalt
- Lassen Sie jede Einheit mit einer bestimmten Wahrscheinlichkeit fallen (lassen Sie die Einheit fallen)
- Trainieren Sie mit einem reduzierten neuronalen Netzwerk
- Angenommen, $ l = 3 $ (Schicht 3). Sei keep_prob (= 0,8) die Überlebenswahrscheinlichkeit (die Wahrscheinlichkeit, dass 1-keep_prob ausfällt). Der Dropout-Vektor sei $ 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]}
- Schließlich behalten Sie den erwarteten Wert von $ a ^ {[3]} $ bei, indem Sie durch keep_prob dividieren.
- Ändern Sie den Dropout-Vektor $ d3 $ für jede Wiederholung der Methode mit dem steilsten Abstieg
- Implementieren Sie bei der Berechnung des Testsatzes keinen Ausfall (wenn der Ausfall im Test enthalten ist, ist er verrauscht).
(C2W1L07) Understanding dropout
Inhalt
- Intuition ; Can't rely on any one feature, so have to spread out weights
- Gewichten Sie keine spezifischen Eingaben → Verteilen Sie Gewichte → Reduzieren Sie den Effekt von Gewichten → Gleicher Effekt wie $ L_2 $ Regularisierung
- Sie können auch den Wert von keep_prob für jede Ebene ändern. Machen Sie keep_prob für $ W ^ {[l]} $ mit größeren Dimensionen kleiner
- Es gibt viele erfolgreiche Fälle von Aussetzern in der Bildverarbeitung (die Anzahl der Pixel = viele Funktionen und relativ kleine Daten, daher ist die Varianz tendenziell hoch).
- Nachteile; Schwer zu überprüfen, ob die Kostenfunktion $ J $ korrekt berechnet wurde
--Countermeasure; Stellen Sie sicher, dass $ J $ mit keep_prob = 1 abnimmt (es gibt kein Problem mit der Codierung), und aktivieren Sie keep_prob.
(C2W1L08) Other Regularization Methods
Inhalt
- Data augmentation
- Verhindern Sie eine Überanpassung, indem Sie das Bild nach links und rechts drehen oder die Daten durch Drehen und Vergrößern erhöhen
――Sie können nicht erwarten, dass sich vollständig unabhängige Daten erhöhen, aber Sie können die Daten zu geringen Kosten erhöhen.
- Early stopping
--Überprüfen Sie bei jeder Iteration sowohl den Trainingsfehler (oder $ J $) als auch den Dev-Set-Fehler und stoppen Sie die Iterationsberechnung, wenn sich der Dev-Set-Fehler von abnehmend zu steigend ändert.
――Der Nachteil ist, dass Sie gleichzeitig an $ J $ und Überanpassung denken, was das Problem kompliziert.
- Die Problemumgehung besteht darin, die Regularisierung $ L_2 $ zu verwenden (der Nachteil ist, dass Sie sich um den Wert von $ \ lambda $ sorgen müssen).
(C2W1L09) Normalizing inputs
Inhalt
--Normalisieren Sie die Eingabefunktion, wenn sich die Skalierung der Eingabefunktion erheblich unterscheidet. Auf diese Weise kann die Methode mit dem steilsten Abstieg schnell berechnet werden.
\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
--Verwenden Sie beim Normalisieren des Entwicklungssatzes $ \ mu $ und $ \ sigma $ des Zugsatzes
(C2W1L10) Vanishing / exploding gradients
Inhalt
- Wenn Sie ein sehr tiefes neuronales Netzwerk trainieren, wird der Differenzialbereich sehr klein oder groß. Die steilste Abstiegsmethode braucht Zeit, besonders wenn sie klein ist
- Das aktuelle neuronale Netzwerk hat ungefähr 150 Schichten
(C2W1L11) Weight initialization for deep networks
Inhalt
- Je mehr Eingabefunktionen, desto größer $ z $, berechnet mit $ z = wx + b $. Wenn daher viele Eingabefunktionen vorhanden sind, verkleinern Sie w zum Zeitpunkt der Initialisierung.
W^{[l]} = \mathrm{np.random.randn} \left( \cdots \right) \ast \mathrm{np.sqrt} \left( \frac{2}{n^{[l-1]}} \right)
- Für ReLU funktioniert $ \ sqrt {\ frac {2} {n ^ {[l-1]}} $ gut
- $ \ tanh $ ist $ \ sqrt {\ frac {1} {n ^ {[l-1]}} $ (Xavier-Initialisierung)
(C2W1L12) Numerial Approximation of Gradients
Inhalt
- Der ungefähre Wert der Differenzierung ist $ \ frac {f (\ theta + \ epsilon) --f (\ theta- \ epsilon)} {2 \ epsilon} $ mit $ \ epsilon $ als kleiner Zahl.
- Die Reihenfolge der Fehler ist $ O (\ epsilon ^ 2) $
(C2W1L13) Gradient checking
Inhalt
- 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} |
Es kann in Ordnung sein, aber überprüfen Sie |
10^{-3} |
Möglicher Fehler |
--Wenn es wie ein Fehler aussieht, überprüfen Sie, wo der Unterschied zwischen $ d \ theta_ {approx} $ und $ d \ theta $ für ein bestimmtes $ i $ groß ist.
(C2W1L14) Gradient Checking Implementation Notes
Inhalt
- Wie man die Gradientenprüfung verwendet, wie man damit umgeht, wenn $ d \ theta_ {approx} $ und $ d \ theta $ unterschiedlich sind usw.
Referenz