15
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

初等深層学習・CNNで精度を上げる手法

Last updated at Posted at 2018-07-31

#精度を向上させる
精度を向上するためには、様々な方法があります

①学習するデータ量を増やす
②正則化する
③アンサンブル学習を取り入れる。

主に私が使うのはこの3つの手法です。

今回はそれぞれ精度が向上する理由と、Kerasでの実装例を紹介していきます。

#①学習するデータ量を増やす
当たり前のことですが、多くのデータに目を通せば、もちろん精度は向上します。しかし、インターネットが発達したとはいえ、数万枚の画像データを持ってくるのは厳しいのが現状です。
そこで、データの水増しというのを行います。

MNIST画像を例にとります。
MNIST画像は28×28の画像であることはご存知の通りです。
これに、乱数を用いてのノイズを加算します。

具体的にはこうです。

#xTrainに(60000,28,28,1)のMNIST画像が格納されているとします。

xTrain2 = xTrain + np.random.rand(60000,28,28,1)
xTrain = np.concatenate([xTrain,xTrain2])

軽度のノイズを乗せたところで、人間が数字を見誤ることはほとんどありません。これは、人間の脳を模していると言われる人工知能でも同様です。

しかし、計算する値は若干違ってきます。例えば今まで0.123だったものが、0.126になっているかもしれません。

これは視覚的には大した差ではありませんが、人工知能はこれでも違うデータと認識します。つまり、データが増えたということです!

しかし、この方法では似たような画像が増えるということでもあり、汎化性を失う過学習に陥りかねません。あまり褒められた方法ではないのです。

#②正則化する
これは、AI研究者の中でも意見が分かれる手法ですが、ことCNNにおいては基本的に優秀なので、ここで紹介します。

from keras.layers import BatchNormalization
model.add(BatchNormalization())

これを各層の活性化層の前、もしくは後に挿入するだけです。どちらに挿入するかはあなた次第です。(どっちがいいか、という問題は宗教戦争を招きますので触れません。)

バッチサイズを指定して学習する際に特に効果を発揮します。
あるバッチの中で、平均0、標準偏差1になるように全体の値を調節します。
これは、偏りのないデータを提供することになるので、精度が向上します(たぶん)

出力値があまりに大きくなりすぎるのを防止し、勾配消失・爆発問題をある程度解消します。

データの質を上げる手法とも言えます。

#③擬似アンサンブル学習を取り入れる
アンサンブル学習とは、一つのモデルで答えを導くのではなく、複数のモデルで一度解答を出し、それを統合して全体の解答として出力する方針です。

古来から「三人寄れば文殊の知恵」と言われてきたことを、最先端技術に活かすのです。

ただ、複数のモデルを動かすというのは、モデルの構築、運用の面からしてコスパがいいとは言えません。

そこで、これを擬似的に実装します。

from keras.layers import Dropout
model.add(Dropout(0.25))

このDropout()は、入力された情報の一部を0に置き換えます。ここでは0.25を引数に取ったので、25%が無かったことにされます。

せっかく計算した結果を不意にするような人に見えますが、これはランダムに消去されます。つまり、epochが変わるごとに、消去する情報も変わるということです。ということは、1つのモデルが、epochの数だけ微妙に違うモデルとなることを意味します。

出力された値には、0.25が乗算されます。
これは、強制的に0にするノードを増やしたことで、1つ1つのノードが強力になっているだろう、という概念に基づきます

このようにして、効果的、かつ効率的にモデルの能力を上げることができます。

#最後に
ここまで紹介してきた3つの手法は、基本的な部分です。他にも、モデルに応じて様々な手法が存在します。
回転処理、マスキング、反転処理、ZCA白色化など、枚挙にいとまがありません。

自作したモデルの特性に合わせて、色々な方法を試してみてください!
もしかしたら、思いもよらない方法が、精度向上につながることもあります。
何故そうなるのかを考えてみても面白いでしょう!

15
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?