COUSERA Machine Learning Week11

Ats
Dec 17, 2020

--

ソフトウェアエンジニアが Cousera の機械学習コーシ(11週目)に参加して学んだことをメモ代わりに共有します。最後は、機械学習のシステム開発におけるパイプラインの実装について学びました。授業が終わって、機械学習を使いたいアイディアがたくさん出てきて、とても満足度の高いコースでした!

Photo by Markus Spiske on Unsplash

10週目の記事もあるので良かったら読んでみてください。

Photo OCR

この章では、Photo OCR を例にして、複雑な機械学習のシステムがどのように組み合わせられるのかを説明します。Photo OCR とは、写真を読みとり、コンピュータが利用できるデジタルの文字コードに変換する技術です。

Problem Description and Pipeline

この節では、機械学習パイプラインについて説明します。Photo OCRは、以下の3ステップに分けることができます。

  1. テキスト検知
  2. 文字のセグメンテーション
  3. 文字分類

このように機能分割された処理群をパイプラインと呼びます。機械学習のシステムを設計する時に、最も重要な決定の一つは組み合わせるパイプラインは決定することです。言い換えると、Photo OCR の問題が 与えられた時に、この問題をどう別々のモジュールへと 分割するかを決定することです。

Sliding Windows

この章では、各パイプラインがどう機能するかについて説明します。 具体的には、大部分をスライディングウィンドウ分類器(Sliding windows classifier)と呼ばれる分類方法の説明に費やします。

OCR のパイプラインの最初は「テキスト検知」で、そこではスライディングウィンドウという方法を使います。以下の例では歩行者検知で、82×36サイズの矩形ウィンドウを少しずつスライドさせていき、分類器を使って歩行者かどうかを判定していきます。スライドする幅をStep-sizeやStrideと呼びます。

このスライディングウィンドウを OCR に適用します。画像内からテキストを見つけると、そのウィンドウを白で塗りつぶします。そして、テキスト全体を抽出するために、さらにもう一段階処理を施します。それは、スライディングウィンドウ分類器の出力をとり、それぞれの白い領域に対して、その白の領域を拡大する処理をします。そして、このパイプラインの最後の処理として、アスペクト比が文字らしく箇所は除外します。

次に、「文字のセグメンテーション」のパイプラインです。このパイプラインでは、真ん中で文字を2つに分けたい場合を陽性として分類をします。この分類器により個々の文字を分割します。ここでも、横方向の1次元でスライディングウィンドウ分類をを使います。

最後に、「文字分類」のパイプラインです。これは、単純なアルファベットや数字のマルチクラス分類です。

Getting Lots of Data and Artificial Data

この節では、大量データの取得とデータ合成のやり方について説明します。精度の高い機械学習モデルを作るためにデータは多いほうがいいです。大量データを得るために人工的にデータを作ってしまうという考え方があります。それが、以下の2つの方法です。

  1. 人工的にデータ生成
  2. 少量データからデータ水増し(Data Augmentation)

OCRの例で「人工的にデータ生成」は様々なフォントの文字といろいろな背景を組み合わせることです。文字通り、ゼロから新しいトレーニングデータを作ります。

「 少量データからデータ水増し(Data Augmentation)」は画像を歪ませたりして水増しすることです。重要な点として、ただ画像をランダムに歪ませるのではなくて、実際に起こり得そうなデータを意識して水増しを加えるということです。

いずれにせよ、データを増やす前に低バイアス状態であることを確認することが重要です。低バイアスでないと、データを増やしてもそもそも何の意味もないです。そして、データを増やすコストがどれだけかかるかを確認することも重要です。時折、人力でデータをかき集めてラベル付しても2〜3日で、データの数が10倍になるということがあります。なので、人力でデータを増やす費用対効果を予め考えておくことは重要です。最後に、データの数がデータを増やすために、クラウドソーシングのようなサービスを使うことも選択肢としてあります。

Ceiling Analysis: What Part of the Pipeline to Work on Next

この節では、天井分析(Ceiling Analysis)について説明します。天井分析で機械処理パイプラインのどこを改善すると全体のパフォーマンスに対して最も効果があるのかを分析します。パフォーマンス向上の上限(天井)がわかることから天井分析と呼ばれています。

下図のOCRの例では、全体の正答率が72%だったとします。そして、もし「テキスト検知」のパイプラインが 100% 正しかった場合に全体の正答率が何%になるかを出します。具体的には、手動でテキスト検知する場所を指定します。ここでは、89% と 17% 向上します。そしてさらに、「文字セグメーンテーション」のパイプラインが 100% 正しかった場合、全体の正答率が何%になるかを出します。具体的には、同様に手動でセグメンテーションする場所を指定します。

このように、各パイプラインが 100% 正しい時と現状を比較して、改善幅が大きいところを特定します。つまり、どこに注力するのが最も効果的かを判断します。

Andrew 氏によると、機械学習において、自分自身の直感を信じてはいけないそうです。 その代わり、何らかの機械学習の問題に 取り組む時には、 なるべくもっと系統だった分析をすることを強く勧められました。天井分析はその一つの方法であり、どこに労力を集中すべきかを決める信頼できる方法らしいです。結局、機械学習のシステム開発において一番貴重なリソースは開発者の実装時間です。最も避けなければならないことは、何週間や何ヶ月と時間を費やした後で、それらの作業が最終的なシステムのパフォーマンスには大した違いを生まないと気づくことです。それのためにも、天井分析を使って、予め時間配分の目処を立てることはとても重要です。

--

--

Ats
Ats

Written by Ats

I like building something tangible like touch, gesture, and voice. Ruby on Rails / React Native / Yocto / Raspberry Pi / Interaction Design / CIID IDP alumni

No responses yet