読者です 読者をやめる 読者になる 読者になる

A.I.lab(エー・アイ・ラボ)- 人間の、人間による、人間のための人工知能メディア

人工知能の考察、ディープラーニング、機械学習、各種アルゴリズムなど。

人工知能は何のプログラミング言語で書くのが良いのか?

人工知能を何の言語で作るかについては大事な論点です。人工知能フレームワークPythonC++などで書かれている事が多く、それらを使う場合は仕様に依存するということも少なくありません。

プログラミングコード
あなたはどんなプログラミング言語で書いてますか?

フレームワークのことについては数多くのブログで触れられているので割愛させていただき、本質的に人工知能を実装するのに適した言語は何かという視点で整理していきたいと思います。

まずは、人工知能の本質的なポイントについて考えていきましょう。

 ポイントは学習データとハードウェア

人工知能という言葉が一人歩きし、「なんかすごいことができそう!」と期待するのは浅はかかも知れません。 

実際には、人工知能を教育する、学習用データの質と量が精度を向上させるキモとなっています。

これは、人間も同じです。赤ちゃんの時から、誰の手にも触れず、何も教えられなければ一向に話をすることもできませんし、字を書くこともできません。誰かが教えるからいろいろなことができるようになるのです。

人工知能を実際に活用するには、このデータ量というのがとても大切です。

人工知能を十分に活かす環境を用意できるのは資本力のある組織だけという問題

もう1つ人工知能活用に必要なことは、サーバーの容量や、性能です。

例えばWebサーバーにホームページをアップして閲覧するなら、レンタルサーバーや無料のサービスなど、安価に環境を用意することができます。

しかし、人工知能を動かすには、ある程度の性能が必要です。例えば、CPUとGPUというコンピューターの頭脳のような部品があります。CPUとは、1つずつ処理を実行する頭、GPUは並行していくつもの処理をする頭、と捉えるとわかりやすいと思います。そのため、画像処理など、情報量が多いものを処理するためにはGPUが使われることが多くなります

逆にCPUは私たちが日常的に使うパソコンなどにも搭載されている、身近なものです。

では、人工知能を処理するためには、どちらが適しているでしょうか?

答えはGPUです。もちろんCPUでも実行できますが、答えを導き出すまでの処理時間に大きな違いが生まれます。 

囲碁のプロに勝ったAlphaGoですが、あの裏にはとても強力な実行環境か整っていることでしょう。つまり、個人レベルで人間のようなレスポンスで知性をもったものを作るのは、資本的に難しいという段階です。

これから、レンタルサーバーの会社などが、こうしたGPUを搭載したサーバーをコモディティ化していくのは目に見えますが、気軽に使えるようになるには、まだ時間がかかりそうです。

これらの背景から言語はCかC++Pythonが有望

人工知能の本質に迫ったことで、有望な言語というのが絞りこめます。

この3つが言語選択のベースとして考えるには適しているという結論です。

思考する人
レスポンスが重要視される人工知能分野では言語の選択は重要

もちろん、環境によってはJavaScalaという選択肢もあると思います。特にWebアプリケーションの開発では、フロント側とバックエンド側でベストな選択を組み合わせるというケースも多くなってくると思います。

ただ、コアな部分のプログラムは、環境とパフォーマンスを最大化できる、CやC++がベストだというのが、執筆者としての感想です。

どうする?制作会社

ここからは、視点が違う話になりますが、人工知能が普及することで、Web制作会社やフリーのフロントエンジニアはいらなくなり、この先どうする?と囁かれている問題に言及していきたいと思います。

まず、既存のWebを作るためのHTML,CSSなど、レイアウティングを司る言語の価値は下がることでしょう。Javascriptに、関しては、フロント表現に使われていくと思いますので、しばらく需要はあるのではないかというのが見解です。

つまり、Web製作のように気軽に始められる世界ではない人工知能のシステム業界に関与していくには、大きな方向転換が必要になりそうです。

ディープラーニングフレームワークを使って作るにしても、HTMLやCSSの知識は重要ではありません、もっと高度なメモリ管理などの知識や、アルゴリズムのアイディアなどの方が需要が出てくると考えられます。人工知能業界にシステム面で飛び込んでいくのなら、覚悟を決めてサーバーサイドの言語を学び始めるのが良いと思います。

プログラミングと一緒に学んでいきたい学習分野

ディープラーニングなど、精度を劇的に高めるブレークスルーが登場したとはいえ、まだまだ成熟には程遠い技術です。

そのため、実装するだけではなく、アルゴリズムそのものを考えられる頭を作って、本質的な解決を試みるという視点も重要です。

人工知能システムの分野のハードルが高く見えるのは、必要な知識の幅が広いということがあげられます。例えば、低級言語に近い、プログラミング言語の知識、それに加えサーバーについての知識、それからアルゴリズムを理解、創造するための数学の知識はなどがあげられます。

プログラミングをやっている人ならサーバーの知識は必然的に学んでいけると思いますので、意識的に学ぶべきは数学の知識になってくると思います。数学の中でも、微分積分線形代数、確率、統計などの分野が関係性が深くなります。

数学講義をする黒板
数学の知識は原則原理から思考するという点でも重要

人間により近づけるのであれば、心理学や認知科学の知識なども当然必要になったりと、スキルの幅はあげればキリがありません。

本気でやるならCかC++

言語についてのまとめとして、人工知能のパフォーマンスを維持するためには、CやC++がオススメです。もちろんどの言語がベストかというのは環境や目的によって異なってくるとは思いますが、より高度な技術力が競争力になるのは確実です。

逆にフレームワークや汎用的なものに頼っていては、システム的な差別化は難しくなり、企画力やデータ量、資本力の競争となっていき、スタートアップや開始直後のベンチャー企業は戦いづらくなるとも言えると思います。

今まで、いくつかの時代の流れがあり、インターネット(通信)、スマートフォンなど大きな時代のうねりはありましたが、ここ数年はディテールのブラッシュアップに留まっている印象でした。

人工知能はこれからのビジネスの流れとしても大きなチャンスになることを信じています。みなさまもこの機会に言語の見直しやビジネス戦略の再構築などしてみてはいかがでしょうか。