Einführung
Dies ist der Inhalt von Kurs 1, Woche 3 (C1W3) von Deep Learning Specialization.
(C1W3L01) Newral Network Overview
Inhalt
- Woche 3 erklärt die Implementierung eines neuronalen Netzwerks
- Über die erste Schicht des neuronalen Netzes
- $ W ^ {[1]} $, $ b ^ {[1]} $; Parameter
- z^{[1]} = W^{[1]} x + b^{[1]}
- a^{[1]} = \sigma(z^{[1]})
- Über die zweite Schicht des neuronalen Netzes
- z^{[2]} = W^{[2]} a^{[1]} + b^{[2]}
- a^{[2]} = \sigma(z^{[2]})
-Berechnen Sie $ L (a ^ {[2]}, y) $
--back Propagation
- da^{[2]} → dz^{[2]} → dW^{[2]}, db^{[2]} → …
(C1W3L02) Neural Network Representation
Inhalt
- Erklärung der einzelnen verborgenen Schicht (= 2 Schichten neuronales Netzwerk, beim Zählen von Schichten wird die Eingabeschicht nicht gezählt, die verborgene Schicht und die Ausgabeschicht werden gezählt)
- input layer ; x = a^{[0]}
- hidden layer
- Parameter sind $ w ^ {[1]} $ ((4, 3) Matrix) und $ b ^ {[1]} $ ((4, 1) Matrix)
- $ a ^ {[1]} $ ist 4 Knoten
- output layer
- Parameter sind $ w ^ {[2]} $ ((1, 4) Matrix) und $ b ^ {[1]} $ ((1, 1) Matrix)
(C1W3L03) Computing a Neural Network Output
Inhalt
- Erklärung zur Berechnung des neuronalen Netzes
- $ a_i ^ {[l]} $; $ i $ der Knoten der $ l $ -Schicht
--Vektorisieren und Berechnen
z^{[1]} = W^{[1]} x + b^{[1]} \\
a^{[1]} = \sigma(z^{[1]}) \\
z^{[2]} = W^{[2]} a^{[1]} + b^{[2]} \\
a^{[2]} = \sigma(z^{[2]}) \\
(C1W3L04) Vectorizing Across Multiple Examples
Inhalt
- So berechnen Sie mehrere Trainingsbeispiele
- $ X = \ [x ^ {(1)} , x ^ {(2)} , \ cdots x ^ {(m)} ] $ ($ (n_x, m) $ Matrix, $ m $ Ist die Anzahl der Trainingsbeispiele)
Z^{[1]} = W^{[1]} X + b^{[1]} \\
A^{[1]} = \sigma\left(Z^{[1]}\right) \\
Z^{[2]} = W^{[2]} Z^{[1]} + b^{[2]} \\
A^{[2]} = \sigma\left(Z^{[2]}\right)
- $ Z ^ {[1]} $, $ A ^ {[1]} $
--Lines; Anzahl der versteckten Einheiten
- Spalte; $ m $
Z^{[1]} = \left[ z^{[1](1)}\,z^{[1](2)}\,\cdotsz^{[1](m)} \right] \\
A^{[1]} = \left[ a^{[1](1)}\,a^{[1](2)}\,\cdotsa^{[1](m)} \right]
Impressionen
- Sehr langsam und höflich erklären. Dies ist wichtig, und wenn Sie stolpern, werden Sie später in große Schwierigkeiten geraten.
(C1W3L05) Explanation For Vectorized Implementation
Inhalt
X = \left[x^{(1)} \, x^{(2)} \, \cdots x^{(m)}\right] \\
Z^{[1]} = \left[z^{[1](1)}\,z^{[1](2)}\,\cdotsz^{[1](m)}\right] \\
Z^{[1]} = W^{[1]} X + b^{[1]}
- $ b ^ {[1]} $ wird mithilfe von Python-Broadcasts zu einer Matrix
(C1W3L06) Activation functions
Inhalt
- Sigma-Funktion
- Wird nur für die binäre Klassifizierung verwendet
--tanh Funktion
- a = \tanh z = \frac{e^z - e^{-z}}{e^z + e^{-z}}
- Besser als die Sigmoidfunktion. Weil der Durchschnittswert Null ist.
- Der gemeinsame Nachteil der Sigmoid-Funktion und der Tanh-Funktion besteht jedoch darin, dass sich die Steigung 0 nähert, wobei $ z $ groß ist, was die Konvergenz der Methode mit dem steilsten Abstieg verlangsamt.
--ReLU-Funktion
- a = \max\(0, z\)
-Obwohl das Differential nicht mit $ z = 0 $ definiert werden kann, gibt es kein Problem, da es während der Berechnung nicht genau $ z = 0 $ ist.
--ReLU wird standardmäßig im neuronalen Netz verwendet (manchmal tanh)
-Der Nachteil ist, dass die Steigung bei $ z \ lt 0 $ 0 wird
- Leaky ReLU
- a = \max(0.01z, z)
-Obwohl $ z \ lt 0 $ leicht geneigt ist
--0.01 kann als einer der Lernparameter angesehen werden, aber nur wenige Leute implementieren ihn.
- Die Aktivierungsfunktion kann sich je nach Ebene ändern (versteckte Ebene ist Tanh, Ausgabeebene ist Sigmoid usw.)
- Es gibt viele Möglichkeiten für das neuronale Netz (Art der Aktivierungsfunktion, Methode zum Initialisieren von Parametern usw.), aber es ist schwierig, Richtlinien bereitzustellen.
(C1W3L07) Why do you need non-linear activation function
Inhalt
――Warum wird eine nichtlineare Funktion für die Aktivierungsfunktion verwendet? → Wenn Sie sie zu einer linearen Funktion machen, selbst wenn Sie die verborgene Ebene vergrößern, handelt es sich schließlich nur um eine lineare Funktion, sodass sie unbrauchbar ist.
(C1W3L08) Derivatives of activation functions
Inhalt
- sigmoid activation function
g(z) = \frac{1}{1+e^{-z}} \\
g^\prime(z) = g(z) \left( 1-g(z) \right)
g(z) = \tanh (z) \\
g^\prime(z) = 1-\left( \tanh(z) \right)^2
g(z) = \max\left(0, z\right) \\
g^\prime(z) = 0 \ (\text{if}\ z \lt 0) \\
g^\prime(z) = 1 \ (\text{if}\ z \ge 0)
g(z) = \max\left(0.01z, z\right) \\
g^\prime(z) = 0.01 \ (\textrm{if}\ z \lt 0) \\
g^\prime(z) = 1 \ (\textrm{if}\ z \ge 0)
- Die Unterscheidung von $ z = 0 $ in ReLU und Leaky ReLU kann 0, 1 oder unbestimmt sein (da es unwahrscheinlich ist, dass $ z = 0 $ genau während der Berechnung ist).
(C1W3L09) Gradient descent for neural network
Inhalt
- $ n ^ {[0]} = n_x, n ^ {[1]}, n ^ {[2]} (= 1) $
- Parameter sind $ W ^ {[1]} $ ($ (n ^ {[1]}, n ^ {[0]}) $ Matrix), $ b ^ {[1]} $ ($ (n ^ {) [1]}, 1) $ Matrix), $ W ^ {[2]} $ ($ (n ^ {[2]}, n ^ {[1]}) $ Matrix), $ b ^ {[2] } $ ($ (n ^ {[2]}, 1) $ Matrix)
- cost function ; J(W^{[1]}, b^{[1]}, W^{[2]}, b^{[2]}) = \frac{1}{m}\Sigma_{i=1}^{m}L(\hat{y}, y)
- Wortausbreitung (Ausgabeschicht ist binäre Klassifikation → Sigmoidfunktion)
Z^{[1]} = W^{[1]} X + b^{[1]} \\
A^{[1]} = g^{[1]}\left( Z^{[1]} \right) \\
Z^{[2]} = W^{[2]} A^{[1]} + b^{[2]} \\
A^{[2]} = g^{[2]}\left( Z^{[2]} \right) = \sigma \left( Z^{[2]} \right)
-backpropagation
dZ^{[2]} = A^{[2]} - Y \ \ \left( Y = \left[ y^{(1)} \, y^{(2)} \, \cdots y^{(m)} \right] \right) \\
dW^{[2]} = \frac{1}{m} dZ^{[2]} A^{[1]\textrm{T}}\\
db^{[2]} = \frac{1}{m} \textrm{np.sum} \left( dZ^{[2]} \textrm{, axis=1, keepdims=True} \right)\\
dZ^{[1]} = W^{[2]\textrm{T}}dZ^{[2]} \ast g^{[1]\prime} \left(Z^{[1]}\right) \\
dW^{[1]} = \frac{1}{m}dZ^{[1]} X^{\text{T}} \\
db^{[1]} = \frac{1}{m} \textrm{np.sum} \left( dZ^{[1]} \textrm{, axis=1, keepdims=True} \right)\\
- Wenn Sie
keepdims = True``` nicht zu
np.sum``` hinzufügen, handelt es sich um einen $ (n ^ {[i]},) $ -Vektor. Mit ``
keepdims = True``` wird es ein $ (n ^ {[i]}, 1) $ Vektor.
- Wenn Sie nicht ``
keepdims = True``` hinzufügen, führen Sie
`reshape``` durch
- $ \ ast $ im Ausdruck $ dZ ^ {[1]} $ ist das Produkt jedes Elements
Impressionen
- Die Spitzen von `` `np.sum``` sind beiläufig miteinander verwoben (es ist wichtig, sich der Dimension bewusst zu sein)
(C1W3L10) Backpropagation Intuition (optional)
Inhalt
- Intuitive Erklärung der vektorisierten Implementierung der Backpropagation der logistischen Regression
―― "Der mathematisch schwierigste Teil des neuronalen Netzwerks"
(C1W3L11) Random Initialization
Inhalt
- Im Falle einer logistischen Regression ist es in Ordnung, das Gewicht mit 0 zu initialisieren
- In einem neuronalen Netzwerk ist es NG, das Gewicht W mit 0 zu initialisieren
- Unter der Annahme, dass die Elemente von $ W ^ {[1]} $ alle 0 und die Elemente von $ b ^ {[1]} $ alle 0 sind, sollte dieselbe Berechnung unabhängig von der Anzahl der verborgenen Ebeneneinheiten durchgeführt werden. werden. In diesem Fall macht es keinen Sinn, mehrere Einheiten zu haben, und es ist dasselbe, als ob es nur eine Einheit gäbe.
- Initialisierungsmethode
W^{[1]} = \textrm{np.random.randn(2, 2)} \ast 0.01 \\
b^{[1]} = \textrm{np.zero((2, 1))}
- $ b ^ {[1]} $ kann 0 sein, da die Symmetrie unterbrochen wird, wenn $ W ^ {[1]} $ zufällig initialisiert wird.
- Der Anfangswert von $ W $ sollte klein sein. Wenn $ W $ groß ist, ist $ Z = Wx + b $ groß, aber wenn der Wert von Sigmoid und $ \ tanh $ groß ist, ist die Steigung klein und die Lerngeschwindigkeit der Methode mit dem steilsten Abstieg ist langsam.
- Für flache neuronale Netze wie eine verborgene Schicht ist 0,01 in Ordnung. Für tiefe neuronale Netze kann es sich um einen anderen Wert als 0,01 handeln
Referenz