人工知能はどのプログラミング言語で作成するのが良いのか?

こんにちは!

ITエンジニア・webディレクター・webデザイナーなどのIT人材の自立・キャリアを支援するITプロパートナーズの木村です。

弊社では、独立精神旺盛な優秀なエンジニアの方々の独立・起業サポートや、フリーランス支援を行っています。

こちらでは、日々の現場でサポートさせていただいている中での、プロの目線で、エンジニアに役立つお話をしてまいります。

それではさっそく見ていきましょう!

いまさら説明するほどのことでもありませんが、人工知能(AI)もプログラムの集合体で、元を正せば数千・数万のソースコードに還元可能です。

そして、何万行ものソースコードに還元可能です。

そのソースコードはプログラミング言語で記述されていますが、言語によって包含する概念が異なることなどもあり、プログラミング言語には得意・不得意というものがあります。

同じシステムでも、利用したプログラミング言語によって、システムの性格が変わってしまうこともあります。

人工知能構築においても、どのプログラミング言語を利用するかは重要な問題です。

そこで今回は、人工知能構築に焦点を合わせてプログラミング言語について見ていきたいと思います。

freelance

 そもそも人工知能とは?

shutterstock_409305979-min

人工知能構築の話をする前に、人工知能について基本的な理解をしておきましょう。

人工知能とは「計算機(つまりコンピュータ)による人間用な知的で高度な情報処理を行う技術」のことを言います。

チェスや将棋、囲碁といった知的ゲームで人間のプロプレーヤーを破ったものが有名ですよね。

話題の自動車の自動運転も人工知能によって実現されていますし、企業の採用活動にて応募者情報から採用価値のある人材を人工知能がビックアップするサービスなどが実際に稼働しています。

人工知能の能力に大きな影響を与える要因は主に以下の二つを見ていきましょう。

学習データ

まず、一つ目は学習データです。

良いインプットがなければ良いアウトプットができないとよく言われますが、人工知能にも同じことが言え、学習させるデータの質や量で人工知能としての能力が大きく変わってしまいます。

これには今人工知能を語るうえで外せないワードの一つであるディープラーニングが関係しています。

ディープラーニングが登場する以前の人工知能に「ネコ」について学習させる際、「耳は三角形」で「ひげが生えている」「しっぽも生えている」といった条件をインプットする必要がありました。

しかも、「キツネ」の画像を見せても、「耳は三角形」で「ひげが生えている」「しっぽも生えている」から「ネコ」に違いないと判断するなど、精度を上げるために条件を増やす必要があり、どうしても性能が限定的だったのです。

それに対してディープラーニングに基づいた人工知能は「ネコ」の画像をたくさん見ることによって“猫のようなもの”のイメージを人工知能自身で獲得していきます。

ちょうど、子供が「ネコ」を何度も見ているうちに「ネコ」と「ネコではないもの」の違いわかってくるのと似たプロセスです。

 ハードウェア

二つ目はハードウェアリソースです。もっといえば、人工知能はGPUの数と質に大きく依存します。

ITエンジニアの方ならばコンピュータの五大装置というものを一度は聞いたいことがあるかと思います。

五大装置とは入力装置、制御装置、記憶装置、演算装置、出力装置のことで一つでも欠けるとコンピュータがコンピュータとして機能することはできません。

これまで、CPU(中央演算処理装置)が、制御装置と演算装置の役割を兼務していましたが、人工知能の分野ではCPUは制御装置に徹し、演算装置はGPU(グラフィック・プロセス・ユニット。PCでいうところのグラフィックボード)が担う構成が普通になっています。

GPUは情報量が多く処理速度が重視される画像や動画を専門的に処理するパーツとして、CPUより高度な並列処理の仕組みが備わっています。

また、パソコンのパーツショップなどでグラフィックボードの商品をチェックすればわかるかと思いますが、グラフィックボードには演算装置としてのGPUだけでなくGPU専用のメモリーカードが搭載されています。

この専用メモリーカードも処理速度を上げるための仕掛けがされており、CPUが利用するメインメモリーとは本質的に異なるものです。

人工知能は非常に多くの情報を速やかに処理することが求められるため、GPUで処理させるのが一般的なのです。

 プログラミング言語以外に触れておくべきもの

shutterstock_538414810-min-min-min

人工知能を作成するに当たって知っておきたいことはプログラミング言語に限りません。数学的な知識が必要です。

具体的には微分・積分・線型代数・統計・確率といった、理系の大学受験クラスの知識があると理想的です。

なぜ、そのような知識が必要かというと、人工知能のアルゴリズムの多くに微分・積分のような数学の計算式が使われているためです。

逆に言えば、このような数学の知識がないと、アルゴリズムを考えたり、既存のアルゴリズムを理解できません。

アルゴリズムが理解できなければ、人工知能が目の前にあってもその性能を完全に活用することはできません。

アルゴリズムを作ることができなければ、フレームワークを使うことである程度のものを開発することができますが、独創的でより優れた人工知能を開発することは不可能です。

本格的に人工知能の開発を行いたいのであれば、絶対に数学的な知識を学習する必要があります。

 人工知能開発で主に使われるプログラミング言語って?

shutterstock_396058687

いよいよ本題ですね。

人工知能の開発に使われる主なプログラミング言語をご紹介していきます。

 python

汎用高水準言語として人気の高いpythonで人工知能の開発を行う方は多いです。

Pythonの特徴は文法を極力単純化することでプログラマーの負担を減らし実装速度を向上させています。

また、Perlの「あることを行うのに1つ以上の方法がある」という哲学に対して、基本的には1つのことに対して1通りの方法しかない、という原則を採用しています。

誰が書いてもだいたい同じようなソースコードになり、わかりやすいという特徴もあります。

プログラミング初学者に人気の言語となっています。

さらにpythonは完全にフリーソフトかつオープンソースであり、インターネット上から無料で標準ライブラリやサードパーティー性の大規模なツール群が用意されており、様々な分野で利用可能です。

そして、昨今の人工知能ブームの盛り上がりに合わせるように、人工知能の開発に役立つライブラリも登場してきました。

 C

JAVAなどのより世代の新しい言語の登場後、存在感が低下したといわれることもあるC言語ですが、人工知能の開発ではむしろJavaよりも存在感があります。

昨今C言語がプログラミング初学者に勧められない理由として、メモリやCPUなどのハードウェアリソースを意識して記述する難しさがあります。

しかしこの特徴は限られたハードウェアリソースを有効活用しなくてはならない組込みシステムなどではむしろメリットとなります。

またハードウェアリソースを有効活用するため、同じ機能を実行するソースコードを書いた際、python やJAVAよりも圧倒的に実行速度が速い、という特徴もあります。

これらのC言語の特徴は、ハードウェアリソースの活用と処理速度がキーポイントになってくる人工知能にとって非常に好ましいものです。

 C++

C言語にオブジェクト指向という概念を追加したC言語の拡張言語です。

後述するJAVAを初めて、Ruby、Perl

C言語と互換性があり、C++単体で使われるというよりも、C言語と組み合わせて使われることが多いように思います。

人工知能の開発においても、C/C++での実装が多いように思います。

 JavaScript

Webアプリ開発では外せないプログラミング言語であるJavaScriptによる人工知能の開発例もあります。

JavaScriptはよくJAVAと混同されますが、まったく異なるプログラミング言語です。実際、開発当初はLiveScriptと呼ばれていました。

JAVAみたいに世界で使われるプログラミング言語になって欲しい、という願掛けの意味もあって、今の名前になったそうです。

ちなみに、当時のJavaScriptの開発会社とJAVAの開発会社は業務提携していたため、名前の問題で揉め事にもなりませんでした。

JavaScriptの実装例としては一部の動画サイトなどがあげられます。

ユーザーがWebブラウザーで動画の再生や停止といった操作をしていますが、実際の処理はWebサービス提供側のサーバが行っています。つまり、ブラウザーで出された操作指示がサーバに即時反映される、という特徴があります。

さらにWebブラウザー上で動くので、利用者の環境への依存度が低いという点もメリットとして挙げられます。

もちろん、利用者の使っているWebブラウザーがJavaScriptに非対応であれば使えませんが、多くのWebブラウザーが対応しているため、その心配はまずありません。

弱点は、Webブラウザーでいろんな人に使ってもらえる人工知能を作ろうとすると、それだけ必要なハードウェアリソースが増えていくことでしょう。

 JAVA

長らく世界で一番注目されている言語の地位を占めているJAVAでも、人工知能の開発はもちろん可能です。

JAVAの特徴はその汎用性です。

30億のデバイス上で走るJAVA、というスローガンもありましたが、Windowsはもちろん、LinuxやUNIX、macOSやandroid上でも動作します。

主要なOSでJAVAが動かないのは、iPhoneに採用されているiOSくらいです。

つまり、JAVAで構築すれば、様々なデバイス上で利用できる便利な人工知能が開発できることになります。

とはいえ、パソコンで用意できるハードウェアリソースとスマートフォンやタブレット端末で用意できるハードウェアリソースでは処理能力に大きな差があり、サーバ用に開発した人工知能をスマートフォンにそのまま移植するのは難しいでしょう。

また、JAVAには一つ大きなデメリットがあります。

それはJAVA仮想マシン(Java VM、JVM)の存在です。

多くのアプリケーションは、OSの上で実行されますが、JAVAで開発されたアプリケーションはJAVA仮想マシン上で動きます。

つまり、このJAVA仮想マシンが、デバイスごとの違いを吸収してくれるおかげで、JAVAが様々なデバイス上で動くことが可能になっています。

裏を返せば、JAVA仮想マシンを展開しなければJAVAで開発されたアプリケーションは動作しません。

普通にアプリケーションを動かすだけでなく、JAVA仮想マシンを展開するためにもハードウェアリソースを割く必要があり、人工知能の開発言語としては、その点がマイナスポイントになっています。

 R

R言語は統計解析向けのプログラミング言語です。

ニュージーランドを代表する国立大学であるオークランド大学にて開発がすすめられました。

オープンソースかつフリーソフトですが、統計解析向けプログラミング言語として非常に充実した機能を持っており、データサイエンスの分野では絶対に外せない言語の一つとなっています。

データサイエンスとは、簡単に言うと、ビックデータを解析しビジネスなどに役立つ新たなナレッジを生み出す作業です。

その作業ために必須なのが統計であり、そして統計を取り扱う際、最良のプログラミング言語なのがR言語なのです。

 Julia

Julia は2009年に開発が始まり、2012年にオープンソースとして公開された比較的、新しいプログラミング言語です。

Juliaの特徴は処理速度に力を入れており、動的言語の中では屈指の速さを誇っています。

動的言語はコンパイルが不要な代わりに、コンパイル時に行われるコード変換などの処理が実行時に行われるため、処理が遅くなってしまうという欠点があります。

Juliaは努力の結果、C言語比で約50%の処理速度(=かかる時間が倍)になっています。

C言語の倍も時間がかかるといわれると、遅いように思うかもしれませんが、RubyやPythonだと10倍かそれ以上かかるので、Juliaの速さは桁違いです。

また、後発プログラミング言語ということもあってか、浮動小数点数計算、線型代数学、高速フーリエ変換、正規表現照合のライブラリなども用意され、機械学習や人工知能開発を意識して開発されたのは明らかです。

 人工知能開発でおすすめな開発言語って?

shutterstock_555713008

上では人工知能の開発に使われている言語をご紹介しましたが、その中でも特におすすめのプログラミング言語を取り上げるとすれば、python、C/C++が二枚看板で、期待を込めてjuliaを取り上げたいと思います。

人工知能開発におけるpythonの良さは、日本ではともかく海外では注目度の高いプログラミング言語であることもあり、すでに人工知能の開発に役立つライブラリがいくつも登場しており、開発しやすい環境が整っている点です。

半面、技術力勝負になっていく中、すでに確立したライブラリ・フレームワークに頼った開発では差別化できないというデメリットもあります。

C/C++のメリットは、ハードウェアリソースの利用効率の良さ、ひいては処理効率性の高さで他の言語に圧倒的な優位性を持っている点です。

有限のハードウェアリソースを最大活用して、多くの情報を速やかに処理することが求められている人工知能の開発には最適解とされることが多いです。

C/C++で開発するデメリットはpythonと共通しており、親和性が高いからこそと言えますが、フレームワークが完成されつつあり、差別化が難しいという点です。

その点、juliaは新進気鋭のプログラミング言語ということもあり、期待は大きいといえます。

人工知能の開発を意識したと思われるライブラリなども非常に交換が持てます。

が、新しい言語のため、言語そのものの情報が少ないという致命的な短所もあります。

とはいえ、今後、注目度が上がれば情報が変わるかもしれません。

 まとめ

shutterstock_523995673

今回は人工知能の開発に使われるプログラミング言語を見ていきました。

どの言語を利用するかを決めることは、家作りに例えるならば、どの建材を使うかを決めるのと同じことです。

非常に重要なポイントですので、“流行りだから”だとか“あの人が良い”って言ってたから、といった単純な理由で決めてはいけません。

どのような人工知能にしていきたいのか考え、最適な言語を選びましょう。

bn04

もし、今あなたが

・フリーランスになるか悩んでる
・自分に合った案件があるのか不安
・そもそも何から始めればいいのか分からない

などお困りであれば、ぜひ弊社ITプロパートナーズのサポート内容を確認してみてください!

登録後、専属エージェントに無料相談もできますよ!

※週2日 / 30万〜のフリーランス案件を紹介中です
※ご経験やご希望によっては案件を紹介できない場合がございますのでご了承ください。


よく見られてる関連案件

b80c977483d024c14549510e194361fe 2_anken 3_anken
The following two tabs change content below.
株式会社ITプロパートナーズ

株式会社ITプロパートナーズ

「IT起業家・フリーランスの自立を支える」というビジョンの元、「週2日からの業務委託案件を紹介する、ITプロパートナーズ」を運営。 ■BestVenture100に創業初年度で選出 ■取材記事:自立する覚悟が、働き方を変える
株式会社ITプロパートナーズ

最新記事 by 株式会社ITプロパートナーズ (全て見る)

freelance