Search

検索したいワードを入力してください

2019年01月22日

【ゼロから始めるAI開発】AIで使える言語を紹介

近年注目されているAI(人工知能)について、そもそもAI(人工知能)とは何なのか、そしてAIを実装するのに使用されているプログラミング言語を、それぞれの言語の特徴と共に解説します。これを読んで、実際にAI(人工知能)を自分の力で作ってみましょう。

そもそもAI(人工知能)とは

AI(人工知能)の定義は、多くの研究者の間で長年議論されてきたテーマです。実は明確な定義は定まっておらず、一般的に非常に広い概念をもった言葉で、専門家によっても定義が異なる事が多々あります。

アニメで登場するロボットのようなものを思い浮かべる方もいれば、ソフトウェアのようなものを思い浮かべる方もいます。

AIは、大きく2つに分類されます。「強いAI」と「弱いAI」です。

強いAIとは

「強いAI」とは、人間のようにものを考え、認識・理解し、人間のような推論・価値判断のもとに実行をすることができるAIを指します。アニメや映画で描かれる、人間と共存している人工知能ロボットがこれに当たります。

しかしながら、現在ではまだ強いAIの開発に成功していません。完成がいつになるのか、まだ誰も予想できません。

弱いAIとは

一方「弱いAI」とは、ある特定の範囲で考えるAIのことで、特定のタスクについては人間と同等・それ以上の能力を発揮するAIを指しています。現在、世間で活用されているAIはすべてこちらに分類されます。

「弱いAI」では、あらかじめ「ルール」をたくさん用意しておき、それを機械に覚えさせた「エキスパート・システム」が実用化されています。例えば、外国語翻訳者や医者、弁護士といった専門家のノウハウをルール化して組み入れたものです。ただ、ルールを人が作り登録しなければなりません。

AIと機械学習

AIも定義や用途によってさまざまに分類されますが、ここ数年で急速に注目されているのがAIの一分野である「機械学習」です。近年の技術革新が進み、一般の方でもプログラミングによって簡易に機械学習を実装することが可能となりました。

AIと機械学習の定義・境界が混合しがちですが、あくまでも機械学習はAIに内包されるもので、特定のタスクをトレーニングによって機械に実行させる手法です。

もう少し詳細に説明すると、機械学習とは
1.”特徴”をつかみ”法則化”する
2.法則を”自動化”する
を行う手法です。

大量のデータから機械が「学習」を行い、そのデータの特徴を「法則化」し、その法則を基に新たなデータに対して「自動で」予測を行う、その一連の手法を「機械学習」と呼んでいます。

Deep Learning(深層学習)

「機械学習」の中の一分野として、「深層学習」という手法が存在します。機械学習は、大量のデータから規則性や関連性を見つけ出し、判断や予測を行う手法です。

そのためには、「色と形に注意」のように着目すべき特徴(特徴量)を人間が指定する必要があります。

Deep Learning(深層学習)は、その機械学習を発展させた手法であり、人間の脳神経回路をモデルにした多層構造アルゴリズム「ディープニューラルネットワーク」を用い、特徴量の設定や組み合わせをAI(人工知能)自ら考えて決定する手法をさします。

AIプログラミングに大切なもの

学習データ

上記の説明の中で、機械学習は「大量のデータ」を学習して特徴を法則化するものと説明しました。学習するために必要となる「大量のデータ」を学習データと呼びます。つまり、機械学習において最も基礎であり重要な要素といえます。

学習データに必要なことは量と質です。データから特徴を抽出するにあたり、大量のデータが必要となります。それは数千単位〜数億単位で必要と言われています。

また、それらのデータが学習しやすい綺麗なデータでなければいけません。

ハードウェア

機械学習が近年注目された理由の一つに、ハードウェアのスペックの進化が挙げられます。機械学習では、大量のデータ計算が必要となり、それを短時間で行える環境・ハードウェアが重要となります。

近年のハードウェアのスペックの進化はめざましく、一般の方でもハイスペックなハードウェアを安価で購入することが可能となりました。そのおかげで、機械学習という分野が汎用的なものになり、今日のブームを引き起こしました。

AIプログラミングに適した言語

Python

シンプルで学びやすいプログラミング言語

分かりやすい文法が特徴で、非常に広く使われているため学習するためのサイトや本もそろっており、学びやすいプログラミング言語と言われているPythonは、機械学習で頻繁に活用されています。文法が簡単・シンプルであるため、他の人が書いたコードを理解しやすいという利点が上げられます。

機械学習エンジニアやデータサイエンティストは、データセットの前処理やアルゴリズムの構築/調整などのさまざまなタスクが絡み、一人で完結することがむしろ少ない仕事です。

そのため、いかに他の人が理解しやすく、メンテナンスしやすいコードを書けるか、ということも非常に重要な要素となります。

豊富なライブラリ・フレームワーク

Pythonが機械学習に利用されている最も大きな理由に、非常に多くの機械学習向けのライブラリやフレームワークが存在しているということがあげられます。

500万件の膨大なデータを高速に処理するためのPandasや、データをアルゴリズムでより高度かつ高速に処理するためのNumpy、

深層学習のためのライブラリ・フレームワークとしてGoogleが開発した、オープンソースとして公開しているライブラリであるTensorFlow(テンソル・フロー)や、非常に簡単にディープニューラルネットワークの構築が可能なKeras(ケラス)などがあげられます。

C

長年使用されてきた信頼性

C言語は、現在用いられている主流のプログラミング言語の中では最も古い言語であり、多くのプログラミング言語が、C言語をベースに作られています。

そのため、かなり汎用性が高く、ソフトウェア開発やシステム管理からゲーム開発はハードウェア開発まで可能となります。現在広く利用されているプログラミング言語の中では、比較的歴史の長い言語になります。

昔から存在しているにもかかわらず、現在でも人気が衰えることのない安定した言語です。

処理速度の速さ

マシン語に近いC言語は、高速でコンパクトなプログラムが実現可能であることが特徴として挙げられます。機械学習では、上述のように大量のデータの計算処理が必要となります。

そのため、いかに早く計算が行われるのかが非常に重要な要素となります。C言語は、数あるプログラミング言語の中で処理実行速度は最速を誇り、大量のデータ処理に大きな威力を発揮します。

C++

C言語を拡張したオブジェクト指向言語

C++は、1983年にベル研究所の科学者であるビャーネ・ストロヴストルップ氏によってC言語の拡張版として開発された言語です。C言語との互換性があるうえ、C言語同様に処理速度の速さが大きな特徴となります。

C言語との大きな違いとして、C++はコンピュータに直接命令できる高級言語であるC言語とオブジェクト指向の柔軟性を兼ね備えている言語になります。そのため、高い保守性を誇り、システムの拡張や移行も簡単に行うことができるという点が特徴的です。

信頼性とパフォーマンスの高さ

C言語の拡張であるゆえに、現在に至るまで長く使用されてきた非常に信頼性の高い、高速な処理が可能なプログラミング言語です。

そのため、高負荷で複雑な処理を行うアプリケーションや規模の大きい業務用のソフトを開発するのに向いています。これは、CやC++はコンピュータのメモリを直接制御できたり、メモリを節約するための機能が備わっているためです。

C言語を理解した上で学ぶ必要があるため学習コストは高いものの、いまだに人気が高く、機械学習はもちろん、さまざまな場面で使用される言語になります。

R

統計解析用のフリーソフトウェア

R言語とは、オープンソースのフリーソフトウェアであり、プログラミング言語の一種で、統計的なデータ解析・データ分析に特化したスクリプト言語になります。フリーソフトなので、無量で利用できますし、オープンソースという特徴を活かして現在も改良され続けられています。

統計解析用の言語なので、汎用性はありません。その分、統計解析に関しては非常に簡単なプログラムで行えます。

Pythonも統計解析用のライブラリが豊富ですが、統計解析力はR言語の方が上だと言われることもあります。

データ処理の大きな味方

データの操作に対しても非常に柔軟性があり、自由自在にデータを処理することができます。Rでは解析用のコマンドが豊富に存在し、覚えれば覚えるほどRをより便利なツールとして使いこなすことができます。統計学の知識がない人でも、短期間の学習で使いこなせるようになるところも大きな魅力です。

統計解析が大きな役割を果たす機械学習はもちろん、さまざまビジネスの場面において、統計解析を専門に扱えるR言語の重要性は高まっています。

世界中のデータサイエンティストが競い合うデータ解析コンペ「Kaggle」では、R言語かPythonでの参加を求めています。

Julia

科学技術計算向けの、新しいプログミング言語

Juliaとは、比較的新しく開発された言語で、「実行速度」と「記述性」の両立を目指したテクニカルコンピューティングのためのハイレベルで高性能な科学技術計算向けプログラミング言語です。

汎用プログラミング言語水準から高度の計算科学や数値解析水準まで対処するよう設計された高水準/動的プログラミング言語で、Julia自身で実装された基本ライブラリを基本とし、CやFortranライブラリを統合することで、「線形代数」「乱数生成」「信号処理」「文字列処理」などの機能を実現しています。

他言語ライブラリとの連携

Juliaは「歴史が浅いためライブラリ数が少ない」という問題に対して、外部ライブラリ連携でカバーできるようになっています。

CおよびFortran共有ライブラリの外部関数について、既存コードを再コンパイルすることなく呼び出すことができ、Python関数を直接呼び出すことも可能となります。それらを組み合わせることで、機械学習でも大きな威力を発揮し、近年注目を浴びています。

JavaScript

Webサービスの「動き」を実現するプログラミング言語

JavaScriptは、主にWebサイトやWebアプリ・サービスなどを開発する際によく利用されています。

例えば、ボタン押したらポップアップが出てくる・アンケートで答えていない質問があったときにアラートを出すなど、Webサービスの動きをつけてくれます。Web開発者にとっては非常に馴染みが深いプログラミング言語です。

Web開発から機械学習まで

Web開発では非常に馴染みが深いものの、機械学習などのデータ解析処理が必要な場面で使われることはあまり想定されていませんでした。

しかしながら、近年ではJavaScript用の機械学習ライブラリが日々リリースされています。JavaScriptでも機械学習の実装が可能になったということも、機械学習が発展した理由の一つです。

Javascript用の機械学習ライブラリとしては以下のようなものがあります。
・TensorFlow.js
・Brain.js
・ Synaptic.js
・WebDNN
日々新たなライブラリ・フレームワークが開発され、より機械学習が実装しやすい環境が進んでいます。

Java

世界的に人気で環境に依存しないプログラミング言語

Javaは、世界的に使用されている言語、習得したい言語として1位を記録するほどに期待度の高いプログラミング言語の1つです。

Javaの大きな特徴として、OSに依存をしないことからどんな環境でもソフトを動かすことができる点があげられます。例えば、Android用のアプリ開発に使用されているのはもちろん、ガラパゴス携帯(ガラケー)でもJavaを使ったアプリケーションを組むことができ、汎用性の高さが伺えます。

習得難易度は高いものの、幅広い開発ができる

Javaは、業務用システムからAndroidアプリまで、基本的にどのようなものでも作ることができます。機械学習でも同様で、Javaでの機械学習用ライブラリも開発されています。その実行スピードの速さから、大量データ処理に適した言語ともいえます。

Javaを使用した開発案件は非常に多く、求人数もいまだに豊富です。機械学習の実装に留まらず、Javaをマスターすることによる恩恵は数えきれないほど挙げられ、長年使用されている理由がここにあります。

Matlab

アカデミックの場で使用される数値解析ソフト

Matlabは、金融業や製造業を中心とした各種の業界で使われている数値解析ソフトです。数値解析アプリケーションの開発環境であり、開発したアプリケーションを実行形式ファイルとしてシステムに配布することができます。

行列演算はもちろん、グラッフィクス機能や GUI(Graphical User Interface)等まで充実したパッケージとなっています。また、機械工学、電気・電子工学、数学・物理学や情報学、また経済学・統計学・心理学などの分野にも使用され、主にアカデミックな場面で使用される数値解析ソフトです。

グラフィック化に強み

Matlabでは、複雑な数式や大量のデータの図式化・グラフィック化が非常に容易に実装できます。大量のデータを解析することは、人が頭の中で描けるイメージを優に超え、全体像をなかなか具体的なイメージとして捉えることができません。そんなとき、データの全体像をわかりやすく(かつ綺麗に)描画できることは、そのデータ全体をイメージするのに非常に役立ちます。

もちろんpythonでも、解析の図式化が得意なライブラリ「matplotlib」が存在しています。名前が似ていますが、このライブラリの元になったのはまさにこのMatlabです。非常に多様な分野で使用されることから、自分の専門分野に特化した方法で使用することも可能となります。

Haskell

純粋関数型言語

Haskellとは、関数型のプログラミング言語の一つで、「純粋関数型言語」という関数型の思想に強く沿った文法や機構をもつプログラミング言語です。純粋関数型言語とは、同じ関数はどのタイミングで評価しても同じ値になる という特徴をもつ関数型言語のことをいいます。

純粋関数型であるゆえに、バグが発生しづらい文法と、それによって得られるプログラミング言語としての安全さが特徴としてあげられます。Haskellは特に、株や為替の自動取引(システムトレード)などの場面で使われます。間違いが発生しないことに加え、数学との相性の良さから、金融投資関係で広く使われている言語です。

数学的強さと抽象概念の表現力

Haskellは抽象化(抽象的な数学)に最適といわれています。それにより、表現力豊かで効率的なライブラリが、抽象的で理解が難しいAIアルゴリズムを表現することを可能にしています。

AIアルゴリズムは得てしてブラックボックスになりがちです。非常に複雑なアルゴリズムで成り立っており、その表現力はアルゴリズムの理解に欠かせないものとなっています。

AI(人工知能)プログラミングの流行と今後

多くのプログラミング言語によるAI(人工知能)プログラミングが可能となったことに加え、ハードウェアの爆発的な進歩など重なり、一般の人でも容易にAIを実装することができるようになりました。

今後、AI(人工知能)プログミングはさらなる速度で発展していきます。多くの企業でAIを活用したプロダクトが開発されることは確実であり、今後はAIが社会常識として捉えられる日が来ると言っても過言ではありません。

まとめ

今後、さらに重要度を増してくるAI(人工知能)プログラミングで使用されるプログミラング言語について、ご理解いただけたでしょうか。プログラミング言語は紹介した以外にも多数存在し、言語によってその特徴は千差万別です。

ぜひ興味をもった言語を学び、自分が作りたいAIを自らの力で作ってみてください。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related