Answer to Question 1-1
Aktivierungsfunktionen in tiefen neuronalen Netzen müssen nichtlinear sein, weil lineare Funktionen bei der Verarbeitung von mehreren Eingabekomponenten keine komplexen Abhängigkeiten und Zusammenhänge erlernen können. In einem einfachen Linearen Netz würde die Ausgabe einer Schicht nur eine lineare Kombination der Eingaben sein, was bedeutet, dass jeder neue neuronale Schicht keine zusätzliche Komplexität hinzufügt. Ohne Nonlinearitäten würde das Netz nicht in der Lage sein, die multidimensionale Struktur von Datensätzen zu erfassen und komplexe Merkmale abzubilden.

Nonlineare Aktivierungsfunktionen ermöglichen es einem Neuronen, verschiedene Gewichtungskombinationen für seine Eingaben unterschiedlich zu bewerten. Sie erzeugen eine Art "Kreuzungspunkt" in der Ausgabe, was bedeutet, dass verschiedene Eingabekombinationen unterschiedliche Antworten erzeugen können. Dies ist entscheidend für die Kapselung von Informationen auf verschiedenen Ebenen und ermöglicht es dem Netz, komplexe Merkmale in den Daten zu extrahieren.

Zudem ermöglichen nichtlineare Aktivierungsfunktionen das Überqueren von Schwellenwerten, was bedeutet, dass ein Neuron für verschiedene Eingabebereiche unterschiedlich empfindlich sein kann. Dies ist wichtig, um feine Unterschiede in den Daten zu erkennen und die Generalisierungsleistung des Netzwerks zu verbessern.

Zusammenfassend sind nichtlineare Aktivierungsfunktionen entscheidend für die Fähigkeit tiefen neuronalen Netzen, komplexe Muster und Zusammenhänge in den Trainingsdaten zu lernen und zu generalisieren.





****************************************************************************************
****************************************************************************************




Answer to Question 1-2
LayerNorm, BatchNorm und InstanceNorm sind verschiedene Arten von Normalisierungstechniken in der neuronalen Netzwerkarchitektur, die dazu beitragen, den Gradientenfluss zu stabilisieren und das Training von Modellen zu beschleunigen.

1. **BatchNorm (Batch Normalization):** BatchNorm normalisiert die Ausgabewerte einer Schicht basierend auf der Mittelwert- und Standardabweichung des aktuellen Batchs (Gruppe von Datenpunkten). Es wird sowohl in den Hidden Layers als auch in den Ausgabeschichten eingesetzt. Die Idee dahinter ist, den Gradientenfluss zu homogenisieren und die Sensitivität der Schicht auf Veränderungen im Input zu reduzieren.

2. **InstanceNorm (Instance Normalization):** Diese Methode ist ähnlich wie BatchNorm, aber sie normalisiert jeden Eintrag eines Vektors in einer Instanz (also einem einzelnen Bild oder Satz von Daten) unabhängig von anderen Instanzen im Batch. Daher kann es für Anwendungen geeignet sein, bei denen jedes Element eine einzigartige Struktur hat und nicht auf den Durchschnittswert des ganzen Batches normalisiert werden sollte.

3. **LayerNorm (Layer Normalization):** LayerNorm normalisiert die Ausgabewerte einer Schicht für jede Instanz im Batch, indem es den Mittelwert und die Standardabweichung der Werte innerhalb jedes Einzelspaltes berechnet. Im Gegensatz zu InstanceNorm, die nur eine einzelne Instanz betrachtet, berücksichtigt LayerNorm alle Elemente in einer Schicht, was bedeutet, dass es für den gesamten Batch gleiche Normalisierungskoeffizienten verwendet.

Diese Arten von Normalisierungsschichten helfen beim Training, indem sie die Varianz zwischen verschiedenen Datenpunkten reduzieren und somit die Gradientenverteilung stabilisieren. Sie verhindern, dass Schichten durch extreme Werte über- oder unterdurchschnittlich reagieren, was zu einer schnelleren Konvergenz führt und das Training von Modellen insbesondere bei großen Netzwerken erleichtert.





****************************************************************************************
****************************************************************************************




Answer to Question 1-3
Die bereitgestellte Abbildung "logistic_regression.jpg" scheint eine Darstellung einer logistischen Regression zu sein, was jedoch für das beschriebene rekurrente Netzwerk nicht direkt relevant ist. Da keine konkreten Werte oder Eingabesequenzen für das rekurrente Netz gegeben sind, kann ich die tatsächlichen Werte des Ausgabeneurons im letzten Zeitschritt nicht direkt bestimmen.

Um den Wert des Ausgabeneurons im letzten Zeitschritt eines rekurrenten Netzwerks mit einer Sigmoid-Aktivierungsfunktion zu berechnen, müssten wir wissen:
1. Die Eingabesequenz (welche Werte und wie lang).
2. Die Gewichte der Verbindungen zwischen den Neuronen.
3. Das Vorzeichen der Verbindungen (positiv/negativ).
4. Die Initialisierungszustände der Rekurrenten Neuronen.

Da diese Informationen nicht verfügbar sind, kann ich nur allgemeine Schritte beschreiben, die bei der Berechnung des Ausgabewertes unternommen werden würden:

1. Multipliziere jeden Eingangswert mit seinem entsprechenden Gewicht und addiere alle Ergebnisse.
2. Addiere den Bias (hier ist er 0).
3. Übergebe das Ergebnis der Sigmoid-Funktion, die eine kontinuierliche Funktion zwischen 0 und 1 gibt.

Wenn Sie konkrete Werte oder eine spezifische Eingabesequenz haben, können Sie mir diese geben, damit ich Ihnen bei der Berechnung des Ausgabewertes helfen kann.





****************************************************************************************
****************************************************************************************




Answer to Question 1-4
a) Zur Trainingszeit werden bei einem RNN-basierten Sprachmodell mit teacher forcing die korrekte Sequenz von Wörtern als Eingabe an das Netzwerk gegeben. Das bedeutet, dass für jedes Zeitstempel 't', der aktuelle Token aus dem Ground-Truth-Satz (der Trainingsdaten) und der vorherige Hidden State des RNNs verwendet werden, um den nächsten Output zu generieren.

b) In der Inferenzzeit, wenn das Modell zur Generierung neuer Textabschnitte eingesetzt wird, gibt es keine vorgegebenen Ground-Truth-Token mehr. Stattdessen wird die Eingabe des vorherigen Tokens aus dem eigenen Output der letzten Schleife und der Hidden State genommen, um den nächsten Token im Satz zu prognostizieren. Dieser Prozess wiederholt sich, bis das Modell ein Stop-Symbol generiert oder eine bestimmte Länge erreicht ist.





****************************************************************************************
****************************************************************************************




Answer to Question 1-5
Die Dimensionen der Ausgabe, die Dimensionen des receptive fields und die Anzahl der Parameter in jeder Schicht sind wie folgt:

1. Input: $(32, 32, 3)$
   - Ausgabe Dimensionen: $(32, 32, 3)$ (Dies ist die Eingabe und hat keine Veränderung)
   - Receptive Field Dimensionen: $1$ (da es der erste Layer ist)
   - Anzahl Parameter: $0$ (da es keine Trainingsparameter in einem Input-Layer gibt)

2. CONV3-8:
   - Ausgabe Dimensionen: $(32, 32, 8)$ (Da Padding und Stride 1 sind, bleiben Hight und Width gleich)
   - Receptive Field Dimensionen: $3 \times 3$ (da es Filter mit Größe $3 \times 3$ gibt)
   - Anzahl Parameter: $8 \cdot (3 \cdot 3 + 1) = 72$ (Da jedes Filter 3x3 Gewichte und ein Bias hat)

3. Leaky ReLU:
   - Keine Ausgabe Dimensionenänderung, da es sich um eine Aktivierungsfunktion handelt
   - Kein Receptive Field oder Parameter

4. POOL-2:
   - Ausgabe Dimensionen: $(16, 16, 8)$ (Da es Pooling mit $2 \times 2$ und stride 2 gibt)
   - Receptive Field Dimensionen: $3 \times 3$ (da der Receptive Field nicht durch Pooling verändert wird)
   - Anzahl Parameter: $0$ (da Pooling keine Trainingsparameter hat)

5. BATCHNORM:
   - Ausgabe Dimensionen: $(16, 16, 8)$ (Da Batch Normalization die Dimensionen beibehält)
   - Receptive Field Dimensionen: $3 \times 3$
   - Anzahl Parameter: $8 \cdot (2 + 1) = 24$ (Da es für jeden Kanal einen Mean-Variance-Term und einen Bias gibt)

6. CONV3-16:
   - Ausgabe Dimensionen: $(16, 16, 16)$
   - Receptive Field Dimensionen: $3 \times 3$
   - Anzahl Parameter: $16 \cdot (3 \cdot 3 + 1) = 288$

7. Leaky ReLU:
   - Keine Ausgabe Dimensionenänderung, da es sich um eine Aktivierungsfunktion handelt
   - Kein Receptive Field oder Parameter

8. POOL-2:
   - Ausgabe Dimensionen: $(8, 8, 16)$
   - Receptive Field Dimensionen: $3 \times 3$
   - Anzahl Parameter: $0$

9. FLATTEN:
   - Ausgabe Dimensionen: $(8 \cdot 8 \cdot 16 = 1024)$ (Da die Eingabe flattened wird)
   - Receptive Field Dimensionen: $3 \times 3$
   - Anzahl Parameter: $0$

10. FC-10:
    - Ausgabe Dimensionen: $(10)$ (Da es eine Fully Connected Schicht mit 10 Neuronen gibt)
    - Receptive Field Dimensionen: Kein Receptive Field in einer Fully Connected Schicht
    - Anzahl Parameter: $1024 \cdot 10 + 10 = 10350$ (Da es $1024$ Eingabeneuronen und einen Bias pro Ausgabeneuron gibt)

Insgesamt haben wir therefore folgende Dimensionen und Parameter:
- Input: $(32, 32, 3)$
- CONV3-8: $(32, 32, 8)$, $72$ Parameters
- POOL-2: $(16, 16, 8)$, $0$ Parameters
- BATCHNORM: $(16, 16, 8)$, $24$ Parameters
- CONV3-16: $(16, 16, 16)$, $288$ Parameters
- FLATTEN: $(1024)$, $0$ Parameters
- FC-10: $(10)$, $10350$ Parameters





****************************************************************************************
****************************************************************************************




Answer to Question 2-1
[true, true, true, true, false]





****************************************************************************************
****************************************************************************************




Answer to Question 2-2
["Die Gr\u00f6\u00dfe der convolution Kernels", "Die Anzahl von Kan\u00e4len in den convolution Kernels", "Die Gr\u00f6\u00dfe des pooling layers"]





****************************************************************************************
****************************************************************************************




Answer to Question 2-3
Wahr





****************************************************************************************
****************************************************************************************




Answer to Question 2-4
Die praxistaugliche Aktivierungsfunktion im Training von neuronalen Netzen sollte eine nichtlineare Funktion sein, die für positive und negative Werte unterschiedlich verhält. Die Optionen sollten auch in der Lage sein, Gradientenverlust zu vermeiden, der das Lernen beeinträchtigen kann.

1. f(x) = min(2,x): Falsch - Diese Funktion ist linear und nicht nonlinear.
2. f(x) = 3x + 1: Falsch - Auch diese Funktion ist linear.
3. f(x) = min(x, 0.5x) if x < 0; f(x) = min(x, 0.5x) if x >= 0: Wahr - Diese Funktion ist nonlinear und hat eine Gradientenverstopfung bei x=0, was für das Training von neuronalen Netzen akzeptabel sein kann.
4. f(x) = min(x, 0.1x) if x < 0; f(x) = max(x, 0.1x) if x >= 0: Wahr - Diese Funktion ist nonlinear und hat Gradientenverstopfung bei x=0 sowie eine positive Steigung für x > 0, was ebenfalls als praxistauglich betrachtet werden kann.

Die richtigen Antworten sind therefore:
- [Wahr]
- [Wahr]





****************************************************************************************
****************************************************************************************




Answer to Question 2-5
Data augmentation: wahr
Dropout: wahr
Batch normalization: wahr
Benutzung von Adam anstelle von SGD: falsch





****************************************************************************************
****************************************************************************************




Answer to Question 2-6
Die richtige Antwort ist: im Betrag erhöhen, die Polarität erhalten bleiben.





****************************************************************************************
****************************************************************************************




Answer to Question 3-1
a) Der attention layer $l$ head $h$ am meisten zu der Position $n$ attended, wenn die Gewichtungskomponenten des Query-Vektors (Q) in Bezug auf den Key-Vektor (K) des vorherigen Tokens stark sind. Insbesondere muss das Produkt von Q und K für das vorherige Token im Vergleich zu anderen Positionen einen hohen Wert haben, was bedeutet, dass der attention head $h$ in Schicht $l$ bevorzugt die Information aus dem vorherigen Token $t_{n-1}$ extrahiert.

b) Der self-attention Mechanismus benötigt den Multi-Head Attention Block (MHA), um diese Aufgabe für beliebige Eingabesequenzen zu erfüllen. Jeder Head in einem MHA kann eine spezifische Art von Attention pattern lernen, und durch die Kombination der Ergebnisse aller Heads kann das Modell eine abgestufte Attendierung auf verschiedene Teile der Sequenz erzeugen, einschließlich des vorherigen Tokens.





****************************************************************************************
****************************************************************************************




Answer to Question 3-2
a) Bei greedy decoding wird das n\u00e4chste Token $t_{k+1}$ als pr\u00e4diziertes Token ausgew\u00e4hlt, wenn die attention weight des aktuellen Tokens (entsprechend $t_n$) in der self-attention Schicht am h\u00f6chsten ist.

b) Der attention layer $l$ head $h$ attended am meisten an Position $k+1$, wenn die similarity zwischen dem Query vector des aktiven Tokens ($Q(t_n)$) und dem Key vector des vorherigen Vorkommnisses ($K(t_k)$) am gr\u00f6\u00dfteren ist als zu anderen Positionen. Dies muss in Kombination mit einer speziellen linearen Transformation (induction head) erfolgen, die auf die Erkennung von Wiederholungen trainiert wurde.

c) Ein Transformer-Modell mit nur einem attention layer kann diese Bedingung nicht f\u00fcr beliebige Sequenzen und $k < n$ mit $t_k = t_n$ erf\u00fcllen, da es in einem einzelnen attention head nicht gen\u00fcgend Ressourcen hat, um die komplexen Muster der Wiederholungen in der Sequenz zu erkennen. Es w\u00fcrde f\u00fcr jede Position eine separate Spezialisierung brauchen, was mit einem einzigen head nicht m\u00f6glich ist.

d) Im Transformer ist der Kommunikationskanal zwischen attention heads die self-attention output tensor, der an den nachfolgenden layers weitergegeben wird. Die self-attention Schicht entscheidet, welche Informationen in den Kommunikationskanal geschrieben werden (durch die Multiplikation von Query, Key und Value Vektoren), während der next layer entscheidet, was aus dem tensor gelesen und verarbeitet wird.

e) In einem zwei-layer Transformer mit nur attention layern k\u00f6nnte man eine Sequenz von Operationen wie folgt entwerfen:
1. Im ersten Layer $l=1$ f\u00fcr den induction head: F\u00fchren Sie eine self-attention durch, die speziell auf Wiederholungen trainiert ist und die Positionen mit dem gleichen Token als relevant identifiziert.
2. Eine lineare Transformation (Rotation) des Output Embeddings von Layer 1 kann dann die Position $k+1$ hervorheben, wenn $t_k = t_n$.
3. Im zweiten Layer $l=2$ f\u00fcr den induction head: Verwenden Sie eine self-attention, die auf das transformierte Embedding aus Layer 1 angewendet wird. Diese Schicht kann dann die hervorgehobene Position $k+1$ attendieren und das n\u00e4chste Token pr\u00e4dizieren.

Diese Beschreibung ist eine grobe Idee, wie ein solches Modell funktionieren k\u00f6nnte, aber es w\u00fcrde in der Praxis noch weitere Details und Optimierungen erfordern.





****************************************************************************************
****************************************************************************************




Answer to Question 4-1
Die vektorielle Eingabe für das $i$-te Vokabularwort $s_k$ ist die Spalte $W_E[i]$ der word embedding Matrix $W_E$. Diese Spalte enthält den d-dimensionalen Vektor, der die semantische Bedeutung des Wortes $s_k$ im vektoriellen Raum darstellt.

Für die Darstellung des word embedding layers als Matrix-Vektor-Multiplikation betrachten wir die Eingabesequenz $S = (s_1, \dots, s_n)$. Jedes Eingabetoken $s_k$ wird durch seine Position in der Sequenz identifiziert. Um den Vektor zu erhalten, der das Token repräsentiert, wird der Vektor des $i$-ten Vokabularwortes (entsprechend dem Index von $s_k$) aus der word embedding Matrix abgerufen.

Die Multiplikation erfolgt dann wie folgt: Der vektorielle Repräsentationsvektor $W_E[i]$ des Eingabetokens $s_k$ wird mit der transponierten Matrix $E^T$ multipliziert. Die Transponierung ist notwendig, da die Eingabesequenz eine Sequenz von Vektoren ist und wir für jedes Token einen einzelnen vektoriellen Ausgabevorgang erhalten wollen.

Die Multiplikation $E^T[i] \cdot x$ ergibt den Ausgabevector $x_k$, der die vektorielle Repräsentation des Eingabetokens $s_k$ im neuronalen Netz darstellt. Hier ist $x$ der Vektor, der alle Einträge für jedes Token in der Sequenz enthält, wobei jeder Eintrag entweder 0 oder die vektorielle Repräsentation eines Wortes ist (je nachdem, ob das Wort Teil der Eingabesequenz ist). Die Multiplikation resultiert in einer Vektorspalte, die nur den Eintrag für $s_k$ enthält.





****************************************************************************************
****************************************************************************************




Answer to Question 4-2
a) Die Abbildung $g$ muss differentiabel sein, damit wir im Gradientenabstieg die Ableitungen berechnen können und die Gradienteninformationen durch das Netz weiterleiten können.

b) Der Gradient $\\nabla l$ bezüglich $W_E$ ist gegeben durch:
$$
\\frac{\partial l}{\partial W_E} = E^T \\left( \\frac{\partial g}{\partial E(w)} \\right)^T
$$
Wir bringen ihn in die Form, dass nur der partielle Gradientenbeitrag von $\\frac{\partial g}{\partial E(w)}$ übrig bleibt:
$$
\\frac{\partial l}{\partial W_E} = E^T \\left( \\frac{\partial g}{\partial w} \\right)^T
$$

c) Der Gradient $\\frac{\\partial l}{\\partial w_{ij}}$ für $i \neq k$ ist null, da die Spalten der word embedding Matrix außer derjenigen des Eingabewortes $w$ im Gradienten nicht berücksichtigt werden.

d) Die Erkenntnis aus dem Aufgabenteil (b), dass nur der partielle Gradientenbeitrag von $\\frac{\partial g}{\partial w}$ relevant ist, bedeutet folgendes:
- Forwärtspass: Nur die Spalte im word embedding Matrix, die zum aktuellen Eingabewort gehört, muss für den Gradienten berechnet werden. Dies reduziert die Speicheranforderungen, da wir nicht die gesamte Matrix aufrechterhalten müssen.
- Rückschrittspass: Da der Gradient nur an die Spalte des aktuellen Eingabewortes übertragen wird, ist die Berechnungskomplexität geringer als wenn man den Gradienten für alle Wörter im Vokabular berechnen müsste. Dies kann die Leistungsfähigkeit des Lernprozesses verbessern, da weniger Rechenoperationen erforderlich sind.





****************************************************************************************
****************************************************************************************




