Regularisierung

Was ist Regularisierung?

Wenn man ein Optimierungsproblem hat, kann man weitere Constraints einfügen. So wollen wir zum Beispiel, wenn wir einen Startvektor haben, ihn langsam dazu optimieren das die Summe des Vektor genau der Zahl 3 entspricht:

$$\begin{pmatrix}1\\5\end{pmatrix}$$

Momentan hat unser Vektor die folgende Summe: 1+5=6

Die Fehlerfunktion, die wir also minimieren wollen, sieht so aus:

$$Loss(X)=(3-(x1+x2))^2$$

Leiten wir die Lossfunktion nach x1 ab, und benutzen dabei die Kettenregel.

2(3-(x1+x2))-1

Dasselbe für nach x2 ableiten:

2(3-(x1+x2))-1

Damit kriegen wir folgenden allgemeinen Updatevektor:

$$LearningRate*\begin{pmatrix}2*(3-(x1+x2))*-1\\2*(3-(x1+x2))*-1\end{pmatrix}$$

Setzen wir unseren Vektor ein:

$$LearningRate*\begin{pmatrix}6\\6\end{pmatrix}$$

Dies bedeutet, wenn wir eine LearningRate von 0.1 nehmen, das wir einen neuen Vektor haben, der dann so aussieht:

$$LearningRate*\begin{pmatrix}0.6\\0.6\end{pmatrix}$$

Updaten wir unseren Gewichtsvektor, sieht der nun folgendermaßen aus:

$$LearningRate*\begin{pmatrix}1-0.6\\5-0.6\end{pmatrix}$$$$LearningRate*\begin{pmatrix}0.4\\4.4\end{pmatrix}$$

So geht es dann weiter, mit diesem neuen Gewichtsvektor berechnen wir wieder das Update, bis wir zu einem festen Gewichtsvektor kommen.

Jetzt setzen wir als weiteres Constraint, dass die L2-Norm unseres Vektors möglichst klein sein muss.

Exkurs Normen

Die Lp-Norm eines Vektors ist definiert durch:

$$Lp(x)=\sqrt[p]{\sum_{n=0}^N{abs(x_n)^p}}$$
In [2]:
import math
def l2norm(vector):
    return math.sqrt(sum(abs(x)**2 for x in vector))
l2norm([1, 5])
Out[2]:
5.0990195135927845

Wenn wir die Norm eines Vektors minimieren wollen, stellt sich natürlich die Frage welchen Effekt es auf den Vektor hat, wenn wir die L2-Norm minimieren. Dazu können wir uns einfach die folgenden Beispiele anschauen:

In [6]:
l2norm([1, 5])
Out[6]:
5.0990195135927845
In [7]:
l2norm([2, 4])
Out[7]:
4.47213595499958
In [8]:
l2norm([3, 3])
Out[8]:
4.242640687119285
In [9]:
l2norm([1, 1])
Out[9]:
1.4142135623730951
In [10]:
l2norm([0.4, 0.4])
Out[10]:
0.5656854249492381
In [11]:
l2norm([0.8, 0.8])
Out[11]:
1.1313708498984762

Zum einen sieht man natürlich, das Vektoren, je kleiner sie sind, eine geringere L2-Norm haben. Aber was man auch sieht ist, dass Vektoren, deren Dimensionen aufaddiert auf die gleiche Zahl kommen, eine andere L2-Norm haben. Dabei werden Vektoren präferiert, in denen alle Dimensionen den gleichen Wert aufweisen. Woran liegt das?

Wenn wir uns den Vektor (3, 3) anschauen, kann man sich das natürlich als ein Dreieck vorstellen. Dabei ist die L2-Norm die wir berechnet haben natürlich nichts anderes als die Hypothenuse, denn die L2-Norm ist nichts anderes als der angewandte Satz des Pythagoras. Und wir versuchen also, die Hypothenuse möglichst klein zu halten, wenn wir die L2-Norm minimieren.

Kommen wir nun zurück zu unserem Beispiel. Wir wollen Vektoren haben, welche aufaddiert die Summe 3 ergeben. Folgende Vektoren entsprechen dieser Bedingung:

$$\begin{pmatrix}-1\\4\end{pmatrix}$$$$\begin{pmatrix}0\\3\end{pmatrix}$$$$\begin{pmatrix}1\\2\end{pmatrix}$$$$\begin{pmatrix}1.5\\1.5\end{pmatrix}$$

Der Vektor, welches dabei die L2-Norm minimiert, ist natürlich der letzte.

Ableitung der L2-Norm

Oft lässt man bei der L2-Norm die Wurzel weg, und gibt gibt ihr einen kleinen Vorfaktor, so dass versucht wird folgendes zu minimieren, denn es ist vollkommen egal ob man die L2-Norm oder die Quadrierte L2-Norm mit einem Vorfaktor versucht zu minimieren.

$$\frac{\lambda}{2}\sum_{n=0}^N{(x_n)^2}$$

Die Formel hat folgende Ableitung für die erste Dimension von x:

$$\lambda(x_1)*1$$

Damit ist, wenn man z.B. ein Lambda von 0.1 nimmt, die Richtung in die man sich vom Vektor (1, 5) bewegen muss um die Norm zu minimieren der folgende Vektor: (0.1, 0.5)

Updaten wir unseren Vektor mit Gradient Descent, haben wir dann einen Vektor der so aussieht: (0.9, 4.5).

Das ist toll, denn wie man sieht kriegen Dimensionen mit einem hohen Wert auch einen hohen Malus durch die L2-Norm, wodurch wir den Regularisierungseffekt haben.

In [ ]: