Ist es sinnvoll noch C++ dazu zu lernen?
Hallo, ich bin 15 und ich habe mir in den letzten zwei Jahren Python angeeignet, da ich sehr in KI, also speziell Machine Learning, Deep Learning und KNNs interessiert bin. Jetzt entdecke ich aber immer öfter KI-Projekte von großen Firmen, wie z.B Tesla, die auf C++ setzen, wie Tesla beim Autopiloten. Jetzt frage ich mich ob es sinnvoll war, Python zu lernen oder ob das Zeitverschwendung war. Außerdem, soll ich C++ noch dazu lernen?
11 Stimmen
8 Antworten
Python ist ideal für Prototyping oder als komfortabler Wrapper für Drittbibliotheken.
Wenn du aber wirklich selbst ML-Projekte umsetzen willst, die unvergleichbar schneller und effizienter als in Python laufen, dann ist C++ die Sprache der Wahl.
Fazit: Ein glasklares Ja! Wenn du auf dem Gebiet weiter kommen willst, kommst du zwangsweise um C++ gar nicht herum!
Es ist ja eher so:
Mit Python wird oft modelliert, ausprobiert, das ganze Zeug erstellt mit TensorFlow und so, aber das ist nur für den Entwickler toll und nicht für den Endbenutzer.
Beim Endbenutzer kommt es dann meistens mit C++ oder Java zum Einsatz.
Bei C++ lässt sich natürlich noch etwas Performance rausschlagen, also ja, ist wichtig.
Es gibt auch einige bekannte machine learning frameworks für C++/C#, z. B. diese reinforcement learning Ding von unity
Aber dass die mit Tensorflow entwickelten Modelle nicht in Production genutzt werden, ist falsch.
Das habe ich doch gar nicht behauptet :D
Gerade durch die Abstraktionen, die Tensorflow über tf.Graph im Hintergrund liefert, können die Modelle einfach deployt werden.
Eben, da ist tensorflow einfach schick. Man trainiert in Python und wenn man in seiner Android App was haben will, nimmt man die tensorflow Java API (die sehr schlank ist) und lädt sein Modell da rein und fertig.
Beim Machine Learning ist der ressourcenintensivste Teil aber in aller Regel schon vorbei, wenn der Endbenutzer die Anwendung zu Gesicht bekommt.
Sowieso, dennoch will man das es beim Endbenutzer so schnell wie möglich durchläuft, es wartet niemand gerne. :d
Na gut, so schlimm ist Python aber auch wieder nicht. Bei wenig rechenintensiven macht sich der Performanceunterschied eigentlich nicht bemerkbar. Solange es um keine ohnehin schon riesigen Konzernprojekte geht, lohnt sich damit das Umprogrammieren für den Effizienzunterschied in der Regel nicht.
Aber z.B der Autopilot von Tesla könnte doch eigentlich auch mit python erstellt worden sein, oder? Ich meine da ist die Software ja z.B visuell nicht für den Endnutzer relevant?
Das Modell könnte mit Python gemacht worden sein.
Ob Python noch zum Einsatz kommt wenn es im Auto dann verwendet wird, könnte sein, muss aber nicht sein.
Habe gerade gelesen, das es zunächst in Python programmiert wurde und dann in C++ übersetzt wurde, aufgrund der höheren Leistung!
Es gibt ja nicht nur Tesla, wenn du eine App hast z. B. und du willst dort ein Modell nutzen, das du davor in Python trainiert hast, dann schaust du natürlich nicht das du Python auf einem Handy zum laufen bringst, sondern dann schaut man das man mit der dortigen Sprache, z. B. Java unter Android zumindest, das Modell einliest und damit arbeitet, ohne Python.
Das ist um einiges performanter als jetzt Python auf iOS oder Android zum laufen zu bringen.
Klar, Python kommt am Ende eher nicht zum Einsatz, bei großen Anwendungen, eben weil man noch etwas Performance rausschlagen kann, habe ich ja bei meiner Antwort ganz oben geschrieben :D
Ja, ich wollte es ja nur einmal betonen, um Ihre Aussage zu bekräftigen und Ihnen Recht zu geben
Wenn du Machine Learning lernen willst, dann lerne Machine Learning und nicht C++.
Ich will dich nicht entmutigen, aber in Sachen Machine Learning ist das Können einer Programmiersprache fast das Unwichtigste. Der überwältigende Großteil ist Mathematik, sodass es in deiner Situation viel sinniger wäre, dich mit der dahinterliegenden mathematischen Materie anstatt mit Programmiersprachen zu befassen.
Machine Learning ist im Kern nicht Programmieren, sondern Modellieren und das ist Mathematik. Natürlich gehört das Wissen der konkreten Umsetzung und Implementierung auch mit dazu, ist aber wie gesagt eher der kleinste Teil.
Mathe ist für mich kein Problem, glauben sie mir... Ich belege derzeit Mathe Kurse an der Universität. Mathe ist eine meiner Leidenschaften. Aber Danke!
Klar.
Low Level Sprache ist immer gut. Kannst meinetwegen auch Beef lernen, aber irgendwas wo du mit Speicherverwaltung zu tun hast ist gut zu können.
Denken Sie es würde mich im Job sehr einschränken, wenn ich nur Python beherrschen würde?
Wenn du dich dafür interessierst, neue Methoden zu entwickeln - etwa in der Wissenschaft oder für ein Unternehmen - dann wird man von dir im Allgemeinen nicht verlangen, dass du besonders versiert im Umgang mit C++ bist. In der Industrie läuft ein solcher Job meistens unter der Bezeichnung 'Research Engineer'. Ich kenne einen Mathematiker, der mit Sicherheit alles andere als ein guter C++ Entwickler aber ein hervorragender Wissenschaftler ist und dafür bezahlt wird, genau an solchen "State of the Art" Methoden zu forschen.
Aber es gibt ja mehr Jobs, die ML zum Gegenstand haben und dabei durchaus auch praktische Tätigkeiten umfassen. Andere Berufsbezeichnungen, die das streifen, was dir vorschwebt, sind etwa "Data Scientist", "Data Engineer" und insbesondere "Machine Learning Engineer" - in großen Unternehmen wirst du die alle finden und sie werden sich auch sehr voneinander in ihren Aufgaben unterschieden, wenngleich sie (zum großen Teil) aufeinander angewiesen sind.
Aber lass mich zu der eigentlichen Frage, ob sich das Studium der Sprache C++ lohnt, zurückkommen. Meiner Meinung nach sollte jeder Entwickler, egal ob man eher mit Prototyping oder mit Aufgaben des Software Engineerings betraut wird, auf ein Repertoire verschiedener Sprachen, Frameworks und Tools zurückgreifen können. Das ist unter anderem deshalb gut, weil du auch als jemand, der "nur" seine Ideen bspw. in Pytorch implementiert, durchaus ab und an davon profitieren kann, CUDA und die Implementierung der einzelnen Routinen zu kennen. Gelegentlich wirst du sogar selbst Erweiterungen schreiben müssen, die dem weniger geschulten Programmierer den Schweiß auf die Stirn treiben.
Zum Schluss möchte ich noch sagen, dass du den Hinweis von @Willibergi ernst nehmen solltest. Wenn er davon spricht, dass die Fähigkeiten, ein Modell zu formulieren, mehr als das eigentliche Programmieren wiegt, dann hat er damit recht. Und unter dieser Mathematik versteht man nicht einfach nur ein bisschen Rumrechnen mit partiellen Ableitungen (was AutoDiff ohnehin für dich übernimmt), sondern die ganze Palette theoretischer Ergebnisse, die überhaupt erst die gut funktionierenden Methoden motiviert. Hinter einem GAN (Generative Adversarial Neural Network) steckt viel mehr als man vermuten mag, wenn man es in wenigen Zeilen Code in Tensorflow zusammenbaut. Wissenschaftler denken intensiv darüber nach und finden durch ihre Analysen schließlich heraus, wie sie (theoretisch motiviert!) ihre Modelle und Methoden weiter verbessern können. Und jemand, der keine tiefen Kenntnisse über Maß- und Wahrscheinlichkeitstheorie (+ nichtlineare Optimierung) hat, wäre nie auf die Idee gekommen, eine bessere Fehlerfunktion für GANs zu finden (in diesem Fall etwa "Wasserstein GANs"). Andere Beispiele: beschäftige dich mit dem geometrischen Deep Learning und du wirst sehen, dass Kenntnisse der Differentialgeometrie erforderlich sind. All das beherrschen Leute, die den State of the Art pushen. Eine gute Methodik und auch die Fähigkeit, wissenschaftliche Arbeiten zu überblicken, sind für AI und ML Forscher immens wichtig. Die Implementierung wird dann lediglich zur Fingerübung.
Das sehe ich in Teilen ähnlich. Primär ist Python für das Prototyping gedacht. Aber dass die mit Tensorflow entwickelten Modelle nicht in Production genutzt werden, ist falsch. Gerade durch die Abstraktionen, die Tensorflow über tf.Graph im Hintergrund liefert, können die Modelle einfach deployt werden.