AI性能向上技法:Keras簡単すぎるよ、レッツ正則化。

人工知能のAIと、

Eyewareのアイと、

Loveの愛を、

いっぱい過学習しながら、あれこれ忘れて、汎化性能をアゲていくディープラーニングおとうさんです。

知能ってなぁに

それは「適度な学習をすること」と、「たくさん応用して検証すること」、の両方だね

なぜ、適度なの? 

学習が目的ではないからだね。

新しい出来事や、問題が出た時に、適切に対処できるために、過去の出来事や昔の人の知識から学べることがないか、ということだね。

古い他人がつくったシステム上で評価されるように、たくさんのことを「正しいこととして覚えさせられる」「行動させられる」ようになっていると・・、、間違いや、悪にもなり、対応できないこと・モノがどんどん増えてしまいます。 他人ベクトルに従ってぼんやり生きていると、自分にとって、興味や幸せがどこにあるのか、なかなか難しくなっちゃいますね・・。

AIでは、学習しすぎると「過学習(教科書を勉強しすぎて、教科書以外の問題には点数とれないAI)」になります。

AIの性能向上の第一歩は、過学習への対応といわれます。

知識をツメコんだAIがお得に思えて、ネットワークの容量をでかく、次元を大きくして、データもたくさん学ばせた、トップダウンの第5世代コンピューター的な過学習バンバンのロボAIみたいなものを、エライひとびとの皆さまは求めているような気がします。いろいろやってみる分には良いと思いますよ!もしそういう方向で、うまくいかなかったら、以下を読み進めてくださいね!

 

Kerasには、過学習に対応できる方法がいくつかあります。

ひとつは、簡単にできる、ドロップアウト層の導入です。

これは、最初に説明しているAIのサンプルの「手描きの画像認識」にも出てきていますが、「ドロップアウトはさじ加減」でしたね。

 

同じように簡単に出来ることとしては、正則化(レギュラライズ)です。

Kerasでは、全結合層を作るときに、カーネル・レギュラライザ(kernel_regularizer)を指定し、L1/L2正則化を入れることができます。

model.add(layers.Dense(32, kernel_regularizer=regularizers.l2(0.001),
                   activation='relu'))

 

たったこんだけ。あと、0.001をどうするか、はドロップアウトとおんなじじゃないですか? (*^▽^*)

AIのトレーニング、AIの育成はだれでも楽しめる「たまごっち」です。(平成のうちに言いたかった?)

 

 

正則化は数学としては、いろんなことをしています。L1正則化(Lasso)は、重みの分布として、0に近いものが多いスパースっぽいものになります。 L2正則化(Ridge)では、重み全体がマルくなるようにすることをやっています。両方実施する関数もありますよ!

APIについての説明は、こちらにもあるんですが・・。

 

もうちょっと分かりやすいように・・

AI hanakoちゃんは、容量・次元が少ないので、試験問題を全部覚えて100点とるのは無理というか、つまんないから、なにか○×問題の中に、「少ないルール」みたいなものを探そう、あれこれ覚えずシンプルに考えてみよう、とします。

そこで、もし、「少ないシンプルな思考ルール」を見つけられて、それが本物であれば、未知の問題への適用はぐっと上がります。

ただ、そのルールが本物かどうか、は、検証(学習時にはなかった、未知のデータで応用)をしてみないとわからないわけです。

 

この説明は「AIにおける正則化(数学的な用語)が、何をしているのか」、ということとしてお伝えしているものですが、

こんな感じでいいんだと思うんですよね。気軽に応用していくと、エライ人がつくったAIのスコアよりも良いスコアをだせる方法=データセットにあわせられるAIへ「育てる」ことができます。

目的にあったディープラーニングなAIを育てるには、結果をみて、さじ加減する、そんな感じの「ディープラーニングおとうさん」が良いんです。

正則化、のような、用語が「ディープラーニングG試験」で、一杯でてきます。でも、もし丸暗記になっているな、と感じたら、Kerasで「概念を消化(次元削減)」して、シンプルに考えていくことで、やりたいことに応用できるようにしましょう。