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を育てるには、結果をみて、さじ加減する、そんな感じの「ディープラーニング」が良いです。
正則化、のような用語が「ディープラーニングG試験」では一杯でてきます。
もし丸暗記になっているな、と感じたら、Kerasで「概念を消化(=次元削減)」して、よりシンプルにする、自分の感覚に落として考えていくことで、やりたいことに応用できるように、リラックスして学習していきましょう。