2016.09.27技術

ディープラーニングの実装手順と3つのおすすめライブラリ

  • このエントリーをはてなブックマークに追加
9e53d4c9 9238 4bc3 bf48 7e0fc8c8f23f
『人工知能(AI)』という言葉はどこかで耳にしたことがあるかも知れませんが、『ディープラーニング』はまだ一般的に浸透しておらず、その言葉自体も知らない方は少なくないかと思います。ディープラーニングとは、簡単に言えば人工知能のうちの1つです。現在、GoogleやYahoo!、Appleなどの大手企業がこぞって人工知能に関する会社を買収したり、研究チームを設立したりしています。
 
その人工知能が注目されている今、同時にディープラーニングにも注目が集まってきています。2012年にGoogleが、「猫」を認識できるアルゴリズムを発表したことにより、その知名度は一気に上昇しました。
 
今回はディープラーニングについて詳しくご説明するとともに、主な活用例、実装方法をご紹介したいと思います。
 
 
10,000件以上の案件から希望の案件をご紹介!

未公開案件も多数ありますので「まずは相談したい。」という方もお気軽に登録ください。
 
Banner free wide 037b570405fddeb419957475d18a005501589cadc55bfe73d5000335887322fd
【目次】
■ディープラーニングとは
◆人工ニューラルネットワークとは
◆ディープラーニングの特徴は多層構造
◆ディープラーニングの2つの種類
◆ディープラーニングの歴史、今後の背景
◆主な活用例
■おすすめのライブラリ・フレームワーク3選とその実装手順
◆『TensorFlow』
◆『Caffe』
◆『Chainer』
■実装する上で必要なスキル、及びおすすめの入門用教材・セミナー5選
◆ディープラーニングに必要なスキル
□Python
□C言語、C++
□Java
◆ディープラーニング入門の5つの教材
■ディープラーニングの今後の課題
◆需要の高さ
■まとめ
 
 
 

ディープラーニングとは

 

 
『ディープラーニング』とは、日本語では『深層学習』と訳されるもので、機械学習のうちの1つです。ディープラーニングは、多数のレイヤーで構成されたニューラルネットワーク(ディープニューラルネットワーク)を用いる機械学習で、主に画像認識・音声認識を得意としています。
 

人工ニューラルネットワークとは

『人工ニューラルネットワーク』とは、人間の脳が持つ学習能力を人工的に機械で再現することを目的としたアルゴリズムです。これにより、従来のコンピューターより人間に近い柔軟な意思決定能力を実現することができます。
人工ニューラルネットワークは人間の脳神経を参考にして作られた『人工ニューロン(人工神経)』で構成されています。
 

ディープラーニングの特徴は多層構造

ディープラーニングは特徴として『多層構造』であるということが挙げられます。機械学習はニューラルネットワークの層を『入力層』・『中間層』・『出力層』の3つに分けることができます。
多層構造とは、中間層が2つ以上の機械学習のことを指します。多重構造によって『教師なし学習』が行えるということがディープラーニングの強みです。
教師なし学習は機械学習のアルゴリズムの1つです。
アルゴリズムには大きく分けて2つあり、多くの場合はもう1つの『教師あり学習』が用いられます
 
教師あり学習とは、認識させたい画像や音声等のデータに情報を付与して同じ情報が付与されたデータ同士の共通点・相違点等を覚えさせることで、情報が付与されていない画像も判別できるようにするという学習方法です。
                                 
一方、教師なし学習はデータに情報付与などをせずに、データの中からそれぞれの特徴などを見つけさせることで、自分で見つけた特徴からあらゆるデータの判別ができるようにするというものです。
教師あり学習は事前に概念を教えてあるので
教師なし学習は情報付与も機械に行わせるため、より難度の高い学習方法になっています。
 

ディープラーニングの2つの種類

ディープラーニングには『畳み込みニューラルネットワーク』、『再起型ニューラルネットワーク』、『積層自己符号化器』、『ディープビリーフネットワーク』、『ディープボルツマンマシン』など多くの種類がありますが、ここではその中でも現在主流である『畳み込みニューラルネットワーク』と『再起型ニューラルネットワーク』の2つについてご説明したいと思います。
 
・畳み込みニューラルネットワーク
畳み込みニューラルネットワーク(Convolutional Neural Network)とは、深層畳み込みニューラルネットワークとも呼ばれ、入力情報を1つひとつ区切って個々で解釈させる順伝播型ニューラルネットワークのことを指します。1979年にファジィシステムの福島邦彦氏が発表した初の畳み込みニューラルネットワーク「ネオコグニトロン」から続々と発展モデルが発表され、音素認識、文字画像認識、自然言語認識にも活用され始めています。
 
・再帰型ニューラルネットワーク
再帰型ニューラルネットワーク(Recurrent Neural Network)とは、有向回路を持ったニューラルネットワークのことで順伝播型ニューラルネットワークとは違い、入力情報を個々に解釈しながら直前の情報を覚えておくことで、次の情報の出現確立を予測することができます。それにより特に自然言語の解析に活躍し、機械翻訳や音声解析技術を飛躍的に進歩させました。
 

ディープラーニングの歴史、注目の背景

ディープラーニングはここ数年で知名度が上がり注目されるようになりましたが、実は30年以上も前からその研究は始まっていました。そしてニューラルネットワークに関しては、なんと約60年も前にすでに開発されていました。更に形式ニューロンは70年も前に開発されています。
 
1958年に発表された『パーセプトロン』というニューラルネットワークは、入力層と出力層の2つの層で構成されており、現在主流のものと比べるとシンプルな仕組みです。しかし、その学習対象はとても限定的なものであったため、実用には至りませんでした。
その後も人工知能の研究は続けられ、パーセプトロンの「学習対象が限定的」という弱点を克服した『バックプロパゲーション』という新しい学習アルゴリズムが考案されました。
 
こちらは現行の人工知能のように入力層・中間層・出力層の3つの層で構成されており、パーセプトロンと比べて仕組みが非常に複雑になった代わりに弱点を克服することができました。
ですがその仕組みの複雑さや非効率的さが根本的に問題となり、 また、当時の技術ではコンピューターの処理能力が追い付かず、実現することができませんでした。
その後、世間の関心はなくなってしまいました。
 
それから十数年という時が経ち、技術の進歩によってコンピューターの性能は段違いに向上したため、当時はできなかった複雑な処理が高速で行えるようになったことで、ニューラルネットワークおよび人工知能分野の開発は進み、近年になって再び注目を浴び始めることとなりました。
 

主な活用例

私たちの身近なところではスマートフォン等にディープラーニングの技術を活用することで、音声認識機能の精度を大幅に向上させることができました。
 
また、Facebookの投稿された写真に写っている人物を判別する技術『DeepFace』もディープラーニングを活用して開発された技術です。他にも多くの企業でディープラーニングの技術は導入されています。例えば企業のコールセンターでは、問い合わせ内容を解析しテキストとして記録しながら、解決策をリアルタイムにオペレーターへと提示するといったシステムを導入しているところも多数あります。
 
 

おすすめのライブラリ・フレームワーク3選とその実装手順

 

 

ここでは、おすすめのディープラーニングライブラリ・フレームワークを3つご紹介するとともに、その実装手順も併せてご紹介したいと思います。

『TensorFlow』

TensorFlowは2015年にオープンソースとしてGoogle社が提供を始めたライブラリで、その手軽さ故に公開当初から利用ユーザーは急増し、研究者の中でも利用している方が多くなっている注目の言語です。Google社内でも利用しているということで安心感があります。また、TensorFlowには学習結果をグラフ化してくれる「TensorBoard」という機能もあり、それも魅力の1つです。
 
それでは早速、実装の手順をご紹介します。

環境構築手順(所要時間:10分)
OS X El Capitan (10.11.1) へのインストール手順です。




1. pip をインストール
$ sudo easy_install pip



2. Virtualenv をインストール
$ sudo pip install --upgrade virtualenv



3. Virtualenv 環境を作成(下記コマンドだと `~/tensorflow` につくられる)
$ virtualenv --system-site-packages ~/tensorflow



4. つくった環境をアクティベート
$ source ~/tensorflow/bin/activate
→ コマンドプロンプトが変わる



5. TensorFlow をインストール
(tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
Successfully installed numpy-1.10.2 six-1.10.0 tensorflow-0.5.0
 

 (引用:ディープラーニングの有名ライブラリ5種を最短距離で試す半日コース(TensorFlow, Chainer, Caffe, DeepDream, 画風変換))
 
以上になります。
TensorFlowは比較的簡単に実装することができるかと思います。
 

『Caffe』

Caffeはカリフォルニア大学のバークレー校の研究センターで開発されたオープンソースのライブラリです。また、他のライブラリよりも歴史があるので、インターネットだけでも参考資料が多く、学習しやすいのも強みです。
CaffeはCPUのみで動かす方法とGPUを用いる方法の2つがありますが、ここではCPUを用いる方法をご紹介します。

環境構築手順(所要時間:約4時間)
所要時間は個人差(環境差)があると思いますが、確実にTensorFlowやChainerよりは時間がかかると思います。依存ライブラリが多く、その中にはインストールの待ち時間が長いものがありますし、各自の環境に依存した設定を手動で行う必要があるので、そのあたりでハマることもあると思います。また個人的にはnumpyのバージョンが違うというエラーにかなり悩まされました。



GPUが絡むとハマりそうなのでCPUモードで、インストールしていきます。PyCaffeも入れます。



1. 諸々インストール
$ brew install --fresh -vd snappy leveldb gflags glog szip lmdb
$ brew tap homebrew/science
$ brew install hdf5 opencv
$ brew install --build-from-source --with-python --fresh -vd protobuf
$ brew install --build-from-source --fresh -vd boost boost-python
$ brew install openblas
※1 opencv のインストールはかなり時間がかかります。
※2 OpenBLAS は入れなくてもいいそうですが(Macでは標準でBLASが入っているとのこと)、この後の手順で Makefile の `BLAS_INCLUDE` のパスを修正したりしてから make を実行しても `fatal error: 'cblas.h' file not found` が出てしまうので、入れることにしました。



2. caffe をclone してきます。
$ git clone https://github.com/BVLC/caffe.git



3. Makefile.config を雛形からコピーしてきて、編集します。
$ cd caffe
$ cp Makefile.config.example Makefile.config

 

  • `# CPU_ONLY := 1` のコメントアウトを外す
  • `BLAS := atlas` を `BLAS := open` に変更する
  • 以下のコメントアウトを外す

# BLAS_INCLUDE := $(shell brew --prefix openblas)/include
# BLAS_LIB := $(shell brew --prefix openblas)/lib

  • `PYTHON_INCLUDE` のパスを自分の環境に合わせて書き換える *3
    • 修正前

PYTHON_INCLUDE := /usr/include/python2.7 \
    /usr/lib/python2.7/dist-packages/numpy/core/include

  • 修正後

PYTHON_INCLUDE := /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/include/python2.7 \
    /usr/local/lib/python2.7/site-packages/numpy/core/include/




4. ビルド&テスト。
$ make clean
$ make all -j4
$ make test -j4
$ make runtest
ここでエラーがでなければインストール成功です。
[ PASSED ] 927 tests.



5. caffe/python フォルダに移動し、PyCaffe に必要なライブラリをインストールします。
$ cd python/
$ for li in $(cat requirements.txt); do sudo pip install $li; done



6. PyCaffe のビルド
$ cd ../
$ make pycaffe
$ make distribute



7. Caffe用の環境変数を設定します。~/.bashrc に下記を追記し、
export PYTHONPATH={caffe/pythonのパス}:$PYTHONPATH
`source ~/.bashrc` で反映します。



8. 動作確認
PythonのインタプリタからCaffeをimportしてみて、問題が起きなければOK。
$ python
>>> import caffe
 

 (引用:ディープラーニングの有名ライブラリ5種を最短距離で試す半日コース(TensorFlow, Chainer, Caffe, DeepDream, 画風変換))

以上になります。Caffeはインストールしなければならないライブラリが多く、実装に時間が掛かってしまいます。
 

『Chainer』

ChainerはPreferred Networksが開発したフレームワークで、使用できるニューラルネットワークが多いのであらゆる用途に使いやすく、またGPUを用いることで、高速に処理できるようにされていることも特徴です。その為、利用するにはNvidia製GPUを搭載したパソコンが必要になります。
 
それでは実装方法をご紹介します。
Chainerは実装がとても簡単で、現在のディープラーニングのライブラリ・フレームワークの中で実装が最も簡単とも言われています。
 

インストール手順(所要時間:5秒)
公式ドキュメントに Install Guide というページがあるのですが、Ubuntu, CentOS 向けに書かれているようなので、Mac向けのはないかなと探してたら、本家Webサイトに QUICK START という項目がありました。

                                                                            


やることは
$ pip install chainer

(引用:ディープラーニングの有名ライブラリ5種を最短距離で試す半日コース(TensorFlow, Chainer, Caffe, DeepDream, 画風変換))
 
以上で終了になります。
 
ディープラーニングのライブラリやフレームワークはOS XやLinux向けに作られていることが多いのですが、今回ご紹介した3つはWindowsでも利用する方法があります。
詳しくは下記のリンク先でそれぞれ解説されているので、そちらをご覧ください。
 
【TensorFlow】
Windows上でTensorFlowを使用する環境構築
 
【Caffe】
・WindowsでCaffeを使う:環境構築
 
【Chainer】
・Windowsで超便利なディープラーニングのライブラリのchainerを使う方法
 
 

実装する上で必要なスキル、及びおすすめ入門用教材・セミナー5選

 

 
ディープラーニングを実装するにあたり、基本的にプログラミング言語を使用することになりますが、ライブラリやフレームワークがいくつかあり、使用するものによって言語は変わってきます。しかし、多くのフレームワークでは『Python』を使用できるため、ディープラーニングにはPythonがおすすめです。次の項目ではPythonを含め、どんなスキルが必要なのかを掘り下げていきます。
 

ディープラーニングに必要なスキル

ディープラーニングを活用するには、まず、最低限でも高校卒業程度の数学Ⅲ・Cの知識が必要になります。確率や統計、行列、線形代数、微分・積分の基礎知識を用いることが多いです。また、先に紹介した【TensorFlow】や【Caffe】、【Chainer】などのディープラーニングに対応したフレームワークやライブラリを扱うスキルが必要になります。ディープラーニング用のフレームワークに対応している言語は主にPythonとC++です。
 
 

Python

Python』とは、汎用性が高く、文法がシンプルなことから世界的に人気なスクリプト言語で、GoogleやFacebookなどの大手企業も利用しています。日本ではまだあまり浸透していない言語ですが大規模なデータの処理に向いているので、近年ビッグデータ及びディープラーニングの注目と共に日本でも認知度が上がっています。
Pythonについての詳細は(「Python 入門」の記事のリンク)をご覧ください。
 

C言語、C++

『C言語』とは、1972年にベル研究所で生まれたプログラミング言語で、先にご紹介したPython以上に汎用性が高く、これまでに多くの言語に影響を与えてきました。そして、ほとんどのコンピューターはC言語で書かれているので、C言語を習得することはコンピューターそのものについての理解を深めることにもなります。そんなC言語をオブジェクト指向のプログラムが書けるように拡張したものが『C++』になります。先にご紹介した『Caffe』や『TensorFlow』もC++で利用することができます。
(参考:C言語 - wikipedia)
 

Java

Java』とは、1990年代にサン・マイクロシステムズ(現オラクル)で開発されたオブジェクト指向プログラミング言語です。こちらも汎用性が高く、エンジニアに絶大な人気を誇る言語となっています。構文は基本的にC言語の影響を大きく受けており、そのほかの点においてもあらゆる言語の影響を受けています。
現在、Javaを使用するディープラーニングのライブラリとしては、Skymind社の『Deeplearning4j』が人気です。発表当初からJavaエンジニアの注目を集めています。
(参考:Java - wikipedia)
 

ディープラーニング入門の為の5つの教材

ここからは機械学習・ディープラーニングの入門用教材、おすすめのセミナーを合計で5つご紹介いたします。
 
~入門用のおすすめ教材~
機械学習チュートリアル@Jubatsu Casual Talks
ディープラーニングの学習を始める際はまずこちらのスライドを閲覧してみることをおすすめします。ディープラーニングの大本である『機械学習』とは何か、という初歩のところを丁寧に解説しています。
 
Deep learning
上記のスライドで機械学習の基礎を把握できたら次はおすすめします。こちらはタイトルの通り、ディープラーニングについて書かれています。
少し難しい用語なども出てきますが、ネットで検索すれば理解できるものばかりなので、つまずく事なくディープラーニングの概要を学ぶことができます。
 
~入門用のおすすめセミナー~
基礎から学ぶ機械学習
―アルゴリズムなど技術全般から様々な具体的応用事例とその設計まで ―
こちらは横浜国立大学 大学院工学研究院の教授である濱上知樹先生による機械学習の基礎のセミナーです。具体的な事例を取り上げながら設計まで解説します。
こちらのセミナーを受ける際は、基本的な線形代数、確率や統計、コンピューターの基礎知識が必要であるとしています。
 
機械学習における画像認識技術
~各アルゴリズムの理解から画像認識への適用~
こちらは中部大学 工学部 ロボット理工学部 教授である機械学習を用いた画像認識技術についてのセミナーです。
特に画像認識はディープラーニングの得意分野なのでディープラーニングについての知識を深めたいと思っている方には、特におすすめのセミナーです。
 
数学嫌いでもわかる「機械学習」超入門
~基礎からマーケティングへの活用まで~
こちらは明治大学の総合数理学部准教授である櫻井義尚先生による機械学習の入門用セミナーです。機械学習の基礎からマーケティングへの活用までを一回で学べて、かつタイトルにある通り、数学が得意でない方でも無理なく参加できるセミナーとなっています。
 
 

ディープラーニングの今後の課題

ディープラーニングは実際の人間の脳の機能にどれだけ近づけられるかが求められています。現段階では機能の柔軟性において未だ発展途上であり、課題は多いと言えます。
まず1つに知識は常に変化していきますので、それに伴い機械も学習した内容を更新していかなければなりません。増え続けるデータの処理をどのようにこなしていくかが大きな課題になります。
 
また、学習時に教材がまだ充実していないことも課題の1つです。せっかくオープンソースのライブラリやフレームワークが配布されていても学ぶ機会がなければ誰も使用しようとは思いません。
公式サイトも英語で書かれていたりするので、導入の方法すらわからないという方も多いかと思います。これから大きくなるコンテンツなだけに、もっと利用しやすい環境を作っていくことが重要であると言えます。
 
その他にも『フレーム問題』と呼ばれる問題もあります。
フレーム問題とは、ディープラーニング及び人工知能が想定していないシチュエーションに直面した場合に、柔軟な対処をすることができないという問題です。
この問題については、人工知能を使用する空間を限定し、その空間で起こり得る事象をできる限り想定し、その想定についての対処をすべて学習させることで解決するとしています。しかし、それでは使用がごく一部に限定されてしまうので、今後は空間を限定せず、自由に使用できるようにすることが求められています。
 

需要の高さ

現在、ディープラーニングはIT業界を始め、各業界で注目されている競争の激しい分野です。しかし、日本では実際にディープラーニングを運用できるエンジニアは少なく、現場では人材が不足してしまっています。そのため、ディープラーニングそのものの需要が高まるのと同時に、ディープラーニングを運用できるエンジニアの重要も高まっています。
 
 

まとめ

 

 
今回はディープラーニングの定番ライブラリ・フレームワークについての実装方法を基軸に、基礎知識や活用例などについても紹介させていただきました。しかし、ディープラーニングはまだまだ発展途上の分野です。そのため今回ご紹介したこと以外にも、これからどんどん新しい技術やアルゴリズムなどが発見されてくるでしょう。
 
また、人工知能は各企業がこぞって技術力を競っている分野で、数年前からGoogle等の大手企業は人工知能の研究・開発に本格的に力を注ぎ始め、人工知能の技術的価値はとても大きくなっていることがわかります。そのことからも当面の間、ディープラーニングが白熱した分野であり続けることは間違いないと言えるでしょう。
 
  • このエントリーをはてなブックマークに追加
10,000件以上の案件から希望の案件をご紹介!

未公開案件も多数ありますので「まずは相談したい。」という方もお気軽に登録ください。
 
Banner free wide 037b570405fddeb419957475d18a005501589cadc55bfe73d5000335887322fd

新着のコラム記事

人気のコラム記事