現在のAI(人工知能)のブームの火付け役となったのは、Deep Learning(ディープラーニング)という技術です。最近ではフレームワークと呼ばれる実装済みのライブラリが入手でき自分でたくさんのプログラムを書かずに簡単に実装ができる時代ですので、自分でDeep Learningを実装してみたいという人も増えてきていますよね。
ある意味では、Deep Learning実装の大部分は出来合いのフレームワークとして提供されているので、さらなる実装をする必要性というのは少なくなっていることも影響してAI(人工知能)を使ったアプリ開発にも興味が集まってきています。
そこで今回は、Deep Learningの実装とはどういうものであるかという考察からスタートし、それに必要な技術と便利なツールについてご紹介していきましょう。
※ライブラリ:再利用できるプログラムを集めたもの。多くの場合は単体では動かず、主のプログラムの実行を補助するものです。
※Deep Learning(ディープラーニング):人間の脳の仕組みを真似てコンピュータのプログラム上で再現した技術です。詳しくは以下でご紹介しています。
Deep Learningの実装とは何か
そもそも「実装」とはどういうことか?という点から意味を押さえていきましょう。
一般にソフトウェアの開発工程は、まず何をやりたいのかという要求を明確にし、それを仕様に落としてどういうアーキテクチャでどう作るのかというソフトウェアの設計を行って、実際にプログラムを書く実装を行います。したがって、実装=プログラミングと言えます。
一般のソフトウェアの場合、プログラミングをしてプログラムがちゃんと動けばやりたいことができるというのが普通なのでプログラム自体の知的財産としての価値が高いと言えますが、それに対してAI(人工知能)の場合はちょっと違っています。ひょっとしたらご存知の方もいらっしゃるかもしれません。
AI(人工知能)プログラミングでやりたいことはちゃんと動くものを作るというよりも、コンピュータにデータのパターンや傾向を掴んだモデル(数式で表現される)の構築を行わせて、構築したモデルを用いて未知のデータの予測や識別などのタスクをする、ということです。(これは機械学習と呼ばれます)
※機械学習については下記ページをご参考ください
ちなみにAI(人工知能)の実装といっても、実はフレームワークによってDeep Learningの実装に当たるソースコードの大部分はほぼ無料で提供されていて、実際は自分で実装する部分はかなり少ないのが現状です。
一方でAI(人工知能)の研究者にとっては、AI(人工知能)を実現する機械学習アルゴリズムの仕組み自体を開発するのが仕事なので、彼らは新しいアルゴリズムを開発、実装に日夜取り組んでいます。自身の作った機械学習アルゴリズムがフレームワークに入れられて世の中で広く使われることに価値があると考えて彼らは一所懸命に実装を行っているわけです。
また、膨大な時間のかかるAI(人工知能)の演算処理をスピーディかつ低消費電力で実行できるようにすることに価値を置くAI(人工知能)プロセッサの開発メーカーも、主な仕事は実装と言えるでしょう。
フレームワークを利用する「私たち」、そして「AI研究者」、「AI(人工知能)プロセッサの開発メーカー」。それぞれ異なる立場からAI(人工知能)の実装に関わっているわけですが、お互いに相乗効果があります。
「自分でDeep Learningを実装してみたいな!」なんて思うような私たちにとってはフレームワークを使って簡単にAI(人工知能)のアプリを開発でき、AI研究者は自分のアルゴリズムが広く使われることを喜び、メーカーはプロセッサが売れることで嬉しいという、win-win-winの関係を築いていると言うことです。
実装に必要な知識と技術
Deep Learningの実装されたものがフレームワークだと言うものの、フレームワークはソフトウェアライブラリであって、それだけで動くわけではなく、使えるようにするためには多少のプログラミング(実装)が必要です。ここでは、ディープラーニング(Deep Learning)のプログラミングに必要になってくる知識と技術について説明します。
ニューラルネットワークに関する基礎知識
ニューラルネットワークはいくつも層が重なる形をしているので、何層にするか、それぞれの層のニューロンの数を幾つにするか、それらをどう繋ぐかなどを検討する必要があるというわけです。
作りたいアプリケーションと目指す性能(例えば画像認識や音声認識ならば認識率、価格や売れ行きならばその精度)と実行スピードによって適切なニューラルネットワークの構造が変わってくるでしょう。
※ディープラーニングやニューラルネットワークをもっと知りたい方はこちら↓
Deep Learningの最適化アルゴリズムとパラメータの知識
数学(特に線形代数)
Deep Learningの実装においては、大量のデータに対して単純な計算を効率よく実行するために多次元の行列を頻繁に使います。これによりプログラムがコンパクトになり、実行も速くなると言うメリットがありますが、データやパラメータを多次元配列に入れ込んでいるために、プログラムを変更するには行列計算の知識が必要になります。
プログラミング技術
応用領域の知識と取り扱うデータの準備、具体的には画像認識なら画像の知識、音声認識なら音声の知識、株の予測ならば株価の知識など、扱う領域の知識は必要です。そして、実装に関して言えば、フレームワークが使える形にデータを用意するのが極めて重要な技術になります。たとえば、画像データをどういう配列に入れて、どのニューロンに入力するかといった準備などです。
ノンプログラミングのDeep Learning
さて、フレームワークを使って以外に簡単に実装ができますというお話をしてきましたが、それでもフレームワークがソフトウェアライブラリである以上、プログラミング技術は必要になります。フレームワークを使うと直感的にプログラムが書けますよ〜、と言う謳い文句ですが、ニューラルネットワークのグラフィカルな図と、プログラムの文字列との間には大きな溝があって、そこを直感で埋めるのはとても困難です。
これから流行ってくるものの一つとして、GUI (グラフィカル・ユーザー・インタフェース)によるDeep Learningの実装というものがあるでしょう。ニューラルネットワークを勉強するときは、大部分の人はニューロンを丸で書いてそれらを線でつなぎ、各ニューロンの係数や、処理の内容を書き込んでいくということをやりますよね。あれをGUIでインタラクティブに行うことによって、直感的にAI(人工知能)を実装していこうと言うのが基本的な考え方なんです。
ソニーが開発しているニューラルネットワークコンソールがその一つで、数式やプログラムを使わずに直感的にDeep Learningを扱えると言うのが特徴です。クラウドでも、ダウンロードしてWindowsでも利用することができます。
Deep Cognition社のDLS (Deep Learning Studio)というシステムも、Deep Learning EditorというグラフィカルなインタフェースでDeep Learningを実装することができます。
ニューラルネットワークをビジュアルに設計していくツールは、ネットワークが浅かった時代からありましたが、コンピュータの性能やアルゴリズム開発が未熟で、AI(人工知能)自体があまり流行っていなかったと言う状況もあり、研究ツール以上のものは出て来なかったのです。
現在は、このような状況から脱却し、AI(人工知能)やDeep Learningの裾野が広がり、便利なツールのニーズも大幅に増えています。したがって、このようなグラフィカルな実装ツールは今後発展していくことになるでしょう。
まとめ
各種フレームワークが開発されたことにより、Deep Learningのコアの大部分は実装済みで、たいていはそれらを簡単に無料で使用できて自分で実装する部分は大変少ないということを見てきましたよね。
実際にフレームワークを用いてディープラーニング(Deep Learning)を実装するには、
- ニューラルネットワークに関する基礎知識
- Deep Learningの最適化アルゴリズムとパラメータの知識
- 線掲代数をはじめとした数学の知識
- プログラミング技術
が必要であることはお伝えしてきましたが、どのフレームワークが良いかについてはたくさんの記事が公表されていますので、ご自身で調べてみることをお勧めします。
前述したように最近では文字ベースではなくビジュアルプログラミングの手法でDeep Learningを実装していくことへの期待も高まってきていますので、これによってAI(人工知能)を活用するハードルはますます下がっていくことでしょう。
皆さんもAI(人工知能)がますます身近なものとなるこの時代に、フレームワークなどのツールを使いこなして便利なアプリを作りにチャレンジしてみるのもきっと面白いですよ!
(参考)
ディープラーニング (Wikipedia)
ニューラルネットワークの動物園
Making Deep Learning User-Friendly, Possible?
ニューラルネットワークコンソール(ソニー)
Deep Learning Studio (Deep Cognition)
Deep Learning フレームワークまとめ
コメントをどうぞ