雑多に、どこかで書き直します。
習慣化のため、とりあえずメモレベルで投稿
[機械学習プロジェクトを始めるためのヒント]
機械学習は、モデル、データ、ハイパーパラメーターを選定し、学習を行い、エラー分析を行いそれをもとに更なる改善を行う反復プロセスである。
これを何度か繰り返したのちに、十分に良いモデルが出来上がってから、本番に移す前に最終的な性能評価を行う。
・最初のモデル選定は何から始めるか
・何が可能かを知る為に文献検索から始める。
オンラインコース、ブログ、オープンソースなどを参考にする。
・可能であれば、オープンソースで実装できる妥当なモデルを見つける
半日から数日かけてブログ記事を読み、すぐに着手できるようなものを探す。
最初のステップに着手できれば、より多くの回数を繰り返して効率的に作業を進めることが可能である。良質なデータであればオープンソースのアルゴリズムでもそれなりの結果が出る。
・環境の制約はあまり気にしない(もしプロジェクト成功の見通し、自信があるならそうしてもよい)、それよりもベースライン確立が先。
・学習アルゴリズムを初めて試す時は、すべてのデータで実行する前に、コードとアルゴリズムの健全性を簡単にチェックすることが効率的。小さなデータセットで過学習させ、出力までを試してみる。わずか数分、数秒でコードの健全性をチェックできる。
[モデルの平均誤差だけで性能判断をしてはいけない理由]
テストセットの平均誤差が小さくても、特に重要なデータセットについてのパフォーマンスが十分でなければ本番環境で役に立たないものになる
ex) ウェブ検索の例
ウェブ検索には「おいしい料理店」や「新しい快適グッズ」などの検索クエリがありますが、この種の検索キーワードでヒットした検索結果に対して、最高の結果を提供してくれないウェブ検索エンジンでも「まあこんなもんだろう」と許すことができるが、「Youtube」や「○○株式会社」などのように、そのサイトに明確に到達したい意図があるクエリに対して異なる結果を返したときの、ウェブ検索エンジンへの信頼性は下がる。全体のテストセットへの精度は良いが、一部の主要なデータセットへの当てはまりが悪く使えない例。
Eコマースサイトを運営しているとして、レコメンドシステムを作ったとしよう。様々なメーカーやブランドの小売店の商品を紹介し、レコメンドする上で特定の性別、地域、小売店、民族に偏ったレコメンドになると悪い結果になる
まず、ベースラインを定めること
非構造化データなのか構造化データなのかによって適切な方法は変わる。
非構造化データ(音声、画像、言語)は人間のパフォーマンスと比較するといい。
[いつ?]
・機械学習プロジェクトに着手し、最初のフェーズで検討
[どのように?]
・人間レベルのパフォーマンス(HLP)と比較してみること
・最先端の文献やオープンソースの結果を参照し、その成果を参考値とする
・旧来のシステムが導入されている場合は、そのパフォーマンスと比較すること
[何のメリット]
・何に取り組むべきかを優先順位付けを効率的に行うことができる。
・エンジニアとビジネスサイドのメンバー間での期待値調整、認識統
上の例は、音声認識システムにおいてのベースライン設定例。当初、Accuracyだけを比較するとLow Bandwidthを改善したくなるが、HLPと比較した結果、Car Noiseに取り組んだ方が有益な可能性があるということを示した例。
Type別のデータ全体に占める割合という観点も付け加えることが重要。
改善において、定量的な分析に加え、定性的な考察を加えることも必要。
・カテゴリーの出現頻度は?
・カテゴリーの精度を向上させるのがどれだけ簡単か?
・その精度を改善することでの精度改善以外のインパクトはないか?
→ユーザーの欲求をより満たすものになるのでは?
[誤差分析]
エラー分析を行うことで学習アルゴリズムをにパフォーマンス改善を効率的に行うことが可能。
解析方法
誤分類や誤差の大きいラベルのデータセットをピックアップし、データの特徴や種類に偏りがないか仮説を立て、観察してみること。スプレッドシートのようなものでチェックをすると分かりやすい。観察しながら、他に仮説が思いついた際には、列を追加し、再度チェックをする。
目的は傾向を観察し、それをデータとして入手すること。
パフォーマンス向上に役立つデータのカテゴリーについて、アイデア着想のヒントとなる。
見るべき観点
・ある特定のクラスに偏って分類されていないか
・画像データのプロパティ(明度、反射など)
・メタデータ(モデル、生産工場など)
解析方法
・誤分類データを観察し、データの特徴の性質、背景の確認を行いタグ付けを行う
・タグ付けされたデータの中で、何割が誤って分類されたか
→この種のタグが付いたデータに対する現在の性能を把握する
・タグ付けされたデータがデータ全体の何割を占めるか
→タグ付けされたデータがデータセット全体の中でどれだけ重要かがわかる
・そのタグ付けされたデータの改善余地はあるのか?
→人間レベルのパフォーマンスの測定結果と比較する
どの問題に優先的に着手をするか。
一般的にデータを収集するのには時間とコストがかかる。
どのような種類のデータを収集すべきかが明確になる。