Atom's tech blog

ディープラーニング(深層学習)について調べたことを残してみる

OpenCVも勉強していたが、勉強していくとディープラーニングを試したくなり、少しずつこちらも勉強してみることにした。参考になったことを残すことにします。

歴史

2012年のILSVRC(ImageNet Large Scale Visual Recognition Challenge)の画像認識のコンペで、深層学習を使ったチームが圧倒的に勝ったということと、Googleが深層学習によって教師データなしで猫を自動的に学習したことがブームになったらしい。

注目される理由は?

いくつかの概念は1990年代に考案されていたらしい。今になって注目を集めたかというと以下の要素が関係しているようです。 * ビックデータ:インターネットで集められる画像データ量が増加している * 計算能力の向上:GPU(Graphics Processing Unit)やCPUの性能向上

情報は視覚から

人間が情報を得るには目からの情報が90%と言われています。脳がいかに視覚情報を処理するかは脳神経細胞の働きによって決まります。視覚情報から得られる物は、画像認識/画像分類/物体検出になります。画像分類は、例えば時計の画像をみてそれを時計として判断するということです。

機械学習と深層学習、AI(Artificial Intelligence)の違いは?

深層学習は機械学習の一部で、機械学習の集合体に深層学習が含まれています。また深層学習=AIではなく、深層学習は人工知能の一部という位置づけです。従って、AI(人工知能)に関わる分析技術は「機械学習」があり、「機械学習」の一つの技術として「ディープラーニング(深層学習)」という関連性を持ちます。 f:id:iAtom:20201008145610j:plain

機械学習はデータのある特定部分が結果に関係する特徴量を人間が判断して、調整して予測や認識の精度を向上する仕組み。ディープラーニングはパターンやルール、特徴量の設定、学習自体も自動的に行うのが特徴です。

他から引用すると AIは「大量のデータから特徴を分析し、高い精度で予測・分類を行うプログラム機能」 機械学習は「大量のデータから規則性や関連性を見つけ出し、判断や予測を行う手法」 ディープラーニングは「色や形のように着目すべき特徴(特徴量)を指示をしなくても、自らどのような値を特徴とすべきかを考えて、最適な分類 or 予測を行う」

ディープラーニングとは? 

人間の脳の「ニューロン(neuron)」を模したニューラルネットワークを何層にも重ねて大規模にした機械学習の手法。日本語訳は「深層学習」ですが、この「層」と言う言葉は「中間層が複数あること」を示しています。ニューラルネットワークの中間層(隠れ層)を2層以上に多層化したニューラルネットワークディープラーニングというようです

ニューロン神経細胞)とシナプスとは

ニューロンは神経を構成する細胞で刺激を受けて、興奮してその刺激を他の細胞に伝達するものです。シナプスニューロンから別のニューロンにシグナルを伝達する接続部位を示します。人間の脳はニューロンという神経細胞のネットワーク構造になっていて、ニューロンから別ニューロンへ伝達にシナプスを使用して情報を伝達します。

ニューロンの概念図

脳神経のニューロンを参考にして数値として表現する概念図は以下となります。 f:id:iAtom:20201008145645j:plain

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

ニューラルネットワーク神経細胞のネットワークをいい、ディープラーニングで使用するニューラルネットワークは、簡単にいうとこの脳の情報処理ネットワークの仕組みでコンピュータ上で実現した分析モデルです。ニューラルネットワークは入力層、中間層(隠れ層)、出力層の3層で構成され、より一致度が高くなるように重みのつけて調整を行います。 f:id:iAtom:20201008145701j:plain ニューラルネットワーク.jpg

ディープラーニングアルゴリズムの種類は?

主なアルゴリズムは以下だが、少しずつ.......

アルゴリズム 英語
オートエンコーダ Auto-Encoder AE
リカレントニューラルネットワーク Recurrent Neural Network RNN
畳み込みニューラルネットワーク Convolutional Neural Network CNN
深層強化学習 Deep Q-Network DQN
敵対生成ネットワーク Generative Adversarial Networks GAN

畳み込みニューラルネットワーク(CNN)とは?

以下の層から構成されています。 CNNは畳み込み層とプーリング層の繰り返しながら行うのが特徴です。

英語名 概要
入力層 Input layer 入力画像から入力データの行列に変換する
畳み込み層 Convolution layer 入力データに対して小さなデータの行列をスライドしていながら特徴量を抽出する
プーリング層 Pooling layer 入力データを小さい領域に分割して、各領域の最大値をとりデータを圧縮(小さく)する
全結合層 Fully Connected layer 畳み込み層とプーリング層を通して特徴部分が取り出された画像データを一つのノードに結合する
出力層 Output layer 全結合層からの出力を元に、ソフトマックス関数を用いて確率に変換し、領域毎に正しく分類される確率により分類を行う

f:id:iAtom:20201008145719j:plain

機械学習フレームワーク

フレームワーク 読み方 特徴
NumPy ナンパイ 数値計算を行うための定番ライブラリの1つで、画像処理・音声処理に活用できる。数値計算でも特に配列処理能力が良い
Pandas パンダス データ解析を支援する機能を提供するライブラリで、数表および時系列データを操作するためのデータ構造と演算に使われる
scikit-learn サイキット・ラーン 統計学パターン認識、データ解析の技法が豊富に使うことができる
dlib ディーリブ 高性能な顔の器官検出(Face Alignment)が手軽に利用できる。人物の顔認証を行う際に最も使われる

ディープラーニングフレームワーク

ディープラーニングのライブラリ/フレームワークには幾つかあり、主要なものは以下

フレームワーク 読み方 開発・サポート 特徴
TensorFlow テンソルフロー Google 汎用性が高く細かな調整が可能なフレームワーク
Keras ケラス Google TensorFlowのラッパー(*1)
PyTorch パイトーチ Facebook 高度な研究には適していますがリソースを多く使うライブラリ
Chainer チェイナー Preferred Networks(日本) 使いやすく計算グラフを簡単に構築できる

*1 : ラッパー(wrapper)のIT用語は「元の機能を包み、覆い隠す役割」を示し、ここではKerasを利用するとバックエンドのTensorFlowを意識せずに使用できる。簡単にいうとTensorFlowライブラリの難しいインタフェースを利用しやすいKearsライブラリインタフェースで使用可能となるイメージ。