回答:
AIのプログラミングに強力な言語は必要ありません。ほとんどの開発者はKeras、Torch、Caffe、Watson、TensorFlowなどのライブラリを使用しています。これらのライブラリは高度に最適化されており、すべての作業を処理します。Cなどの高性能言語で構築されています。Pythonは、ニューラルネットワーク層、データの読み込み、処理の起動、結果の表示。代わりにC ++を使用してもパフォーマンスはほとんど向上しませんが、メモリ管理に注意を払う必要があるため、開発者以外の人にとっては難しくなります。また、AIの人々の中には、プログラミングやコンピューターサイエンスの知識があまりない人もいます。
別の同様の例は、ゲーム開発です。この場合、エンジンはC / C ++でコーディングされ、多くの場合、すべてのゲームロジックは高水準言語でスクリプト化されます。
C ++は、実際にはAI / MLスペースで使用される最も人気のある言語の1つです。Pythonは一般的に人気がありますが、他の人が指摘しているように、CPUを集中的に使用する数値処理がC ++で行われ、Pythonがより高いレベルの関数に使用されるハイブリッドシステムを使用することは実際に非常に一般的です。
説明のために:
それは、それがどれほど柔軟である必要があるかに依存します:本格的なシステムの生産準備が整っていて、あまり調整する必要がない場合は、C ++(またはC)で十分です。ソフトウェアの構築には多くの時間を費やす必要がありますが、その後はかなり高速に実行されるはずです。
ただし、設定とパラメータをまだ実験中で、おそらくアーキテクチャを調整する必要がある場合、C ++は扱いにくくなります。物事を変更しやすくするPythonのような言語が必要です。一般にPythonなどの言語でより高速にコーディングできるため、コードの変更はより簡単です。あなたが支払う代償は、ソフトウェアが通常同様に実行しないということです。
そのトレードオフがどのように最適かを判断する必要があります。通常は、コーディングに費やす時間を減らし、実行時間を長くすることをあまり気にしないでください。コードを完成させるのに1日もかからない場合は、Cコード化されたバージョンが追いつく必要がある多くの時間です。ほとんどの場合、それだけの価値はありません。
共通のアプローチはハイブリッドシステムのようです。コアライブラリはC / C ++で実装されています。変更の必要はほとんどなく、フロントエンド/接着剤/インターフェースはPythonであり、柔軟性と速度は必要ありません。それは重要です。
ちなみに、これはAI固有の問題ではなく、インタープリタ言語とコンパイル済み言語の一般的な問題です。AIを使用しても、多くのシステムはアプリケーションではなく研究に集中しており、開発の速度が実行の速度よりも優先されます。
AIアプリケーションのソフトウェア開発は、プログラミング自体とプロトタイピングに分けることができます。C / C ++は、非常に高速に実行され、主流のオペレーティングシステムのライブラリとして提供できるため、アプリケーションを作成するのに最適な言語です。誰かがターンキーアプライアンスを展開したい場合、プリコンパイルされたC / C ++アプリケーションがゴールドスタンダードです。
C ++には大きな問題があり、プログラムをGCCまたはLLVMコンパイラーでコンパイルする前に、誰かが彼が必要とするアルゴリズムを知る必要があります。C ++は特定のソースコードを実行でき、効率的なコマンドを提供しますが、配列をどのように埋める必要があり、どのforループがコードで必要かは不明です。この質問は、アプリケーションがプログラムされる前に行われるプロトタイピングのステップに当てはまります。問題は、コンパイルされたアプリケーションをビルドしてオペレーティングシステムパッケージとして提供する方法ではなく、さまざまなAIアルゴリズムを試して、GUIプロトタイプをいくつかビルドし、チームメンバーと進行状況について話し合うことです。
スクリプトプログラミングに基づいており、擬似コードに近い機能を提供するナンバー1のguiプロトタイピング言語は、Guido van Rossumによって開発されました。C ++を置き換えることはありませんが、新しい種類のドメインを作成します。特に人工知能の革新的な領域では、ソフトウェアが実装される前にプロトタイピングのステップが必要です。
PythonがC ++より優れている理由を説明するには、C ++でソフトウェアプロトタイプを作成する必要があります。GUIアプリケーションを迅速に実装するためにその言語を使用することは可能ですか?C ++は、編集サイクルが速いプロトタイピング言語として設計されたのではなく、システムプログラマーのための堅固なロックとして設計されました。つまり、プロトタイプがすでに機能している場合、アルゴリズムが修正されていて、ドキュメントが作成されている場合は、C ++でコードを再プログラムすることは理にかなっています。つまり、特定のPythonプロトタイプがC ++に変換され、既存のオペレーティングシステムに配信されます。しかし、論文の執筆、代替案の議論、革新の管理に関係する前段階では、Pythonの方が適しています。
あなたはそれを主張します
C ++は技術的にはpythonよりも強力な言語です。
しかし、その主張は間違っています(またはあまり意味がありません)。プログラミング言語は仕様であることを覚えておいてください(多くの場合、英語で書かれた一部の文書)。たとえば、n3337はC ++仕様の後期ドラフトです。私はPythonは好きではありませんが、C ++よりも強力に見えます(C ++の実装は一般にPythonの実装よりも高速です)。優れたPythonプログラマはPythonでうまくコーディングでき、別の優れたC ++プログラマはC ++でうまくコーディングできます。その逆。
理論的には、C ++とPythonの両方が(意図的に)チューリング完全なプログラミング言語です。
また、PythonはC ++と同様に表現力があります。Pythonはに関連するものを除いて(++ Cを持っていますが、ないことを、私は、プログラミング言語機能に名前を付けることができない反射 ;も参照、この答えをとの点に注意してdlopen
-私の見manydl.cのプログラムを- 、のLLVMのlibgccjitのlibbacktrace、およびいくつかの考慮メタ-プログラミングラà、彼らとアプローチをBismonなどJ.Pitratのブログ擁護こと)。
多分あなたはそれを実装するソフトウェアとしてプログラミング言語を考えます。次に、PythonはC ++と同じくらい表現力があります(学習するのは簡単ですが、それは幻想です。この幻想の詳細については、http://norvig.com/21-days.htmlを参照してください)。PythonとCは非常に似てい++ セマンティクスをその構文は非常に異なっていても、。それらの型システムは非常に異なります。
残念なことに、最近の多くの主要な機械学習ライブラリー(TensorFlowやGudhiなど)は、実際にはC ++よりもPythonで使用する方が簡単です。ただし、TensorFlowとGudhiのほとんどはC ++でコーディングされており、C ++ API(Pythonのものだけでなく)を提供および文書化しているため、C ++コードからTensorFlowまたはGudhiを使用できます。
C ++は可能マルチスレッドプログラミングを、しかし、通常のPython実装がいるGILが、されbytecodedので、かなり遅いC ++よりも(通常によってコンパイルされたコンパイラの最適化など、GCCやクランを ;しかし、あなたは、例えばC ++インタプリタを見つけることができるしがみつくを)。Pythonの一部の実験的実装はJITコンパイルされ、GIL がありません。しかし、これらは成熟していません。TRLを増やすために100万ユーロを投資することをお勧めします。
C ++はPythonよりも学ぶのがはるかに難しいことにも注意してください。12年以上のC ++プログラミングの経験があっても、ほとんどのC ++を本当に知っているとは言えません。
悲しいことに、AIソフトウェアエンジニアリングを教える最新の本(たとえば、この本またはその本)では、例としてPython(C ++ではない)を使用しています。C ++を使用した最新のAIブックが実際に必要です。
ところで、私はAIテクニックを使用してオープンソースソフトウェア(このソフトウェア、または廃止されたGCC MELTなど)をプログラミングしていますが、Pythonは使用していません。私のAIアプリケーションへのアプローチは、DSLの設計を始めることです。
一部のAIアプローチにはメタプログラミングが含まれます。たとえば、システムのコードの一部(またはほとんど、あるいはすべて)を自分で生成します。J.Pitrat(2019年10月に亡くなりました)はこのアプローチの先駆者です。彼のブログ、彼のCAIAシステム、およびRefPerSysプロジェクトを参照してください(彼らの目標は、そのC ++コードのほとんど(そしてできればすべて)を生成することです)。