今日、“AI(人工知能)”は最も注目されているトピックの一つであり、またテックジャイアントと呼ばれるような大型テック企業はもちろん、スタートアップも取り組んでいる最大の研究分野といえます。
基本的な計算機や自動操舵装置から、未来を変え得る自己認識機能を持ったロボットの開発まで、その範囲は多岐にわたります。
AI研究における課題は人間の知能と同レベル、またはそれを超えるシステムの開発です。アメリカのビジネスマン、投資家であるマーク・キューバンによると、AIは世界初となるトリオネア(1兆長者)を生みだすといわれています。
「初のトリオネアとなる者は人工知能およびそのデリバティブ(派生商品)についてをマスターし、また我々が想像しなかった方法でそれを実現することができる人物だ」
この記事はAIに熱望を持ちながらも、来るビックプロジェクトにおいてどの言語でプログラミングを行うべきか悩んでいる方へ、AIソフトウェア開発に最適の言語8選をご紹介します。
8. Julia
Juliaは一般的な分割コンパイルが不要な、高度の計算科学や数値解析水準まで対処するよう設計された言語です。多相性の型システム、多重ディスパッチをコアパラダイムとしています。
その数学的なルーツと広範囲に及ぶカスタマイズの汎用性から、Juliaはデータアナリストにとって非常に使いやすい言語であるといえます。Juliaを用いることで、リサーチペーパーからプログラムへのアルゴリズムの変換が容易なだけでなく、変換の際に生じるロスを減らすことができるため、モデルのリスク削減や安全性の改善が期待できます。
中でも最も重要なファクターはその共通性にありますーJuliaは、MIT License(エム・アイ・ティー ライセンス)を利用して公開されているオープンソースです。IBM、インテル、NVIDIA、ARMを含む、ほぼ全ての既存ハードウェアで稼働します。
JuliaはMatlab、Python、R等の構文に近く使いやすいことと、C++と同様の速さを兼ね備えているため、一度ある言語でモデルの概算を行ってからより速い言語で再生成する、というプロセスを踏む必要がないのです。これによって、エラーが減り時間と費用を削減することができます。
現在では世界最大規模の企業で活用されており、2016年にはIBMと眼底イメージを分析、ディープラーニングソリューションを展開したことで、インドの地方に住む何千万もの人々の眼科診療に役立たせました。
7. Haskell
Haskellは、強い静的型付けの純粋関数型言語として1990年に開発されました。Haskellを活用する開発者がそれほど多くいないため、小規模の企業等ではあまり積極的に採用されていません。
Haskellが最も優れている点は、抽象化(Javaとは異なる、純粋数学)にあります。その抽象さによって、表現的で効率的なライブラリがAIのアルゴリズムを表現することができるのです。例えば、HLearnは一般的に知られている代数構造(モジュール、モノイド等)を活用して、シンプルな機械学習アルゴリズムを表現し、またスピードアップさせることができます。
これらのアルゴリズムは他の言語でも書くことができますが、Haskellを活用することによってある程度のパフォーマンスを維持しながらも、他の言語よりさらに豊かにアルゴリズムを表現することができます。例として、faster cover treesはHaskellで書かれていることが挙げられるでしょう。
Haskellはプログラミング言語のリサーチ分野の中では有名なエリアである組み込み型DSLにも対応しており、AIを含めた多くのドメインの使用が可能です。具体的には、確率的プログラミングのホストに適しており、デベロッパーがコンパイルする際のエラー発見を助けます。ご興味のある方はHakuraという組み込み確率的プログラミングを制作しているリサーチプロジェクトをチェックしてみてください。
HaskellはCUDAを呼び込むバインディングを備えており、またバイトコードへと変換されます。その機能的かつステートレスな性質によって、クラウド上の異なるCPUにおけるコードの実行が簡単になります。工業利用の例としては、Facebookがスパム対策としてHaskellを活用しています。
6. JavaScript
JavaScriptは高レベル、イベント駆動型のインタプリタ形式プログラミング言語で、主にゲームを含むオンラインプログラムや、インタラクティブなウェブページの作成において使われています。
JavaScriptではカンバセーション・モデルを学習させる必要がありません。サーバー側でデータを学習させ、Ajaxによって推測をします。ライブラリは数多く存在しますが、中でも代表的な3つをご紹介します。
・ConventJS: ディープラーニング実行のためのライブラリで、ブラウザの重畳ニューラルネットワークのトレーニングを行います。完全に接続されたレイヤーや、非線形ニューラルネットワークモジュール、分類および回帰コスト関数にも対応しています。
・Synaptic: node.jsのためのニューラルネットワークライブラリです。アーキテクチャフリーなアルゴリズムで構成されているため、ほぼ全てのタイプの第1および第2のニューラルネットワークの開発、トレーニングが可能です。
・Mind: データの学習プロセスに“matrix implementation”を活用しています。ネットワークテクノロジーを完全にカスタマイズすることができ、既に学んであるMindsをアップロード・ダウンロードすることができます。
端的に言えば、ホイールを作り直すことなくAIの学習タイプの選択をするだけで良いということになります。
5. Prolog
Prologは計算言語学およびAIに対応した論理プログラミング言語、かつ意味推論エンジンです。定理証明、非数値プログラミング、自然言語処理、そしてAIに一般的に広く使われている、柔軟かつパワフルなフレームワークを持ち合わせています。
Prologは正式な論理を用いた宣言型言語で、AIの開発者がこの言語を高く評価するのは、その事前設計された検索メカニズム、非決定性、バックトラッキングメカニズム、再帰的性質、高水準抽象化、パターンマッチングにあります。
Prologは構造化したオブジェクトとそれに関連した課題への対処に適しています。例えば、オブジェクト同士の空間関係性を簡単に表現することができますー「緑の三角形は青い三角形の後ろにある」というように。また、オブジェクトAはオブジェクトBよりも近く、BがCよりも近い場合、AはCよりも近い、といったような一般的な規則の名言も簡素化できます。
Prologの性質によって、様々な事象や規則をシンプルに実装することができます。実際、Prologを活用しているものは全てがそうした事象や規則です。そのため、そうした何千もの事象や規則のデータベースへのクエリが可能になります。
PrologはGUIや事務管理、ネットワークアプリケーションの開発もサポートしています。音声認識システムやテンプレートの充填等のプロジェクトにも適しているといえます。
4. Java
Javaの最も優れている点は、たった一つのアプリのバージョンを作成するだけで、Javaがサポートするすべてのプラットフォームで稼働するというJava Virtual Machine テクノロジーにあります。その強みは透過性、維持性、移植性にあります。
JavaでAIのプログラミングをする利点としては、大規模なプロジェクトへの充分なサポート、ユーザーインタラクションの良さ、デバッグのしやすさ、楽に視覚化できる点に加え、SwingとStandard Widget Toolkitの組み込みができることが挙げられます。
最大のアドバンテージとしては多様さが挙げられるでしょう。チュートリアル動画(無料)は何千とアップされていますので、ビギナーの方でも簡単かつ効率的に学ぶことができます。
Javaを使ったアプリで有名なものとしては以下が挙げられます。
- WEKA 機械学習およびデータマイニングのためのツール
- JOONE デザイン、ニューラルネットワークの学習・テストのためのニューラルエンジン
- ALICE(artificial linguistic internet computer entityの略) 自然言語処理を行うチャットボット
- Robocode Javaプログラミングの原則を学ぶためのオープンソースゲーム
3. Lisp
Lispは傑出した最も歴史の長い言語の一つ(1958年に開発)で、“Artificial Intelligence (人工知能)”という言葉を造ったジョン・マッカーシー博士によって開発されました。今日ではあまり活用されていませんが、フレキシブルかつ伸長可能な言語です。
もともとラムダ微積分計算のために開発され、以来ずっと発展し続けてきました。Lispは、再帰、動的型付け、高次関数、自動ストレージ管理、自己ホスティングコンパイラ、ツリーデータ構造等、コンピュータサイエンスにおける多くのアイデアを導入しています。
またLispはシンボルの計算実装が得意なため、AIのソフトウェア開発にも使われています。シンボルの表現とその計算がLispの強みといえるでしょう。
また、Lispは効率的なコードを生成する優れたマクロシステムのコンパイラ、ハッシュテーブルや動的なリストを含んだライブラリで構成されています。Lispで開発されたAIアプリケーションは数千とあります。
- American Express Authorizer’s Assistant 取引内容の確認(クレジットカード)
- METAL 自然言語翻訳システム
- Macsyma 計算機代数システム
- ACL2 AMDで使われれている定理証明器
2. C++
C++はハードウェアレベルで通信でき、コード実行時間を短縮することができるため、他の言語より高速であるといえます。AIのような時間の短縮が重要であるプロジェクトにおいては大変便利です。 ニューラルネットワークで見られるような統計的なAIのアプローチでも活用が期待できるでしょう。
その実行速度の速さとオブジェクト指向プログラミングの原則によって、C++はAIのプログラミングに適する言語といえます。実際に、機械学習やディープラーニングのライブラリの大部分はC/C++で作成されており、APIへも同様に対応、他の言語へはラッパーを介して活用可能となっています。
また、ランタイムとパフォーマンスをコントロールしたい場合にも、C++は良い選択といえるでしょう。テンプレートは比較的安全に使用でき(型安全)、より良いAPI生成方法も提供しています。テンプレートは様々なプロセスを簡素化する上で強力なテクニックですが、利用率の正当性を判断するのにより多くの時間と経験値を要します。
C++は3Dゲームやリソース管理の効率化、ネットワーキング上でのマルチプレイヤーのファシリテーション等の複雑さを解消します。現実的には、SFゲームのDoom 3、ゲーム開発ツールのUnreal Engine(アンリアルエンジン)、Microsoft Windows、Mac OS、Adobe Photoshop、Maya 3D Software、CAD、Mozilla Firefox等がC++を活用している有名な例の一部です。
引用: 50 Shades of Computer Programming Laws
1. Python
PythonはDRY (don’t repeat yourself)とRAD (rapid application development)にフォーカスしたプログラミング言語です。1990年代初期に開発されて以来、Pythonはそのスケーラビリティおよび適応性、学習のし易さから、最も急速に進化するプログラミング言語の一つとなりました。
Pythonはどんな型のプロジェクトも可能にする数百ものライブラリを持ち合わせており、それがモバイルアプリでもウェブアプリでも、データサイエンスやAIの範囲でも対応できてしまいます。例えば、科学技術計算に使われる「Numpy」や機械学習の「Pybrain」、高度な計算に使われる「Scipy」、AIにおける「AIMA」等が挙げられます。
Pythonと多言語の差は、総合的な言語デザイン、高レベル・低レベルのプログラミング、モジュラープログラミング、テストフレームワークのそれぞれのバランスにあります。また、プロトタイピングにおける速さも強みの一つです。約80%がリサーチに依るといわれるAIの開発において、Pythonは殆ど全てのアイデアを30~40行のコードで即座に有効化することができます。
引用: 10+ best programming software for writing code
Pythonによるアプリケーションリストは大変長く、画像やグラフィックデザインプログラムのプロセシング、ゲーム、ウェブフレームワーク、エンタープライズやビジネス活用のためのアプリケーション等、多くの用途に使われています。Pythonが活用されている代表的なウェブサイトとしては、YouTube、Reddit、Quora、Dropbox、Disquq等が挙げられます。