Wir haben die Auswirkungen der L1-Regularisierung und von Leaky Relu auf die Fehlerrückausbreitung verglichen. Es wird erklärt, dass die L1-Regularisierung für die Dimensionskomprimierung verwendet wird, die unnötige erklärende Variablen beim maschinellen Lernen entfernt. Auf der anderen Seite ist LeakyRelu eine Aktivierungsfunktion, die verhindert, dass das Lernen auch in mehreren Ebenen unterbrochen wird, indem eine leichte Neigung erzeugt wird, selbst wenn x negativ ist. Ich weiß nicht einmal, warum ich diese völlig unabhängigen Dinge verglichen habe.
python
x1 = Input(shape=(124,))
x2 = Dense(100)(x1)
x3 = Activation('relu')(x2)
y = Dense(10)(x3)
model.compile(loss='mean_squared_error')
\begin{align}
x_1 &= input\\
x_2 &= Ax_1 + B\\
x_3 &= relu(x_2)\\
y &= Cx_3+D\\
L_{mse} &= \frac{1}{2}(t-y)^2\\
\end{align}
Es wird angenommen, dass die Verlustfunktion, die Aktivierungsfunktion und die Gesamtverbindungsberechnung wie oben beschrieben durchgeführt werden. In diesem Fall ist jede partielle Differentialformel
\begin{align}
\frac{\partial L_{mse}}{\partial y} &= -(t - y)\\
\frac{\partial y}{\partial C} &= x_3\\
\frac{\partial y}{\partial D} &= 1\\
\frac{\partial y}{\partial x_3} &= C\\
\frac{\partial x_3}{\partial x_2} &= H(x_2)\\
H(x)&=\left\{
\begin{array}{ll}
1 & (x \geq 0) \\
0 & (x \lt 0)
\end{array}
\right.\\
\frac{\partial x_2}{\partial A} &= x_1\\
\frac{\partial x_2}{\partial B} &= 1\\
\end{align}
Aus den Modellgewichten werden $ A, B, C, D $ mit der Kettenregel aktualisiert
\begin{align}
\frac{\partial L_{mse}}{\partial A} &= \frac{\partial L_{mse}}{\partial y}\frac{\partial y}{\partial x_3}\frac{\partial x_3}{\partial x_2}\frac{\partial x_2}{\partial A}\\
&=-(t - y)\cdot C \cdot H(x_2) \cdot x_1\\
\frac{\partial L_{mse}}{\partial B} &= \frac{\partial L_{mse}}{\partial y}\frac{\partial y}{\partial x_3}\frac{\partial x_3}{\partial x_2}\frac{\partial x_2}{\partial B}\\
&=-(t - y)\cdot C \cdot H(x_2) \\
\frac{\partial L_{mse}}{\partial C} &= \frac{\partial L_{mse}}{\partial y}\frac{\partial y}{\partial C}\\
&=-(t - y)\cdot x_3 \\
\frac{\partial L_{mse}}{\partial D} &= \frac{\partial L_{mse}}{\partial y}\frac{\partial y}{\partial D}\\
&=-(t - y)\\
\end{align}
Kann als angezeigt werden.
In Keras hat die Regularisierung die folgenden drei. ・ Kenel_regularizer ・ Bias_regularizer ・ Activity_regularizer https://keras.io/ja/regularizers/
In Bezug auf die Koeffizienten der ersten vollständig verbundenen Schicht $ x_2 = Ax_1 + B $ im vorherigen Abschnitt hat kernel_regularizer ein Gewicht von $ A $, Bias_regularizer hat ein Gewicht von $ B $ und activity_regularizer hat eine Regularisierung der Ausgabe $ x_2 $. Ich werde das machen.
In diesem Fall addiert die L1-Regularisierung den Absolutwert der Variablen multipliziert mit einem zusätzlichen kleinen Koeffizienten $ \ lambda $ zur Verlustfunktion.
Beziehungsweise
Hier ist die Aktivität der L1-Regularisierung_regularizer、
L_{L1} = \lambda |x_2| \\
\frac{\partial |x|}{\partial x} = \left\{
\begin{array}{ll}
1 & (x \geq 0) \\
-1 & (x \lt 0)
\end{array}
\right.\\
H(x)=\left\{
\begin{array}{ll}
1 & (x \geq 0) \\
0 & (x \lt 0)
\end{array}
\right.\\
\frac{\partial L_{L1}}{\partial x_2} = \lambda(2H(x_2)-1)\\
Daher ist die Änderung des Aktualisierungsbetrags der Modellgewichte $ A, B, C, D $ aufgrund des activity_regularizer der L1-Regularisierung
\begin{align}
\frac{\partial L_{L1}}{\partial A} &= \frac{\partial L_{L1}}{\partial x_2}\frac{\partial x_2}{\partial A}\\
&=\lambda(2H(x_2)-1) \cdot x_1\\
\frac{\partial L_{L1}}{\partial B} &= \frac{\partial L_{L1}}{\partial x_2}\frac{\partial x_2}{\partial B}\\
&=\lambda(2H(x_2)-1) \\
\frac{\partial L_{L1}}{\partial C} &= 0\\
\frac{\partial L_{L1}}{\partial D} &= 0\\
\end{align}
Die Erklärung, dass die L1-Regularisierung für die Dimensionskomprimierung verwendet wird, ist Aktivität._Kernel statt Regularizer_von Regularizer
python
x1 = Input(shape=(124,))
x2 = Dense(100, activity_regularizer=regularizers.l1(0.01))(x1)
x3 = Activation('relu')(x2)
y = Dense(10)(x3)
model.compile(loss='mean_squared_error')
LeakyRelu ist die folgende Aktivierungsfunktion. Im Allgemeinen $ \ alpha ≪1 $
LeakyRelu(x)=\left\{
\begin{array}{ll}
x & (x \geq 0) \\
\alpha x & (x \lt 0)
\end{array}
\right.\\
\frac{\partial LeakyRelu(x)}{\partial x}
=\left\{
\begin{array}{ll}
1 & (x \geq 0) \\
\alpha & (x \lt 0)
\end{array}
\right.\\
Von
H(x)=\left\{
\begin{array}{ll}
1 & (x \geq 0) \\
0 & (x \lt 0)
\end{array}
\right.\\
Leaky Relu und normaler Relu Gradientendifferenz mit
\begin{align}
\frac{\partial LeakyRelu(x)}{\partial x} &=(1-\alpha )H(x) + \alpha \\
\frac{\partial LeakyRelu(x)}{\partial x}-\frac{\partial Relu(x)}{\partial x}
&=((1-\alpha )H(x) + \alpha )-H(x)\\
&=-\alpha (H(x) -1)\\
\end{align}
Kann geschrieben werden. Daher ist die Änderung des Aktualisierungsbetrags der Modellgewichte $ A, B, C, D $ aufgrund von Relu => LeakyRelu
\begin{align}
\frac{\partial L_{mse}}{\partial A} &=(t - y)\cdot C \cdot \alpha (H(x_2)-1) \cdot x_1\\
\frac{\partial L_{mse}}{\partial B} &=(t - y)\cdot C \cdot \alpha (H(x_2)-1) \\
\frac{\partial L_{mse}}{\partial C} &= 0\\
\frac{\partial L_{mse}}{\partial D} &= 0\\
\end{align}
Kann als angezeigt werden. Wenn Sie es wagen, dies zu transformieren, wird es wie folgt aussehen. Hier sind die beiden Elemente nur die normale Fehler-Backpropagation multipliziert mit $ \ alpha $, sodass sie von nun an ignoriert werden.
\begin{align}
\frac{\partial L_{mse}}{\partial A} &=(t - y)\cdot C \cdot \alpha (2H(x_2)-1) \cdot x_1-[\alpha (t - y)\cdot C \cdot H(x_2) \cdot x_1]\\
\frac{\partial L_{mse}}{\partial B} &=(t - y)\cdot C \cdot \alpha (2H(x_2)-1)-[\alpha (t - y)\cdot C \cdot H(x_2)] \\
\frac{\partial L_{mse}}{\partial C} &= 0\\
\frac{\partial L_{mse}}{\partial D} &= 0\\
\end{align}
python
x1 = Input(shape=(124,))
x2 = Dense(100)(x1)
x3 = LeakyReLU(alpha=0.01)(x2)
y = Dense(10)(x3)
model.compile(loss='mean_squared_error')
Vergleichen wir die Änderungen gegenüber der normalen Backpropagation. Hier sind $ \ lambda << 1, \ alpha << 1 $ beide ausreichend kleiner als 1.
\begin{align}
\frac{\partial L_{L1}}{\partial A} &=\lambda(2H(x_2)-1) \cdot x_1\\
\frac{\partial L_{L1}}{\partial B} &=\lambda(2H(x_2)-1) \\
\frac{\partial L_{L1}}{\partial C} &= 0\\
\frac{\partial L_{L1}}{\partial D} &= 0\\
\end{align}
--Relu => Änderungen aufgrund von Leaky Relu
\begin{align}
\frac{\partial L_{mse}}{\partial A} &=(t - y)\cdot C \cdot \alpha (2H(x_2)-1) \cdot x_1\\
\frac{\partial L_{mse}}{\partial B} &=(t - y)\cdot C \cdot \alpha (2H(x_2)-1) \\
\frac{\partial L_{mse}}{\partial C} &= 0\\
\frac{\partial L_{mse}}{\partial D} &= 0\\
\end{align}
Hier kann die Änderung aufgrund von Relu => LeakyRelu als nahe an der Änderung aufgrund der L1-Regularisierung von activity_regularizer in der frühen Lernphase angesehen werden, in der $ (t --y) \ cdot C $ nicht als Null angesehen werden kann. Wenn andererseits das Lernen ausreichend fortschreitet und $ (t --y) \ cdot C $ gegen Null geht, können wir dann berücksichtigen, dass der activity_regularizer der L1-Regularisierung schwächer wird? Ich habe darüber nachgedacht. Die Änderung von activity_regularizer der L1-Regularisierung bezieht sich jedoch nur auf die Ebene, auf die die Regularisierung angewendet wird, aber die Änderung durch Relu => LeakyRelu wird auch vor der Aktivierungsfunktion auf die Ebene übertragen.
Wenn sich nur zwei Elemente aufgrund von Relu => LeakyRelu ändern, ist dies der Betrag, der durch Multiplizieren der normalen Fehlerrückausbreitung mit $ \ alpha $ erhalten wird.
--Relu => Leaky Relu ändert sich in zwei Elementen
\begin{align}
\frac{\partial L_{mse}}{\partial A} &=-\alpha (t - y)\cdot C \cdot H(x_2) \cdot x_1\\
\frac{\partial L_{mse}}{\partial B} &=-\alpha (t - y)\cdot C \cdot H(x_2) \\
\frac{\partial L_{mse}}{\partial C} &= 0\\
\frac{\partial L_{mse}}{\partial D} &= 0\\
\end{align}
In Kombination mit dem ursprünglichen Farbverlauf und multipliziert mit der Aktivierungsfunktion von LeakyRelu sind alle vorherigen Farbverläufe $ (1 + \ alpha) $ mal größer. Wenn das Modell tief ist, wird empfohlen, durch Ersetzen aller Relu-Funktionen durch LeakyRelu-Funktionen den Gradienten der flachen Ebene, die logarisch näher an der Eingabe liegt, um $ (1 + \ alpha) ^ n $ zu erhöhen.
Wir haben die L1-Regularisierung und Leaky Relu verglichen. Ich dachte, dass die Änderung aufgrund von Relu => LeakyRelu die Änderung aufgrund der L1-Regularisierung von activity_regularizer und des Gradienten ist, bevor die Aktivierungsfunktion mit $ (1 + \ alpha) $ multipliziert wird. Diese Interpretation setzt voraus, dass LeakyRel die Summe der folgenden Funktionen ist.
\begin{align}
LeakyRelu(x)&=\left\{
\begin{array}{ll}
x & (x \geq 0) \\
\alpha x & (x \lt 0)
\end{array}
\right.\\
&=\left\{
\begin{array}{ll}
(1+\alpha )x & (x \geq 0) \\
0 & (x \lt 0)
\end{array}
\right. - \alpha|x|\\
&=(1+\alpha )Relu(x)- \alpha|x|
\end{align}
Recommended Posts