diff --git a/Readme.md b/Readme.md index 4b8c8f8..b2bc602 100644 --- a/Readme.md +++ b/Readme.md @@ -6,11 +6,10 @@ Dieses Repo beinhaltet die $\LaTeX$ Informationen für die Zusammenfassung im Fa - [x] Nachteile von Accuracy - [x] Fokus auf Accuracy, F1, Precision und Recall - [x] $w_0$ bei Perzeptron erklären (siehe Feedback Übung 3.1) -- [ ] Verlustfunktionen aus KI -- [ ] Backpropagation Rechenbeispiel (Übung ML_2020_11_16, KI Zusammenfassung, Feedback Übung 3.2) - - [ ] Gradientenverfahren aus KI - - [ ] inkl. mehrere Schichten (Übung 3.3) -- [ ] Begründung für Anzahl von Neuronen in der verdeckten Schicht (ML_2020_11_23) +- [x] Backpropagation Rechenbeispiel (Übung ML_2020_11_16, KI Zusammenfassung, Feedback Übung 3.2) + - [x] Gradientenverfahren aus KI + - [x] inkl. mehrere Schichten (Übung 3.3) +- [x] Begründung für Anzahl von Neuronen in der verdeckten Schicht (ML_2020_11_23) - [ ] Beispiele aus ML_2020_11_23 (43:00) miteinbeziehen - [ ] Perzeptron ist ein Überbegriff (kann aus mehreren Neuronen bestehen)(Besteht aus Input-Gedöns-Output) - [ ] Regularisierung diff --git a/chapters/Supervised Learning/Linear Machines.tex b/chapters/Supervised Learning/Linear Machines.tex index 68167ce..149a161 100644 --- a/chapters/Supervised Learning/Linear Machines.tex +++ b/chapters/Supervised Learning/Linear Machines.tex @@ -83,8 +83,15 @@ \subsection{Das XOR-Problem} Um das XOR-Problem zu zergliedern werden 2 Diskriminanten benötigt:\\ \includegraphics[width=\textwidth]{XOR-Problem1.png}\\ - Um das XOR-Problem von einer linearen Maschine klassifizieren zu lassen muss diese aus mindestens 2 Schichten bestehen.\\ - \includegraphics[width=\textwidth]{XOR-Problem2.png} + Um das XOR-Problem von einer linearen Maschine klassifizieren zu lassen muss diese aus mindestens 2 Schichten bestehen. + \begin{center} + \includegraphics[width=.8\textwidth]{XOR-Problem2.png} + \end{center} + Allgemein werden mehr Neuronen in der verdeckten Schicht gebraucht, je komplexer die Klassifizierung ist. + Hierbei kann sich an der \ac{VC-Dimension} orientiert werden. + Dies gibt allerdings nur eine Angabe für die minimale Anzahl an benötigten Neuronen in der verdeckten Schicht. + Die genaue Anzahl der verdeckten Schichten und der darin enthaltenen Neuronen müssen vom Entwickler gewählt werden. + Hierbei ist die Erfahrung des Entwicklers entscheidend, um ein möglich gutes Modell zu erstellen. \section{Maximum Margin Approaches} Aus \ref{novikoffs theorem} ist bekannt, dass eine Diskriminate erstellt werden kann. @@ -158,4 +165,76 @@ Eine Reduzierung kann entweder dadurch erreicht werden, dass das empirische Risiko (\ref{empirical risk}) bei gleichbleibenden $\varepsilon$ (\ref{capacity term}) reduziert wird, oder durch eine Reduzierung von $\varepsilon$ bei gleichbleibenden empirischen Risiko. - Letzteres ist der Ansatz den die \ac{SVM}s (\ref{svm}) verfolgen. \ No newline at end of file + Letzteres ist der Ansatz den die \ac{SVM}s (\ref{svm}) verfolgen. + + \section{Parameteroptimierung} + \label{knn: parameteroptimierung} + Die Parameter werden iterativ so verändert/ optimiert, dass die Fehlerfunktion (Zusammenfassung KI: Fehlerfunktionen) minimal wird. + + \subsection{Gradientenabstieg} + \label{knn: gradientenabstieg} + Das Gradientenverfahren ist ein Verfahren zur Parameteroptimierung. + Die Idee für das Verfahren leitet sich vom Hill-Climbing Algorithmus (Zusammenfassung KI: Hill Climbing) ableitet. + Der größte Unterschied liegt darin, dass der Parameterraum nicht diskret sondern kontinuierlich ist. + Das bedeutet, das jeder Punkt unendlich viele Nachbarn hat. + Durch die Bestimmung des \textbf{Gradienten} kann die Richtung des steilsten Abstiegs angegeben werden: + \large + $$\Delta g= \begin{bmatrix} + \frac{\delta g}{\delta w_1}\\ + \frac{\delta g}{\delta w_2}\\ + \vdots\\ + \frac{\delta g}{\delta w_n} + \end{bmatrix} + $$ + \normalsize + Zu beginn werden die Gewichte $w$ des Neuronen definiert (zufällig oder anders). + Anschließend werden sie bei jeder Iteration über + \large + $$w\gets w+\alpha\cdot \Delta g(w)$$ + \normalsize + umdefiniert. + Hierbei ist $\alpha$ ein Hyperparamter, der die \textbf{Lernrate} definiert.\\ + Zu erwähnen ist noch, dass auch hier wie beim Hill-Climbing (Zusammenfassung KI: Hill Climbing) die Gefahr besteht, + dass lediglich ein lokales anstatt dem globalen Minimum gefunden wird. + + \subsection{Backpropagation} + \label{knn: backpropagation} + Da der Fehler, den die Fehlerfunktion angibt auf alle Schichten zurückzuführen ist, + muss auch die Optimierung Rückwärtsgerichtet in allen Schichten stattfinden. + Man spricht hierbei von einer \say{Backpropagation}.\\ + Um ein Ausgangsneuron zu updaten muss die Fehlerfunktion + $$f(a,t) = \sum_i \frac{1}{2}(a_i-t_i)^2$$ + erstmal auf den Ausgabewert des jeweiligen Neurons abgeleitet werden: + $$\frac{\delta f}{\delta a_i}=a_i-t$$ + Wenn man dies nun auf die Zustandsfunktion des Neurons ableitet erhält man: + $$\frac{\delta f}{\delta z_i} = \frac{\delta f}{\delta a_i}\cdot\frac{\delta a_i}{\delta z_i}$$ + Um die Änderung für eine Gewichtung $g_{ij}$ zu bestimmen muss die Fehlerfunktion nun zunächst auf dieses $g_{ij}$ abgeleitet werden: + $$\frac{\delta f}{\delta g_{ij}} = \frac{\delta f}{\delta z_i} \cdot\frac{\delta z_i}{\delta g_{ij}} = \frac{\delta f}{\delta a_i}\cdot\frac{\delta a_i}{\delta z_i}\cdot\frac{\delta z_i}{\delta g_{ij}}$$ + Nun kann man durch Einsetzen der verwendeten $f$, $a_i$ und $z_i$ die Formel für die Änderung von $g_{ij}$ aufstellen.\\ + \textbf{Beispiel:} + \Large + \begin{tabbing} + $f(a,t)=\sum_i\frac{1}{2}(a_i-t_i)^2$\hspace{5mm}\=und\hspace{5mm}\=$\frac{\delta f}{\delta a_i}=a_i-t_i$\\\\ + $a_i =\frac{1}{a+e^{z_i}}$ \>und \>$\frac{\delta a_i}{\delta z_i}=a_i(1-a_i)$\\\\ + $z_i=\sum^{N+1}_{j=1}g_{ij}\cdot a_i$ \>und \>$\frac{\delta z_i}{\delta g_{ij}}=a_j$ + \end{tabbing} + \normalsize + Hieraus ergibt sich: + $$\frac{\delta f}{\delta g_{ij}} = \frac{\delta f}{\delta z_i} \cdot\frac{\delta z_i}{\delta g_{ij}} = \frac{\delta f}{\delta a_i}\cdot\frac{\delta a_i}{\delta z_i}\cdot\frac{\delta z_i}{\delta g_{ij}}=(a_i-t_i)\cdot a_i(1-a_i)\cdot a_j$$ + Da uns alle diese Werte bekannt sind können wir $g_{ij}$ updaten: + \large + $$g_{ij}\gets g_{ij} + \alpha\cdot\left((a_i-t_i)\cdot a_i(1-a_i)\cdot a_j\right)$$ + \normalsize + Um die Backpropagation nun bei den anderen Neuronen auf tieferen Schichten anzuwenden muss auf diese abgeleitet werden:\\ + \begin{wrapfigure}{r}{.4\textwidth} + \vspace{-10mm} + \includegraphics[width = .4\textwidth]{backpropagation_inner_layer.png} + \end{wrapfigure} + + \begin{align*} + \frac{\delta f}{\delta a_i}&=(a_i-t_i)\\ + \frac{\delta f}{\delta z_i}&=\frac{\delta f}{\delta a_i}\cdot\frac{\delta a_i}{\delta z_i}=a_i(1-a_i)\frac{\delta f}{\delta a_i}\\ + \frac{\delta f}{\delta g_{ij}}&=\frac{\delta f}{\delta z_i}\cdot\frac{\delta z_i}{\delta g_{ij}} = a_j\frac{\delta f}{\delta z_i}\\ + \frac{\delta f}{\delta a_j}&=\sum_i\frac{\delta f}{\delta z_i}\cdot\frac{\delta z_i}{\delta a_j}=\sum_i g_{ij}\frac{\delta f}{\delta z_i} + \end{align*} + Die Summe wird durch die Mehrzahl der Nachfolgenden Neuronen von $B_j$ berursacht. \ No newline at end of file diff --git a/images/backpropagation_inner_layer.png b/images/backpropagation_inner_layer.png new file mode 100644 index 0000000..a1f70bb Binary files /dev/null and b/images/backpropagation_inner_layer.png differ