HPCソリューション

ホーム » HPCソリューション » Deep Learning(深層学習)解説

Deep Learning(深層学習)解説

Deep Learning(深層学習)とは

 下の写真を見て、これを何と認識するでしょうか? 人であれば、犬の画像ということぐらい識別するのは造作もないことです。

 では、これをコンピューターに識別させるためにはどうしたら良いでしょうか?どのようにプログラムしたら良いでしょうか? 簡単に思いつく方法としては、犬の特徴を画像から抽出させて判別したらどうでしょうか。犬の顔、手足、しっぽ、これらの犬特有の特徴を定義していき、抽出させていけばどうでしょうか。簡単に言いましたが、それが困難であることは少し考えれば分かるはずです。画像で表現できる犬のパターン全ての定義が必要になります。 Deep Learning(深層学習)とは、この犬を「犬」と認識する能力をコンピューター上で、人間並みに実現させることが可能な手法です。

baby_and_puppy

犬が犬たらしめるもの

 そもそも人はどのように犬を「犬」として認識しているのでしょうか? 私たちが「犬」を認識するのに明確な定義が必要ないことは自明です。私たちは、犬の絵や写真、実物を指されて、これが「犬」と教えられます。その時に教わるのは、あくまで犬の呼び名です。その時には既に、犬という存在を認識しているのです。

 人は犬を見た瞬間に、犬を知り、認識しています。なぜこのようなことが可能なのか?それは脳の仕組みが、一つ一つの定義をベースとし、判別するプログラミングとは大きく異なるからです。

脳が脳として動作するには

 人に限らず動物の脳は、神経細胞(ニューロン)が積み重なってできています。神経細胞とは、どのようなものなのかという研究は、はるか昔から行われています。神経細胞のネットワーク(ニューラルネットワーク)をコンピューター上で動作させて人工知能を作る試みも古くから研究されてきました。それでも脳に近づくことは容易ではありませんでした。

 脳に近づくことができなかった理由の一つは、コンピューターの処理速度が十分でなかったことであります。何度か起こった人工知能ブームにおいて、ニューラルネットワークも進歩してきましたが、ネットワークが複雑化すると計算量は莫大になり、停滞することとなりました。もう一つ難しかった理由は学習するサンプルデータの収集であります。インターネットが普及し、大量のタグ付けされた画像が、容易に入手できるようになったのは、最近のことです。

 ようやくコンピューターの処理速度が人の脳を超え、大量のサンプルデータを入手できるようになり、ブームが去っても熱心に研究を続けてきた研究者のおかげで、ニューラルネットワークは大きな進歩を遂げることとなり、新たに進歩したこのニューラルネットワークの学習手法を深層学習と呼ぶようになりました。画像認識においては人を超えるまでに至るようになりました。

深層に見えるもの

 深層学習は、新たな統計手法となりました。深層学習の優れている点は、画像上にある「何か」を定義することなく識別してくれることにあります。以下に応用が進められている例を挙げましょう。

① バーコードを貼らずに商品を、自動認識させて会計する

 人間が識別できる商品画像をラベリングして深層学習すれば可能です。人間が識別できるものは、データさえあれば、識別可能です。

② レントゲン写真から癌細胞の影を、自動認識させる

 専門的な知識がなくても癌細胞を識別させることは可能です。癌細胞のレントゲン写真を学習すれば良いだけです。むしろ大量の画像を学習すれば熟練の専門医以上に経験豊富で識別率の高いものができあがります。短期間に大量の画像を学習可能なのも人には無い利点です。

③ 監視カメラに映る人の中で、不審者を自動認識させて、職務質問する。

 「不審者」という、曖昧な概念も、不審者の画像データさえあれば、認識可能です。犯罪を起こそうとする人、起こしている人は無意識に普段とは異なる行動をしているため、それを識別できれば熟練警察官の勘を頼る必要もなくなります。熟練警察官という名の監視カメラを町中に大量に配置することが可能となります。

④ 物質、材料のデータベースから、特定の物質と類似の傾向、性質を持つ物質、材料を検索する。

 同一の性能、傾向を持つ物質を検索するのは容易です。しかし、「類似」という、曖昧さを含めて検索するのは、困難な場合があります。材料研究において欲しい機能を持つ物質の候補を得るためには、「類似の傾向」を持つ物質を検索することは重要なことです。また、物質の欲しい性質が分からなくても、重い計算をスキップして「予測」を立てられることも期待されます。

 その他にも、迷惑メールの自動削除、コンテンツ年齢制限の自動設定、話題の自動運転などにも応用が進みつつあります。

 ここまで様々な例を挙げましたが、これらはニューラルネットワークの特徴抽出の機能のみを使った応用例です。人が行える機能から見ると、一部でしかなく、人工知能の研究は、まだ始まったばかりと言えます。

コンピューターの中の脳

 もう少し具体的に機械学習、深層学習について説明していきます。ある程度の数学の知識が必要です。

神経細胞のモデル化

 まずは脳を構成する神経細胞について説明します。神経細胞は神経伝達物質を受容します。神経伝達物質を一定量受容すると、電気信号を送り軸索末端から神経伝達物質を放出します。その神経伝達物質は次の神経細胞が受容します。この挙動をモデル化して、神経細胞でネットワークを形成させれば、ニューラルネットワークの完成です。

DL_kaisetsu_01

モデル化にあたって、各種パラメーターを説明します。

・入力 … 前の神経細胞から、伝達物質が放出されたか否かを示す。
・重み … 個々の神経細胞同士の繋がりの強さ(伝達物質の伝導しやすさ)を示す。
・閾値 … 神経細胞が、電気信号を送る(発火)までの伝達物質の量を示す。
・出力 … この神経細胞が発火したか否かを示す。

ニューラルネットワークの構築

 モデル化したニューロンを使ってニューラルネットワークを構築していきます。画像認識させる場合は、1ピクセル毎に入力層に1つのニューロンを用意します。出力層は認識させたい分類の数だけニューロンを用意します。この入力層と出力層があれば、最低限のニューラルネットワークが構築可能ですが、2層だけでは、排他的論理和(XOR)を表すことができないため、入力層と出力層の間に、1つ以上の隠れ層を用意します。

DL_kaisetsu_02

ニューラルネットワークの学習過程

 ネットワークの構築が終わったら、今度は学習の方法を紹介していきます。但し具体的な計算は割愛します。

DL_kaisetsu_03

 入力データをベクトル x, 出力データをベクトル y(x), 教師データベクトル a とします。最終的に、出力データが教師ベクトルと等しくなることを目指します。

 ここで誤差関数を導入します。誤差関数の定義は下記です。誤差関数がゼロになるように、ニューロンの重みと閾値を動かしていきます。

DL_kaisetsu_04

 誤差関数を 微小量分、 減少する方向に移動すると、重みと閾値は、それぞれ下記のような式で表せられます。ここで学習率というパラメーターを定義します。学習率は十分小さいものとします。このように誤差の勾配から、誤差を減少させていく各パラメーターを計算していく方法を勾配降下法と言います。

DL_kaisetsu_05

 偏微分をご存知であれば、この式を計算する際、出力層から計算する方が楽なのは分かってもらえると思います。この重みと閾値の誤差を計算する過程を、誤差逆伝播法と言います。

 これらを踏まえると学習過程は下記のようになります。

① 全データをニューラルネットワークに通し、誤差関数を求める。(Forward処理)
② 誤差逆伝播法によりニューラルネットワークの各パラメーターの誤差を計算する。(Backward処理)
③ パラメーターの更新を行います。

活性化関数

 前章において、誤差逆伝播法による、パラメーターの更新方法を紹介しました。ただこの方法だけでは、学習が一向に進みません。なぜならば、誤差関数の偏微分が必ずゼロになるからです。ゼロになる原因はニューロンが発火する条件がステップ関数となっているからです。このニューロンの発火条件となる関数を活性化関数と呼びます。

DL_kaisetsu_06

 このステップ関数を微分可能で、勾配がもっと広い範囲に出るように改良していきます。まずシグモイド関数を紹介します。下記のような関数です。

DL_kaisetsu_07

 最近、画像認識でよく使われる関数にReLU(Rectified Linear Unit, Rectifier, 正規化線形関数)があります。シグモイド関数よりも、広域に勾配が出ているのが分かると思います。

DL_kaisetsu_08

確率的勾配降下法

 前々章で、勾配降下法について説明しました。ただ、この学習過程において、現実的に妥当でない点があります。それは①の全データをニューラルネットワークに通して、誤差関数を求める部分です。訓練データは莫大な量のため、一回の更新のために全データをForward処理するのは正確ではありますが、効率的ではありません。

 一般にとられている手法として、訓練データを、いくつかのミニバッチに分けて、ミニバッチごとに、Forward処理、Backward処理、パラメーター更新を行う方法があります。これをミニバッチ勾配降下法、または、確率的勾配降下法と言います。この時、ミニバッチのデータサンプル数をミニバッチサイズ、またはバッチサイズと言います。当然、ミニバッチに分ける時に、訓練データはランダムに並べ替える必要があります。

畳み込み層とプーリング層

 深層学習が画像認識において、目覚ましい成果を残すに至ったのは、この畳み込み層とプーリング層が導入されたからです。これらの層は画像の特徴抽出と画像の位置依存性を失くすことに成功したと言えます。畳み込み層とプーリング層で特徴抽出して、全結合層で分類するというのが、現在、よく見かけるニューラルネットワークです。

DL_kaisetsu_09

○ 畳み込み層

 画像に対して、指定したサイズと数のフィルターを施す層です。フィルターのパラメーターは、ニューラルネットワークの重みに相当していて、分類するのに必要な特徴を学習していきます。下図はフィルターを施している過程のイメージ図です。

DL_kaisetsu_10

 ニューラルネットワーク上では、下図のようにフィルター以外の繋がりを失くして、共有重みを導入します(同じ色の線が、共有の重みを所持するネットワークです)。学習において、共有重みは更新される時、共有されている全重みに対して同じ更新をします。

DL_kaisetsu_11

 実際に数字画像の深層学習を行ったニューラルネットワークを例に見てみましょう。一番左が学習されたフィルター(重み)で、そのフィルターを数字画像にそれぞれ施した画像を並べてみました。一番上左から2番目のフィルターは縦方向の線を強調するフィルターのように見えます。4段目左から3番目は水平方向の線を強調するフィルターのように見えます。

DL_kaisetsu_12

○ プーリング層

 簡単に言うと、画像をぼかす層です。画像をぼかすことで、位置に対しての依存性が減ります。フィルターの中で一番大きい数値を出力するMAXプーリングや、フィルターの中の平均値を出力する平均プーリングがあります。

DL_kaisetsu_13

 畳み込み層で特徴の抽出を行った後、プーリング層で画像をぼかしていきます。これを交互に繰り返すことで、最終的には分類に必要な特徴の有無だけを得られるというわけです。

お問い合わせ

■ フォームからのお問い合わせ

お問い合わせは以下のフォームよりお願いいたします。うまく送信されない場合は、メールでお問い合わせください。

お問い合わせフォーム

■ 電話・FAXでのお問い合わせ

number

【免責事項】