2020年1月26日日曜日

システムの費用対効果 〈Python AI ニューラルネット - MNIST の続き〉

手軽さに気をよくして Python で遊んでいました。中間層わずか 7 セルのニューラルネットでMNISTの手書き数字認識をします(前回)。この1週間で認識率は94%に改善?


実はトリックがあり、出力層第二位を含む正解率です。完璧性を競うのではなく、認識過程、アルゴリズムを探る実験として行ったものです。
慌てていると人間ですら数字を読み間違えます。悪筆だと2だか3だかわからないことがあります。実際のところ、文字画像以外の情報、前後関係、コンテキスト、知識・常識から、 “たぶん2だろうな” などと判断していますね。絞り込み過ぎないことも大事 ー という考え方です。

以前、重電メーカーの総合研究所で音声、波形解析・認識を研究をしていました。実は波形データだけから音素、文字、単語とマッチングしていくことはできません。アナウンサーのような模範的な発声、読み上げであれば別ですが、情報が甚だしく欠落しています。音声の場合、タイムスパンに応じて情報量が拡充するので、単語レベルでAかBという判断であればそこそこいけます。単語Aならこの音素はα、単語Bならβ、どちらにより近いか、というような処理を複数音素に適用し、より近いと判断されるものを認識結果とします。
一次情報で強い絞り込みをかけると誤り訂正の機会が失われるので、まずは緩い絞り込みとして、第一位と第二位のどちらか、上位情報からどちらかに絞るというアルゴリズムです。
“迷い” “わからない” の指標ですが、第一位の出力と第二位の出力の差でもよいでしょう。
出力層第一位セルと第二位セルの平均値を正解時と誤答時で出してみました。

中間層セル数 7 の場合
    正解  誤り
第一位 0.90  0.61
第二位 0.13  0.20

正解時の第一位と第二位の差は 0.77 誤答時は 0.41 です。結果からみると比較的大きな差が出ました。中間層のセル数が 50 でも同様の結果でした。音声認識でも同じような検証を以前にやったことがありますが、これほどの差はつかなかったと記憶しています。

中間層セル数 50 の場合
    正解  誤り
第一位 0.94  0.63
第二位 0.12  0.21


AI/データエンジニアのみなさんは、1%でも認識率を上げようと、中間層の段数を増やし、セル数を増やし、前処理も工夫するなどの苦労をされていると思います。しかし、あえて絞り込みを緩めて、“迷い” 指標を後段処理に送ることも改善の一助になるかもしれません。
永島志津夫

全社のシステムを少ない人数で見ていれば時に見落としもあるかもしれません。
オフィスエヌ ショートレビュー5万円から
連絡先 office.nagasima#gmail.com (#を@に変えてメールをお願い致します)