人工知能はどのプログラミング言語で作成するのが良いのか?人工知能はどのプログラミング言語で作成するのが良いのか?こんにちは!ITエンジニア・webディレクター・webデザイナーなどのIT人材の自立・キャリアを支援するITプロパートナーズの木村です。弊社では、独立精神旺盛な優秀なエンジニアの方々の独立・起業サポートや、フリーランス支援を行っています。こちらでは、日々の現場でサポートさせていただいている中での、プロの目線で、エンジニアに役立つお話をしてまいります。それではさっそく見ていきましょう!いまさら説明するほどのことでもありませんが、人工知能(AI)もプログラムの集合体で、元を正せば数千・数万のソースコードに還元可能です。何万行ものソースコードに還元可能です。そのソースコードはプログラミング言語で記述されていますが、言語によって包含する概念が異なることなどもあり、プログラミング言語には得意・不得意というものがあります。同じシステムでも、利用したプログラミング言語によって、システムの性格が変わってしまうこともあります。人工知能構築においても、どのプログラミング言語を利用するかは重要な問題です。そこで今回は、人工知能構築に焦点を合わせてプログラミング言語について見ていきたいと思います。まとめそもそも人工知能とは?人工知能構築の話をする前に、人工知能について基本的な理解をしておきましょう。人工知能とは「計算機(つまりコンピュータ)による人間用な知的で高度な情報処理を行う技術」のことを言います。チェスや将棋、囲碁といった知的ゲームで人間のプロプレーヤーを破ったものが有名ですよね。話題の自動車の自動運転も人工知能によって実現されていますし、企業の採用活動にて応募者情報から採用価値のある人材を人工知能がビックアップするサービスなどが実際に稼働しています。人工知能の能力に大きな影響を与える要因は主に以下の二つを見ていきましょう。学習データまず、一つ目は学習データです。良いインプットがなければ良いアウトプットができないとよく言われますが、人工知能にも同じことが言え、学習させるデータの質や量で人工知能としての能力が大きく変わってしまいます。これには今人工知能を語るうえで外せないワードの一つであるディープラーニングが関係しています。ディープラーニングが登場する以前の人工知能に「ネコ」について学習させる際、「耳は三角形」で「ひげが生えている」「しっぽも生えている」といった条件をインプットする必要がありました。「キツネ」の画像を見せても、「耳は三角形」で「ひげが生えている」「しっぽも生えている」から「ネコ」に違いないと判断するなど、精度を上げるために条件を増やす必要があり、どうしても性能が限定的だったのです。それに対してディープラーニングに基づいた人工知能は「ネコ」の画像をたくさん見ることによって“猫のようなもの”のイメージを人工知能自身で獲得していきます。子供が「ネコ」を何度も見ているうちに「ネコ」と「ネコではないもの」の違いわかってくるのと似たプロセスです。ハードウェア二つ目はハードウェアリソースです。いえば、人工知能はGPUの数と質に大きく依存します。ITエンジニアの方ならばコンピュータの五大装置というものを一度は聞いたいことがあるかと思います。ことで一つでも欠けるとコンピュータがコンピュータとして機能することはできません。これまで、CPU(中央演算処理装置)が、制御装置と演算装置の役割を兼務していましたが、人工知能の分野ではCPUは制御装置に徹し、演算装置はGPU(グラフィック・プロセス・ユニット。PCでいうところのグラフィックボード)が担う構成が普通になっています。GPUは情報量が多く処理速度が重視される画像や動画を専門的に処理するパーツとして、CPUより高度な並列処理の仕組みが備わっています。パソコンのパーツショップなどでグラフィックボードの商品をチェックすればわかるかと思いますが、グラフィックボードには演算装置としてのGPUだけでなくGPU専用のメモリーカードが搭載されています。この専用メモリーカードも処理速度を上げるための仕掛けがされており、CPUが利用するメインメモリーとは本質的に異なるものです。人工知能は非常に多くの情報を速やかに処理することが求められるため、GPUで処理させるのが一般的なのです。プログラミング言語以外に触れておくべきもの人工知能を作成するに当たって知っておきたいことはプログラミング言語に限りません。数学的な知識が必要です。いった、理系の大学受験クラスの知識があると理想的です。そのような知識が必要かというと、人工知能のアルゴリズムの多くに微分・積分のような数学の計算式が使われているためです。逆に言えば、このような数学の知識がないと、アルゴリズムを考えたり、既存のアルゴリズムを理解できません。アルゴリズムが理解できなければ、人工知能が目の前にあってもその性能を完全に活用することはできません。アルゴリズムを作ることができなければ、フレームワークを使うことである程度のものを開発することができますが、独創的でより優れた人工知能を開発することは不可能です。本格的に人工知能の開発を行いたいのであれば、絶対に数学的な知識を学習する必要があります。人工知能開発で主に使われるプログラミング言語って?いよいよ本題ですね。人工知能の開発に使われる主なプログラミング言語をご紹介していきます。python汎用高水準言語として人気の高いpythonで人工知能の開発を行う方は多いです。Pythonの特徴は文法を極力単純化することでプログラマーの負担を減らし実装速度を向上させています。Perlの「あることを行うのに1つ以上の方法がある」という哲学に対して、基本的には1つのことに対して1通りの方法しかない、という原則を採用しています。誰が書いてもだいたい同じようなソースコードになり、わかりやすいという特徴もあります。プログラミング初学者に人気の言語となっています。pythonは完全にフリーソフトかつオープンソースであり、インターネット上から無料で標準ライブラリやサードパーティー性の大規模なツール群が用意されており、様々な分野で利用可能です。昨今の人工知能ブームの盛り上がりに合わせるように、人工知能の開発に役立つライブラリも登場してきました。CJAVAなどのより世代の新しい言語の登場後、存在感が低下したといわれることもあるC言語ですが、人工知能の開発ではむしろJavaよりも存在感があります。昨今C言語がプログラミング初学者に勧められない理由として、メモリやCPUなどのハードウェアリソースを意識して記述する難しさがあります。この特徴は限られたハードウェアリソースを有効活用しなくてはならない組込みシステムなどではむしろメリットとなります。JAVAよりも圧倒的に実行速度が速い、という特徴もあります。これらのC言語の特徴は、ハードウェアリソースの活用と処理速度がキーポイントになってくる人工知能にとって非常に好ましいものです。C++C言語にオブジェクト指向という概念を追加したC言語の拡張言語です。後述するJAVAを初めて、Ruby、PerlC言語と互換性があり、C++単体で使われるというよりも、C言語と組み合わせて使われることが多いように思います。人工知能の開発においても、C/C++での実装が多いように思います。JavaScriptWebアプリ開発では外せないプログラミング言語である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には一つ大きなデメリットがあります。VM、JVM)の存在です。多くのアプリケーションは、OSの上で実行されますが、JAVAで開発されたアプリケーションはJAVA仮想マシン上で動きます。このJAVA仮想マシンが、デバイスごとの違いを吸収してくれるおかげで、JAVAが様々なデバイス上で動くことが可能になっています。裏を返せば、JAVA仮想マシンを展開しなければJAVAで開発されたアプリケーションは動作しません。普通にアプリケーションを動かすだけでなく、JAVA仮想マシンを展開するためにもハードウェアリソースを割く必要があり、人工知能の開発言語としては、その点がマイナスポイントになっています。RR言語は統計解析向けのプログラミング言語です。ニュージーランドを代表する国立大学であるオークランド大学にて開発がすすめられました。オープンソースかつフリーソフトですが、統計解析向けプログラミング言語として非常に充実した機能を持っており、データサイエンスの分野では絶対に外せない言語の一つとなっています。データサイエンスとは、簡単に言うと、ビックデータを解析しビジネスなどに役立つ新たなナレッジを生み出す作業です。その作業ために必須なのが統計であり、そして統計を取り扱う際、最良のプログラミング言語なのがR言語なのです。2009年に開発が始まり、2012年にオープンソースとして公開された比較的、新しいプログラミング言語です。Juliaの特徴は処理速度に力を入れており、動的言語の中では屈指の速さを誇っています。動的言語はコンパイルが不要な代わりに、コンパイル時に行われるコード変換などの処理が実行時に行われるため、処理が遅くなってしまうという欠点があります。Juliaは努力の結果、C言語比で約50%の処理速度(=かかる時間が倍)になっています。C言語の倍も時間がかかるといわれると、遅いように思うかもしれませんが、RubyやPythonだと10倍かそれ以上かかるので、Juliaの速さは桁違いです。ライブラリなども用意され、機械学習や人工知能開発を意識して開発されたのは明らかです。人工知能開発でおすすめな開発言語って?上では人工知能の開発に使われている言語をご紹介しましたが、その中でも特におすすめのプログラミング言語を取り上げるとすれば、python、C/C++が二枚看板で、期待を込めてjuliaを取り上げたいと思います。なっていく中、すでに確立したライブラリ・フレームワークに頼った開発では差別化できないというデメリットもあります。C/C++のメリットは、ハードウェアリソースの利用効率の良さ、ひいては処理効率性の高さで他の言語に圧倒的な優位性を持っている点です。有限のハードウェアリソースを最大活用して、多くの情報を速やかに処理することが求められている人工知能の開発には最適解とされることが多いです。C/C++で開発するデメリットはpythonと共通しており、親和性が高いからこそと言えますが、フレームワークが完成されつつあり、差別化が難しいという点です。その点、juliaは新進気鋭のプログラミング言語ということもあり、期待は大きいといえます。人工知能の開発を意識したと思われるライブラリなども非常に交換が持てます。新しい言語のため、言語そのものの情報が少ないという致命的な短所もあります。いえ、今後、注目度が上がれば情報が変わるかもしれません。まとめ今回は人工知能の開発に使われるプログラミング言語を見ていきました。どの言語を利用するかを決めることは、家作りに例えるならば、どの建材を使うかを決めるのと同じことです。非常に重要なポイントですので、“流行りだから”だとか“あの人が良い”って言ってたから、といった単純な理由で決めてはいけません。どのような人工知能にしていきたいのか考え、最適な言語を選びましょう。30万〜のフリーランス案件を紹介中です※ご経験やご希望によっては案件を紹介できない場合がございますのでご了承ください。株式会社ITプロパートナーズ「IT起業家・フリーランスの自立を支える」というビジョンの元、「週2日からの業務委託案件を紹介する、ITプロパートナーズ」を運営。直人IT起業家やフリーランスエンジニアの自立を支えるサービスを運営しています。ITプロパートナーズという「週2日」からのお仕事紹介をする事で起業時の固定収益を支援しています。こちらではフリーランス・起業家・エンジニアに対してお役立ちノウハウをコラムで提供していきます。約2,000の企業と30,000人超のフリーランスが登録中!「あなたに合った案件」を30秒の簡単登録で探せます。IT/WEB系の起業家・フリーランスの背中を後押しする「アトオシ。