couresera

Coursera Machine Learning / week11【学習メモ】

Coursera Machine Learning
Week11【学習メモ】【機械学習】
スタンフォード大学のAndrew Ng氏が手掛ける機械学習講義の学習メモ。

機械学習のスキルと知識を付けるために2020/10/30からスタート。全講義を終えるのに11週間をベース(1日1~2時間ペース?)としていますが、気にせずに理解できているか確認しながら進めていこうと思います。

今回が最終章です。機械学習の応用例であるPhoto OCRについて学習していきます。

Ⅰ.Photo OCR

Problem Description and Pipeline

Photo OCR(Photo Optical Character Recognition)について説明しています。
Photo OCRは撮った写真の中のテキストをコンピュータにどうやって読み込ませるかに焦点を当てています。

以下Photo OCRの手順についてです。
このことを機械学習パイプラインと呼びます。
1.画像内のどこにテキストがあるのか検知する
2.文字分離する
3.文字を分類する

パイプラインの各機能ごとにチームでのエンジニアが担当しています。

Sliding Windows

スライディングウィンドウ(Sliding Windows)についてです。
OCRのパイプラインの最初は「1. テキストの検知」で、そこではスライディングウィンドウという方法を使います。
例として、歩行者検出にて82×36サイズの矩形を少しずつスライドさせていき、分類器を使用して歩行者かどうかを検知します。スライドする幅はパラメータであり、ステップサイズやストライドパラメータと呼ばれることがあります。\(1px\)すつスライドさせると精度は上がりますが、その分処理回数が多くなってしまうため、一般的には\(4~8px\)くらいがちょうど良いと言われています。
その後、より大きな矩形をとり、分類器を使用しますが、そのときには82×36に縮小した画像を分類器にて使用します。

本題に戻り、画像検出のステップについての説明です。

まず、文字を含んだ画像\(y=1\)と文字を含んでいない画像\(y=0\)のデータを大量に学習させます。ラベル付き学習なので教師あり学習となります。

OCRではスライディングウィンドウを画像に対しておこなうと、分類器は白とグレート黒の色にテキスト検出することができる。白だと文字がある、グレーはもしかしたら文字があるかも、黒は文字ではないというように分けることができる。
その後、分類器の出力をとり、expansion operatorと呼ばれるものを適用する。それを適用することにより、各色の領域を拡大することができる(わかりやすくなる)。そして、アスペクト比がテキストっぽいものを拾っていきます(テキストじゃないものをはじいていく)。

次に文字分割です。
真ん中に線を引き文字を二つに分けられる場合を陽性\(y=1\)とします。陰性\(y=0\)の場合は、二つの文字の真ん中を表していないものになります。この分類器により、個々の文字に分割していきます。

最後に文字分類です。これは以前に教師あり学習として学習したものと同じです。

Getting Lots of Data and Artificial Data

大量データの取得とデータ合成について。
大量のデータが必要となったとき(低バイアスの学習アルゴリズムのときなど)にどこからデータを集めれば良いか?
条件は多いが、上手くいけば簡単に大量のデータを集めることができる人工データ作成というものがあります。

人工データ合成は2つのバリエーションから成ります。
1.人工的にデータを作る。
2.既にある少量のデータを増幅させる。

1.の「人工的にデータを作る」では、様々なフォントの文字を取り出し、他のいろいろな背景と組み合わせることでデータを作成しています。実質的には無制限にデータを作成することが可能です。

2.の「既にある少量のデータを増幅させる」では、既に持っている画像をとり、人工的な歪みを加えることで新たなデータとして作成することができる。
音声データの場合は、データセットに追加のオーディオ的な歪み(ノイズ)を加えることで新たな音声データを取得できる。

但し、考えなしにノイズを追加すればよいかと言われるとそういうわけでもなく、1番を例とすると、画像に光度をランダムにノイズとして加えても効果はほぼありません。とはいっても、効果がある場合も必ずないとは言えないので、テストセットとして使えると思われるようなノイズを検討する必要があります。
以下画像参照。

どちらにせよ、低バイアスなのか本当に大量のデータが必要かを考える必要があります。

機械学習の問題に直面していたら、以下の2つの事を考えてほしいと先生よりメッセージ。
1.単純なサニティチェックを学習曲線で行い、もっと多くのデータが役に立つか確認する。
2.もっと多くのデータが役に立つ場合には、現在持っているデータの10倍のデータを得るにはどれだけ時間がかかるかを考えてみる。
この2つをよく考えていると、思っているよりも短い日数で大量のデータが得られ、アルゴリズムのパフォーマンスが改善するかもしれないとのこと。

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

天井分析(Ceiling Analysis(シーリング分析))についてです。
天井分析では、機械学習パイプラインのどの部分を改善すれば、パフォーマンスに対して最大の効果があるのかを分析してくれます。
パフォーマンス向上の上限(天井)がわかることから天井分析と呼ばれています。

今回も前回のOCRの例を使用しています。
画像→文章検出→文字分離→文字認識のどの業務を改善すれば最もパフォーマンスがよくなるか?

要素 精度
システム全体 72%
文章検知 89%
文字分離 90%
文字認識 100%

最初にシステム全体の精度が72%だったとします。そしてもし、各要素が100%正しかった場合に全体の精度が何%になるのかを予測します。ここでは、文章検出が100%正しかった場合、全体の精度は72%→89%へと上がります。文字分離の精度を100%にしたら89%→90%に上がりますが、ここでは1%しか全体の精度は変わらないため、労力をここに費やしても意味がないことがわかります。文字認識の精度を上げると、90%→100%へと10%精度が上がるので、今回の例だと文章検出と文字認識の精度を上げると効率的ですね。

先生は「機械学習の問題を見た時に、直感がこう言う事がある。このコンポーネントにもっと時間を注ぎ込んだらいいんじゃないか。だが何年もかかって、 自分自身の直感すら信じてはいけない、むしろ自分の直感をそれほどは信じない、という事を学習した。」とおっしゃっています。先生程のスペシャリストでも直感を信じずに、体系的な手法を用いてどれに時間を費やすべきかを判断しているみたいです。

さいごに

今回はパイプラインや天井分析について学習しました。week10同様、計算がほどんどなかったため、短時間で終了することができました。

さいごのさいご

week11を持って、Coursera Machine Learningは終了です。
全くの知識0からここまで学習してきて、機械学習やデータ分析などの見える世界が変わったように思えます。それほどまでに非常にわかりやすく濃厚な講義であったと思います。
Andrew Ng教授ありがとうございました。また、deep-learningを今度受講しようと思うので、その時はよろしくお願いします。