Eins vorweg: Es ist keine Frage zu einer Hausaufgabe/-arbeit o.Ä.
Ich beschäftige mich momentan privat mit Neuronalen Netzen. Seit zwei Semestern hat mir tatsächlich einer meiner Profs, der als gefühlt einziger NN in dem Modul "Intelligente Systeme" inklusive allem was zum Deep Learning gehört, anbietet, mir das Thema recht uninteressant gemacht. Obwohl ich wegen dem Traum von künstlicher Intelligenz zu studieren angefangen habe (Angewandte Informatik).
Wie dem auch sei. Meine Frage ist etwas weniger technisch sondern viel eher für das Verständnis. Und ja ich mache das NN tatsächlich in Java, obwohl es jeder in Python macht. Es mag zwar sein, dass Python dafür besser geeignet ist, aber um ein Thema from scratch an selbst zu machen, ist es ja fast prinzipiell egal, welche Sprache man benutzt. Ich will ja nur ein grundlegendes Verständnis durch das Anwenden bekommen.Wenn ich NN durch und durch kapiert habe, kann ich mir gerne die advanced techniques ansehen. Wobei ich null Fan davon bin third party librarys zu benutzen und dann zu meinen, dass ich nach 30 Zeilen Code ein NN "selbst" entwickelt habe. Ich mag es halt gerne mich in ein Thema reinzukämpfen, um es dann auch wirklich zu können und alle Stellschrauben im Griff zu haben.
Zu meiner eigentlichen Frage (sorry für den Text davor haha):
Ein NN arbeitet prinzipiell ja so, dass man input daten hat, die (zuerst random?) gewichtet werden und die mit einem ergänzendem Bias versehen werden. Das geht dann durch ein (oder mehrere) hidden layers, dann werden die Daten der hidden layers wieder gewichtet und es gibt einen output, der eine Abweichung zu den erwarteten Werten hat. Das NN lernt, indem es seine Gewichtungen so lange anpasst, bis die zu erwartenden outputs (näherungsweise) korrekt sind.
Das Prinzip ist klar und bis meine Literatur ankommt, werde ich wohl erstmal mit Tutorials vorlieb nehmen müssen, die ein wenig "oberflächlich" bleiben und tiefere Verständnisfragen nicht (oder nur sehr wenige tun es) beantworten. Zumindest hat noch keiner meine Fragen erklärt.
Wenn ich z.B. (ich will eine Spracherkennung selber schreiben) eine mp3 in interpretierbare Daten (Spektrogram) umformatiere und sage, welches Wort das NN in den Daten zu erkennen hat, dann mag es dieses Wort vielleicht irgendwann recht zuverlässig erkennen, wenn es genug Lerndaten bekommt. Aber werden nicht mit dem Lernen anderer Wörter eben genau diese perfekt zu dem ersten Wort abgestimmten Gewichtungen wieder verändert, bis das zweite Wort erkannt wird? Und dann wird das erste Wort gar nicht mehr erkannt, dafür aber das zweite? Oder verstehe ich da was falsch? Und wenn man alle deutschen Wörter einmal einließt, wird doch jedes Mal die Gewichtung neu kalibriert, sodass es kein Ende gibt. Ich denke, da habe ich ein grundlegendes Verständnisproblem. Und ob Spracherkennung so funktioniert, weiß ich auch nicht. Ich weiß nur, dass Shazam so Lieder erkennt. Spektrogram der Aufzeichnung wird mit vorhandenen Spektrogrammen aus einer Datenbank verglichen. Wie eine Art Fingerabdruckvergleich werden dafür spezielle Punkte betrachtet. Und hier wieder ein Verständnisproblem: Wer legt fest, welche Punkte verglichen werden sollen. Werden die beim Lernen angepasst, bis die effizientesten Informationspunkte herausgefiltert werden, oder macht man das zu Anfang einfach fix und das NN lernt die Gewichtungen anzupassen? Fragen über Fragen.
Sorry nochmal ... Ich suche wirklich keine Nachhilfe oder so, aber es gibt halt kein gutes allgemeines Informatikerforum. Daher muss ich Euch hier nerven. Und falls ich im HA Forum falsch bin, verschiebt den Post gerne. Es passt hier halt auch gut, weil ich in Java viel mache. Eigentlich fast alles. Und mein Prof. ist wie bereits gesagt eher auf destruktiver Art unterwegs und Komillitonen, haben außerhalb der Uni nicht solche Hobbys wie ich haha. Ich weiß nicht wo ich sonst wen fragen kann. Und ich will in diesem Thema einfach super einarbeiten, alles lernen, alles verstehen, alles können und auch meine Bachelorarbeit darin schreiben.
Ergänzung, falls man sich auch so ein wenig mit mir über die Materie unterhalten will:
Wie ich mp3s in Spektrogramme umrechne, weiß ich tatsächlich noch gar nicht. Also würde ich irgendwie an die Freuqnezen kommen, müsste ich mich nur noch mit FFT auseinandersetzen, um das Spektrogramm zu erhalten. Aber wie man aus einer mp3 die Frequenzen extrahiert weiß ich noch nicht. Ich stelle mir vor, die Amplitude der mp3 wird eingelesen und zwischengespeichert, dann nach einigen ms wird gestoppt und man hat eine Wellenform bestehend aus allen gemessenen Amplituden. Die Informationen der Frequenzen extrahiert dann ja die FFT. Aber wie bekommt man die Amplitude der mp3 als Integer-wert? Keine Ahnung haha
Und eigentlich wollte ich sogar direkt das Mikrofon capturen, um eine live Spracherkennung zu schaffen. Das will ich auch noch machen. Die meisten machen es ja immer mit fertigen Audiofiles. Ja ich kratze vielleicht viel noch an der Oberfläche, aber deshalb bin ich hier. Ich will Erfahrung sammeln, ich will Grenzen entdecken, wo etwas (technisch) nicht möglich oder zu rechenintensiv ist. Ob etwas gut machbar ist und was man noch optimieren kann. Man lernt ja nichts, wenn man fertigen Code vorgesetzt bekommt oder NN-Librarys importiert und dann nur noch die Input layer und das was erwartet wird reinwirft und die ganze "Magie" irgendwo im Hintergrund geschieht. Erst der Kampf etwas von Grund auf zu verstehen ist (zumindest für mich) Grundlage für langfristiges Verständnis
Ich beschäftige mich momentan privat mit Neuronalen Netzen. Seit zwei Semestern hat mir tatsächlich einer meiner Profs, der als gefühlt einziger NN in dem Modul "Intelligente Systeme" inklusive allem was zum Deep Learning gehört, anbietet, mir das Thema recht uninteressant gemacht. Obwohl ich wegen dem Traum von künstlicher Intelligenz zu studieren angefangen habe (Angewandte Informatik).
Wie dem auch sei. Meine Frage ist etwas weniger technisch sondern viel eher für das Verständnis. Und ja ich mache das NN tatsächlich in Java, obwohl es jeder in Python macht. Es mag zwar sein, dass Python dafür besser geeignet ist, aber um ein Thema from scratch an selbst zu machen, ist es ja fast prinzipiell egal, welche Sprache man benutzt. Ich will ja nur ein grundlegendes Verständnis durch das Anwenden bekommen.Wenn ich NN durch und durch kapiert habe, kann ich mir gerne die advanced techniques ansehen. Wobei ich null Fan davon bin third party librarys zu benutzen und dann zu meinen, dass ich nach 30 Zeilen Code ein NN "selbst" entwickelt habe. Ich mag es halt gerne mich in ein Thema reinzukämpfen, um es dann auch wirklich zu können und alle Stellschrauben im Griff zu haben.
Zu meiner eigentlichen Frage (sorry für den Text davor haha):
Ein NN arbeitet prinzipiell ja so, dass man input daten hat, die (zuerst random?) gewichtet werden und die mit einem ergänzendem Bias versehen werden. Das geht dann durch ein (oder mehrere) hidden layers, dann werden die Daten der hidden layers wieder gewichtet und es gibt einen output, der eine Abweichung zu den erwarteten Werten hat. Das NN lernt, indem es seine Gewichtungen so lange anpasst, bis die zu erwartenden outputs (näherungsweise) korrekt sind.
Das Prinzip ist klar und bis meine Literatur ankommt, werde ich wohl erstmal mit Tutorials vorlieb nehmen müssen, die ein wenig "oberflächlich" bleiben und tiefere Verständnisfragen nicht (oder nur sehr wenige tun es) beantworten. Zumindest hat noch keiner meine Fragen erklärt.
Wenn ich z.B. (ich will eine Spracherkennung selber schreiben) eine mp3 in interpretierbare Daten (Spektrogram) umformatiere und sage, welches Wort das NN in den Daten zu erkennen hat, dann mag es dieses Wort vielleicht irgendwann recht zuverlässig erkennen, wenn es genug Lerndaten bekommt. Aber werden nicht mit dem Lernen anderer Wörter eben genau diese perfekt zu dem ersten Wort abgestimmten Gewichtungen wieder verändert, bis das zweite Wort erkannt wird? Und dann wird das erste Wort gar nicht mehr erkannt, dafür aber das zweite? Oder verstehe ich da was falsch? Und wenn man alle deutschen Wörter einmal einließt, wird doch jedes Mal die Gewichtung neu kalibriert, sodass es kein Ende gibt. Ich denke, da habe ich ein grundlegendes Verständnisproblem. Und ob Spracherkennung so funktioniert, weiß ich auch nicht. Ich weiß nur, dass Shazam so Lieder erkennt. Spektrogram der Aufzeichnung wird mit vorhandenen Spektrogrammen aus einer Datenbank verglichen. Wie eine Art Fingerabdruckvergleich werden dafür spezielle Punkte betrachtet. Und hier wieder ein Verständnisproblem: Wer legt fest, welche Punkte verglichen werden sollen. Werden die beim Lernen angepasst, bis die effizientesten Informationspunkte herausgefiltert werden, oder macht man das zu Anfang einfach fix und das NN lernt die Gewichtungen anzupassen? Fragen über Fragen.
Sorry nochmal ... Ich suche wirklich keine Nachhilfe oder so, aber es gibt halt kein gutes allgemeines Informatikerforum. Daher muss ich Euch hier nerven. Und falls ich im HA Forum falsch bin, verschiebt den Post gerne. Es passt hier halt auch gut, weil ich in Java viel mache. Eigentlich fast alles. Und mein Prof. ist wie bereits gesagt eher auf destruktiver Art unterwegs und Komillitonen, haben außerhalb der Uni nicht solche Hobbys wie ich haha. Ich weiß nicht wo ich sonst wen fragen kann. Und ich will in diesem Thema einfach super einarbeiten, alles lernen, alles verstehen, alles können und auch meine Bachelorarbeit darin schreiben.
Ergänzung, falls man sich auch so ein wenig mit mir über die Materie unterhalten will:
Wie ich mp3s in Spektrogramme umrechne, weiß ich tatsächlich noch gar nicht. Also würde ich irgendwie an die Freuqnezen kommen, müsste ich mich nur noch mit FFT auseinandersetzen, um das Spektrogramm zu erhalten. Aber wie man aus einer mp3 die Frequenzen extrahiert weiß ich noch nicht. Ich stelle mir vor, die Amplitude der mp3 wird eingelesen und zwischengespeichert, dann nach einigen ms wird gestoppt und man hat eine Wellenform bestehend aus allen gemessenen Amplituden. Die Informationen der Frequenzen extrahiert dann ja die FFT. Aber wie bekommt man die Amplitude der mp3 als Integer-wert? Keine Ahnung haha
Und eigentlich wollte ich sogar direkt das Mikrofon capturen, um eine live Spracherkennung zu schaffen. Das will ich auch noch machen. Die meisten machen es ja immer mit fertigen Audiofiles. Ja ich kratze vielleicht viel noch an der Oberfläche, aber deshalb bin ich hier. Ich will Erfahrung sammeln, ich will Grenzen entdecken, wo etwas (technisch) nicht möglich oder zu rechenintensiv ist. Ob etwas gut machbar ist und was man noch optimieren kann. Man lernt ja nichts, wenn man fertigen Code vorgesetzt bekommt oder NN-Librarys importiert und dann nur noch die Input layer und das was erwartet wird reinwirft und die ganze "Magie" irgendwo im Hintergrund geschieht. Erst der Kampf etwas von Grund auf zu verstehen ist (zumindest für mich) Grundlage für langfristiges Verständnis
Zuletzt bearbeitet: