In der KI (und wahrscheinlich auch in vielen anderen Bereichen) ist die von den menschlichen Programmierern verbrachte Zeit in der Regel wesentlich wertvoller / teurer als die Zeit, die für die Ausführung eines Programms aufgewendet wird. Natürlich ist dies nicht immer der Fall (genauso wie es nicht immer der Fall ist, dass Python anstelle von C oder C ++ verwendet wird), aber es ist oft wahr.
Gerade bei der Forschung ist es äußerst wichtig, Ideen schnell durchlaufen zu können. Wir müssen in der Lage sein, neue Ideen schnell umzusetzen, zu testen, wahrscheinlich einige Iterationen von Bugfixing zu durchlaufen, erneut zu testen usw. Es ist ziemlich selten, dass der Engpass bei dieser Iteration von Ideen die Laufzeit einer neuen Idee / eines neuen Algorithmus ist. Die Programmierzeit des Menschen ist viel häufiger ein Engpass. Ideen können oft schnell auf kleine Spielzeugprobleme getestet werden, die ohnehin nicht viel Laufzeit benötigen, oder über Nacht ausgeführt werden, während der Programmierer damit beschäftigt ist, anderen Code zu schreiben.
Das ganze Iterieren, schnelle Implementieren neuer Ideen usw. ist in Python in der Regel einfacher / schneller als in C oder C ++. Dies gilt natürlich nicht unbedingt für alle. Wenn jemand bereits viel Erfahrung in C ++ und wenig Erfahrung in Python hat, kann er möglicherweise neue Ideen schneller in C ++ implementieren. Dies scheint jedoch bei der Mehrheit der Menschen nicht der Fall zu sein. Zu den klaren Vorteilen, die Python in Bezug auf die schnelle Umsetzung neuer Ideen hat, gehören:
- Weniger ausführlich, müssen Sie nicht so viel eingeben (z. B.
results = []
in Python oder std::vector<double> results;
in C ++, um eine leere Liste zu erstellen, an die wir in einem Experiment einige Ergebnisse anhängen können).
- Keine Notwendigkeit, sich um Speicherverwaltung, Zeiger, all das zu kümmern, was mit Erfahrung machbar ist, aber unweigerlich Aufmerksamkeit erfordert, hat eine größere Wahrscheinlichkeit, zu zusätzlichen Fehlern usw. zu führen.
- Keine Notwendigkeit, den Kompilierungs- / Erstellungsprozess zu durchlaufen . Dies kann sehr groß sein, was leicht zu vergessen ist.
- Viel weniger mühsam, Datenstrukturen zu haben, die Dinge unterschiedlichen Typs enthalten (z. B.
config = {'algorithm': 'RandomForest', 'n_trees': 50}
in Python vs .... keine Ahnung in C ++)
Ein weiterer wichtiger Punkt ist, dass der Großteil des Codes, den Menschen in AI schreiben, nicht die leistungsabhängigen Teile sind . Auch dies gilt möglicherweise nicht für alle, gilt jedoch insbesondere für Forschungsumgebungen. Die meisten Forscher verbringen den größten Teil ihrer Zeit nicht damit, Code für Vorwärts- / Rückwärtsdurchläufe in einem neuronalen Netzwerk zu schreiben. Sie verbringen viel mehr Zeit mit Dingen wie:
- Vorverarbeitung von Daten (nicht immer einfach zu schreibender, leicht wiederverwendbarer Code, wichtige Teile sind projektspezifisch / datensatzspezifisch)
- Versuchsaufbau (zB äußere Trainingsschleifen, Druck- / Protokollierungsergebnisse, ...)
- Verarbeiten von Ergebnissen, Erstellen aller Arten von ausgefallenen Plots usw.
- Brandneue (Teile von) Algorithmen (z. B. eine neue Variante in der Liste von SGD / RMSProp / ADAM / etc., Wahrscheinlich nur ein paar Zeilen einfachen Codes, die direkt in ein vorhandenes Framework eingefügt werden können, mit viel mehr Stift- und Papiermathematik dahinter).
Nun, dieser letzte Punkt kann in einigen Fällen leistungsabhängig sein, aber das anfängliche Problem wird nicht die Leistung sein. Die anfängliche Sorge wird sein; wird es überhaupt funktionieren? Dies kann bei einfacheren Problemen oder bei weniger leistungsfähigem Code ausgewertet werden, indem einfach etwas länger gewartet wird. Es ist jedoch noch wichtiger, ihn zuerst implementieren zu können. Wie in anderen Antworten erwähnt, können diese dank C-basierter Frameworks wie Tensorflow
und numpy
auch von Python aus oftmals performant sein.
Schließlich ist die Existenz bekannter, benutzerfreundlicher, etablierter Open-Source-Bibliotheken und Frameworks, die sich im Laufe der Zeit bewährt haben, äußerst wichtig. In Python haben wir:
- Numpy
- Pandas
- Matplotlib, Seaborn
- scikit-lernen
- Tensorflow, Pytorch
- XGBoost
Wiederum haben viele davon Teile in C / C ++ implementiert, wenn es auch um die Leistung geht.
Wenn ich über Forschung spreche, bedeutet dies nicht nur "Wissenschaft". KI in der Industrie hat auch oft einen gewissen Forschungsgeschmack. Es ist unwahrscheinlich, dass Menschen in der Industrie neuronale Netze immer und immer wieder von Grund auf neu implementieren. Es ist viel wahrscheinlicher, dass sie Implementierungen wiederverwenden, die bereits effizient sind (z. B. Tensorflow), aber versuchen, sie auf neue Daten anzuwenden (wo sie einen neuen Code für das Boilerplate schreiben müssen, was schnell und einfach ist in Python) oder versuchen Sie es mit neuen Architekturen oder versuchen Sie, Daten und / oder Ergebnisse usw. zu visualisieren.