C ++がAIであまり広く使用されていないように見えるのはなぜですか?


15

機械学習エンジニアやAIプログラマーが、C ++は技術的にPythonよりも強力な言語であるにもかかわらず、なぜC ++ではなくPythonなどの言語を使用してAIタスクを実行するのかを知りたいだけです。


2
この回答が役立ちます
Ugnes

AIへようこそ!質問のタイトルを少し編集しました。高水準のPythonは構文が簡単で、インタープリター型言語です。つまり、コンパイルせずに調整とテストを行います。Pythonではビット単位の操作も可能です。
DukeZhou

回答:


16

AIのプログラミングに強力な言語は必要ありません。ほとんどの開発者はKeras、Torch、Caffe、Watson、TensorFlowなどのライブラリを使用しています。これらのライブラリは高度に最適化されており、すべての作業を処理します。Cなどの高性能言語で構築されています。Pythonは、ニューラルネットワーク層、データの読み込み、処理の起動、結果の表示。代わりにC ++を使用してもパフォーマンスはほとんど向上しませんが、メモリ管理に注意を払う必要があるため、開発者以外の人にとっては難しくなります。また、AIの人々の中には、プログラミングやコンピューターサイエンスの知識があまりない人もいます。

別の同様の例は、ゲーム開発です。この場合、エンジンはC / C ++でコーディングされ、多くの場合、すべてのゲームロジックは高水準言語でスクリプト化されます。


1
ハードウェア分野の機械学習とnlpの開発と使用に興味がある場合は、AIにC ++を使用できますか
Mark ellon

1
@AnishGupta:はい、できます。ハードウェアが必要な処理をサポートしていれば可能です(ニューラルネットワークは特にプロセッサに負荷がかかります)。TensforFlowは実際にはネイティブのC ++(Pythonバインディングは追加)であり、ここにAPIがあります:tensorflow.org/api_docs/cc
Neil Slater

「ほとんどのAIプロファイルはデータサイエンス分野からのものです」。データサイエンスは明確に定義されたフィールドでさえないため、文が理解されなかったり、誤解されたりすることはありません。
nbro

1
「代わりにC ++を使用しても、パフォーマンスはほとんど向上しませんが、メモリ管理に注意を払う必要があるため、開発者でない人にとっては難しくなります。」うまく書けば、C ++でのメモリ管理について気にする必要はありません。
ジェレミーブレイン

AIプログラミングは、KerasやTorchのような既存のライブラリを使用するだけではありません。ニューラルネットワークは、外部からの依存なしにゼロからプログラムできます。3層パーセプトロンの例はインターネットで入手でき、シグモイド活動化関数は4行のコードに適合します。既存のライブラリなしでニューラルネットワークを実装することが、このトピックを理解するためのより簡単な方法であると私は言うでしょう。
マヌエルロドリゲス

10

C ++は、実際にはAI / MLスペースで使用される最も人気のある言語の1つです。Pythonは一般的に人気がありますが、他の人が指摘しているように、CPUを集中的に使用する数値処理がC ++で行われ、Pythonがより高いレベルの関数に使用されるハイブリッドシステムを使用することは実際に非常に一般的です。

説明のために:

http://mloss.org/software/language/c__/

http://mloss.org/software/language/python/


5

それは、それがどれほど柔軟である必要があるかに依存します:本格的なシステムの生産準備が整っていて、あまり調整する必要がない場合は、C ++(またはC)で十分です。ソフトウェアの構築には多くの時間を費やす必要がありますが、その後はかなり高速に実行されるはずです。

ただし、設定とパラメータをまだ実験中で、おそらくアーキテクチャを調整する必要がある場合、C ++は扱いにくくなります。物事を変更しやすくするPythonのような言語が必要です。一般にPythonなどの言語でより高速にコーディングできるため、コードの変更はより簡単です。あなたが支払う代償は、ソフトウェアが通常同様に実行しないということです。

そのトレードオフがどのように最適かを判断する必要があります。通常は、コーディングに費やす時間を減らし、実行時間を長くすることをあまり気にしないでください。コードを完成させるのに1日もかからない場合は、Cコード化されたバージョンが追いつく必要がある多くの時間です。ほとんどの場合、それだけの価値はありません。

共通のアプローチはハイブリッドシステムのようです。コアライブラリはC / C ++で実装されています。変更の必要はほとんどなく、フロントエンド/接着剤/インターフェースはPythonであり、柔軟性と速度は必要ありません。それは重要です。

ちなみに、これはAI固有の問題ではなく、インタープリタ言語とコンパイル済み言語の一般的な問題です。AIを使用しても、多くのシステムはアプリケーションではなく研究に集中しており、開発の速度が実行の速度よりも優先されます。


1
C ++でそれを行うと、Pythonよりも高速に実行できますか?それは、C ++はPythonより400倍高速である
Mark ellon

1
その一般的な数値は何も意味しません-実際のアプリケーションに依存します。ほとんどの場合、400回は多分楽観的すぎると思います。しかし重要なのは、ソフトウェアのコーディング(およびデバッグ)に500倍の時間がかかる場合でも、速度が400倍向上しても速度が遅くなることです。明らかに数値は少しランダムですが、プログラムが正しくなるまでの時間を過小評価しないでください。多くの場合、速度の向上は開発時間の短縮によって相殺される以上のものです。
Oliver Mason

1
私はPythonとC ++でtensorflowライブラリを使用してコードにニューラルネットを試してみました...と私はそれを見つけた:C ++でコーディングされたニューラルネットワークアルゴリズムは同じライブラリと同じアルゴリズムが使用されたのpythonよりも高速280X回実行します
マーク・Ellonの

1
では、なぜPythonではなくC ++を機械学習アルゴリズムの実装に使用しないのですか
Mark ellon

1
上記の私の答えを参照してください...
オリバーメイソン

2

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の方が適しています。


0

あなたはそれを主張します

C ++は技術的にはpythonよりも強力な言語です。

しかし、その主張は間違っています(またはあまり意味がありません)。プログラミング言語は仕様であることを覚えておいてください(多くの場合、英語で書かれた一部の文書)。たとえば、n3337はC ++仕様の後期ドラフトです。私はPythonは好きではありませんが、C ++よりも強力に見えます(C ++の実装は一般にPythonの実装よりも高速です)。優れたPythonプログラマはPythonでうまくコーディングでき、別の優れたC ++プログラマはC ++でうまくコーディングできます。その逆。

理論的には、C ++とPythonの両方が(意図的に)チューリング完全なプログラミング言語です。

また、PythonはC ++と同様に表現力があります。Pythonはに関連するものを除いて(++ Cを持っていますが、ないことを、私は、プログラミング言語機能に名前を付けることができない反射 ;も参照、この答えをとの点に注意してdlopen-私の見manydl.cのプログラムを- 、のLLVMlibgccjitlibbacktrace、およびいくつかの考慮メタ-プログラミングラà、彼らとアプローチをBismonなどJ.Pitratのブログ擁護こと)。

多分あなたはそれを実装するソフトウェアとしてプログラミング言語を考えます。次に、PythonはC ++と同じくらい表現力があります(学習するのは簡単ですが、それは幻想です。この幻想の詳細については、http://norvig.com/21-days.htmlを参照してください)。PythonとCは非常に似てい++ セマンティクスをその構文は非常に異なっていても、。それらの型システムは非常に異なります。

残念なことに、最近の多くの主要な機械学習ライブラリー(TensorFlowGudhiなど)は、実際には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 ++コードのほとんど(そしてできればすべて)を生成することです)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.