AI(人工知能)といえば、最近最も注目されている研究分野ですね。
大企業からスタートアップ企業までこぞってAIの研究に取り組んでいます。
基本的な計算機能と自動稼働技術から、未来に劇的な変化をもたらす「自分で考えるロボット」まで、AIの研究テーマは多岐に渡ります。
人間の知能と同等もしくはそれ以上のシステムを開発することが、AI研究の核心です。
マーク・キューバン(アメリカの実業家・投資家)によると、AIは世界初の億万長者ならぬ「兆」万長者を生み出すそうです。
「世界初の兆万長者は、AIとAIにまつわる派生技術のマスターであり、私たちが考えもしない方法でAIを実用化させる人だ。」とマークは言いました。
この記事では、AI開発におすすめのプログラミング言語を8つ紹介しています。
「AIにすごく興味があるけれど、どのプログラミング言語を選んだらいいか分からない」というあなたにぴったりですよ。
8. Julia(ジュリア)
Julia(ジュリア)は、高度の数値解析や計算科学に対処するように設計された言語で、個別コンパイルの必要がありません。
プログラミングパラダイムとして、パラメーター多相(パラメーターポリモーフィズム)と多重ディスパッチを持つ型システムを含んでいます。
Juliaの深い数学的な根源と汎用的なカスタマイズ性は、データアナリストにぴったりです。
Juliaを使えば、研究報告のアルゴリズムからコードへのトランスレーションが非常に正確かつ簡単にできます。
Juliaは、モデルリスクを軽減し、安全性を高めるのです。
Juliaの最も重要な特徴はコミュニティ性です。
JuliaはMITライセンスのオープンソース言語で、IBM、インテル、NVIDIAやARMなど、ほとんど全ての種類のハードウエアで利用されています。
JuliaはMATLAB、PythonやRのシンタックスの使いやすさとC++の実行速度をあわせ持っています。
そのため、開発者はひとつの言語でモデルを推定してから、より速い言語で再現する必要が無くなりました。
Juliaは、エラーを減らし、時間とコストを削減します。
今や、世界的大企業でも使われている言語です。
2016年、IBMとJuliaコンピューティングは、眼底の画像を解析しディープラーニングソリューションを開発しました。
その結果、インドの田舎に住む何千もの人々に、質の高い眼科診察と治療を届けることに成功しました。
7. Haskell(ハスケル)
Haskell(ハスケル)は強い静的型付けで、1990年に開発された非正格な評価を特徴とするプログラミング言語です。
Haskellを使う開発者はそれほど多くはないので、民間企業はHaskellをあまり使いたがりません。
Haskellの素晴らしい特徴の一つは、抽象化です。
(数学を抽象化することで、Javaのオブジェクト指向とは異なります。)
抽象化により、情報豊かで効率的なライブラリがAIのアルゴリズムを表現することができます。
例えば、有名な代数的構造(モジュールまたはモノイドなど)を使うHLearnが、単純な機械学習アルゴリズムの表現し、処理速度を上げることができるのです。
もちろん、あなたはこのようなアルゴリズムを他の言語で書くこともできます。
ですが、Haskellは処理の正確さを保ちつつ、アルゴリズムをもっと意味深いものにしてくれます。
例えば、Haskellで書かれたFaster Cover Treesのように。
Haskellは、埋め込みドメイン特化言語もサポートしています。
プログラミング言語研究において有名な分野で、AIを含む非常に多くのドメインに適用可能です。
つまり、確率的プログラミングに最適であり、開発者のコンパイルエラーを見つけやすくします。
興味がありましたら、HAKARUをご覧ください。HAKARUは、埋め込みドメイン特化言語を開発する研究プロジェクトです。
HaskellにはCUDA(クーダ)縛りがあり、バイトコードにコンパイルされます。
コードには機能的で縛りがないので、簡単にクラウド上の異なるCPUにて実行可能です。
企業での採用例といえば、フェイスブックはスパム対策にHaskellを使用しています。
6. JavaScript
JavaScriptは、高機能のイベント駆動型、インタープリター方式のプログラミング言語です。
主に、Webページをインタラクティブにしたり、ゲームを含むオンラインプログラムを作成するために使用されます。
JavaScriptでは、会話モデルを学習することは必須ではありません。
サーバー側でデータを学習し、次にAjaxによって学習者を呼び出して予測します。
学習者を開発するための大量のライブラリがあります。
そのうちの3つの要約をご紹介します。
ConventJS:ディープラーニングを実装するためのライブラリです。
ブラウザ内で畳み込みニューラルネットワークを訓練します。
完全に接続されたレイヤーと同様に非線形ニューラルネットワークモジュール、分類と回帰費用関数をサポートします。
Synaptic:node.js用のニューラルネットワークライブラリです。
その一般化されたアルゴリズムはアーキテクチャーフリーで、ほとんど全てのタイプの一次および二次ニューラルネットワークアーキテクチャーを開発し訓練することができます。
Mind:Mindは、訓練データを処理するためにマトリックス実装を使います。
ネットワークトポロジーを自由にカスタマイズし、すでに学んだMindをアップロード/ダウンロードすることができます。
Javascriptでは、車輪を再発明する必要はありません。
ただ、AIがどのようなタイプの「学習」をするかを決定するだけで良いのです。
5. Prolog(プロログ)
Prologは、計算言語学と人工知能に関連した論理プログラミング言語であり、意味推論エンジンです。
定理証明、非数値プログラミング、自然言語処理、およびAI全般に広く使用され、柔軟で強力なフレームワークを持っています。
形式的な論理を持つ宣言型言語です。
AI開発者は、事前に設計された検索メカニズム、非決定性、バックトラッキングメカニズム、再帰的性質、高度な抽象化、およびパターンマッチングを重視しています。
Prologは、構造化されたオブジェクトとオブジェクト間の関係を含む問題によく適しています。
例えば、Prologでは「緑色の三角形が青色の三角形の後ろにある」などのように、オブジェクト間の空間的関係を表現するのがより簡単です。
一般的な規則を述べるのも簡単です。
例えば「 もしオブジェクトAがオブジェクトBよりも人に近く、そしてBがCより近いなら、AはCより近くなければなりません。」となります。
Prologの特徴は、事実と規則を実行することをシンプルで簡単にします。
実は、Prologの中の全てが事実もしくは規則です。
あなたが何千もの事実と規則を持っている時であっても、Prologはあなたがデータベースに問いかけることを可能にします。
Prologは、グラフィカルユーザーインターフェース、管理とネットワークアプリケーションの開発をサポートします。
音声制御システムや塗りつぶしテンプレートなどのプロジェクトに最適です。
4. Java
Java言語の最も優れた点は、Java仮想マシン・テクノロジです。
Javaがサポートする全てのプラットフォームで動作する単一のアプリケーションバージョンを作成できます。
トランスパレンシー、保守性、およびポータビリティが高いです。
では、JavaでAIをプログラミングすることの利点は何でしょう。
十分にサポートされている大規模プロジェクトであること、良好なユーザーインタラクション、デバッグの簡単さ、容易な視覚化、そしてSwingとStandard Widget Toolkitの組み込みなどが挙げられます。
Javaの大きな特徴は、多様性です。
インターネット上には何千もの役に立つチュートリアルが存在します。(しかも無料です!)
初心者の場合でも、簡単に効率的にJavaを学ぶことができるでしょう。
以下は、Javaで開発された有名なアプリケーションの例です。
- 機械学習とデータマイニング専用のWEKA機械学習スイート
- ニューラルネットワークの設計、トレーニング、テスト用のJOONEニューラルエンジン
- ALICE(人工言語インターネットコンピュータエンティティの略)、自然言語処理
- Robocode、Javaプログラミングの原理を学ぶためのオープンソースゲーム
3. Lisp(リスプ)
Lispは、1958年に開発された最も古い言語の1つです。
「人工知能」という用語を作り出したジョン・マッカーシー博士によって開発されました。
最近はあまり使われていませんが、Lispは柔軟で拡張性があります。
Lispは、元々はラムダ計算用に開発されたもので、当初から大きく進化してきました。
再帰、動的型付け、高階関数、自動ストレージ管理、セルフホスティングコンパイラ、ツリーデータ構造など、コンピュータサイエンス界に多くのアイデアを導入しました。
Lispは、人工知能ソフトウェアを開発するために使用されます。
記号で計算するプログラムの実装を非常によくサポートするからです。
記号表現と記号を使った計算がLispの得意な点です。
また、Lispはマクロシステム、効率的なコードを生成することができる高度に開発されたコンパイラ、およびハッシュテーブルや動的サイズリストを含むコレクション型のライブラリから成ります。
Lispで開発されたAIアプリケーションはたくさんあります。例えば、
- 取引をチェックするAmerican Express Authorizerのアシスタント(クレジットカード)
- 自然言語翻訳システムMETAL
- Macsyma、最初の大型コンピュータ代数システム
- ACL2、AMDが使用する定理証明器
などです。
2. C ++
C ++は他の言語よりも高速です。
ハードウェアレベルで通信できるため、コードの実行時間を短縮できます。
時間管理が重要な人工知能プロジェクトに非常に役立ちます。
C ++は、ニューラルネットワークに見られるような統計的AIアプローチに使用することができます。
速い実行時間とOOPの原則により、C ++はAIプログラムの良い候補になります。
実際、機械学習ライブラリとディープラーニングライブラリの大部分はC / C ++で書かれており、同じAPIと他のプログラミング言語のラッパーを提供しています。
実行時間とパフォーマンスを制御したい場合は、C ++が最適です。
テンプレートの使用がより安全(型安全)であり、APIを一般化するための良い方法を提供してくれます。
テンプレートは多くの事柄を単純化することができる強力な手法ですが、「使用のタイミングが適切かどうか」を判断するにはより多くの時間と経験が必要です。
C ++は、3Dゲームの複雑さをくつがえし、リソース管理を最適化し、ネットワーキングでマルチプレイを容易にします。
実際に世の中で使用されている例は、サイエンスフィクションゲームDoom 3です。
C ++とUnreal Engine、一連のゲーム開発ツール(C ++で書かれた)を使用しています。
Microsoft Windows、Mac OS、Adobe Photoshop、Maya 3Dソフトウェア、CAD、Mozilla Firefoxは、C ++を使用した有名なアプリケーションです。
1. Python(パイソン)
PythonはDRY(Don’t Repeat Yourself: 繰り返してはいけませんの頭文字)とRAD(Rapid Application Development: 迅速なアプリケーション開発の頭文字)に焦点を当てています。
1990年代初頭に開発されたPythonは、スケーラビリティ、適応性、および学習のしやすさのおかげで、最も急速に成長しているプログラミング言語の1つになりました。
Pythonには、あらゆる種類のプロジェクトを可能にする何百ものライブラリがあります。
モバイルアプリ、Webアプリ、データサイエンス、人工知能など多岐に渡ります。
例えば、科学計算用の「Numpy」、機械学習用の「Pybrain」、高度コンピューティング用の「Scipy」、人工知能用の「AIMA」などです。
Pythonの総体的な言語設計、低レベルと高レベルのプログラミングのバランス、モジュール式プログラミングおよびテストフレームワークは、他の言語とは異なるユニークな特徴です。
また、高速プロトタイピングも特徴のひとつです。
Pythonの研究プロジェクトの80%がAI関係です。
Pythonでは、ほぼ全てのアイデアを30〜40行のコードで素早く検証できます。
Pythonアプリケーションのリストはとても長いです。
画像処理およびグラフィックデザインプログラム、ゲーム、Webフレームワーク、エンタープライズおよびビジネスアプリケーションなどで使用されています。
Pythonで開発された最大のWebサイトには、YouTube、Reddit、Quora、Dropbox、およびDisqusがあります。