WEBVTT

00:10.260 --> 00:16.390
Okay, dann in altbekannter Manier machen wir da weiter, wo letztes Mal

00:16.390 --> 00:17.130
aufgehört wurde.

00:17.830 --> 00:20.070
Mal schauen, ob ich heute eine volle Vorlesung durchhalte.

00:20.390 --> 00:21.790
Bin immer noch ein bisschen angeschlagen.

00:24.190 --> 00:32.550
Wir hatten letztes Mal kennengelernt, dass Dynamic Time Warping als

00:32.550 --> 00:36.690
eine einfache, rein signalbasierte Idee, wie man so einfache

00:36.690 --> 00:40.030
Spracherkennung betreiben könnte mithilfe eines Mustervergleiches.

00:40.690 --> 00:45.910
Beim DTW ist die einfache Idee, ich habe ein Aufnahmemuster, eine

00:45.910 --> 00:48.330
Aufnahme gemacht, die habe ich irgendwie entsprechend vorverarbeitet.

00:48.930 --> 00:51.090
Das können zum Beispiel so Vektoren sein, die aus einer

00:51.090 --> 00:53.970
Standardvorverarbeitung, wie wir sie kennengelernt haben,

00:54.190 --> 00:55.070
herausgekommen sind.

00:55.930 --> 01:00.410
Und ich habe Referenzmuster, zum Beispiel für jedes zu erkennende Wort

01:00.410 --> 01:02.630
ein Referenzmuster.

01:03.110 --> 01:06.330
Und dann kann ich mithilfe des DTWs eine Distanz ausrechnen.

01:06.330 --> 01:13.730
Distanz zwischen der Aufnahme und dem Referenzmuster, das sie gesehen

01:13.730 --> 01:14.590
hatten.

01:15.910 --> 01:20.770
Und auf diese Art und Weise kann ich zum Beispiel ganz einfach Wörter

01:20.770 --> 01:21.110
erkennen.

01:21.910 --> 01:24.810
Ich muss also für jedes Wort, das ich hinterher in der Lage sein

01:24.810 --> 01:27.710
möchte, zu erkennen, ein Referenzmuster haben.

01:29.150 --> 01:32.310
Und dann zeichne ich einfach eingesprochen das Wort auf.

01:32.310 --> 01:37.130
Wenn ich es aufgezeichnet habe, führe ich eben den DTW durch für jedes

01:37.130 --> 01:41.970
Referenzmuster zu dem aufgenommenen Wort und entscheide mich dann

01:41.970 --> 01:45.870
einfach für das Wort, wo diese Distanz, die durch das DTW berechnet

01:45.870 --> 01:48.010
wurde, am kleinsten ist.

01:50.230 --> 01:52.830
Jetzt kann man sich schon vorstellen, das ist natürlich keine

01:52.830 --> 01:54.310
besonders spannende Spracherkennungsaufgabe.

01:55.290 --> 01:59.650
Das ist etwas, da kann ich wirklich nur auf einzelne Wörter erkennen

01:59.650 --> 02:04.010
und auch zum Beispiel nur in Situationen, wo ich auch eine bereits

02:04.010 --> 02:05.630
vorgegebene Segmentierung habe.

02:06.530 --> 02:09.730
Weil das Verfahren funktioniert natürlich nur dann, wenn ich die

02:09.730 --> 02:13.390
Aufnahme, die ich gemacht habe, auch bereits so geschnitten habe, dass

02:13.390 --> 02:16.210
nur dieses Wort in dieser Aufnahme zu hören ist.

02:16.650 --> 02:20.910
Und am besten auch möglichst ohne Stille oder viel Stille und viel

02:20.910 --> 02:21.630
Stille am Ende.

02:22.670 --> 02:25.490
Das heißt, das muss etwas sein, zum Beispiel ich habe einen Knopf, ich

02:25.490 --> 02:29.410
sage ein Wort, lasse den Knopf los und dann kann ich das vergleichen

02:29.410 --> 02:32.630
mit einem Vokabular an Referenzmustern.

02:33.690 --> 02:36.810
Das Ganze funktioniert natürlich auch nur sprecherabhängig.

02:37.430 --> 02:41.510
Weil, wenn ich die Referenzmuster vergleiche, dann funktioniert das

02:41.510 --> 02:45.630
nur gut, wenn die Referenzmuster für die Wörter in meinem zu

02:45.630 --> 02:48.850
erkennenden Vokabular auch von der gleichen Person gesprochen wurde,

02:49.930 --> 02:54.630
die hinterher das eigentliche Wort, das es zu erkennen gilt, spricht.

02:56.010 --> 03:01.090
Dann ist es nur sinnvoll für sehr kleine Vokabularien.

03:03.610 --> 03:04.170
Warum?

03:04.170 --> 03:07.310
Was sind Argumente, die dafür sprechen würden, dass sowas nur

03:07.310 --> 03:09.990
funktioniert, wenn ich ein sehr kleines Vokabular habe?

03:12.050 --> 03:14.310
Was würde man meinen, woran könnte das liegen?

03:17.110 --> 03:19.830
Einfache Idee, warum kann ich das nur mit einem überschaubaren

03:19.830 --> 03:20.610
Vokabular machen?

03:29.530 --> 03:33.310
Ich habe natürlich das Problem, wenn ich Wörter habe, die sehr ähnlich

03:33.310 --> 03:37.390
klingen, dann kann ich unter Umständen nur sehr schwer anhand dieser

03:37.390 --> 03:40.130
sehr einfachen DTW-Distanz diskriminieren.

03:40.470 --> 03:42.870
Das passiert mir aber auch schon beim kleinen Vokabular.

03:43.630 --> 03:46.190
Das ist mehr etwas über die Struktur des Vokabulars.

03:46.750 --> 03:49.610
Aber was spricht zum Beispiel dagegen, das mit einem sehr großen

03:49.610 --> 03:51.230
Vokabular zu machen, 10.000 Wörter?

03:54.870 --> 03:58.670
Genau, die Rechenzeit steigt linear mit der Größe des Vokabulars.

03:58.670 --> 04:04.510
Das heißt also, wenn ich jetzt 10.000 Mal ein DTW berechnen muss, dann

04:04.510 --> 04:06.710
dauert das sehr, sehr, sehr, sehr lange.

04:08.450 --> 04:14.110
Was wäre eine Standardtechnik bei so etwas, um hier die Berechnung ein

04:14.110 --> 04:15.050
bisschen zu beschleunigen?

04:15.670 --> 04:20.430
Also ein naiver Ansatz ist, ich nehme das Wort, berechne die Distanz

04:20.430 --> 04:25.110
zur Referenzwort 1, berechne die Distanz zur Referenzwort 2 und so

04:25.110 --> 04:27.970
weiter und so fort, berechne die Distanz zur Referenzwort 10.000,

04:28.590 --> 04:32.190
nehme das Wort mit der kleinsten Distanz.

04:33.170 --> 04:36.750
Was wäre so ein Standardtrick, wie man jetzt dieses naive Verfahren

04:36.750 --> 04:37.990
ein bisschen beschleunigen könnte?

04:43.080 --> 04:45.420
Könnte etwas sein, das Sie schon mal im Studium gesehen haben.

04:45.520 --> 04:47.560
Ansonsten ist eigentlich eine relativ logische Überlegung.

04:48.060 --> 04:54.320
Interessieren Sie sich für die Distanz des aktuellen Wortes zu allen

04:54.320 --> 04:55.360
anderen 10.000 Wörtern?

04:55.880 --> 05:00.240
Wollen Sie als Ergebnis der Berechnung rausbekommen 10.000 Distanzen?

05:05.500 --> 05:07.620
Ich möchte nur wissen, welches ist die kleinste Distanz?

05:08.640 --> 05:12.640
Muss man denn immer den DTW bis zum Ende ausrechnen?

05:17.660 --> 05:20.800
Wenn ich also irgendwo eine Distanz habe, die jetzt schon irgendwann

05:20.800 --> 05:23.480
in der Mitte drin größer ist als das aktuelle Minimum, dann brauche

05:23.480 --> 05:25.000
ich das Ding nicht mehr bis zum Ende zu rechnen.

05:25.840 --> 05:28.060
Auf die Art und Weise kann man zum Beispiel das Sachen ein bisschen

05:28.060 --> 05:28.580
beschleunigen.

05:28.720 --> 05:30.800
Das Ganze nennt sich dann auf Englisch Early Abortion.

05:33.040 --> 05:35.040
Angenommen, ich habe einen super duper schnellen Rechner.

05:36.640 --> 05:38.340
Ich habe eine riesen Rechner-Formel.

05:38.920 --> 05:40.840
Tausende von parallelen Prozessoren.

05:40.900 --> 05:43.200
Ich könnte das parallelisieren und die sind super fix und

05:43.200 --> 05:45.820
Spezialhardware, die die DW in 0,X macht.

05:46.640 --> 05:50.020
Warum könnte ich immer noch keine 10.000-Wörter-Vokabular damit

05:50.020 --> 05:50.200
machen?

05:50.280 --> 05:51.660
Was würde dagegen sprechen?

05:55.830 --> 05:57.830
Warum funktioniert das vom Prinzip her nicht?

06:04.410 --> 06:05.590
Also die Rechenzeit ist es nicht.

06:05.590 --> 06:08.010
Also muss irgendwas an dem allgemeinen Verfahren ein Problem sein.

06:08.930 --> 06:10.090
Die DW ausrechnen geht.

06:10.490 --> 06:11.910
Was kann also nur das Problem sein?

06:13.810 --> 06:15.410
Ich brauche für jedes Wort ein Referenzmuster.

06:15.830 --> 06:16.550
Wo kriege ich denn das her?

06:23.130 --> 06:26.470
Ja, da muss also der Benutzer erstmal 10.000 Wörter sprechen, damit er

06:26.470 --> 06:28.630
hinterher eins von den 10.000 Wörtern erkennen lassen kann.

06:28.730 --> 06:31.170
Das klingt nicht sonderlich praktikabel.

06:32.530 --> 06:36.490
Das ist also das Zweite, was dafür sorgt, dass sowas eigentlich nur

06:36.490 --> 06:39.410
sinnvoll ist für sehr kleine Vokabularien.

06:39.410 --> 06:44.070
Aus diesem Grund ist das Ganze natürlich schon eine etwas veraltete

06:44.070 --> 06:48.690
Technik, hat aber immer noch eine gewisse Aktualität und eine gewisse

06:48.690 --> 06:49.830
Relevanz.

06:51.330 --> 06:55.350
Auch diese Relevanz verschwindet jetzt nach und nach ein bisschen,

06:55.530 --> 06:56.790
aber ist noch nicht ganz weg.

06:57.390 --> 07:01.210
Wo könnten Sie sich vorstellen, wäre vielleicht trotzdem so etwas

07:01.210 --> 07:02.410
denkbar?

07:03.670 --> 07:04.590
Diese Art von Spracherkennung.

07:05.150 --> 07:07.090
In was für einer Situation wäre sowas vielleicht sinnvoll?

07:10.130 --> 07:11.970
Sprache darf also nur wenige Wörter haben.

07:12.890 --> 07:16.550
Der Benutzer muss diese Wörter einmal sprechen und das sollte nicht zu

07:16.550 --> 07:17.970
stark stören in der Anwendung.

07:19.510 --> 07:21.670
Dafür ist dann das Verfahren relativ einfach auszurechnen.

07:22.350 --> 07:25.490
Der Rechenaufwand ist natürlich verhältnismäßig gering für so ein DTW.

07:26.750 --> 07:28.530
Was wäre so ein typisches Szenario?

07:29.770 --> 07:32.170
Für meinen PC zum Diktieren natürlich nicht.

07:32.270 --> 07:35.550
Aber wo man das zum Beispiel bis vor kurzem noch gut verwenden konnte,

07:35.710 --> 07:36.810
waren zum Beispiel Mobiltelefone.

07:36.810 --> 07:40.330
Wenn ich per Namen wählen möchte.

07:41.470 --> 07:44.690
Dann kann man sowas relativ leicht implementieren.

07:45.150 --> 07:48.570
Indem man vorher gesagt hat, ok, wenn du einen von deinen 20 Leuten

07:48.570 --> 07:52.190
anrufen musst, musst du mir den Namen einmal vorsprechen.

07:52.670 --> 07:55.170
Und dann konnte man den Namen reinsprechen und man konnte auf den

07:55.170 --> 08:01.630
damals vor 2-3 Jahren noch relativ schwachen Telefonen das dann direkt

08:01.630 --> 08:03.990
auf dem Telefon berechnen und das entsprechende Wort raussuchen.

08:05.470 --> 08:07.910
Heutzutage ist das abgelöst worden durch sowas wie Siri.

08:09.550 --> 08:12.650
Oder Google Now, dass man halt sagt, ruf mir den und den an und ich

08:12.650 --> 08:13.810
muss vorher nichts mehr reinsprechen.

08:14.610 --> 08:16.090
Die rechnen das aber nicht auf dem Telefon.

08:16.730 --> 08:18.830
Sondern die sind darauf angewiesen, dass sie eine Internetverbindung

08:18.830 --> 08:21.390
haben zu einem Server, wo die Spracherkennung durchgeführt wird und

08:21.390 --> 08:24.410
auch das Sprachverstehen, damit das Telefon hinterher weiß, was es

08:24.410 --> 08:25.090
ausführen soll.

08:25.090 --> 08:28.330
Das heißt, so ein Verfahren ist dann sinnvoll, wenn ich nur relativ

08:28.330 --> 08:32.950
wenig Rechenpower zur Verfügung habe und auch keine Netzwerkanbindung,

08:33.650 --> 08:36.250
um das zu einem leistungsstarken Server zu rechnen.

08:36.630 --> 08:39.910
Also alles, was so auf Embedded-Geräten laufen soll.

08:40.270 --> 08:43.230
Auf kleinen Embedded-Geräten, wenn man nur kleine Kommandos erkennen

08:43.230 --> 08:47.030
soll, ist das nach wie vor immer noch ein Verfahren, das man eventuell

08:47.030 --> 08:47.770
einsetzen kann.

08:49.890 --> 08:56.370
Standardbeispiel für so ein Embedded-System ist hier, wie heißt die

08:56.370 --> 08:59.010
kleine Kasse, so ein Raspberry Pi 1.

08:59.130 --> 08:59.510
Generation.

09:00.570 --> 09:04.730
Der hat so wenig Rechenpower, der ist schon fast mit der

09:04.730 --> 09:05.950
Vorverarbeitung überfordert.

09:05.950 --> 09:09.410
Wenn man also da so eine Standardvorverarbeitung durchführt, dann hat

09:09.410 --> 09:13.110
man schon, wenn man relativ schnell und zügig sowas erkennen will und

09:13.110 --> 09:16.270
zum Beispiel in Echtzeit erkennen will, hat man seine zur Verfügung

09:16.270 --> 09:18.570
stehende Zeit schon fast allein durch die Vorverarbeitung

09:18.570 --> 09:19.150
aufgebraucht.

09:19.430 --> 09:22.150
Das heißt, da kann man keine aufwändigen, neuronalen, netzbasierten

09:22.150 --> 09:25.230
und sonst was Verfahren anwenden, sondern da muss man sich auf sowas

09:25.230 --> 09:28.990
relativ kleines, auf so eine Art Mustervergleich beschränken.

09:32.030 --> 09:37.110
Jetzt ist natürlich das Unschöne bei dem Ding, ich kann nur einzelne

09:37.110 --> 09:37.710
Wörter erkennen.

09:38.750 --> 09:44.590
Wollte ich Sätze erkennen mit DTW, dann müsste ich für jeden Satz, den

09:44.590 --> 09:48.350
ich später erkennen wollte, ein Referenzmuster aufnehmen und dann

09:48.350 --> 09:50.270
jeweils gegen einen ganzen Satz vergleichen.

09:50.270 --> 09:53.990
Das ist natürlich auch nicht sonderlich praktikabel.

09:54.610 --> 09:58.810
Deswegen gibt es eine Erweiterung des DTWs, mit dem man dann

09:58.810 --> 10:01.590
Wortfolgen statt einzelner Wörter erkennen kann.

10:02.910 --> 10:10.410
Und das macht man dadurch, indem man jetzt hergeht und sagt, okay, ich

10:10.410 --> 10:17.130
möchte die Pfade einzelner Wörter miteinander verknüpfen und daraus

10:17.130 --> 10:19.430
dann einen Pfad für eine Wortsequenz bekommen.

10:21.130 --> 10:26.590
Ich habe also eine Aufnahme, die besteht aus einer Folge von Wörtern,

10:26.690 --> 10:27.570
ist ein ganzer Satz.

10:28.310 --> 10:34.110
Und ich habe wieder nur ein Vokabular pro Wort, ein Referenzmuster und

10:34.110 --> 10:38.850
möchte jetzt einen Pfad finden, der mehrere von diesen Wörtern, für

10:38.850 --> 10:42.190
die ich jeweils ein Referenzmuster habe, eine Wortkette macht.

10:44.270 --> 10:47.590
Das große Problem bei der Sache ist, ich weiß natürlich nicht, wo die

10:47.590 --> 10:48.370
Wortgrenzen sind.

10:48.370 --> 10:51.650
Meine Aufnahme ist nur auf Satzebene segmentiert, ich weiß nicht, wo

10:51.650 --> 10:52.570
die Wortgrenzen sind.

10:53.310 --> 10:58.730
Das heißt, ich muss jetzt einen Pfad haben, der auch flexibel ist, was

10:58.730 --> 10:59.950
die Wortgrenzen angeht.

11:00.950 --> 11:03.610
Und das macht man mit diesem einfachen Trick.

11:05.770 --> 11:09.830
So sieht das aus bei einem DTW für einzelne Worte.

11:10.030 --> 11:13.590
Wenn man da ein Wort hat, hat man hier auf der y-Achse sein

11:13.590 --> 11:15.990
Referenzmuster stehen, auf der x-Achse die Aufnahme.

11:15.990 --> 11:18.270
Und dann füllt man immer diese Zellen aus.

11:21.070 --> 11:24.090
Hat sich so ein paar Übergänge definiert, von wo man herkommen kann,

11:24.350 --> 11:27.450
und füllt dann diese Zellen aus, gemäß der Distanz.

11:27.570 --> 11:31.290
Und man nimmt dann immer entsprechend die minimale Distanz, um das

11:31.290 --> 11:34.070
entsprechend auszurechnen.

11:35.170 --> 11:36.470
Das behält man bei.

11:37.810 --> 11:44.650
Und jetzt hatte man früher ein DTW für Referenzwort 1, ein DTW für

11:44.650 --> 11:47.770
Referenzwort 2, ein DTW-Wort für Referenzwort 3.

11:48.730 --> 11:52.730
Und diese drei Referenzwörter, die werden jetzt zusammengeklebt.

11:53.930 --> 11:57.490
Auf eine große Achse.

11:57.710 --> 12:00.830
Auf dieser großen Achse habe ich jetzt drei Referenzwörter.

12:02.810 --> 12:07.390
Und kann jetzt anfangen, da innerhalb dieses Raumes zu rechnen.

12:07.870 --> 12:12.070
Die dicken Striche deuten immer an, da wo Wörter aneinanderstoßen.

12:13.090 --> 12:17.830
Und jetzt brauche ich meine Innerwörterübergänge.

12:18.130 --> 12:20.770
Das heißt, innerhalb eines Wortes, wenn ich die Matrix ausfülle, kann

12:20.770 --> 12:22.170
ich die ganz normalen Übergänge machen.

12:23.270 --> 12:28.470
Und ich brauche dann Transitionen, die es mir erlauben, zu anfangen zu

12:28.470 --> 12:29.290
gehen von Wörtern.

12:35.220 --> 12:41.420
Das hier, diese Zeile, die über so einem dicken Streifen steckt, das

12:41.420 --> 12:43.060
steht immer für den Anfang eines Wortes.

12:43.500 --> 12:47.340
Das sind die Zellen, wo ich gerade anfange, ein Referenzwort

12:47.340 --> 12:48.400
aufzubrauchen.

12:50.260 --> 12:54.600
Und jetzt, wenn ich mir überlege, wo kann ich denn herkommen, wenn ich

12:54.600 --> 12:59.260
in so eine Zelle gehe, dann mache ich jetzt die Forderung, okay, in so

12:59.260 --> 13:03.980
einer Zelle darf ich nur dann springen von dem Ende eines anderen

13:03.980 --> 13:04.560
Wortes.

13:06.000 --> 13:08.400
Was ist das Ende eines anderen Wortes?

13:08.900 --> 13:13.360
Das Ende eines anderen Wortes lege ich fest als diese Zeile, die

13:13.360 --> 13:16.900
letzte Zeile innerhalb eines Referenzwortes, die an so einem dicken

13:16.900 --> 13:18.600
Balken stößt.

13:18.600 --> 13:22.800
Das heißt, hier, wenn ich in so einer Zelle bin, habe ich ein

13:22.800 --> 13:26.660
Referenzwort mittels Dynamic Time Warping komplett aufgebraucht.

13:27.060 --> 13:31.000
Und jetzt kann ich von hier aus nicht nur einfach in diese Richtung

13:31.000 --> 13:35.220
gehen, wie das bisher beim einzelnen DTW der Fall war, sondern ich

13:35.220 --> 13:40.820
kann jetzt anfangen, weiter zu springen in die Anfangszustände anderer

13:40.820 --> 13:41.180
Wörter.

13:42.620 --> 13:46.480
Und dann kann ich wieder mit diesen neu definierten, modifizierten

13:46.480 --> 13:49.900
Möglichkeiten, von wo ich herkommen kann, je nachdem, um was für eine

13:49.900 --> 13:56.920
Zelle es sich handelt, wieder anfangen, einen DTW zu rechnen, bei dem

13:56.920 --> 14:00.160
aber hinterher der Pfad für eine Wortsequenz steht.

14:05.320 --> 14:07.860
Das sieht dann hinterher ungefähr so aus.

14:07.860 --> 14:12.120
Ich habe dann einen Pfad, das schwarze hier sei der DTW-Pfad, der

14:12.120 --> 14:12.880
gefunden wurde.

14:14.400 --> 14:17.880
Da ist hinterher herausgekommen, die kleinste Distanz ist, wenn ich

14:17.880 --> 14:23.260
erst für eine bestimmte Strecke das Referenzwort B aufbrauche, dann

14:23.260 --> 14:31.100
von hier reinspringe in das Referenzwort D, das aufbrauche, dann

14:31.100 --> 14:35.520
nochmal zurückspringe, wieder das Referenzwort D aufbrauche, dann

14:35.520 --> 14:39.200
einen A-Durchlauf und ganz zum Schluss nochmal ein B-Durchlauf.

14:40.280 --> 14:45.980
Und auf die Art und Weise bekomme ich jetzt einen Pfad, der für eine

14:45.980 --> 14:47.260
gesamte Wortfolge steht.

14:47.760 --> 14:51.300
Und das Einzige, was ich verändert habe, ist, dass ich die Anzahl der

14:51.300 --> 14:55.680
Übergänge, die ich erlaube, erweitert habe um diese speziellen

14:55.680 --> 14:56.480
Wortübergänge.

14:57.160 --> 15:02.140
Wenn man das Ganze jetzt formalisiert, kommt man zum sogenannten One

15:02.140 --> 15:06.380
-Stage Dynamic Programming, als Erweiterung des DTWs.

15:06.640 --> 15:10.720
Ich habe wieder ganz normal meine Vektoren der Aufnahme.

15:11.000 --> 15:14.180
Die Aufnahme sei insgesamt N Merkmalsvektoren lang.

15:14.180 --> 15:20.180
Und ich habe dann insgesamt K verschiedene Wörter.

15:25.880 --> 15:35.760
Und jedes dieser K Referenzwörter ist Groß-M Klein-K Merkmalsvektoren

15:35.760 --> 15:36.040
lang.

15:36.040 --> 15:42.360
Und ich habe dann insgesamt Groß-K, wenn ich Groß-K Referenzwörter

15:42.360 --> 15:49.460
habe, Groß-K solcher Musterwortfolgen Y1 bis Ym Klein-K.

15:52.260 --> 16:02.780
Das hier sei die Distanz zwischen dem Yten Aufnahmevektor und dem Yten

16:02.780 --> 16:05.460
Referenzvektor der Referenz K.

16:06.460 --> 16:10.700
Und dementsprechend kann ich dann halt solche Zustandsfolgen

16:10.700 --> 16:11.300
definieren.

16:13.200 --> 16:16.520
Wort 1, Wort 2 bis Wort Groß-L.

16:17.980 --> 16:34.820
Und dieses W von L ist eben dieses Tuple aus I von L, J von L und K

16:34.820 --> 16:35.320
von L.

16:36.800 --> 16:41.320
Und gesucht wird halt wieder die Distanz, die die Distanz dieser

16:41.320 --> 16:47.700
Wortfolge minimiert, indem ich über alle L aufsummiere.

16:47.700 --> 16:55.720
Und diese Distanz hier in Abhängigkeit von dem K entsprechend, die

16:55.720 --> 17:00.840
Distanz über diesen Laufvektor L, der Länge der Aufnahme, dann

17:00.840 --> 17:07.520
hinterher entsprechend minimiere.

17:08.320 --> 17:13.000
L ist nicht die Länge der Aufnahme, L ist der Index des Pfades, der

17:13.000 --> 17:13.480
Pfadpunkt.

17:13.600 --> 17:16.400
Das heißt, der Pfad ist insgesamt, wie ich hinterher herausbekomme,

17:16.520 --> 17:17.540
Groß -L Schritte lang.

17:19.000 --> 17:23.580
Und zu jedem Punkt auf diesem Pfad habe ich dieses Triple definiert,

17:23.660 --> 17:27.680
das mir wiederum diese lokale Distanz für diesen Schrittpunkt auf dem

17:27.680 --> 17:28.380
Pfad ausgibt.

17:28.480 --> 17:32.000
Und ich summiere einfach wieder die einzelnen lokalen Distanzen auf

17:32.000 --> 17:36.320
einem Punkt des Pfades auf zur Gesamtlänge dieses speziellen Pfades.

17:38.640 --> 17:42.640
Deswegen auch die Frage, warum ist Groß-L ungleich Groß-N?

17:43.000 --> 17:47.920
Groß-N die Anzahl der Frames in der Beispielaufnahme.

17:48.180 --> 17:50.220
Warum ist das nicht gleich der Länge des Pfades?

17:53.680 --> 17:54.740
Warum ist das?

17:55.520 --> 17:58.020
Einfache Antwort darauf.

18:05.040 --> 18:11.160
Der Pfad verläuft ja nicht linear, sondern der Pfad hat Teile, wo er

18:11.160 --> 18:17.220
halt Frames in der Audioaufnahme auffrisst, ohne dass er Frames in der

18:17.220 --> 18:18.140
Referenz auffrisst.

18:18.140 --> 18:22.320
Oder der Pfad hat Anteile, wo er Frames der Referenz auffrisst, ohne

18:22.320 --> 18:26.000
dass er Frames der Audioaufnahme konsumiert.

18:26.620 --> 18:31.740
Der kann nicht nur so linear in der Diagonalen verlaufen, sondern der

18:31.740 --> 18:34.980
verläuft halt irgendwie eckig so um Zacken drumherum.

18:38.700 --> 18:45.100
Dementsprechend ist der Pfad in der Regel mindestens so lang wie die

18:45.100 --> 18:47.980
Audioaufnahme, aber in der Regel ist er deutlich länger.

18:50.700 --> 18:53.560
Und wir haben jetzt halt entsprechend zwei verschiedene Arten von

18:53.560 --> 18:54.000
Übergängen.

18:54.920 --> 18:59.080
Die Innerwort-Übergänge und die Übergänge an den Wortgrenzen.

18:59.760 --> 19:02.720
Und wenn wir jetzt wieder von diesem symmetrischen DTW-Schritt

19:02.720 --> 19:06.400
ausgehen, wie bei der minimalen DT-Distanz, ich kann hier noch

19:06.400 --> 19:10.080
auslöschen, einfügen oder ersetzen.

19:13.760 --> 19:22.840
Dann gilt innerhalb des Referenzmusters, dass dieses WL-I1 ein Teil

19:22.840 --> 19:24.300
daraus ist.

19:24.300 --> 19:27.880
Das heißt, ich kann von einem dieser drei Vorgängerpositionen

19:27.880 --> 19:28.480
herkommen.

19:34.230 --> 19:39.350
Und zwar immer dann, wenn ich mich nicht mehr an dem Anfangsframe

19:39.350 --> 19:40.030
befinde.

19:40.590 --> 19:43.010
Das heißt, das ist jetzt umgekehrt gedacht.

19:43.150 --> 19:46.850
Beim letzten Mal haben wir gedacht, wenn ich am Ende eines Wortes bin,

19:47.130 --> 19:49.290
dann kann ich zu einer Anfangsposition springen.

19:49.290 --> 19:56.390
Das hier sagt umgekehrt, wenn das, wo ich herkomme, eine Endposition

19:56.390 --> 20:01.470
oder wenn das, wo ich jetzt reingehe, die Zelle, in die ich gerade

20:01.470 --> 20:07.450
jetzt ausrechne, keine Startposition ist, wäre es eine Startposition,

20:07.630 --> 20:09.370
wäre das J gleich 1.

20:09.370 --> 20:13.890
Das J ist größer 1, das heißt, ich befinde mich in einer Zeile höher

20:13.890 --> 20:16.810
in der Referenz, das heißt, ich befinde mich in einer Position, wo ich

20:16.810 --> 20:19.190
nicht mehr von einem anderen Wort reinspringen konnte.

20:19.650 --> 20:24.070
Dann sind meine Vorgänger eben gegeben durch den symmetrischen DTW

20:24.070 --> 20:24.510
-Schritt.

20:25.270 --> 20:29.110
Und für den Fall, dass ich mich in so einer Startzeile befinde, kann

20:29.110 --> 20:33.210
ich aus allen Endzeilen aller anderen Referenzwörter im vorhergehenden

20:33.210 --> 20:34.010
Zeitschritt kommen.

20:35.450 --> 20:38.350
Und dann kann man halt entsprechend wieder die Distanz berechnen und

20:38.350 --> 20:41.910
macht halt entsprechend die Fallunterscheidung Anfang des Wortes oder

20:41.910 --> 20:42.970
Innerhalb des Wortes.

20:43.490 --> 20:48.770
Und dann muss ich mir einfach die aktuelle lokale Distanz plus das

20:48.770 --> 20:50.770
Minimum, von woher durfte ich vorher kommen.

20:50.910 --> 20:53.390
Komme ich von Innerhalb des Wortes her oder komme ich von dem Ende

20:53.390 --> 20:55.030
aller anderen Worte her.

20:59.960 --> 21:06.600
Nichtsdestotrotz muss ich jetzt relativ viele Dynamic Time Warping

21:06.600 --> 21:07.980
Matrizen ja ausrechnen.

21:08.920 --> 21:15.760
Sowas in der Größenordnung N mal maximale Länge eines Referenzwortes

21:15.760 --> 21:17.200
mal Anzahl Referenzwörter.

21:18.520 --> 21:21.740
In der Praxis ist es natürlich deutlich weniger, weil nicht immer ein

21:21.740 --> 21:22.940
Wortübergang möglich ist.

21:23.560 --> 21:28.520
Und die Frage ist jetzt, wie kann man sowas möglichst kompakt, schnell

21:28.520 --> 21:33.860
und möglichst speichersparend implementieren.

21:34.320 --> 21:38.640
Und die erste Idee ist, ich muss nicht notwendigerweise die gesamte

21:38.640 --> 21:40.420
Matrix immer im Speicher halten.

21:40.560 --> 21:43.060
Wenn wir das so auf Papier machen oder uns anschauen, dann spannen wir

21:43.060 --> 21:46.980
halt die Matrix auf und rechnen jede Zeile dieser Matrix auf und

21:46.980 --> 21:49.130
füllen diese Matrix im Laufe der Zeit an.

21:49.870 --> 21:51.790
Mich interessiert aber nicht die Matrix.

21:51.930 --> 21:56.110
Mich persönlich interessiert ja nur, was war hinterher die

21:56.110 --> 22:03.110
Wortsequenz, die auf dem Pfad mit der kleinsten Distanz liegt.

22:04.310 --> 22:09.190
Welches mehr an Informationen bietet mir denn der DTW-Pfad, das drüber

22:09.190 --> 22:13.270
hinaus geht über die beste Wortsequenz, die er enthält.

22:13.270 --> 22:15.550
Was steht noch zusätzlich im DTW-Pfad dran?

22:17.710 --> 22:19.170
Was mich aber nicht interessiert.

22:21.070 --> 22:24.610
Was sagt mir der Pfad, den ich suche, dieser minimale Pfad, den ich

22:24.610 --> 22:26.570
dann hinterher gefunden habe, was sagt mir der dann aus?

22:28.790 --> 22:31.670
Der sagt mir nicht nur aus, welche Worte folgen aufeinander ab,

22:31.930 --> 22:35.570
sondern der sagt mir zum Beispiel auf, wann fängt ein Wort an, wann

22:35.570 --> 22:37.410
hört ein Wort auf...

22:37.410 --> 22:41.310
und welche Frames werden auf welche Frames abgebildet innerhalb des

22:41.310 --> 22:41.730
Wortes.

22:42.530 --> 22:45.670
Das ist das, was drin steht in dieser gesamten Matrix.

22:46.170 --> 22:49.030
Wenn ich da den Pfad zurückverfolge, kann ich überall auf dem Pfad

22:49.030 --> 22:49.470
nachgucken.

22:49.690 --> 22:53.810
Okay, zu diesem Zeitpunkt wurde dieser Referenzvektor auf diesen

22:53.810 --> 22:58.610
Aufnahmevektor abgebildet und das Ganze lag innerhalb dieses Wortes

22:58.610 --> 23:02.070
und hatte bis zu dem Zeitpunkt die aufakkumulierte Distanz so und so.

23:02.850 --> 23:03.750
Das will ich aber gar nicht wissen.

23:03.890 --> 23:05.690
Ich will am Ende nur wissen, was war die Wortfolge, die dabei

23:05.690 --> 23:06.110
rauskommt.

23:06.610 --> 23:08.510
Das heißt, die gesamte Matrix brauche ich gar nicht.

23:08.510 --> 23:12.510
Ich muss nur so viel Information zurückbehalten, dass ich am Ende

23:12.510 --> 23:15.970
weiß, was war der minimale Pfad auf Wortebene.

23:16.870 --> 23:21.150
Und dementsprechend, wenn ich jetzt mir anschaue, diese Matrix, die

23:21.150 --> 23:26.990
ich ausfülle, wenn ich da jetzt nicht allzu perverse Übergänge mir

23:26.990 --> 23:29.730
erlaube, sondern wenn ich mich mal sage, ich nehme sowas wie zum

23:29.730 --> 23:33.670
Beispiel symmetrischen Übergang und nicht, ich komme von, überspringe

23:33.670 --> 23:37.010
drei Zellen, drei Spalten, wenn ich so einen Übergang mache, sondern

23:37.010 --> 23:39.870
zum Beispiel so ein symmetrischer Übergang oder auch irgendeine andere

23:39.870 --> 23:43.430
Art ähnlichen Übergang, dann reicht es im Prinzip, wenn ich mir zwei

23:43.430 --> 23:44.990
Spalten immer nur im Speicher halte.

23:45.510 --> 23:49.530
Ich muss wissen, im Augenblick fülle ich eine Spalte aus und das

23:49.530 --> 23:52.210
Einzige, was ich wissen muss, um die aktuelle Spalte auszufüllen,

23:52.630 --> 23:54.790
steht in der Spalte zum Zeitschritt davor.

23:55.350 --> 23:58.570
Also brauche ich nur diese beiden Spalten zu haben, fülle die Spalte

23:58.570 --> 24:04.670
aus, abhängig davon, was in der Spalte zuvor stand, und danach tausche

24:04.670 --> 24:07.590
ich im Geist einfach die Spalten und fülle wieder die andere Spalte

24:07.590 --> 24:11.630
aus, basierend auf der neuen Spalte, tausche die wieder und so weiter

24:11.630 --> 24:12.130
und so fort.

24:12.570 --> 24:15.190
Das heißt, anstatt also die gesamte Matrix im Speicher zu halten,

24:15.730 --> 24:18.310
brauche ich nur zwei Spalten im Speicher zu halten.

24:19.350 --> 24:27.980
Wenn meine erlaubten Übergänge gutmütig genug sind, und das sind sie

24:27.980 --> 24:31.200
in der Regel, zum Beispiel dieser symmetrische Übergang, dann reicht

24:31.200 --> 24:32.020
sogar eine Spalte.

24:32.860 --> 24:35.300
Weil die Übergänge, die ich habe, das ist, ich kann ja nur nach rechts

24:35.300 --> 24:37.920
gehen, nach oben gehen oder diagonal gehen.

24:38.520 --> 24:39.940
Das heißt, ich gehe immer von unten nach oben.

24:40.180 --> 24:45.300
Das heißt, ich kann die Spalte von unten nach oben fast ausfüllen.

24:45.880 --> 24:49.860
Das heißt, da, wenn ich das recht geschickt mache, mir vielleicht

24:49.860 --> 24:54.900
maximal zwei Zwischenspeicher noch einrichte, dann reicht sogar eine

24:54.900 --> 24:59.340
Spalte aus, plus vielleicht noch zwei kleine temporäre Register, in

24:59.340 --> 25:00.540
denen ich Sachen zwischenspalte.

25:01.300 --> 25:05.440
Dann kann ich das innerhalb einer Spalte machen, indem ich immer nur

25:05.440 --> 25:07.820
die Spalte von unten nach oben ausfülle.

25:07.820 --> 25:12.200
Das heißt, vom Speicher her kann ich das Ganze auf eine Spalte von

25:12.200 --> 25:16.280
Größenordnung eine Spalte begrenzen.

25:20.380 --> 25:28.080
Und dann kommt am Ende raus, der minimale DTW-Pfad hatte die Länge so

25:28.080 --> 25:28.520
und so viel.

25:29.060 --> 25:32.720
Das ist das Minimum dann über die letzte Spalte, die ich mir angucken

25:32.720 --> 25:35.140
kann, oder über die Endposition in der letzten Spalte.

25:36.020 --> 25:38.600
Habe ich jetzt vielleicht aus Versehen zu viel Informationen

25:38.600 --> 25:39.100
weggeworfen?

25:40.460 --> 25:45.000
Dann ist also die Information, die ich mir abspeichere, drastisch

25:45.000 --> 25:45.540
reduziert.

25:45.880 --> 25:48.400
Habe ich noch genügend Informationen zurückbehalten?

25:51.710 --> 25:52.630
Was fehlt mir?

25:55.710 --> 25:57.430
Genau, was fehlt, sind die bisherigen Worte.

25:57.570 --> 26:01.350
Ich kenne also nur die Länge des aktuellen minimalen Pfades, aber ich

26:01.350 --> 26:05.330
weiß nicht mehr, welche Worte ich im Laufe der Zeit durchwandert habe.

26:06.030 --> 26:10.070
Die muss ich mir halt entsprechend noch abspeichern.

26:10.450 --> 26:14.450
Aber anders als beim DTW, wenn ich mir den gesamten Pfad als

26:14.450 --> 26:17.970
Rückzeiger merke, also in jeder Zelle einen Rückzeiger, brauche ich

26:17.970 --> 26:21.070
mir hier nur noch Rückzeiger auf Wortebene zu melden.

26:21.510 --> 26:24.190
Das sind natürlich deutlich weniger Worte als Frames, die ich habe,

26:25.150 --> 26:26.170
und Zellen, die ich habe.

26:26.170 --> 26:30.890
Das heißt, im Prinzip brauche ich jetzt nur noch einen Vektor und

26:30.890 --> 26:37.690
jeder Eintrag im Vektor ist ein Array von Rückzeigern auf Wortebene.

26:38.330 --> 26:41.470
Und mit der Art und Weise kann ich dann zurückgehen von der letzten

26:41.470 --> 26:48.430
Spalte, zurückrechnen und mir die Wortfolge, die dann meinem Pfad mit

26:48.430 --> 26:52.730
der minimalen Distanz entspricht, wieder rekonstruieren.

27:00.000 --> 27:06.260
Dieses Verfahren, wenn man das jetzt für Wortfolgen anwendet, basiert

27:06.260 --> 27:11.160
rein auf einem Mustervergleich von der Aufnahme zu den

27:11.160 --> 27:12.560
Referenzmustern, die ich habe.

27:14.900 --> 27:19.700
Dieses Verfahren hat keinerlei Informationen von diesem höheren

27:19.700 --> 27:24.740
linguistischen Wissen, das wir Menschen anhören.

27:26.020 --> 27:34.440
Wenn wir hören, also, kleiner aus, oder grauer aus, und das eine ist

27:34.440 --> 27:36.780
ein bisschen verschmutzt und wir müssen uns jetzt überlegen, war das

27:36.780 --> 27:39.680
jetzt graue Maus oder grauer Haus, klingt beides gleich, war

27:39.680 --> 27:42.660
vielleicht ein bisschen störend, dann wissen wir, naja, graue Maus ist

27:42.660 --> 27:45.940
wahrscheinlicher als vielleicht als graues Haus, je nachdem, wenn es

27:45.940 --> 27:50.840
ist, was ich, wenn es noch hieß, graue Maus lief schnell, dann wissen

27:50.840 --> 27:53.380
wir, okay, das wird graue Maus gewesen sein, lief schnell und nicht

27:53.380 --> 27:55.760
graues Haus lief schnell oder sowas in der Art und Weise.

27:56.660 --> 27:59.180
Dieses Verfahren hat noch keinerlei dieser Informationen.

27:59.960 --> 28:04.400
Für den sind im Prinzip alle Wortfolgen gleich wahrscheinlich, egal,

28:04.600 --> 28:06.220
ob die jetzt Sinn machen oder nicht.

28:07.680 --> 28:11.140
Und da war jetzt die erste Überlegung damals, wie kann man da jetzt

28:11.140 --> 28:15.200
ein bisschen Wissen reinbringen, welche Wortfolgen sind vielleicht

28:15.200 --> 28:19.820
eher sinnvoll und welche Wortfolgen sind vielleicht weniger sinnvoll.

28:20.660 --> 28:25.720
Und da war die erste Idee, dass man das jetzt so weit einschränkt,

28:25.820 --> 28:30.660
dass man sagt, für jedes neue Wort, in das ich reingehe, definiere ich

28:30.660 --> 28:34.100
mir eine Menge von Vorgängerwörtern, die überhaupt nur erlaubt sind.

28:34.720 --> 28:44.740
Das heißt, wenn ich also ausfüllen muss die Zelle, die erste Zelle, in

28:44.740 --> 28:50.220
der ich eines neuen Referenzwortes in dieser BTW-Matrix, dann erlaube

28:50.220 --> 28:53.480
ich halt nicht, dass ich von dem Ende aller Wörter komme, sondern ich

28:53.480 --> 28:57.060
sage, ich kann nur von einer bestimmten Teilmenge von Wörtern kommen.

28:59.880 --> 29:01.260
War die erste Überlegung.

29:01.360 --> 29:04.900
Ist eine relativ einfache Einschränkung, mit der ich aber schon

29:04.900 --> 29:10.200
zumindest gewisse völlig unplausible Sachen eliminieren kann.

29:11.460 --> 29:14.840
Und dann kam die Idee, aber vielleicht will ich ja auch so etwas wie

29:14.840 --> 29:15.920
Zustandswissen haben.

29:16.160 --> 29:19.580
Ich möchte wissen, ich befinde mich jetzt in einem bestimmten Zustand.

29:20.200 --> 29:23.700
Kann zum Beispiel sein, ich habe in der Vergangenheit die zwei Wörter

29:23.700 --> 29:24.160
gesehen.

29:25.340 --> 29:27.860
Wenn das meine letzten zwei Wörter waren, bin ich in so einem Zustand

29:27.860 --> 29:28.220
1.

29:28.540 --> 29:31.380
Wenn in meinen letzten Wörtern was anderes waren, bin ich in Zustand 3

29:31.380 --> 29:33.420
und ansonsten bin ich in Zustand 4.

29:33.760 --> 29:34.660
Irgendetwas in der Richtung.

29:35.120 --> 29:38.540
Und abhängig davon, in welchem Zustand ich mich befinde, möchte ich

29:38.540 --> 29:42.160
vielleicht diese Mengen an erlaubten Vorgängern für die Referenzwörter

29:42.160 --> 29:43.960
modifizieren.

29:43.960 --> 29:49.960
Und damit man das relativ einfach machen kann, kann man das zum

29:49.960 --> 29:54.940
Beispiel so machen, dass man halt entsprechend die Menge aller

29:54.940 --> 29:56.400
Referenzwörter dupliziert.

29:58.320 --> 30:06.020
Solange bis ich die möglichen Zustände dann soweit abgespeichert habe

30:06.020 --> 30:10.640
implizit durch die verschiedenen duplizierten Referenzwörter, die halt

30:10.640 --> 30:14.920
irgendeinen generischen Zusatz, generischen Identifizierer bekommen,

30:15.380 --> 30:20.460
dass ich wieder nur mit einer Menge an erlaubten Vorgängerwörtern pro

30:20.460 --> 30:23.800
Referenzwort, pro dupliziertes Referenzwort auskomme.

30:25.280 --> 30:29.920
Und dann ändert sich halt diese Formel zur Distanzberechnung daraus,

30:30.020 --> 30:33.200
dass man halt hier noch entsprechend die Einschränkung hat, wenn ich

30:33.200 --> 30:36.100
in einem Anfangszustand bin, dann schaue nur noch in der Menge der

30:36.100 --> 30:38.660
erlaubten Vorgängerwörter da.

30:42.180 --> 30:51.540
Jetzt sieht man schon, an dem Verfahren hat man einige Probleme.

30:52.160 --> 30:55.540
Es war ein frühes Verfahren, mit dem man als reiner Mustervergleich

30:55.540 --> 30:59.960
arbeiten wollte und hat jetzt gewisse Probleme gehabt.

31:00.700 --> 31:03.640
Diese grammatikalische Einschränkung, die man da machen konnte, ist

31:03.640 --> 31:04.480
extrem schwach.

31:05.420 --> 31:07.680
Die betrachtet keine größeren Spannen.

31:07.820 --> 31:10.660
Wenn ich Zustände da reinbringen will, dann muss ich Wörter

31:10.660 --> 31:15.020
duplizieren, dann wird wieder der Raumspeicher und so weiter extrem

31:15.020 --> 31:15.440
groß.

31:16.780 --> 31:19.860
Der Mustervergleich ist relativ starr.

31:21.260 --> 31:23.980
Er ist flexibel, was das zeitliche Alignment angeht.

31:24.540 --> 31:28.420
Also ob ich mal schnell oder langsam spreche, dagegen ist der DTW

31:28.420 --> 31:28.940
robust.

31:29.540 --> 31:33.960
Das heißt, variable Sprechgeschwindigkeit ist in Ordnung, aber er ist

31:33.960 --> 31:39.220
ganz und gar nicht robust dagegen, dass sich die Muster selber, selbst

31:39.220 --> 31:43.060
wenn ich die richtigen Muster aufeinander abbilde, dass die variabel

31:43.060 --> 31:43.300
sind.

31:43.780 --> 31:48.720
Dass ich mal ein Phonem 1 mal so oder mal so ausspreche, je nachdem

31:48.720 --> 31:52.140
davon, ob ich erkältet bin oder gesund oder ob es Sprecher 1 ist oder

31:52.140 --> 31:53.600
Sprecher 2 oder Sprecher 3.

31:53.600 --> 31:58.620
Gegen diese Variabilität, dass die Ausprägung des Musters von Sprecher

31:58.620 --> 32:03.060
zu Sprecher, von emotionalen Zustand zu emotionalen Zustand und so

32:03.060 --> 32:07.860
weiter unterschiedlich ist, von Raum, in dem ich mich befinde, dagegen

32:07.860 --> 32:13.200
ist dieser Art, dieser simple Mustervergleich, ganz überhaupt nicht

32:13.200 --> 32:13.900
robust.

32:14.200 --> 32:16.700
Der kommt da mit Unschärfe nicht gut zurecht.

32:18.540 --> 32:22.220
Und da hat man dann schon relativ früh erkannt, dass man mit diesen

32:22.220 --> 32:25.820
harten Mustervergleichen, mit diesen harten Entscheidungen, in denen

32:25.820 --> 32:28.800
man harte Distanzen verwendet, nicht weit kommt.

32:29.520 --> 32:32.280
Sondern da war dann die Idee, dass man jetzt anfängt, diese

32:32.280 --> 32:36.380
Variabilität irgendwie zu behandeln.

32:36.640 --> 32:40.480
Mit dieser Variabilität irgendwie umzugehen, dass das Muster, das ich

32:40.480 --> 32:43.920
produziere, halt nicht immer gleich aussieht, sich zwar ähnlich

32:43.920 --> 32:46.440
aussieht, aber doch in einem gewissen Bereich eine gewisse

32:46.440 --> 32:47.840
Variabilität aufweist.

32:49.400 --> 32:53.080
Und wenn man jetzt in der Informatik keine harten Vergleiche mehr

32:53.080 --> 32:56.140
machen will, keine harten Entscheidungen mehr treffen will, mit so

32:56.140 --> 33:00.260
Fuzziness umgehen will, mit so Unschärfe umgehen will, was wäre da ein

33:00.260 --> 33:04.020
typisches Standardwerkzeug, das man jetzt bei der mathematischen

33:04.020 --> 33:05.360
Modellierung da verwenden würde?

33:06.860 --> 33:10.660
Was nimmt man, um mit so Variabilität, mit Unsicherheit umgehen zu

33:10.660 --> 33:10.840
können?

33:10.840 --> 33:11.620
Was macht man da?

33:13.800 --> 33:16.940
Was ist das Standardwerkzeug, mit dem man dann arbeitet?

33:18.960 --> 33:21.620
Man arbeitet halt nicht mehr mit den harten Entscheidungen, man

33:21.620 --> 33:23.020
arbeitet mit Wahrscheinlichkeiten.

33:23.840 --> 33:28.160
Das heißt, man will jetzt irgendwie da mit Wahrscheinlichkeiten

33:28.160 --> 33:28.720
arbeiten.

33:30.540 --> 33:34.600
Und diese Wahrscheinlichkeit will man irgendwie reinbringen bei diesem

33:34.600 --> 33:38.800
Vergleich, wenn ich einen Referenzmustervektor mit einem

33:38.800 --> 33:41.480
Aufnahmemustervektor vergleichen will.

33:41.680 --> 33:44.560
Will man halt keine euklidische Distanz mehr haben, sondern man will

33:44.560 --> 33:48.980
irgendwas haben, was diese Varianz und diese Wahrscheinlichkeiten mit

33:48.980 --> 33:50.140
hineinbaut.

33:51.400 --> 33:59.540
Und wenn man das machen will, landet man bei der Gauss-Verteilung, bei

33:59.540 --> 34:00.500
der Normalverteilung.

34:01.980 --> 34:04.580
Wiederholen wir hier nochmal, auch wenn es vielleicht im Studium schon

34:04.580 --> 34:07.060
ein paar Mal dran war, damit man einfach nochmal so ein paar

34:07.060 --> 34:08.460
Grundprozesse sieht.

34:09.380 --> 34:13.960
Und wenn wir dann die Gauss-Verteilung wiederholt haben, dann schlagen

34:13.960 --> 34:16.400
wir plötzlich den Bogen zu einem Distanzmaß.

34:16.700 --> 34:21.940
Das wir nämlich da die ganze Zeit schon von der Nase hatten, dessen

34:21.940 --> 34:23.440
wir uns aber noch nicht so bewusst waren.

34:25.120 --> 34:28.660
Also, eindimensionale Gauss-Verteilung definiert wie folgt, das ist

34:28.660 --> 34:33.280
halt e hoch minus ein Halb, Wert x, für den ich die Wahrscheinlichkeit

34:33.280 --> 34:38.360
ausrechnen will, minus einem Mittelwertsvektor, das Ganze zum Quadrat,

34:38.440 --> 34:42.240
das heißt ich berechne da oben im Zähler, was ist so die Distanz

34:42.240 --> 34:46.700
zwischen meinem aktuellen Muster und zu dem Mittelwertsvektor, und

34:46.700 --> 34:48.100
zwar die quadratische Distanz.

34:48.100 --> 34:55.080
Und das Ganze teile ich durch eine Varianz Sigma Quadrat.

34:56.480 --> 35:01.880
Diesen Mittelwert nennt man entsprechend auch das erste Moment, und

35:01.880 --> 35:10.540
die Varianz berechnet man als erwartete Abweichung des Mustervektors

35:10.540 --> 35:13.640
vom Mittelwert, und nennt man dementsprechend das zweite Moment.

35:15.820 --> 35:18.660
Das ist die Standard-Gauss-Verteilung, die dann diese schöne Glocke

35:18.660 --> 35:25.660
macht, damit das Integral unter der Gauss-Verteilung sich auch schön

35:25.660 --> 35:29.180
zu 1 ergibt, braucht man halt entsprechend vorne noch diesen

35:29.180 --> 35:32.560
Nummierungsterm 1 durch Wurzel 2 Pi Sigma Quadrat.

35:34.600 --> 35:38.800
Das Ding nennt man Gauss-Verteilung oder Normalverteilung.

35:39.920 --> 35:42.780
Und jetzt muss man ein bisschen aufpassen mit den Begriffen.

35:44.240 --> 35:47.000
Ist das hier eine Wahrscheinlichkeitsverteilung?

35:48.800 --> 35:51.860
Zurückdenken an die Stochastikvorlesung,

35:52.660 --> 35:53.780
Wahrscheinlichkeitstheorievorlesung.

35:54.380 --> 35:56.260
Ist das eine Wahrscheinlichkeitsverteilung?

35:57.760 --> 35:58.420
Wer ist für Ja?

36:03.400 --> 36:04.400
Wer ist für Nein?

36:07.360 --> 36:09.720
Ich nehme das mal als Nein, die halbgehobene Hand.

36:12.100 --> 36:13.040
Was spricht für Nein?

36:13.780 --> 36:16.920
Warum ist das keine Wahrscheinlichkeitsverteilung?

36:16.920 --> 36:18.540
Was ist eine Wahrscheinlichkeitsverteilung?

36:20.780 --> 36:23.680
Eine Wahrscheinlichkeitsverteilung ist eine endlich abzählbare oder

36:23.680 --> 36:27.200
zumindest abzählbare Menge an Zahlen, die sich in der Summe zu 1

36:27.200 --> 36:29.420
ergeben und deren einzelnen Werte zwischen 0 und 1 liegen.

36:29.720 --> 36:30.700
Das ist das Ding nicht.

36:31.640 --> 36:35.260
Das hier ist definiert über die Menge der reellen Zahlen.

36:36.480 --> 36:39.140
Ist die Menge der reellen Zahlen abzählbar?

36:41.360 --> 36:41.800
Nein.

36:42.320 --> 36:44.200
Die Menge der reellen Zahlen ist überabzählbar.

36:44.200 --> 36:49.040
Deswegen kann das Ganze schon keine Normalverteilung mehr sein.

36:50.420 --> 36:55.180
Wenn ich mir eine reelle Zahl hernehme und sage, diese reelle Zahl

36:55.180 --> 36:59.240
steht für ein Ereignis und ich möchte die Wahrscheinlichkeit dieses

36:59.240 --> 37:00.200
Ereignisses bestimmen.

37:02.360 --> 37:03.040
Also,

37:15.560 --> 37:18.820
x aus R gesucht ist p von x.

37:20.700 --> 37:25.920
p von x ist gleich... Welche Zahl muss da hin?

37:32.880 --> 37:33.320
Warum?

37:33.320 --> 37:33.760
1?

37:39.430 --> 37:42.110
Ja, aber das hier ist eine Zahl aus dem R.

37:44.170 --> 37:46.430
Das ist eine, ein x aus dem R.

37:46.550 --> 37:47.610
Was ist dann p von x?

37:49.450 --> 37:50.250
Das ist 0.

37:54.320 --> 37:57.140
Welche ist es die Ausnahme, dass es nicht 0 ist, sondern 1?

37:57.140 --> 38:01.280
Was ist der einzige mögliche Fall, wenn es 1 ist?

38:01.620 --> 38:05.640
Was sagt mir das, wenn für ein x aus R p von x 1 ist?

38:05.860 --> 38:06.580
Wie nenne ich dann x?

38:09.920 --> 38:11.980
Das ist dann das sogenannte sichere Ereignis.

38:13.020 --> 38:15.680
Und dann habe ich nichts mehr mit Wahrscheinlichkeiten zu tun.

38:15.880 --> 38:17.200
Dann ist keine Varianz mehr drin.

38:17.280 --> 38:19.720
Es gibt ein sicheres Ereignis, das immer einstellen wird.

38:20.020 --> 38:22.140
Das heißt also, wenn ich es mit echten Wahrscheinlichkeiten zu tun

38:22.140 --> 38:25.780
habe und ich ein x aus dem R nehme und dann die Wahrscheinlichkeit des

38:25.780 --> 38:28.560
Eintreffens dieses Ereignisses x habe, dann hat das die

38:28.560 --> 38:29.300
Wahrscheinlichkeit 0.

38:30.460 --> 38:31.320
Das ist blöd.

38:32.940 --> 38:36.180
Man will ja auch irgendwie mit solchen überabzählbaren Ereignissen

38:36.180 --> 38:36.480
rechnen.

38:36.560 --> 38:38.300
Was macht man also in der Wahrscheinlichkeitstheorie?

38:38.400 --> 38:39.060
Was hat man gemacht?

38:57.990 --> 39:02.070
Man kann jetzt nur noch die Wahrscheinlichkeit für ein Intervall aus

39:02.070 --> 39:04.990
diesem x aus R berechnen.

39:05.510 --> 39:07.810
Das ist eine Wahrscheinlichkeit, die kann ungleich 0 sein.

39:09.890 --> 39:14.730
Jetzt sage ich, die Wahrscheinlichkeit sei normal verteilt.

39:16.010 --> 39:18.830
Wie kann ich dann die Wahrscheinlichkeit ausrechnen, wenn ich weiß,

39:19.470 --> 39:21.350
dass diese Zufallsvariable x

39:24.470 --> 39:29.470
hier normal verteilt ist und ich einen Intervall habe, das geht von x1

39:29.470 --> 39:32.750
bis x2 aus den reellen Zahlen und möchte das jetzt ausrechnen.

39:32.830 --> 39:33.790
Wie kann ich das ausrechnen?

39:53.690 --> 39:55.830
Normalverteilung, kommt der Wert x rein, die Normalverteilung hat

39:55.830 --> 39:58.730
einen Mittelwert µ und eine Variante σ und dann wird das ganze Ding

39:58.730 --> 40:00.530
eben über dieses Intervall integriert.

40:00.930 --> 40:03.250
Und dann kriege ich die Wahrscheinlichkeit für dieses Intervall

40:03.250 --> 40:04.190
heraus.

40:06.110 --> 40:07.970
Dementsprechend ist die Normalverteilung keine

40:07.970 --> 40:10.290
Wahrscheinlichkeitsverteilung mehr, sondern wie hat man das genannt?

40:14.810 --> 40:16.810
Genau, das ist eine Wahrscheinlichkeitsdichtefunktion.

40:17.990 --> 40:20.410
Nur weil das Ding Normalverteilung oder Gaussverteilung hat, ist es

40:20.410 --> 40:21.370
keine Wahrscheinlichkeitsverteilung.

40:21.370 --> 40:23.390
Es ist eine Wahrscheinlichkeitsdichtefunktion.

40:23.490 --> 40:25.810
Woran erkennt man das sofort, wenn man auf die Formel guckt?

40:28.650 --> 40:30.030
Was unterscheidet sich von dem?

40:30.990 --> 40:33.390
Selbst in meiner kraglichen Handschrift sofort erkennbar.

40:34.410 --> 40:38.370
Das da ist ein kleines p und das da ist ein großes p.

40:38.510 --> 40:41.390
Ein großes p steht für Wahrscheinlichkeiten, ein kleines p per

40:41.390 --> 40:44.650
Konvention für den Wert einer Wahrscheinlichkeitsdichtefunktion an

40:44.650 --> 40:45.510
einer bestimmten Stelle.

40:48.450 --> 40:51.770
Normalverteilung ist halt super, weil man so empirisch feststellen

40:51.770 --> 40:55.410
kann, dass viele natürliche Prozesse so mehr oder minder

40:55.410 --> 40:57.210
normalverteilt sind.

40:57.490 --> 41:02.190
Das heißt, wenn ich jetzt irgendwie einen natürlichen Prozess mit

41:02.190 --> 41:05.290
Wahrscheinlichkeiten modellieren will, dann geht das häufig mit

41:05.290 --> 41:06.850
Normalverteilung.

41:07.670 --> 41:11.270
Verteilung der Größe in der Bevölkerung, häufig normalverteilt.

41:14.990 --> 41:18.730
Die Grundfrequenzen bei Männern oder die Grundfrequenzen bei Frauen,

41:18.770 --> 41:21.370
wenn man die jetzt separat hat, so ungefähr normalverteilt.

41:21.910 --> 41:23.470
Sie funktioniert ganz gut aus.

41:23.550 --> 41:26.350
Wenn ich also die Wahrscheinlichkeit dafür haben will, dass ein Mann

41:26.350 --> 41:33.690
eine bestimmte Grundfrequenz, eine Stimmhöhe hat, die in einem

41:33.690 --> 41:36.990
bestimmten Intervall liegt, dann kann ich das mit Hilfe der

41:36.990 --> 41:38.290
Normalverteilung machen.

41:38.290 --> 41:42.270
Ich muss halt nur entsprechend mal auf eine Menge von Trainingsdaten

41:42.270 --> 41:45.530
Mittelwert und Varianz messen.

41:46.870 --> 41:48.130
Da kommen wir zu dem nächsten.

41:48.690 --> 41:50.710
Wo kriegt man denn Mittelwert und Varianz her?

41:56.220 --> 41:57.520
Das ist die Formel, die kennt jeder.

41:57.640 --> 42:02.100
Wie kriege ich den Mittelwert von der Gauss-Glocke, wenn ich tausend

42:02.100 --> 42:07.060
Ereignisse habe, die angeblich von einem Wahrscheinlichkeitsprozess,

42:07.160 --> 42:09.520
der gemäß dieser Gauss-Glocke verteilt ist, hervor?

42:09.520 --> 42:13.900
Der Mittelwert ist einfach das arithmetische Mittel der Ereignisse.

42:14.780 --> 42:16.840
Ereignisse aufsummieren, durch Anzahl der Ereignisse teilen.

42:18.060 --> 42:23.300
Und die Varianz kriege ich einfach dadurch, indem ich jetzt die

42:23.300 --> 42:26.520
Abweichung von diesem bestimmten Mittelwert hernehme, quadriere,

42:26.680 --> 42:28.680
aufsummiere und durch Anzahl der Ereignisse teile.

42:30.720 --> 42:33.960
Der Erwartungswert bestimmt mir, wo liegt die Mitte dieser Gauss

42:33.960 --> 42:34.280
-Glocke.

42:34.880 --> 42:38.600
Die Varianz sagt mir, wie breit oder wie schmal ist die Gauss-Glocke.

42:38.600 --> 42:41.880
Und dieser Skalierungsterm, der mir die Höhe der Gauss-Glocke

42:41.880 --> 42:44.940
entsprechend skaliert vorne, dieses 1 durch Wurzel 2 Pi Sigma Quadrat,

42:45.560 --> 42:47.980
sorgt dafür, dass die Fläche unter der Gauss-Glocke, wenn ich also

42:47.980 --> 42:51.060
über alle x integriere, schön bei 1 rauskommt.

42:53.910 --> 42:55.150
Warum darf ich denn das so machen?

42:57.090 --> 43:00.250
Warum darf ich sagen, der Mittelwert ist das da und die Varianz ist

43:00.250 --> 43:00.610
das da?

43:05.100 --> 43:08.700
Gehe da jetzt einfach hin und sage, summiere die auf.

43:09.340 --> 43:14.020
Ich habe 10.000 Ereignisse, die sind angeblich von dieser Gauss-Glocke

43:14.020 --> 43:14.880
hervorgebracht worden.

43:15.000 --> 43:16.880
Von denen weiß ich, die sind aus der Gauss-Glocke hervorgehoben.

43:17.300 --> 43:19.800
Und dann werfe ich die beiden Formeln an und sage mir, das eine ist

43:19.800 --> 43:21.920
offensichtlich der Mittelwert der Gauss-Glocke und das andere ist die

43:21.920 --> 43:22.760
Varianz der Gauss-Glocke.

43:24.220 --> 43:24.580
Warum?

43:28.520 --> 43:30.420
Was für eine Logik steckt dahinter?

43:31.900 --> 43:32.920
Wie kommt man auf die Idee?

43:37.910 --> 43:40.470
Jetzt könnte man sagen, der Mittelwert ist doch ein Mittelwert und so

43:40.470 --> 43:42.950
ist der Mittelwert definiert und die Varianz ist die Varianz.

43:43.730 --> 43:46.270
Woher weiß man denn, dass in der Gauss-Glocke das der Wert für die

43:46.270 --> 43:49.070
Mittelwert ist und das der Wert für die Varianz?

43:49.630 --> 43:50.710
Per Definition so gegeben.

43:51.310 --> 43:59.990
Das ist jetzt einfach nur so eine dahin salopp gegebene Definition, wo

43:59.990 --> 44:02.230
jeder davon ausgeht, das hat sich der Herr Gauss halt schon so

44:02.230 --> 44:03.730
ausgedacht und das wird dann schon so stimmen.

44:04.310 --> 44:06.010
Es gibt aber einen Grund, warum man das so schätzen kann.

44:06.010 --> 44:09.670
Man kann mathematisch einen Grund angeben, warum es sinnvoll ist,

44:09.750 --> 44:11.530
Mittelwert und Varianz so zu schätzen.

44:15.830 --> 44:16.770
Weiß einer, warum?

44:19.250 --> 44:22.850
Dann die Frage jetzt mal im Hintergrund im Kopf behalten und mal

44:22.850 --> 44:29.410
drüber nachdenken, warum das so ist und wir kommen später noch dazu

44:29.410 --> 44:32.130
und reden dann mal darüber, warum man das überhaupt so machen kann.

44:33.510 --> 44:38.490
Weil das ist nicht notwendigerweise die korrekte Schätzung und auch

44:38.490 --> 44:40.330
nicht notwendigerweise immer die beste Schätzung.

44:41.010 --> 44:44.830
Das ist dann die beste Schätzung, wenn ich unendlich viele Daten

44:44.830 --> 44:45.110
hätte.

44:46.390 --> 44:47.770
Ich habe aber nicht unendlich viele Daten.

44:48.330 --> 44:51.010
Meistens habe ich zu wenig Daten, sehr, sehr wenig Daten.

44:51.450 --> 44:54.090
Und dann ist das nicht unbedingt notwendigerweise die perfekte

44:54.090 --> 44:56.210
Schätzung oder die beste Schätzung, die ich dafür machen kann.

44:57.850 --> 45:01.850
Aber es gibt einen Grund, es gibt ein Kriterium, wenn man das

45:01.850 --> 45:03.730
optimiert, kommt man zu der Schätzung raus.

45:04.970 --> 45:06.290
Da jetzt einfach mal drüber nachdenken.

45:06.390 --> 45:09.170
Vielleicht fällt einem ja ein paar Ideen ein, warum man das so machen

45:09.170 --> 45:09.450
könnte.

45:11.090 --> 45:15.490
Jetzt in der Spracherkennung haben wir unglücklicherweise unsere X

45:15.490 --> 45:16.630
nicht aus dem R.

45:17.830 --> 45:20.450
Wir kriegen bei der Vorverarbeitung nicht einen einzelnen Wert raus.

45:21.090 --> 45:22.450
Für jeden Frame einen einzelnen Wert.

45:22.570 --> 45:25.410
Wir kriegen für jeden Frame einen Vektor raus.

45:26.370 --> 45:32.030
Das heißt, unsere X kommen aus dem R auch rein.

45:41.630 --> 45:43.330
Was muss ich jetzt da reinschreiben?

45:45.530 --> 45:47.390
Kann ich da einen Intervall reinschreiben?

45:53.970 --> 45:58.770
Was ich da machen muss ist, dass ich da einen Bereich reinschreiben.

45:59.010 --> 46:05.870
Aus meinem Intervall wird jetzt eine Fläche, die ich nehmen muss aus

46:05.870 --> 46:06.610
diesem multidimensionalen...

46:06.610 --> 46:09.630
einen Bereich, den ich aus diesem multidimensionalen hernehme.

46:10.110 --> 46:13.630
Und über diesen Bereich wird dann entsprechend mehrdimensional

46:13.630 --> 46:14.370
integriert.

46:16.230 --> 46:20.230
Wenn ich jetzt die Gauss-Glocke hernehme und erweitere auf solche

46:20.230 --> 46:25.090
multidimensionalen Dinge, das heißt, ich habe einen Vektor XI, der

46:25.090 --> 46:29.930
habe D-Komponenten, D-Dimensionen, deshalb D-dimensional, dann

46:29.930 --> 46:31.250
verändert sich das Ganze ein bisschen.

46:32.530 --> 46:36.030
Der Mittelwert ist jetzt kein einzelner Wert mehr, sondern der

46:36.030 --> 46:37.890
Mittelwert ist jetzt auch entsprechend ein Vektor.

46:38.730 --> 46:41.770
Der Vektor definiert mir einen Punkt im Raum und das ist wieder der

46:41.770 --> 46:47.130
Punkt der Mitte meiner Gauss-Glocke ist es nicht mehr, meines

46:47.130 --> 46:51.830
Ellipsoiden, meiner Gauss-Verteilung.

46:52.630 --> 46:56.550
Und ich habe keine Varianz mehr, die mir sagt um diesen Mittelwert,

46:56.670 --> 47:00.410
wie ist das verteilt, sondern ich habe jetzt Varianz in ganz viele

47:00.410 --> 47:01.330
verschiedene Richtungen.

47:02.090 --> 47:04.970
Und dementsprechend reicht mir nicht mehr ein Wert aus, sondern in

47:04.970 --> 47:08.150
unterschiedliche Richtungen kann ich unterschiedliche Varianzen haben.

47:08.770 --> 47:15.370
Und so tritt an die Stelle des Einzelwertes Varianz eine Matrix, die

47:15.370 --> 47:17.830
sogenannte Covarianzmatrix.

47:19.010 --> 47:23.310
Und das Ganze sieht dann so aus, dass ich den Mittelwert wieder

47:23.310 --> 47:26.370
abziehe von meinem mehrdimensionalen Vektor, ich transponiere das,

47:26.950 --> 47:30.230
multipliziere das an das Inverse der Covarianzmatrix dran,

47:30.930 --> 47:38.230
multipliziere von rechts die Differenz von Mittelwert und Sample

47:38.230 --> 47:42.190
-Merkmalsvektor dran, das Ganze wieder e hoch und das Ganze dann noch

47:42.190 --> 47:46.070
nummiert wieder durch 1 durch Wurzel 2 Pi d und statt der Sigma

47:46.070 --> 47:51.050
Quadrat hat man hier dann entsprechend die Determinante der

47:51.050 --> 47:52.090
Covarianzmatrix.

47:53.810 --> 47:56.570
Auch hier kann ich die Parameter wieder schätzen.

47:57.570 --> 48:00.150
Mittelwert ist relativ einfach, den kann ich komponentenweise

48:00.150 --> 48:02.730
schätzen, indem ich einfach für jede Dimension wieder den Durchschnitt

48:02.730 --> 48:07.170
nehme von vielen Samples, kann ich da meinen Mittelwertsvektor mit

48:07.170 --> 48:07.790
schätzen.

48:08.810 --> 48:11.850
Bei der Covarianzmatrix wird es schwieriger.

48:13.530 --> 48:17.790
Das ist jetzt erstmal die Frage, was ist überhaupt eine Covarianz oder

48:17.790 --> 48:19.530
was ist die Covarianzmatrix?

48:21.170 --> 48:33.170
Die Covarianzmatrix enthält in ihren einzelnen Elementen schlicht und

48:33.170 --> 48:37.530
einfach die Covarianz der einzelnen Elemente des Zufallsvektors.

48:38.610 --> 48:42.410
Ja, super, sagt mir jetzt erstmal gar nichts.

48:42.570 --> 48:47.550
Was ist denn die Covarianz zwischen zwei einzelnen Elementen?

48:47.550 --> 48:55.750
Die Covarianz ist wiederum definiert als Differenz der i-ten Dimension

48:55.750 --> 49:03.670
minus Erwartungswert der i-ten Dimension, davon mal Differenz aus j

49:03.670 --> 49:07.530
-ter Dimension minus Erwartungswert der j-ten Dimension und von diesem

49:07.530 --> 49:09.690
Produkt wiederum den Erwartungswert genommen.

49:11.170 --> 49:14.630
Das nennt man die Covarianz zwischen zwei Dimensionen.

49:14.630 --> 49:21.930
Das heißt, ich schaue mir an, wie, wenn ich zwei Dimensionen in meinem

49:21.930 --> 49:27.090
Merkmalsvektor h nehme, wie ist deren gemeinsame Varianz zueinander.

49:27.610 --> 49:32.550
Was ist also das Produkt der Varianz in dieser einen Dimension mal der

49:32.550 --> 49:35.170
Varianz in der anderen Dimension und davon der Erwartungswert.

49:38.730 --> 49:42.690
Dementsprechend haben wir auf der Diagonalen wieder so etwas, wie ich

49:42.690 --> 49:44.110
vorher im Eindimensionalen hatte.

49:44.110 --> 49:47.670
Ich habe die Covarianz mit mir selber in der Dimension.

49:48.450 --> 49:53.830
Und das kann man einfach interpretieren als die Varianz in dieser

49:53.830 --> 49:57.030
Dimension, so ähnlich wie ich das im Eindimensionalen Fall habe.

49:58.930 --> 50:02.090
Und dementsprechend auf der Diagonalen sollte ich bei einer echten

50:02.090 --> 50:08.030
Normalverteilung auch immer Covarianzen haben, die echt größer 0 sind.

50:08.030 --> 50:10.470
Sie sind auf alle Fälle größer gleich 0.

50:10.570 --> 50:12.090
So eine Varianz kann nicht negativ sein.

50:12.450 --> 50:15.610
Aber sie sollten auf der Diagonalen auf alle Fälle immer echt größer 0

50:15.610 --> 50:15.830
sein.

50:16.490 --> 50:20.210
Was würde es denn bedeuten, wenn ich auf der Diagonalen eine Covarianz

50:20.210 --> 50:21.170
hätte, die 0 ist.

50:22.170 --> 50:25.250
Kann man sich vorstellen, gehen wir zurück im Eindimensionalen, das

50:25.250 --> 50:28.310
heißt also die Varianz in dieser Dimension ist 0.

50:28.910 --> 50:32.250
Hätte ich also nur eine Gaussglocke in dieser Dimension, dann wäre die

50:32.250 --> 50:34.890
also unendlich schmal und unendlich hoch.

50:34.890 --> 50:36.510
So ähnlich wie ein Impuls.

50:36.890 --> 50:41.750
Letztendlich ist das dann fast schon die Definition eines Dirac

50:41.750 --> 50:42.170
-Stoßes.

50:42.190 --> 50:44.390
Den könnte man ja auch über so Gaussglocken, die immer kleiner werden,

50:44.970 --> 50:45.290
annähern.

50:45.730 --> 50:50.770
Das heißt, ich hätte da irgendeine entartete Wahrscheinlichkeitsdichte

50:50.770 --> 50:54.130
-Funktion, die eine Singularität in dieser Dimension hat, weil sie in

50:54.130 --> 51:00.890
dieser Dimension unendlich schmal ist und überhaupt nicht variiert.

51:03.010 --> 51:04.150
Sie ist symmetrisch.

51:04.710 --> 51:08.610
Klar, wenn man sich das anschaut, wenn ich da x i und x j umdrehe,

51:09.310 --> 51:14.590
dann dreht sich letztendlich nur da beim Malzeichen der Wert um, da

51:14.590 --> 51:17.510
das Ganze kommutativ ist, ist natürlich auch der Erwartungswert

51:17.510 --> 51:20.810
dessen, was dahinter herauskommt, auch entsprechend wieder dasselbe.

51:20.870 --> 51:23.010
Das heißt, das ist symmetrisch.

51:24.510 --> 51:28.090
Sie ist positiv semidefiniert, das ist schon mal ganz gut, weil dann

51:28.090 --> 51:30.870
kann ich sie nämlich invertieren, weil sonst wird es schwierig, das

51:30.870 --> 51:36.110
Sigma -Minus-1 auszurechnen für die E-Funktion bei der

51:36.110 --> 51:44.410
multidimensionalen Verteilung, plus ihre Determinante ist ungleich

51:44.410 --> 51:44.650
null.

51:45.450 --> 51:48.270
Das ist auch schon mal sehr viel wert, weil ich teile nämlich beim

51:48.270 --> 51:52.490
Normierungsfaktor durch die Determinante der Kovarianzmatrix.

51:52.590 --> 51:54.250
Das heißt, die sollte auf keinen Fall null sein.

51:55.330 --> 52:00.430
Man kann sich so eine Kovarianzmatrix ein bisschen als Ellipsoid

52:00.430 --> 52:01.030
vorstellen.

52:01.670 --> 52:05.550
Bei der Gauss-Glocke, die kann man noch schön aufzeichnen, da hat man

52:05.550 --> 52:12.430
so eine Gauss-Glocke, was man jetzt hernimmt ist, man guckt sich jetzt

52:12.430 --> 52:20.030
an, die Punkte in diesem mehrdimensionalen Raum, die zum Beispiel nur

52:20.030 --> 52:27.630
einmal Kovarianz, einmal Standardabweichung, wenn man das so will,

52:28.150 --> 52:28.950
entfernt liegen.

52:29.150 --> 52:33.370
Oder besser gesagt, man guckt sich alle Werte an, die zum Beispiel den

52:33.370 --> 52:41.190
gleichen Wert produzieren, dieser mehrdimensionalen Gauss-Glocke.

52:41.190 --> 52:43.750
Wenn man sich also alle Werte anguckt, die den gleichen Wert

52:43.750 --> 52:47.770
produzieren, gegeben ein Mittelwert, dann sieht das Ganze aus wie so

52:47.770 --> 52:48.610
ein Ellipsoid.

52:51.590 --> 52:58.090
Und dieser Ellipsoid, der ist im Raum gedreht und hat gewisse

52:58.090 --> 53:00.130
Ausdehnungen in die einzelnen Dimensionen.

53:01.570 --> 53:05.530
Und die Werte auf den Eragonalen der Kovarianzmatrix, die sagen mir

53:05.530 --> 53:09.930
aus, wie lang sind die Hauptachsen dieses Ellipsoids.

53:09.930 --> 53:14.190
Also im dreidimensionalen hätte ich entsprechend drei Hauptachsen und

53:14.190 --> 53:16.970
hätte dann entsprechend die Werte in der Kovarianzmatrix sagen mir,

53:17.250 --> 53:21.650
wie sehr dehnt sich der Ellipsoid in diesen drei Dimensionen aus.

53:22.410 --> 53:26.450
Die restlichen Werte, die restlichen Werte der Kovarianzmatrix, die

53:26.450 --> 53:29.450
sagen mir, wie ist dieser Ellipsoid im Raum gedreht.

53:30.330 --> 53:34.030
In welche Richtung drehen sich diese Achsen einer bestimmten

53:34.030 --> 53:35.230
Auswertung.

53:35.230 --> 53:40.410
Und deswegen kann man sich halt entsprechend diesen Ellipsoid als

53:40.410 --> 53:44.590
Visualisierung der Kovarianzmatrix hernehmen.

53:45.750 --> 53:49.830
Entsprechend sind alle Werte außerhalb der Diagonalen der

53:49.830 --> 53:50.970
Kovarianzmatrix null.

53:51.210 --> 53:54.710
Dann heißt das, dass die Hauptachsen dieses Ellipsoiden parallel sind

53:54.710 --> 53:57.010
zu den Hauptachsen meines Koordinatensystems.

53:57.430 --> 54:00.810
Sind da Werte ungleich null, wird dieser Ellipsoid entsprechend

54:00.810 --> 54:02.270
gedreht.

54:09.020 --> 54:14.000
Jetzt ist es so, wir hatten gesagt, viele Prozesse in der Natur sind

54:14.000 --> 54:16.200
gaußverteilt, eindimensionale.

54:16.720 --> 54:19.680
Jetzt ist natürlich die Hoffnung, dass viele mehrdimensionale Prozesse

54:19.680 --> 54:22.020
vielleicht auch gaußverteilt sind.

54:22.780 --> 54:24.900
Sind sie aber leider in der Praxis nicht.

54:25.180 --> 54:29.220
Meistens sind, wenn man sich zum Beispiel die anguckt, wie sind zum

54:29.220 --> 54:33.380
Beispiel die Merkmalsvektoren eines bestimmten Phonemens verteilt im

54:33.380 --> 54:33.740
Raum.

54:33.740 --> 54:36.240
Dann sind die meistens leider nicht gaußverteilt.

54:36.740 --> 54:39.400
Kommt nicht so ein schöner Ellipsoid bei raus, den man sich dann

54:39.400 --> 54:43.780
anschauen könnte, sondern es kommt irgendwas sehr kompliziertes, sehr

54:43.780 --> 54:47.780
unebenes, sehr seltsam, stückelig zusammengesetztes raus.

54:48.500 --> 54:51.540
Das heißt, wenn man sich die anschaut, man nimmt zum Beispiel die

54:51.540 --> 54:54.880
Merkmalsvektoren eines Phonemens her, dann gehorchen die keiner

54:54.880 --> 54:59.320
schönen, einfachen Gaußverteilung oder auch irgendeiner

54:59.320 --> 55:03.520
wahrscheinlichkeitsdichte Funktion, die man so kennt, also sei es

55:03.520 --> 55:06.920
Student -Verteilung oder X-Archiv-Quadrat-Verteilung oder was auch

55:06.920 --> 55:07.060
immer.

55:07.280 --> 55:09.980
Da gibt es nichts, sondern dass es irgendetwas sehr kompliziertes.

55:11.640 --> 55:15.560
Das heißt, man müsste jetzt hier, man würde jetzt gerne hier eine

55:15.560 --> 55:20.440
Dichte -Funktion modellieren, die man beliebig in seiner Form

55:20.440 --> 55:24.640
verändern kann, um sie auf die Form der Verteilung dieser

55:24.640 --> 55:28.320
Merkmalsvektoren, die zum Beispiel zu einem Phonemen gehören,

55:28.500 --> 55:28.880
anpassen.

55:30.900 --> 55:31.860
Kann man nicht.

55:33.220 --> 55:35.640
Was man aber machen kann, man kann sich mit einem anderen

55:35.640 --> 55:38.920
mathematischen Konstrukt behelfen und das ist die sogenannte Gauß

55:38.920 --> 55:39.720
-Mischverteilung.

55:40.340 --> 55:43.340
Da ist jetzt die Idee, dass ich meine wahrscheinlichkeitsdichte

55:43.340 --> 55:47.920
Funktion zusammensetze als eine gewichtete Summe verschiedener

55:47.920 --> 55:48.700
Gaußverteilungen.

55:49.260 --> 55:51.520
Ich habe halt eine bestimmte Menge an Gaußverteilungen.

55:52.080 --> 55:54.860
Jede Gaußverteilung hat seinen eigenen Mittelwert und seine eigene

55:54.860 --> 55:58.540
Kovarianzmatrix und jede Gaußverteilung bekommt ein Gewicht.

55:59.260 --> 56:03.540
Und dann werden die Werte dieser einzelnen Gaußverteilungen gewichtet

56:03.540 --> 56:08.500
aufsummiert zum eigentlichen Wert meiner Gauß-Mischverteilung.

56:10.120 --> 56:14.800
Was muss dementsprechend für die Summe der Gewichte gelten, damit das

56:14.800 --> 56:15.320
funktioniert?

56:17.520 --> 56:25.840
Summe der Gewichte muss wieder 1 sein, damit das Integral über diese

56:25.840 --> 56:30.840
Gauß -Mixturverteilung bei Hinzunahme von normalen Gaußglocken oder

56:30.840 --> 56:33.720
multivariaten Gaußverteilungen auch wieder 1 ergibt.

56:35.260 --> 56:39.400
Und jetzt gilt das Schöne, dass man mit so einer Gauß-Mischverteilung

56:40.400 --> 56:46.680
sehr flexible, beliebige, wahrscheinlichkeitsdichte Funktionen

56:46.680 --> 56:47.380
modellieren kann.

56:47.540 --> 56:53.980
Und da gilt der Lehrsatz, wenn ich mir einen bestimmten Fehler

56:53.980 --> 57:01.340
vorgebe, also ich möchte eine Gauß-Mischverteilung haben, die maximal

57:01.340 --> 57:06.520
n -mal abweicht von meiner tatsächlichen Verteilung, die ich formieren

57:06.520 --> 57:12.180
möchte, dann kann ich das erreichen mit Hilfe einer endlichen Anzahl

57:12.180 --> 57:13.460
an Gaußglocken.

57:14.240 --> 57:18.740
Oder andersherum, ich kann jede beliebige Wahrscheinlichkeitsdichte

57:18.740 --> 57:24.620
-Funktion beliebig genau approximieren mit einer endlichen Anzahl an

57:24.620 --> 57:26.440
Gaußglocken.

57:26.780 --> 57:29.260
Diese endliche Anzahl kann natürlich sehr, sehr, sehr groß sein, je

57:29.260 --> 57:33.180
nachdem, wie genau ich das approximieren möchte.

57:33.280 --> 57:36.560
Aber wenn ich immer noch zumindest einen kleinen Fehler zulasse, dann

57:36.560 --> 57:38.800
reicht eine endliche Anzahl an Gaußglocken.

57:39.200 --> 57:41.820
In der Praxis ist es natürlich so, dass wir beschränkt sind in der

57:41.820 --> 57:44.000
Anzahl der Gaußglocken, die wir verarbeiten können und die wir

57:44.000 --> 57:44.600
schätzen können.

57:44.940 --> 57:50.000
Aber man kann mit auch schon kleinen Mengen an Gaußglocken, 12, 16, 8,

57:50.480 --> 57:55.200
relativ gut, relativ flexibel, beliebige Wahrscheinlichkeitsdichte

57:55.200 --> 58:00.100
-Funktionen approximieren, die ich nicht explizit kenne, sondern von

58:00.100 --> 58:03.020
denen ich nur weiß, hier gibt es eine Menge von Daten, die wurden von

58:03.020 --> 58:05.140
dieser Wahrscheinlichkeitsdichte-Funktion hervorgerufen.

58:05.260 --> 58:08.200
Ich habe keine Ahnung, welche grundsätzliche Form die hat, aber wenn

58:08.200 --> 58:11.680
ich eine geringe Anzahl an Gaußglocken nehme und mir da eine

58:11.680 --> 58:15.180
Gaußmischverteilung hernehme, kann ich die Parameter dieser

58:15.180 --> 58:19.400
Gaußmischverteilung so schätzen, dass der Sache doch relativ nahe

58:19.400 --> 58:19.600
kommt.

58:22.400 --> 58:26.540
In der Praxis sitzt man jetzt wieder in der Falle, dass man A nur

58:26.540 --> 58:30.740
beschränkte Rechenzeit hat und auch nur eine beschränkte Anzahl an

58:30.740 --> 58:32.300
Trainingsbeispielen.

58:33.060 --> 58:35.760
Das ist so wie immer in der Musterklassifikation.

58:37.260 --> 58:43.160
Wenn ich nur eine bestimmte Menge an Trainingsbeispielen habe, kann

58:43.160 --> 58:46.800
ich auch nur eine bestimmte Menge an Parametern noch robust schätzen.

58:48.660 --> 58:51.640
Die Menge der Parameter, die ich schätzen möchte, zum Beispiel die

58:51.640 --> 58:55.220
Menge der Parameter so einer Gaußmischverteilung, muss im Verhältnis

58:55.220 --> 59:00.460
stehen zu der Menge an Trainingsdaten, die ich habe, auf denen ich sie

59:00.460 --> 59:00.760
schätze.

59:01.620 --> 59:04.480
In der Praxis bedeutet das in der Regel, dass ich meistens immer zu

59:04.480 --> 59:05.820
wenig Trainingsdaten habe.

59:08.040 --> 59:11.560
Ich muss meistens mir immer überlegen, wo kann ich möglichst Parameter

59:11.560 --> 59:15.780
einsparen, damit ich mit den wenigen Trainingsdaten, die ich habe,

59:15.880 --> 59:18.620
diese Parameter noch halbwegs robust schätzen kann.

59:20.040 --> 59:24.320
Und deswegen arbeitet man in der Praxis sehr häufig mit diagonalen

59:24.320 --> 59:25.560
Kovarianzmatrizen.

59:26.320 --> 59:30.780
Wenn ich sage, meine Kovarianzmatrix soll nur Werte ungleich 0 auf der

59:30.780 --> 59:34.580
Diagonalen haben, dann spare ich mir sehr viele Parameter ein.

59:35.020 --> 59:37.860
Dann brauche ich plötzlich nur so viele Parameter, wie die Dimension

59:37.860 --> 59:42.640
meines Merkmalsvektors ist für die Kovarianzmatrix und die anderen

59:42.640 --> 59:44.120
spare ich mir ein.

59:44.420 --> 59:48.100
Normalerweise hätte ich so etwas wie n²½ Parameter für die

59:48.100 --> 59:51.340
Kovarianzmatrix, wenn n die Dimension meines Merkmalsvektors ist.

59:51.780 --> 59:54.100
Jetzt habe ich nur noch n Parameter.

59:55.020 --> 59:57.720
Klar, natürlich kann ich damit nicht wieder jede beliebige Form

59:57.720 --> 01:00:01.980
annähern, weil ich habe jetzt nur noch meinen Ellipsoiden, den ich

01:00:01.980 --> 01:00:04.980
zwar in seiner Art und Weise, wie er aufgeblasen wird, dieser Ballon,

01:00:05.040 --> 01:00:07.920
in die einzelnen Dimensionen, kann ich zwar beeinflussen, aber wie der

01:00:07.920 --> 01:00:10.160
gedreht im Raum liegt, kann ich halt nicht mehr beeinflussen.

01:00:11.040 --> 01:00:14.040
Das ist halt wieder der Nachteil, den ich in Kauf nehmen muss.

01:00:15.340 --> 01:00:20.180
Und dann der zweite Trick, den man häufig macht, ist, dass man nicht

01:00:20.180 --> 01:00:23.160
mit Wahrscheinlichkeiten rechnet, oder auch Werten aus der

01:00:23.160 --> 01:00:27.520
Wahrscheinlichkeitsdichte -Funktion, sondern dass man häufig mit

01:00:27.520 --> 01:00:28.880
logarithmierten Werten rechnet.

01:00:29.320 --> 01:00:35.360
Wenn ich jetzt nur ne einfache Multivariate-Gauss-Dichte hernehme,

01:00:35.440 --> 01:00:36.880
dann funktioniert das relativ gut.

01:00:36.940 --> 01:00:39.860
Die kann ich logarithmieren, dann fällt die E-Funktion weg.

01:00:40.800 --> 01:00:43.840
E-Funktion fällt weg ist schon mal super, weil E-Funktion ausrechnen,

01:00:43.880 --> 01:00:45.540
das ist sehr, sehr, sehr, sehr, sehr aufwendig.

01:00:46.480 --> 01:00:48.640
Das muss man ja irgendwie mit irgendwelchen numerischen Verfahren,

01:00:48.740 --> 01:00:53.220
Tälereien, Expansionen oder weiß der Kugel was, im Rechner simulieren.

01:00:53.360 --> 01:00:55.560
Der Rechner kann nur addieren und multiplizieren und ein bisschen

01:00:55.560 --> 01:00:55.980
dividieren.

01:00:56.420 --> 01:00:58.520
Und damit muss ich jetzt plötzlich ne E-Funktion ausrechnen.

01:00:58.580 --> 01:01:00.380
Da kann man sich vorstellen, dass das sehr, sehr viele Rechenschritte

01:01:00.380 --> 01:01:01.080
befördert.

01:01:01.540 --> 01:01:03.760
Dadurch, dass ich sage, okay, mich interessiert nicht mehr der Wert

01:01:03.760 --> 01:01:09.300
der Gauss-Glocke oder der Multivariaten-Gauss-Verteilung, mich

01:01:09.300 --> 01:01:14.020
interessiert nur noch der Logarithmus des Wertes, super, E-Funktion

01:01:14.020 --> 01:01:14.500
fällt weg.

01:01:16.180 --> 01:01:19.840
Meistens interessiert mich ja auch häufig gar nicht der tatsächliche

01:01:19.840 --> 01:01:22.460
Wert der Wahrscheinlichkeitsdichte-Funktion, oder der tatsächliche

01:01:22.460 --> 01:01:23.040
Wert der Wahrscheinlichkeit.

01:01:24.020 --> 01:01:26.720
Meistens will ich ja nur wissen, wenn ich jetzt mehrere Muster habe,

01:01:27.240 --> 01:01:29.220
welches ist das Muster mit der höchsten Wahrscheinlichkeit.

01:01:30.440 --> 01:01:32.640
Der Logarithmus ist eine streng monotone Funktion.

01:01:33.340 --> 01:01:37.920
Das heißt, wenn etwas den höchsten Wert hat in der Wahrscheinlichkeit,

01:01:38.380 --> 01:01:40.600
dann hat es auch den höchsten Wert bei den logarithmierten

01:01:40.600 --> 01:01:43.600
Wahrscheinlichkeiten, weil der Logarithmus halt monoton ist.

01:01:44.120 --> 01:01:46.780
Das heißt, um zu bestimmen, welches ist der Wert mit der höchsten

01:01:46.780 --> 01:01:49.160
Wahrscheinlichkeit, reicht es herauszufinden, welches ist der Wert mit

01:01:49.160 --> 01:01:51.580
der höchsten logarithmierten Wahrscheinlichkeit, brauche ich die E

01:01:51.580 --> 01:01:52.680
-Funktion nicht mehr auszurechnen.

01:01:52.680 --> 01:01:54.320
Alles noch im grünen Bereich.

01:01:55.680 --> 01:01:58.660
Bei Gauss-Mixtur-Verteilung funktioniert das leider nicht mehr.

01:02:00.240 --> 01:02:02.300
Logarithmus von E-Funktionen, klar, super.

01:02:02.860 --> 01:02:04.600
Einfach oben, was im Exponenten steht.

01:02:05.140 --> 01:02:06.940
Logarithmus von a plus b ist gleich?

01:02:10.310 --> 01:02:12.610
Ja, pfff, das ist eine intelligentere Antwort.

01:02:14.590 --> 01:02:16.210
Was ist Logarithmus von a mal b?

01:02:19.680 --> 01:02:21.580
Was ist Logarithmus a durch b?

01:02:23.240 --> 01:02:24.920
Was ist Logarithmus a hoch b?

01:02:26.460 --> 01:02:27.740
b mal Logarithmus a.

01:02:27.820 --> 01:02:29.040
Was ist Logarithmus a plus b?

01:02:30.740 --> 01:02:31.420
Weiß keiner.

01:02:32.120 --> 01:02:32.420
Blöd.

01:02:32.900 --> 01:02:34.120
Kann man nicht ausrechnen.

01:02:34.240 --> 01:02:37.200
Dementsprechend kann man auch nicht vernünftig den Logarithmus einer

01:02:37.200 --> 01:02:39.060
Gauss -Mixtur-Verteilung ausrechnen.

01:02:39.140 --> 01:02:42.120
Die einzige Möglichkeit, den Logarithmus einer Gauss-Mixtur-Verteilung

01:02:42.120 --> 01:02:45.440
auszurechnen, ist, die Gauss-Mixtur-Verteilung auszurechnen und danach

01:02:45.440 --> 01:02:46.420
den Logarithmus zu ziehen.

01:02:46.880 --> 01:02:51.260
Das heißt, ich muss da n mal die E-Funktion berechnen, wenn ich n

01:02:51.260 --> 01:02:53.780
Gauss -Glocken in meiner Gauss-Mixtur-Verteilung habe.

01:02:53.780 --> 01:02:57.120
Ich muss also n mal i hoch irgendwas rechnen und dann darf ich den

01:02:57.120 --> 01:02:57.760
Logarithmus ziehen.

01:02:58.020 --> 01:02:59.280
Das ist nicht sonderlich effizient.

01:02:59.860 --> 01:03:01.780
Das bringt uns in Rechenschwierigkeiten.

01:03:03.360 --> 01:03:05.040
Warum will ich dann überhaupt den Logarithmus ziehen?

01:03:06.940 --> 01:03:08.980
Was ist denn das Blöde, wenn ich den Logarithmus ziehen möchte?

01:03:19.250 --> 01:03:22.790
Ich laufe da relativ schnell in die numerischen Ungenauigkeiten rein.

01:03:22.790 --> 01:03:24.590
Wenn man sich so anschaut, wie z.B.

01:03:25.290 --> 01:03:30.870
eine Gleitkommazahl nach IIII-Standard den Zahlenraum auflöst, dann

01:03:30.870 --> 01:03:33.230
wird man feststellen, dass wenn man in die ganz kleinen Zahlen

01:03:33.230 --> 01:03:36.870
reingeht, man ganz schnell ganz große Lücken hat, die nicht vernünftig

01:03:36.870 --> 01:03:37.650
aufgelöst werden.

01:03:38.410 --> 01:03:40.850
Und häufig ist es so, bei Wahrscheinlichkeiten...

01:03:40.850 --> 01:03:46.810
Was ist denn häufig der Fall, wenn man so an zeitliche Prozesse denkt?

01:03:47.910 --> 01:03:49.230
Addiert man da Wahrscheinlichkeiten?

01:03:49.370 --> 01:03:50.910
Multipliziert man da Wahrscheinlichkeiten?

01:03:50.910 --> 01:03:54.470
Man multipliziert da häufig Wahrscheinlichkeiten, nummerweise.

01:03:55.050 --> 01:03:58.830
Und wenn ich zwei kleine Zahlen kleiner eins miteinander

01:03:58.830 --> 01:04:01.450
multipliziere, kommt da eine größere oder eine kleinere Zahl raus.

01:04:01.950 --> 01:04:03.390
Da kommt eine deutlich kleinere Zahl raus.

01:04:03.470 --> 01:04:05.630
Jetzt mache ich das tausendmal, dann kommt da eine ganz, ganz, ganz,

01:04:05.630 --> 01:04:10.710
ganz kleine Zahl raus, die ruckizucki in der Auflösung meiner

01:04:10.710 --> 01:04:13.870
Doppelzahl, die ich da habe, wegfällt.

01:04:15.570 --> 01:04:18.190
Logarithmus A mal B ist Logarithmus A plus Logarithmus B.

01:04:18.190 --> 01:04:20.470
Durch Logarithmus kriege ich schon mal das Problem dieser ganz, ganz

01:04:20.470 --> 01:04:21.150
kleinen Zahlen weg.

01:04:21.190 --> 01:04:23.550
Ich komme wieder in viel größere Zahlenbereiche, die besser aufgelöst

01:04:23.550 --> 01:04:23.810
werden.

01:04:24.150 --> 01:04:27.390
Plus, die multipliziere ich jetzt nicht miteinander, sodass die

01:04:27.390 --> 01:04:30.070
irgendwie ins Unendliche wachsen, sondern die addiere ich nur noch.

01:04:33.690 --> 01:04:37.670
Alles numerisch deutlich besser, wenn ich das im Logarithmus mache.

01:04:38.070 --> 01:04:40.490
Deswegen, auch wenn ich mit Gauss-Mixtur-Verteilung rechne,

01:04:40.490 --> 01:04:43.270
logarithmetiere ich die trotzdem hinterher, damit ich nicht in

01:04:43.270 --> 01:04:48.910
irgendwelche numerischen Instabilitäten hinterein laufe.

01:04:50.110 --> 01:04:50.730
Gut.

01:04:51.510 --> 01:04:54.910
Das ist jetzt erstmal nur so eine einfache Wiederholung der Gauss

01:04:54.910 --> 01:04:55.810
-Mixtur -Verteilung.

01:04:56.390 --> 01:04:58.770
Die werden wir noch sehr häufig brauchen.

01:05:01.190 --> 01:05:06.350
Und jetzt kommen wir in etwas rein, wo wir uns noch im Dunstfeld des

01:05:06.350 --> 01:05:08.190
DTW ein bisschen bewegen.

01:05:10.510 --> 01:05:16.270
Aber auch langsam den gleitenden Übergang machen zu den stochastischen

01:05:16.270 --> 01:05:19.070
Fahrverfahren bei der Spracherkennung.

01:05:20.630 --> 01:05:24.750
Und wir machen das so, weil das in der Historie auch so gemacht wurde.

01:05:25.110 --> 01:05:28.090
Man ist ja irgendwie auch zu dem hingekommen, was man so macht.

01:05:28.570 --> 01:05:31.290
Und das liegt auch daran, dass man in der Vergangenheit so angefangen

01:05:31.290 --> 01:05:31.430
hat.

01:05:31.510 --> 01:05:34.050
Erst hat man mit DTW gemacht, dann hat man sich überlegt, was kann man

01:05:34.050 --> 01:05:35.310
denn da mit Wahrscheinlichkeiten machen.

01:05:35.310 --> 01:05:39.070
Ja, das Distanzmaß sollte man irgendwie mit Wahrscheinlichkeiten

01:05:39.070 --> 01:05:39.310
machen.

01:05:39.430 --> 01:05:42.210
Das kann man gut mit Gauss-Mixtur-Verteilung machen.

01:05:42.710 --> 01:05:45.390
Und dann ist man irgendwie gekommen, ja, aber wenn ich das mache, dann

01:05:45.390 --> 01:05:46.430
ist das doch äquivalent dazu.

01:05:46.510 --> 01:05:48.470
Und ist dann zu den mehr komplizierten Verfahren gekommen.

01:05:50.390 --> 01:05:53.250
Und gleichzeitig hatte man immer das Problem, wenn man was mit

01:05:53.250 --> 01:05:55.770
Spracherkennung gemacht hat, immer die Rechner bis zum Geht-Nicht-Mehr

01:05:55.770 --> 01:05:56.510
herausgefordert.

01:05:56.910 --> 01:05:59.490
Immer die aktuelle Rechner-Generation, die man zur Verfügung hatte,

01:05:59.930 --> 01:06:02.470
wurde bis zum Geht-Nicht-Mehr gequält.

01:06:02.470 --> 01:06:04.670
Das heißt, man hatte auch immer das Problem, dass man sich überlegen

01:06:04.670 --> 01:06:06.990
musste, wie kann ich den ganzen Mist ja noch effizient machen auf der

01:06:06.990 --> 01:06:08.170
aktuellen Rechner-Architektur.

01:06:09.230 --> 01:06:11.970
Und eine Möglichkeit, die man da machen konnte, war halt die Vektor

01:06:11.970 --> 01:06:12.530
-Quantisierung.

01:06:16.510 --> 01:06:20.690
Hier habe ich Merkmale, die können beliebige Vektoren aus dem R hoch N

01:06:20.690 --> 01:06:20.990
sein.

01:06:21.510 --> 01:06:22.910
Und mit denen muss ich dann rechnen.

01:06:23.990 --> 01:06:27.650
Manchmal reicht es aber aus, wenn ich gar nicht mal den R hoch N

01:06:27.650 --> 01:06:30.550
beliebig überabzählbar genau ausnutze.

01:06:30.990 --> 01:06:33.090
Das mache ich ja bei meinem Zeitsignal auch nicht.

01:06:33.190 --> 01:06:36.450
Ich habe ja eh schon eine Quantisierung hinter mir, wenn ich das

01:06:36.450 --> 01:06:37.990
Signal abtaste.

01:06:38.830 --> 01:06:42.750
Dementsprechend kann man auch diesen Merkmalsraum quantisieren und den

01:06:42.750 --> 01:06:49.550
in abzählbare, endlich viele Quantisierungsstufen einteilen.

01:06:51.150 --> 01:06:53.450
Also bei Quantisierung macht man das schon, dann macht man das im

01:06:53.450 --> 01:06:53.660
Eindimensionalen.

01:06:54.270 --> 01:06:56.470
Dann werden die Werte halt quantisiert in so Quantisierungsstufen.

01:06:57.070 --> 01:06:59.610
Jetzt habe ich hier einen mehrdimensionalen Raum.

01:06:59.610 --> 01:07:02.870
Da habe ich dann nicht mehr so einzelne Quantisierungsstufen, sondern

01:07:02.870 --> 01:07:06.170
an die Stelle der Quantisierungsstufe treten sogenannte

01:07:06.170 --> 01:07:07.090
Referenzvektoren.

01:07:08.050 --> 01:07:12.010
Ich sage also, ein bestimmter Bereich, der um so einen Vektor drum

01:07:12.010 --> 01:07:15.750
herum liegt, der wird alles abgebildet auf diesen Vektor, der ihn

01:07:15.750 --> 01:07:17.690
repräsentiert, den Repräsentantenvektor.

01:07:18.790 --> 01:07:22.990
Das nennt man dann halt die Quantisierung im Mehrdimensionalen.

01:07:24.110 --> 01:07:27.290
Und das hat dann einen Riesenvorteil, wenn ich nur so eine kleine

01:07:27.290 --> 01:07:31.470
begrenzte Menge an Repräsentantenindexvektoren habe.

01:07:31.990 --> 01:07:36.470
Die erste Möglichkeit ist immer, ich kann Rechenzeit gegen Speicher

01:07:36.470 --> 01:07:36.950
tauschen.

01:07:38.230 --> 01:07:42.090
Wenn ich also eine Gauss-Mixturverteilung ausrechnen will, dann muss

01:07:42.090 --> 01:07:44.290
ich halt da viele E-Funktionen machen und die dann gewichtet

01:07:44.290 --> 01:07:44.890
aufsummieren.

01:07:45.510 --> 01:07:49.590
Jetzt weiß ich aber, es kann nur ein Wert aus einer vorherbekannten

01:07:49.590 --> 01:07:53.250
begrenzten Anzahl an möglichen Vektoren überhaupt vorkommen.

01:07:53.650 --> 01:07:56.330
Und dann kann ich den Trick machen, ich berechne mir für alle

01:07:56.330 --> 01:08:01.150
möglichen Quantisierungsstufen den Wert dieser Gauss-Mixturverteilung

01:08:01.150 --> 01:08:06.090
vor, speicher den ab und später, wenn ich die eigentlichen Werte haben

01:08:06.090 --> 01:08:08.690
will, dann gucke ich nur noch in der Tabelle nach, was war denn der

01:08:08.690 --> 01:08:10.650
Wert, den ich vorher mal in Ruhe ausgerechnet habe.

01:08:11.150 --> 01:08:13.570
Auf die Art und Weise tausche ich halt Speicher gegen Rechenzeit.

01:08:13.570 --> 01:08:15.790
Ich brauche zwar mehr Speicher, weil ich den ganzen Kram abspeichern

01:08:15.790 --> 01:08:18.990
muss, aber ich muss hinterher die CPU kaum noch quälen.

01:08:19.470 --> 01:08:20.630
Und das kann ich alles abspeichern.

01:08:20.730 --> 01:08:23.050
Das können Distanzen sein, Wahrscheinlichkeiten etc.

01:08:23.650 --> 01:08:27.650
Und sowas ist durchaus was Gutes, wenn ich wieder mit kleinen Geräten

01:08:27.650 --> 01:08:31.530
arbeite, wo ich relativ wenig Rechenkapazität habe.

01:08:31.630 --> 01:08:35.550
Da waren bis vor kurzem Mobiltelefone immer noch ein gutes Beispiel.

01:08:36.010 --> 01:08:40.110
Der Fortschritt der letzten paar Jahre macht das Argument jetzt ein

01:08:40.110 --> 01:08:42.170
bisschen weniger wichtig.

01:08:44.090 --> 01:08:45.710
Sie sind alle noch alt genug.

01:08:45.810 --> 01:08:49.390
Sie wissen vielleicht noch, dass vor drei, vier Jahren hatte selbst

01:08:49.390 --> 01:08:54.050
das tollste Smartphone keine FPU, keine Gleitkommazahleinheit.

01:08:54.950 --> 01:08:57.970
Bis vor ein paar Jahren haben die ganzen Prozessoren, die in so

01:08:57.970 --> 01:09:02.510
Smartphones drin waren, den ganzen Rotz noch in Ganzzahlarithmetik

01:09:02.510 --> 01:09:02.870
gerechnet.

01:09:02.870 --> 01:09:06.110
Das heißt, wenn man dann irgendwelche Gleitzahlen miteinander

01:09:06.110 --> 01:09:09.470
addieren, multiplizieren wollte, musste man das Ganze in

01:09:09.470 --> 01:09:15.110
Ganzzahlarithmetik simulieren, weil es elendig lange gedauert hat.

01:09:15.330 --> 01:09:19.530
Und auf solchen Architekturen ist es gut, wenn man Sachen vorberechnen

01:09:19.530 --> 01:09:21.190
kann und die nur danach schlagen muss.

01:09:23.090 --> 01:09:26.810
Jetzt ist natürlich wieder die Frage, wie kann ich sowas quantisieren?

01:09:29.830 --> 01:09:33.290
Angenommen, ich habe schon solche Referenzvektoren gegeben, n

01:09:33.290 --> 01:09:37.490
Repräsentanten, n Repräsentationsvektoren, dann ist es relativ einfach

01:09:37.490 --> 01:09:40.450
für jeden beliebigen Vektor x, finde ich die entsprechende

01:09:40.450 --> 01:09:44.210
Quantisierungsstufe, indem ich gemäß eines bestimmten Distanzmaßes

01:09:44.210 --> 01:09:47.890
einfach den Repräsentanten suche, der nach diesem Distanzmaß am

01:09:47.890 --> 01:09:48.770
nächsten drankommt.

01:09:49.710 --> 01:09:51.910
Und dann kommt es halt zu Quantisierungsfehlern.

01:09:52.510 --> 01:09:55.570
Und jetzt ist halt die Frage, wie finde ich denn diese Repräsentanten?

01:09:56.350 --> 01:09:58.930
Bei der Quantisierung machen wir es uns relativ einfach.

01:09:59.050 --> 01:10:04.210
Wir sagen, wir haben äquidistante Stufen, wenn wir Werte quantisieren.

01:10:04.630 --> 01:10:06.970
Na gut, jetzt hier im Mehrdimensionalen hätte man halt ein

01:10:06.970 --> 01:10:12.890
äquidistantes Gitter von Repräsentanten, mit denen könnte man dann

01:10:12.890 --> 01:10:14.930
diese Quantisierung, Digitalisierung vornehmen.

01:10:17.210 --> 01:10:21.850
Tatsächlich ist es aber so, dass häufig die Werte, die man da

01:10:21.850 --> 01:10:25.010
rausbekommt, zum Beispiel aus der Vorverarbeitung, dass die nicht

01:10:25.010 --> 01:10:28.850
gleich verteilt irgendwie im Raum liegen, sondern da gibt es bestimmte

01:10:28.850 --> 01:10:31.150
Bereiche, da tummeln sich sehr viele Werte und es gibt bestimmte

01:10:31.150 --> 01:10:33.870
Bereiche, die sehen nie einen Wert und bestimmte Bereiche, die sehen

01:10:33.870 --> 01:10:35.010
nur sehr selten einen Wert.

01:10:35.450 --> 01:10:38.790
Jetzt macht es ja wenig Sinn, die Bereiche, wo eh nie was passiert,

01:10:39.350 --> 01:10:43.030
die genauso genau und super mit einem gleich verteilten Gitter

01:10:43.030 --> 01:10:46.190
aufzulösen, wie die Bereiche, in denen sich sehr viele Vektoren

01:10:46.190 --> 01:10:47.270
erfahrungsgemäß tummeln.

01:10:47.390 --> 01:10:49.990
Sondern ich würde gerne die Bereiche, wo sehr viele Vektoren sind,

01:10:50.390 --> 01:10:54.970
höher auflösen als die Bereiche, wo wenig passiert, um so auf die Art

01:10:54.970 --> 01:10:59.370
und Weise den akkumulierten Quantisierungsfehler möglichst gering zu

01:10:59.370 --> 01:10:59.630
halten.

01:11:01.530 --> 01:11:05.130
Und wie man jetzt zu vernünftigen Repräsentanten kommt, hängt jetzt

01:11:05.130 --> 01:11:09.310
auch sehr stark davon ab, welches Distanzmaß man verwendet.

01:11:11.350 --> 01:11:15.070
Das einfachste Distanzmaß, das man kennt, ist die euklidische Distanz.

01:11:15.930 --> 01:11:19.130
Und wenn man die euklidische Distanz nimmt, dann kommt man zu diesen

01:11:19.130 --> 01:11:20.130
Vorurneuregionen.

01:11:21.570 --> 01:11:25.110
Jetzt habe ich zum Beispiel so verschiedene Repräsentanten, nehme die

01:11:25.110 --> 01:11:28.870
euklidische Distanz her und dann gibt es diese Bereiche, die durch

01:11:28.870 --> 01:11:33.370
diese Trennlinien, die mir sagen, welche Punkte sind denn jetzt gerade

01:11:33.370 --> 01:11:37.190
noch equidistant zwischen den nächstgelegenen Repräsentanten, kommt zu

01:11:37.190 --> 01:11:41.590
diesen Trennlinien, die mir diese Vorurneuregionen aufspannen und

01:11:41.590 --> 01:11:46.290
jeder Vektor, der da reinfällt, der wird dann entsprechend auf den

01:11:46.290 --> 01:11:51.670
Repräsentanten dieser Vorurneuregionen gemappt.

01:11:53.250 --> 01:11:59.110
Und das Bild hier soll jetzt ein bisschen was darstellen, wo wir ein

01:11:59.110 --> 01:12:02.290
Problem bekommen mit dieser euklidischen Distanz.

01:12:03.270 --> 01:12:06.490
Wenn wir uns jetzt dieses Bild anschauen, dann hat man da so

01:12:06.490 --> 01:12:09.150
Repräsentanten liegen und wir gehen mal davon aus, dass die

01:12:09.150 --> 01:12:12.950
Repräsentanten, die man da reingelegt hat, auch repräsentativ sind für

01:12:12.950 --> 01:12:15.250
die Merkmalsvektoren, die man hinterher sehen wird.

01:12:18.490 --> 01:12:22.430
Das X, das da eingezeichnet wird, das wird da in die linke Hälfte

01:12:22.430 --> 01:12:24.030
reingetan.

01:12:24.190 --> 01:12:27.450
Dieses X gehört in diese Vorurneuregion, gehört zu diesen

01:12:27.450 --> 01:12:28.210
Repräsentanten.

01:12:28.410 --> 01:12:30.910
Das heißt, dieser Repräsentant wird genommen, um das X zu

01:12:30.910 --> 01:12:31.630
repräsentieren.

01:12:32.450 --> 01:12:38.910
Wenn wir da als Menschen drauf gucken, finden wir das, vom Gefühl her

01:12:38.910 --> 01:12:40.470
würden wir sagen, nee, das passt nicht.

01:12:41.110 --> 01:12:45.870
Ich habe hier offensichtlich eine Region, da liegen die Vektoren alle

01:12:45.870 --> 01:12:47.170
sehr dicht nah beieinander.

01:12:47.790 --> 01:12:49.110
Da ist keine große Varianz.

01:12:49.850 --> 01:12:52.990
Im Inneren der Bereich von so einem Repräsentanten, der da im Inneren

01:12:52.990 --> 01:12:55.070
liegt, der denkt nur einen kleinen Bereich ab.

01:12:55.730 --> 01:12:59.230
Aber die Repräsentanten, die jetzt gerade an der Grenze zu diesem

01:12:59.230 --> 01:13:02.610
kompakten, kuscheligen Bereich da liegen, die decken jetzt einen

01:13:02.610 --> 01:13:06.170
Riesenbereich ab, obwohl sie ja eigentlich von der Art her eher so

01:13:06.170 --> 01:13:08.290
sein sollen, wie die, die in der Inneren dieser Gruppe liegen.

01:13:09.370 --> 01:13:12.850
Und da rechts habe ich Repräsentanten, die liegen deutlich weiter

01:13:12.850 --> 01:13:13.930
auseinander entfernt.

01:13:15.050 --> 01:13:18.510
Von denen akzeptiere ich es, dass sie einen deutlich größeren Bereich

01:13:18.510 --> 01:13:19.510
abdecken.

01:13:20.390 --> 01:13:23.550
Und jetzt habe ich diesen Repräsentanten, der wird auf so einen

01:13:23.550 --> 01:13:26.950
abgedeckt, von dem ich eigentlich denken würde, nee, der soll

01:13:26.950 --> 01:13:28.190
eigentlich nur einen kleinen Bereich abdecken.

01:13:28.370 --> 01:13:29.890
Das sind Sachen, die liegen eng zusammen.

01:13:30.470 --> 01:13:33.850
Der wäre doch viel besser hier aufgehoben, weil dieser hier, der deckt

01:13:33.850 --> 01:13:37.110
ja auch allgemein von der Natur her, wie die da aufgespannt sind,

01:13:37.170 --> 01:13:38.390
einen viel größeren Bereich ab.

01:13:38.390 --> 01:13:44.070
Wir als Menschen würden eigentlich vom Gefühl her sagen, wenn ich

01:13:44.070 --> 01:13:47.550
dieses X quantisiere, dann soll das doch bitte schön weiter nach

01:13:47.550 --> 01:13:51.390
rechts kommen und nicht da links zu denen dazu.

01:13:52.850 --> 01:13:56.970
Und solange ich die euklinische Distanz wähle, ist es völlig egal, wie

01:13:56.970 --> 01:14:00.170
ich mir meine Repräsentanten da reinlege, das funktioniert nicht, das

01:14:00.170 --> 01:14:01.190
kriege ich nicht vernünftig hin.

01:14:01.190 --> 01:14:07.150
Ich kann nicht dem beibringen, dem Repräsentanten, pass auf, du decke

01:14:07.150 --> 01:14:09.810
nur einen kleinen Bereich ab und die größeren Bereiche, das sollen

01:14:09.810 --> 01:14:13.370
andere Repräsentanten machen, die eher aus einer Region sind, wo große

01:14:13.370 --> 01:14:15.050
Bereiche da sind.

01:14:15.490 --> 01:14:20.310
Das verbietet mir die euklinische Distanz, die euklinische Distanz

01:14:20.310 --> 01:14:21.750
kann das nicht hergeben.

01:14:22.790 --> 01:14:26.730
Aber dafür gibt es glücklicherweise eine andere Distanz.

01:14:27.370 --> 01:14:33.690
Und dieses Distanzmaß wird parametrisiert mithilfe einer Varianz.

01:14:34.250 --> 01:14:37.730
Ich gebe jetzt diesen einzelnen Repräsentanten noch eine Information

01:14:37.730 --> 01:14:40.770
mit, pass auf, du liegst in einem Bereich mit sehr hoher Varianz,

01:14:41.590 --> 01:14:45.330
deine Werte, die zu dir gehören, die streuen sehr weit im Raum, oder

01:14:45.330 --> 01:14:48.110
du liegst in einem Bereich mit niedriger Varianz, die Werte, die zu

01:14:48.110 --> 01:14:51.090
dir gehören sollen, die streuen halt nicht so stark.

01:14:53.090 --> 01:14:56.550
Diese Werte muss man natürlich auch auf der Trainingsmenge schätzen.

01:14:56.810 --> 01:14:59.930
Ich kann also auf der Trainingsmenge nicht nur schätzen, wo liegen

01:14:59.930 --> 01:15:02.950
jetzt die Repräsentanten selber, sondern ich muss für jeden

01:15:02.950 --> 01:15:06.610
Repräsentanten noch schätzen, was ist denn so die Varianz, die zu dir

01:15:06.610 --> 01:15:06.890
gehört.

01:15:07.730 --> 01:15:12.090
Und das kann man mit der sogenannten Mahanalobes Distanz machen.

01:15:15.890 --> 01:15:18.630
Und jetzt ist die Frage, woran erinnert das denn?

01:15:20.470 --> 01:15:21.170
Was ist das?

01:15:22.550 --> 01:15:24.470
Das ist ganz genau eine Normalverteilung.

01:15:24.610 --> 01:15:28.490
Ich habe einen Repräsentanten, das ist mein Mittelwert, und um diesen

01:15:28.490 --> 01:15:29.850
Repräsentanten streut es.

01:15:30.530 --> 01:15:32.250
Das ist die Varianz meiner Normalverteilung.

01:15:33.190 --> 01:15:36.450
Das heißt, ich habe jetzt also hier ein Distanzmaß, das wir in

01:15:36.450 --> 01:15:38.070
Wirklichkeit schon kennen.

01:15:44.480 --> 01:15:46.880
Das ist nämlich das hier.

01:15:48.000 --> 01:15:51.420
Dieser Exponent aus der E-Funktion einer multivarianten Gauss

01:15:51.420 --> 01:15:55.100
-Verteilung, den nennt man die Mahanalobes Distanz.

01:15:56.340 --> 01:16:02.420
Der sorgt dafür, wie weit ist ein Wert von einem Repräsentanten

01:16:02.420 --> 01:16:06.900
entfernt, unter Berücksichtigung, dass es um diesen Repräsentanten in

01:16:06.900 --> 01:16:09.280
unterschiedlichen Dimensionen unterschiedlich stark streut.

01:16:09.280 --> 01:16:11.000
Und da kommt ein Wert raus.

01:16:11.420 --> 01:16:15.080
Und dieser Wert ist ein Distanzmaß.

01:16:26.930 --> 01:16:31.130
Jetzt ist halt immer noch die Frage, ich kann mit unterschiedlichen

01:16:31.130 --> 01:16:34.430
Distanzmaßen, gegeben meine Repräsentanten, so eine

01:16:34.430 --> 01:16:35.870
Vektorquantisierung durchführen.

01:16:36.450 --> 01:16:38.550
Es bleibt immer noch das Problem, wo kriege ich denn meine

01:16:38.550 --> 01:16:46.450
Repräsentanten her und wo kriege ich zum Beispiel die Varianzen her.

01:16:48.130 --> 01:16:50.030
Plus, ich habe noch ein anderes Problem.

01:16:53.110 --> 01:16:56.690
Ich habe bisher immer einen Repräsentanten und gucke, welches ist der

01:16:56.690 --> 01:16:59.650
Repräsentant, der am nächsten dran liegt und auf den bilde ich ab.

01:17:00.350 --> 01:17:03.190
Und wenn ich jetzt beim Schätzen der Repräsentanten Ausreißer in

01:17:03.190 --> 01:17:07.850
meinen Trainingsdaten habe, dann kann es sein, dass ich da komische

01:17:07.850 --> 01:17:11.050
Repräsentanten bekomme, die diese Ausreißer abdecken.

01:17:11.630 --> 01:17:14.950
Ich habe also irgendwo einen Ausreißer, der Messfehler, Rauschen auf

01:17:14.950 --> 01:17:18.810
der Leitung, der Hiwi, der den Laser bedienen sollte zum Messen, hat

01:17:18.810 --> 01:17:19.970
gegen den Laser getreten.

01:17:20.090 --> 01:17:20.490
Was weiß ich.

01:17:20.530 --> 01:17:23.790
Was halt immer so passiert, da hat es so Messwerte, die liegen

01:17:23.790 --> 01:17:27.670
irgendwo außerhalb und wenn ich jetzt irgendwie Equidistanz oder so

01:17:27.670 --> 01:17:31.990
quantisiere, dann entscheidet mein Verfahren, okay, da muss ein

01:17:31.990 --> 01:17:32.750
Repräsentant hin.

01:17:33.750 --> 01:17:36.650
Und dann habe ich plötzlich Repräsentanten an irgendwelchen Stellen

01:17:36.650 --> 01:17:39.190
liegen, wo die im Gotteswillen eigentlich gar nicht hingehören.

01:17:39.190 --> 01:17:42.050
Und so ein einzelner Ausreißer, einige wenige Ausreißer können mir

01:17:42.050 --> 01:17:44.790
dann ziemlich viel hinterher beim Quantisieren kaputt machen.

01:17:45.830 --> 01:17:49.030
Und was man dagegen machen kann ist, dass man statt mit einem

01:17:49.030 --> 01:17:51.630
Repräsentanten mit mehreren Repräsentanten arbeitet.

01:17:52.970 --> 01:17:56.910
Und dann kommt man halt zu diesem k-Nächsten-Nachbar-Verfahren.

01:17:57.370 --> 01:18:01.090
Und beim k-Nächsten-Nachbar-Verfahren macht man das halt so, für jeden

01:18:01.090 --> 01:18:07.150
Wert x hier suche ich jetzt die n am nächsten gelegenen Repräsentanten

01:18:07.150 --> 01:18:07.450
aus.

01:18:08.150 --> 01:18:10.870
Hier sei n a 6.

01:18:11.370 --> 01:18:14.790
Also zu dem x habe ich nach einem Distanzmaß die 6 am nächsten

01:18:14.790 --> 01:18:17.210
gelegenen Repräsentanten rausgesucht.

01:18:18.470 --> 01:18:23.710
Da sind dreimal Quadrate drunter, einmal ein Viereck und zweimal ein

01:18:23.710 --> 01:18:24.050
Kreis.

01:18:24.430 --> 01:18:27.610
Also die Dreiecke haben gewonnen, also ist der hier offensichtlich

01:18:27.610 --> 01:18:28.670
auch ein Dreieck.

01:18:32.330 --> 01:18:36.190
Das bedingt halt, dass ich für jede Klasse, auf die ich hinterher

01:18:36.190 --> 01:18:40.010
quantisieren möchte, auch mehrere Repräsentanten habe.

01:18:43.320 --> 01:18:47.660
Und in der Praxis hat man das Problem, dass man häufig sehr viele

01:18:47.660 --> 01:18:49.940
solcher Referenzvektoren pro Klasse hat.

01:18:50.640 --> 01:18:54.900
In der Spracherkennung kann sowas hinterher sein wie 16 bis 1024

01:18:54.900 --> 01:18:57.020
Referenzvektoren pro Klasse.

01:18:57.840 --> 01:19:00.100
Und es kann sein, dass wir sehr viele Klassen haben.

01:19:00.600 --> 01:19:02.400
Tausende, Zehntausende, Hunderttausende.

01:19:03.540 --> 01:19:09.220
Und die Dimensionalität meines Vektors aus dem R auch n kann relativ

01:19:09.220 --> 01:19:09.720
hoch sein.

01:19:09.800 --> 01:19:12.080
Also nach der Vorverarbeitung, je nachdem wie ich das mache.

01:19:12.200 --> 01:19:15.440
Ich habe dann ja das Stacking mit den benachbarten Vektoren oder mit

01:19:15.440 --> 01:19:16.840
den Deltas und Delta-Deltas.

01:19:16.980 --> 01:19:19.000
Dann kann ich das noch ein bisschen reduzieren mit linearer

01:19:19.000 --> 01:19:22.240
Diskombinanzanalyse, aber irgendwas 16 bis 48-dimensional.

01:19:23.260 --> 01:19:32.220
Und jetzt muss ich für einen 48-dimensionalen Vektor 1024 mal 10 hoch

01:19:32.220 --> 01:19:34.100
5 Distanzen berechnen.

01:19:34.300 --> 01:19:37.540
Weil ich muss ja die am nächsten gelegenen Distanzen finden wieder.

01:19:38.800 --> 01:19:41.100
Und das ist ein hoher Rechenaufwand, den möchte man einfach

01:19:41.100 --> 01:19:41.360
reduzieren.

01:19:43.440 --> 01:19:48.000
Und da gibt es halt, wenn man Rechenaufwand reduzieren möchte,

01:19:48.140 --> 01:19:49.380
meistens immer zwei Optionen.

01:19:49.380 --> 01:19:53.240
Die erste Option ist, okay, ich will das garantiert, dass ein

01:19:53.240 --> 01:19:57.700
korrekter Ergebnis rauskommt, aber nehme dafür im Kauf, dass nicht

01:19:57.700 --> 01:20:00.460
immer die Beschleunigung durch dieses Verfahren passiert.

01:20:01.080 --> 01:20:04.260
Oder aber ich möchte, dass die Beschleunigung garantiert ist, aber

01:20:04.260 --> 01:20:07.960
dann dafür nehme ich im Kauf, dass vielleicht das Ergebnis dann nicht

01:20:07.960 --> 01:20:08.880
mehr optimal ist.

01:20:10.640 --> 01:20:13.800
Einfache Möglichkeit hier ist, dass man statt des komplexen

01:20:13.800 --> 01:20:17.820
Distanzmaßes, mal analoges Distanz oder so, ein einfacheres Distanzmaß

01:20:17.820 --> 01:20:18.080
nimmt.

01:20:20.380 --> 01:20:23.320
Oder man arbeitet entsprechend wieder mit Early Abortion.

01:20:25.460 --> 01:20:31.120
Das heißt, wenn ich merke, ich will die sechs nächstgelegenen Vektoren

01:20:31.120 --> 01:20:35.400
finden und die aktuelle Distanz, wenn ich mehr und mehr Dimensionen

01:20:35.400 --> 01:20:38.380
aufaddiere, ist schon größer als die sechs kleinsten Distanzen, die

01:20:38.380 --> 01:20:41.800
ich bisher habe, dann brauche ich nicht weiterzurechnen, aufhören.

01:20:42.880 --> 01:20:48.960
Oder eine andere Möglichkeit ist, dass ich mir den Merkmalsraum ein

01:20:48.960 --> 01:20:51.400
bisschen aufteile und strukturiere.

01:20:54.600 --> 01:20:59.280
Angenommen, wir haben einfache euclidische Distanz, ich habe jetzt

01:20:59.280 --> 01:21:05.000
mein x und möchte die fünf am nächsten gelegenen Vektoren finden.

01:21:06.560 --> 01:21:10.780
Dann kann ich jetzt anfangen, mir so Hyper-Ebenen abzuspeichern.

01:21:14.680 --> 01:21:19.380
Mir die Repräsentanten, die ich habe, in einer Art Baumstruktur

01:21:19.380 --> 01:21:20.400
organisieren.

01:21:21.180 --> 01:21:22.580
Zum Beispiel mit einem binären Baum.

01:21:23.580 --> 01:21:29.260
Und muss dann für jede Dimension nur noch abfragen, das x, liegt das

01:21:29.260 --> 01:21:32.300
links oder rechts von dieser einen Hyper-Ebene?

01:21:32.740 --> 01:21:35.440
Steige dann diesem Baum immer weiter ab.

01:21:37.520 --> 01:21:42.220
Bis ich dann irgendwann weiß, okay, jetzt bin ich in einem Bereich, da

01:21:42.220 --> 01:21:46.700
sind nur noch so und so viele Repräsentanten drin, jetzt suche ich nur

01:21:46.700 --> 01:21:47.480
noch die nächsten raus.

01:21:47.940 --> 01:21:54.160
Oder wenn ich diese Ebene geschickt relege, weiß ich, okay, dieses

01:21:54.160 --> 01:21:57.820
Blatt enthält jetzt noch die fünf am nächsten gelegenen

01:21:57.820 --> 01:21:58.880
Repräsentanten.

01:22:05.710 --> 01:22:11.090
Kann man sich zum Beispiel so vorstellen, wenn man halt die Daten hat,

01:22:11.590 --> 01:22:15.690
guckt man, in welche Richtung habe ich denn die höchste Varianz der

01:22:15.690 --> 01:22:16.010
Daten?

01:22:17.290 --> 01:22:22.790
Entlang dessen teile ich das auf in zwei Bereiche und muss dann

01:22:22.790 --> 01:22:26.050
sozusagen nur wissen, für diese Dimension bin ich links oder rechts

01:22:26.050 --> 01:22:26.470
davon?

01:22:26.990 --> 01:22:32.150
Und wenn ich das weiß, habe ich schon die rechts sind zu weit, links

01:22:32.150 --> 01:22:34.790
sind diejenigen, die bei mir näher dran sind.

01:22:35.110 --> 01:22:39.030
Und das mache ich für jede Dimension durch und bekomme so auf die Art

01:22:39.030 --> 01:22:43.150
und Weise eine Baumstruktur, die man dann immer sagt, für jeden Punkt.

01:22:43.290 --> 01:22:46.370
Wenn ich diesen Baum durchwandere, nach unten hindurch, kriege ich

01:22:46.370 --> 01:22:50.790
hinterher als Blatt dieses Baumes eine Menge raus, der am nächsten

01:22:50.790 --> 01:22:52.830
gelegenen Repräsentanten.

01:23:01.010 --> 01:23:08.050
Und da jetzt als Hausaufgabe für das nächste Mal, diese beiden

01:23:08.050 --> 01:23:13.250
Verfahren möchte ich jetzt dazu verwenden, um die Berechnung einer

01:23:13.250 --> 01:23:16.150
Gauss -Mixtur-Verteilung zu bekommen.

01:23:16.690 --> 01:23:24.630
Und zwar möchte ich dann hinterher das so machen, dass ich den

01:23:24.630 --> 01:23:27.350
Logarithmus einer Gauss-Mixtur-Verteilung herausbekomme.

01:23:28.730 --> 01:23:30.830
Das Ergebnis muss nicht mehr exakt sein.

01:23:30.910 --> 01:23:33.710
Ich will eine Beschleunigung erhalten, ohne dass ich das exakte

01:23:33.710 --> 01:23:34.590
Ergebnis bekomme.

01:23:36.390 --> 01:23:39.590
Ich möchte die E-Funktion auf gar keinen Fall mehr ausrechnen.

01:23:39.590 --> 01:23:41.810
Sprich, ich möchte keine E-Funktion mehr ausrechnen.

01:23:42.890 --> 01:23:46.230
Ich möchte ein ungefähres Ergebnis dieser Gauss-Mixtur-Verteilung

01:23:46.230 --> 01:23:46.530
bekommen.

01:23:46.610 --> 01:23:48.010
Das darf einen bestimmten Fehler halten.

01:23:49.010 --> 01:23:52.010
Aber es soll auf gar keinen Fall mehr die E-Funktion ausrechnen.

01:23:52.730 --> 01:23:56.090
Und die beiden vorhergehenden Verfahren, Verfahren zu Early Abortion

01:23:56.090 --> 01:24:01.490
und so eine Baumstruktur, kann man jetzt beide kombinieren, um zu

01:24:01.490 --> 01:24:07.470
einem Verfahren zu kommen, um sehr schnell, aber mit recht guter

01:24:07.470 --> 01:24:11.650
Genauigkeit, mit guter Approximationsgenauigkeit, Gauss-Mixtur

01:24:11.650 --> 01:24:12.790
-Verteilung auszurechnen.

01:24:13.790 --> 01:24:18.390
Und das überlegen Sie sich mal im Kopf bis nächste Woche, was man da

01:24:18.390 --> 01:24:19.370
vielleicht machen könnte.

01:24:20.750 --> 01:24:23.490
Wir haben das im Prinzip alle schon durchgesprochen.

01:24:23.670 --> 01:24:26.330
Man muss jetzt nur noch mal sich überlegen, was sind Referenzvektoren,

01:24:26.390 --> 01:24:26.950
hatten wir schon.

01:24:27.770 --> 01:24:31.090
Was muss ich machen, damit ich keine E-Funktion mehr ausrechnen kann.

01:24:31.090 --> 01:24:35.110
Was hilft mir das dabei, wenn ich jetzt nahegelegene Repräsentanten

01:24:35.110 --> 01:24:36.190
finden möchte.

01:24:38.130 --> 01:24:39.810
Gut, damit hören wir für heute auf.

01:24:40.410 --> 01:24:42.530
Machen dann nächste Woche da entsprechend weiter.

01:24:43.710 --> 01:24:44.630
Viel Spaß beim Nachdenken.

