今までAIのための別のプログラミング言語を試してみました
あなたはAI愛好家ですか?
はい?
次に、この質問に答えてください:あなたはAIのためのものを開発するためにどのプログラミング言語を使用していますか?
あなたの答えはPythonです。 見て! 私たちはそれを知っていました。
さて、私たちは魔術師ではありませんが、それはよく知られている事実です。 Pythonは、機械学習だけでなく、通常の開発目的でも、現在最も人気のある言語の1つです。 2019年10月現在、820万人以上の開発者がPythonを使用しています。 これはJavaより100万以上、Swiftより600万以上です。
Pythonは、人工知能の分野での開発において第一位にランクされています。それを簡単に証明するために、ほとんどの愛好家は機械学習に使用できるPython(およびほとんどがR)以外の言語を知らないでしょう。 そして、それはCやJavaでMLアルゴリズムをコード化するのが難しいように見えるからです。
Pythonは、そのシンプルさとコミュニティのために広く使用されています。 しかし、私たちは皆、Pythonの大きな欠点を知っています。
うん。 実行の速度。
PythonはC++よりも400倍遅いです。 しかし、Cのようなより効率的な言語で書かれたライブラリを使用して、機械学習でこのすべてを回避します。
しかし、それでも計算負荷は重い。 また、Pythonはメモリ豚です。
だから、私たちは何ができますか? 私たちは両方の世界のベストを得ることはできません!
さて、あなたが結論にジャンプする前に、私たちはMITの人々が提供しなければならないものをお見せしましょう。
いいえ、それは別のヒューマノイドやチャットボットではありません。 それはプログラミング言語です。
Pythonと同じように、Juliaは一般的なプログラミングに使用できますが、多くの機能は科学的計算や数値解析に適しています。 それは2012年に最初に登場しました。 2020年に安定版をリリースした。
しかし、ジュリアは何を提供しなければならないのですか? まあ、まず第一に、ジュリアは速いです。 Javaと同じように、Juliaはジャストインタイムコンパイラを使用します。 第二に、Juliaは他の計算効率の高い言語よりも学習が簡単です。 そして、あなたが尋ねる前に、はい、JuliaはPythonと同じくらい構文の点で単純です。
しかし、それはPythonよりも優れていますか? はいの場合、どのような条件で?
実験をして見てみましょう。
私たちはPythonとJuliaの両方で簡単なCNNを訓練します。 私たちは、同じアーキテクチャで、両方の言語でCNNの最も安定した効率的な実装を使用しています。
Pythonでは、Tensorflowを使用しています。 そしてJuliaのために、我々はFluxを使用しています。jlは純粋なJuliaスタックです。 ここでは、実験を自分で行うための参考文献をいくつか紹介します。
各エポックの時間と前処理タスクの実装時間をチェックします。
MNISTデータセットに両方のCnnを実装し、結果を確認します。 別のデータセットを使用して、結果がそれらに関連しているかどうかを確認できます。
実行時間を計算するには、Pythonのtimeモジュールを使用しますが、モデルの学習時間はモデルの出力で簡単に表示できるため、前処理時間の計算にのみ必fit()関数自体。
import time
start_time = time.time()#Code
print("The time elapsed: ",time.time()-start_time)
Juliaでは、非常に便利なマクロ@timeを使用します。 私たちは、各エポックごとに使用するtrain関数と同様に、全体的な前処理コードでそれを使用します。
このような何か:
@time begin#Preprocessing codeend
単一のステップで使用している間は、次のように接頭辞として直接microを使用することができます:
@time Flux.train!(loss, params(model), train_set, opt)
Julia構文をまだ理解できない場合は心配しないでください。 実行時間を測定しようとしていることを理解してください。
いくつかの結果
実験に使用したシステムの仕様:
Intel Core-i78550u—16GB RAM
- Pythonの全体的な前処理時間は2.6秒でした。
- Juliaの全体的な前処理時間は4でした。モデルの事前コンパイルの時間を含む2秒。
- Pythonでの反復あたりの時間はエポックあたり20秒でした。
- Juliaの反復あたりの時間はエポックあたり16秒でした。
今、あなたは思うかもしれませんが、それはそれほど違いはなく、効率の面で優れています。
まあ、実行基準の間には一つの重要な違いがあります。 Pythonコードを実行している間、全体のCPU消費量は87%でした。 しかし、Juliaを実行している間、全体のCPU消費量は18%でした。したがって、Juliaで並列計算を使用してCPUを最大限に活用すると、反復あたりの時間は3.6秒になります。
はい、JuliaはPythonと比較してかなり高速であることがわかります。 しかし、それは必ずしもそれがいつでもすぐにPythonを引き継ぐことを意味するわけではありません。
Pythonが非常に簡単に適応できるのは、その巨大なコミュニティによるものです。 JuliaにはPythonほど大きなコミュニティはありません。 もう一つは、Juliaがデフォルトで実行されているマシンの完全な計算能力を使用していないことです。 それを行うには、特定のコマンドと特定の実行方法を使用する必要があります。
Pythonは、そのシンプルさと、それが動作するライブラリとモジュールのために、現在この位置にあります。 そして、Pythonはあまりにも長い間私たちと一緒にいました。 ジュリアが来た 私たちはまだその可能性を最大限に見ていないかもしれません。 しかし、それはデータ計算で最も使用される言語の1つになるという約束を示しています。
JuliaはPythonと同じくらい簡単です。 しかし、唯一の問題は、開発者コミュニティがこれをどのくらい速く採用し、それをさらに良くするかということです。 そのシフトを作ることは本当に価値がありますか? それに答えるには、より多くのデータとケーススタディが必要になると思います。
この記事では、AIでPython以外の言語を見たいという好奇心が芽生えていることを願っています。
参考文献とさらなる読書:
- Lauwens,B.,&Downey,A.(n.d.). https://benlauwens.github.io/ThinkJulia.jl/latest/book.html
- Flux:Julia Machine Learningライブラリから取得しました。 (n.d.)。 https://fluxml.ai/Flux.jl/stable/
- 畳み込みニューラルネットワーク(CNN):TensorFlowコアから取得。 (n.d.)。 https://www.tensorflow.org/tutorials/images/cnn
- 並列計算から取得しました。 (n.d.)。 https://docs.julialang.org/en/v1/manual/parallel-computing/
から取得