前に、「学習・推論そして制御!クラウド+Edgeで実現する AI&ロボティクス技術を垣間見る」を聴いてきた!と書いたけど、そこで、CNNでの画像分類を既存のCNNネットワークを転移学習させて、自分が行いたい分類問題にカスタマイズする方法を言っていたので、メモっておく。
■CNN等は2種類の層に分けられる。
CNN等は、以下のような(ニューロの)多層構造になっている。
(以下の例はCNNで実装された画像分類のVGGのネットワーク図
https://www.abtosoftware.com/blog/kitchen-furniture-appliances-recognition-in-photos
より引用)
で、この図はいろんな層が積み重なっているけど、CNNは大きく分けてしまうと2つの層に分かれる
・一つは黒と青の繰り返し層。
ここは「畳み込み」層で、画像のフィルタ処理をしている。
最終的に、入力画像の特徴量を出している。
・もう一つはだいだい色の全結合層と最後のSOFT MAX層
ここでは、畳み込み層で出て来た特徴量を自分の分類したいもの
に対応づけている。
この対応付けは全結合、つまりニューラルネットを多層に結合しているもの(多層パーセプトロンMLP)になっている(いや、分類できればMLPじゃなくてもいいんだけど、CNNではMLPを使っている)
全結合層の入力は、畳み込み層の最後の層となる。出力は分類したいものの種類数になる(例、さる、いぬ、きじの3つに分けたかったら3つ、YES、NOにわけたかったら2つ)。このうち、どれを出力するかを決定するのがSOFT MAX層。
いろいろ層があるけど、この2つに分かれることが重要。
■転移学習させるときに、共通に使うのは畳み込み層
VGGはコンテスト用にチューニングされたもので、自分の興味関心のあるものにあっていない。なので、VGGをもとに、自分の興味関心があるものにカスタマイズする必要があるとき、このとき、
・畳み込み層は特徴量をだしてくるフィルタなのでそのまま使える
→篠山紀信用、自分用、とかカメラを独自にカスタマイズしてもいいけど、カメラはふつう、キヤノン EOS Kissとか、メーカーが作ったものを買ってくるよね。それと同じ感覚。フィルタ部分は、共通に使える。
・分類部分(全結合層とSOFTMAX)は自分の関心があるものに変える。
分類したいもの、その数は違うのでカスタマイズする必要がある。
具体的には、最終段の出力個数を分類する種類の数(上に書いた、3つとか2つとか)にして、この部分だけを学習させるように設定する。その後、自分のデータを読み込ませて、ここの部分だけをデータに基づいて機械学習させる。
■AI(CNN)の品質(評価すべき項目)とは
・まず、特徴量のところで、分類したいものがA,B、Cの3つあったとしたら、BとC、AとB、AとCで共通の特徴量(畳み込み最終段の値)になるものがないことを確認(担保)する。
もし、同じになってしまうと、それは分類できない。(たとえばAと分類されるもの、Cと分類されるものの中に、おなじ特徴量になる入力(画像)データがあると、その画像はBに分類していいか、Cに分類していいかわからないので、ランダムにどちらかに分類されるけど、正しく分類はできない)
・それがないのであれば、「学習(訓練)データとして入力した画像については」無限にノードが作れるのであれば必ず「訓練したデータの出力値」することができる
→これが「ニューラルネットワークの普遍性定理」
https://qiita.com/mochimochidog/items/ca04bf3df7071041561a
・ただ現実的には時間もノードも制限があるので、必ずしも学習データをすべて正しく学習できるわけではない→ここ、評価必要
・さらにもちろん、学習していないものが来れば、推論することになる。この推論するとき、おかしな値が出ないことも評価必要。