こんにちは、 ITプロマガジン です。
いまさら説明するほどのことでもありませんが、人工知能(AI)もプログラムの集合体で、元を正せば数千・数万のソースコードに還元可能です。そして、何万行ものソースコードに還元可能です。
そのソースコードはプログラミング言語で記述されていますが、言語によって包含する概念が異なることなどもあり、プログラミング言語には得意・不得意というものがあります。
同じシステムでも、利用したプログラミング言語によって、システムの性格が変わってしまうこともあります。人工知能構築においても、どのプログラミング言語を利用するかは重要な問題です。
そこで今回は、人工知能構築に焦点を合わせてプログラミング言語について見ていきたいと思います。
なお人工知能構築も含めたプログラミング案件全般の獲得方法については「フリーランスのプログラミング案件を獲得する方法」も参考にしてみてください。
ドンピシャ案件の探し方
「案件はたくさんあるはずなのに、なかなか自分の望む案件が見つからない…」
エンジニア市場は売り手市場であるものの、いまだに正しいマッチングノウハウが確立されておらず、多くの方が案件探しに苦労されています。
ですが、現在の市場感や企業側に刺さる経験・スキルを理解し正しく案件探しをすれば、誰でも自身のバリューを活かし単価を伸ばすことができる、というのも事実です。
ITプロパートナーズでは、
・9割がエンド直案件のため、高単価
・約6割が週3-4案件のため、柔軟に働ける
・事業会社の自社開発案件が多い
などの魅力的な案件を数多く保有し、マッチング能力の高い即戦力エージェントが完全サポートします。
初めてのフリーランス、情報収集段階でも大丈夫です。あなたの働き方にマッチし、単価も高く、最もバリューを発揮できる案件を探しませんか?
目次
そもそもAI(人工知能)とは?
人工知能構築の話をする前に、人工知能について基本的な理解をしておきましょう。
人工知能(AI:Artificial Intelligence)とは「計算機(つまりコンピュータ)による人間用の知的で高度な情報処理を行う技術」のことを言います。
チェスや将棋、囲碁といった知的ゲームで人間のプロプレーヤーを破ったものが有名ですよね。
話題の自動車の自動運転も人工知能によって実現されていますし、企業の採用活動にて応募者情報から採用価値のある人材を人工知能がビックアップするサービスなどが実際に稼働しています。
人工知能の能力に大きな影響を与える要因は主に2つあります。
- 学習データ
- ハードウェア
それぞれどのような違いがあるか見ていきましょう。
学習データ
まず1つ目は学習データです。
良いインプットがなければ良いアウトプットができないとよく言われますが、人工知能にも同じことが言え、学習させるデータの質や量で人工知能としての能力が大きく変わってしまいます。
これには今人工知能を語るうえで外せないワードの一つであるディープラーニングが関係しています。
ディープラーニングが登場する以前の人工知能に「ネコ」について学習させる際、「耳は三角形」で「ひげが生えている」「しっぽも生えている」といった条件をインプットする必要がありました。
しかも、「キツネ」の画像を見せても、「耳は三角形」で「ひげが生えている」「しっぽも生えている」から「ネコ」に違いないと判断するなど、精度を上げるために条件を増やす必要があり、どうしても性能が限定的だったのです。
それに対してディープラーニングに基づいた人工知能は「ネコ」の画像をたくさん見ることによって“猫のようなもの”のイメージを人工知能自身で獲得していきます。
ちょうど、子供が「ネコ」を何度も見ているうちに「ネコ」と「ネコではないもの」の違いわかってくるのと似たプロセスです。
ハードウェア
2つ目はハードウェアリソースです。もっといえば、人工知能はGPUの数と質に大きく依存します。
ITエンジニアの方ならばコンピュータの五大装置というものを一度は聞いたいことがあるかと思います。
五大装置とは入力装置、制御装置、記憶装置、演算装置、出力装置のことで一つでも欠けるとコンピュータがコンピュータとして機能することはできません。
これまで、CPU(中央演算処理装置)が、制御装置と演算装置の役割を兼務していましたが、人工知能の分野ではCPUは制御装置に徹し、演算装置はGPU(グラフィック・プロセス・ユニット。PCでいうところのグラフィックボード)が担う構成が普通になっています。
GPUは情報量が多く処理速度が重視される画像や動画を専門的に処理するパーツとして、CPUより高度な並列処理の仕組みが備わっています。
また、パソコンのパーツショップなどでグラフィックボードの商品をチェックすればわかるかと思いますが、グラフィックボードには演算装置としてのGPUだけでなくGPU専用のメモリーカードが搭載されています。
この専用メモリーカードも処理速度を上げるための仕掛けがされており、CPUが利用するメインメモリーとは本質的に異なるものです。
人工知能は非常に多くの情報を速やかに処理することが求められるため、GPUで処理させるのが一般的なのです。
AI(人工知能)で主に使われるプログラミング言語9選
これから先は、人工知能の開発に使われる主なプログラミング言語の説明をしていきます。
人工知能の開発に使われる主なプログラミング言語は、9つあります。
- Python
- C
- C++
- JavaScript
- JAVA
- R
- Julia
- Haskel
- Matlab
それぞれ解説していきます。
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の速さは桁違いです。
また、後発プログラミング言語ということもあってか、浮動小数点数計算、線型代数学、高速フーリエ変換、正規表現照合のライブラリなども用意され、機械学習や人工知能開発を意識して開発されたのは明らかです。
Haskell
Haskellは1985年に発表された純粋関数型プログラミング言語で、数学との相性がいいとされています。
純粋関数型プログラミング言語の特徴の1つとして高いメンテナンス性であるバグが発生しづらいといった点から、株・為替トレードなどを中心とした金融系のシステムで活用されています。
デメリットとして、ほかの言語と比べAI開発向けのライブラリは公開されていない、他のプログラミング言語とはかなり異なるため、他の言語の知識から流用できる部分が少なくなります。
Matlab
Matlabは行列や配列処理を得意とする言語です。
関数やアルゴリズム開発、行列計算、GUIなど様々なことができ、自動車・金融工学・ロボットで使用する人工知能を得意としています。
また、この言語は有償でライセンスを購入することで使用できるプログラミング言語です。
結論:人工知能開発でおすすめな開発言語とは?
人工知能の開発に使われている言語をそれぞれ紹介してきました。
その中でも特におすすめのプログラミング言語を取り上げるとすれば、Python、C/C++が二枚看板で、期待を込めてjuliaを取り上げたいと思います。
まず、プログラミング言語利用実態調査2021によると、455人へ現在使っているプログラミング言語の結果1位がPythonという結果でした。
これらの結果からも、PythonとC/C++がおすすめであると言えます。
人工知能開発におけるPythonの良さは、日本ではともかく海外では注目度の高いプログラミング言語であることもあり、すでに人工知能の開発に役立つライブラリがいくつも登場しており、開発しやすい環境が整っている点です。
半面、技術力勝負になっていく中、すでに確立したライブラリ・フレームワークに頼った開発では差別化できないというデメリットもあります。
C/C++のメリットは、ハードウェアリソースの利用効率の良さ、ひいては処理効率性の高さで他の言語に圧倒的な優位性を持っている点です。有限のハードウェアリソースを最大活用して、多くの情報を速やかに処理することが求められている人工知能の開発には最適解とされることが多いです。
C/C++で開発するデメリットはpythonと共通しており、親和性が高いからこそと言えますが、フレームワークが完成されつつあり、差別化が難しいという点です。
その点、juliaは新進気鋭のプログラミング言語ということもあり、期待は大きいといえます。人工知能の開発を意識したと思われるライブラリなども非常に好感が持てます。
ですが、新しい言語のため、言語そのものの情報が少ないという致命的な短所もあります。とはいえ、今後、注目度が上がれば情報が変わるかもしれません。
プログラミング言語以外に触れておくべきもの
人工知能を作成するに当たって知っておきたいことはプログラミング言語に限りません。数学的な知識が必要です。
具体的には微分・積分・線型代数・統計・確率といった、理系の大学受験クラスの知識があると理想的です。
なぜ、そのような知識が必要かというと、人工知能のアルゴリズムの多くに微分・積分のような数学の計算式が使われているためです。
逆に言えば、このような数学の知識がないと、アルゴリズムを考えたり、既存のアルゴリズムを理解できません。
アルゴリズムが理解できなければ、人工知能が目の前にあってもその性能を完全に活用することはできません。
アルゴリズムを作ることができなければ、フレームワークを使うことである程度のものを開発することができますが、独創的でより優れた人工知能を開発することは不可能です。
本格的に人工知能の開発を行いたいのであれば、絶対に数学的な知識を学習する必要があります。
AI(人工知能)の開発ができる職種
人工知能の開発ができる職種にもいくつかありますので紹介していきます。
AIエンジニア
AIエンジニアとは、AI(人工知能)を作り出したり、膨大なデータを処理し解析を行ったりします。
プログラムを書くことはもちろん行いますが、AIにデータを与えて学習させ解析する業務もあります。
いくつかの専門的なスキルも必要とされ、電気・電子回路や機械工学などハード面、数学的な知識などが求められます。
機械学習エンジニア
機械学習エンジニアとは、AI(人工知能)におけるシステムの設計や構築、実装などを行います。
コンピューターへプログラムやデータを覚えさせたのち、様々な条件を与え反復させ学習させることで、知能を向上させたりします。
人間では膨大なデータを処理しきれなかったものを、コンピューターで処理させ最終的にはコンピューター自身がアルゴリズムを組み立て知能を向上させていく技術です。
データサイエンティスト
データサイエンティストとは、膨大な企業からのデータを集め分析し、そこから必要な情報を取り出したり、読み解く職種です。
また、人工知能を用いて新しい価値を提供する職種でもあります。
必要なスキルとして、プログラミングと分析力は必須になります。そのほかにも数学的な知識や、分析した結果から課題を解決するためのコンサルティングの力も必要になります。
AI(人工知能)プログラミングの習得方法
人工知能を勉強しようと思っても範囲も広く、言語の種類も多いのでどこから手をつけたらいいか迷いますよね。
ここからは、人工知能の習得方法についてご紹介します。
プログラミングスクールに通う
一番手っ取り早いのはプログラミングスクールに通うことです。
AIエンジニアの多くが使用するPythonやC/C++などの言語を教えているプログラミングスクールは多くあります。
スクールに通うメリットとして、初心者からでも学習を始めることができる点や分からなかった時は質問できるのは大きいです。スクールによっては課題として、システム開発をしたりするので、先々ご自身の実績にすることもできます。
教材を使用して独学で勉強する
オンライン教材で勉強をするのも一つの選択肢です。
例えばUdemyなどが有名なオンライン学習サービスになります。
Udemyでは人工知能の学習に必要なネットワークの教材はもちろん、様々なプログラミング言語の教材を取り揃えています。
Udemyは、5,000〜20,000円程の有料教材を購入し、自身のペースで学習を進められます。ですが、高頻度でセールを行っているので、教材によっては20,000円以上するものが1,600円で勉強ができるチャンスがあるので確認してみましょう。
カリキュラムでは初心者向きに機械学習の基礎のものから、中級向け、専門性レベルまで幅広く用意されています。
まとめ
今回は人工知能の開発に使われるプログラミング言語の紹介をしていきました。
どの言語を利用するかを決めることは、家作りに例えるならば、どの建材を使うかを決めるのと同じことです。
非常に重要なポイントですので、“流行りだから”だとか“あの人が良い”って言ってたから、といった単純な理由で決めてはいけません。
どのような人工知能にしていきたいのか考え、最適な言語を選びましょう。
- 高額案件を定期的に紹介してもらいたい
- 週2日、リモートワークなど自由な働き方をしてみたい
- 面倒な契約周りはまかせて仕事に集中したい
そのような方はぜひ、ITプロパートナーズをご利用ください!
まずは会員登録をして案件をチェック!