Coursera Deep Learning専門講座の受講メモ (コース3 - Structuring Machine Learning Projects - Week 1)
この記事のまとめ:
- CourseraのDeep Learning専門講座のコース3: Structuring Machine Learning ProjectsのWeek 1の受講メモとして、要点とよくわからなかったところを補完のために調べたことなどを備忘録としてまとめています。
- Week 1では機械学習において開発戦略を立てるための基本的な知識について学びます。
コース3:Structuring Machine Learning Projectsについて
このコースでは、Andrew Ng先生の長年のディープラーニングにおける経験を基にしたベストプラクティスがさまざまな観点でまとまったコースです。自らディープラーニングの開発、コーディングをしなくとも、ディープラーニングのプロジェクトをマネージメントをする方にも重要な内容ではないかと思います。内容についてはあまり体系的にまとまっていない感もありますが、非常に見ごたえのある内容です。
2週間の内容は次の通りです。
Week 1の概要
このコースのWeek 1では、Deep Learningの開発を行う上でのベストプラクティスとして主に次の内容を説明しています。
- 機械学習における戦略の重要性を知る
- 機械学習プロジェクトにおいてゴールとなる満足しなければならない評価指標と最適化する評価指標を準備する
- データセットの中からTrain/Dev/Testデータセットを正しく分割する
- 人間レベルのパフォーマンスの定義する方法を理解する
- パフォーマンスとデータセットから得られる知見を基にした正しい機械学習戦略の判断方法
この記事では、これらを理解する上でポイントとなる内容をまとめています。
評価指標の準備
実際にディープラーニングの開発を行う際、開発要件として最適化する評価指標と満足しなければならない評価指標を明確化すべきです。評価指標として考えられるものとして、正確度 (Accuracy)、実行時間、使用メモリなどがあげられます。実行環境などに応じて何が最適化する評価指標なのか満足しなければならない評価指標なのかは異なってきます。
スコア
いくつかのアルゴリズムを実装し、比較評価する際に、Trainingデータセットでの精度 (Precision) と再現率 (Recall) をみたときどのように評価するべきかという指標として、スコアというものがあります。
スコアの定義は次の通りです。
なお、精度と再現率の定義は下記が参考になります。
- 朱鷺の杜Wiki: http://ibisforest.org/index.php?F値
直交化 (Orthogonalization)
評価を進めていく際、Trainingセット、Devセット、Testセットの順でひとつひとつコスト関数を評価していきます。決して、一度にすべてを求めていくような進め方はお勧めできません。このコースのWeek 2で、どのように分析していくかは詳細に説明します。
DevデータセットとTestデータセット
Dev/Testデータセットを用意するときに下記の3つについて注意を払う必要があります。
- DevデータセットとTestデータセットは必ず同じ分布のデータセットを使います。評価の中でデータセットの分布が変わるような操作が必要な場合、必ずDevデータセットとTestデータセットの両方に同じ操作をします。
- DevデータセットとTestデータセットは分けて持つべきです。Devデータセットはハイパーパラメーターの調整のために使用し、Testデータセットは最後のシステム評価にのみ使います。
- Devデータセットを用意するときには、エンドユーザーの使い方を想定して用意することが開発目的を達成するためには重要なことです。
期待しない分類ミスの評価方法
正確度だけでアルゴリズムを評価した場合に、より正確度の高いアルゴリズムができたとしても、期待しない分類ミスをしてしまう場合があります。つまり、アルゴリズムの正確度が例え高かったとしても、そのアルゴリズムの誤りにフォーカスを当てると、ユーザーにとって誤ってほしくないデータセットで誤ってしまっているケースのことです。このような場合に、一例としてコスト関数を次のように修正することで回避することができます。
人間レベルのパフォーマンス
アルゴリズムの評価基準として、人間レベルのパフォーマンスがひとつの基準になります。人間レベルのパフォーマンスを基準とする理由はその値は一般的に十分高いことです。なお、パフォーマンスにおいては超えられない理論限界があります。その限界のことをベイズ最適誤差 (Bayesian Optimal Error)もしくはベイズ誤差 (Bayesian Error)といいます。人間レベルのパフォーマンスはベイズ誤差と非常に近いので、パフォーマンスの基準として人間レベルのパフォーマンスが使われるというわけです。多くのユースケースにおいて、人間レベルのパフォーマンスを超えるとそのあとのパフォーマンス向上は少ないです。
なお、人間レベルのパフォーマンスがベイズ誤差から遠い場合もあります。それは、人間では扱いきれないデータを分析しなければ正しい判断を下せない場合です。そういったユースケースにおいては、Deep Learningが人間よりも高いパフォーマンスを発揮することがあります。
誤差分析
パフォーマンス評価を行う際、それぞれのパフォーマンスに差分があった場合、次のように分析することができます。
- 人間レベルのパフォーマンス
- ↕ 除去可能なバイアス (Avoidable Bias)
- Trainingデータセットの誤差
- ↕ 分散 (Variance)
- Devデータセットの誤差
除去可能なバイアスに対しては、次の対策が考えられます。
- データセットとして人間がラベル付けしたデータを使う、もしくはデータセットを増やす
- ニューラルネットワークの層やニューロンを増やす
- より良い最適化アルゴリズムを使用する (e.g. モメンタム、RMSprop、Adam)
- NNアーキテクチャ (e.g. RNN、CNN)やハイパーパラメーター調整
分散に対しては、次の対策が考えられます。
- データセットを増やす
- 正則化 (e.g. L2、ドロップアウト、データ拡張)
- NNアーキテクチャ (e.g. RNN、CNN)やハイパーパラメーター調整
- マニュアルエラー分析(Week 2で詳細を説明)
今回は以上です。 最後まで読んでいただき、ありがとうございます。
CourseraのDeep Learning専門講座の他のコースの受講メモ
- コース1: Neural Networks and Deep Learning
- コース2: Improving Deep Neural networks
- コース3: Structuring Machine Learning Projects
- コース4: Convolutional Neural Network
- コース5: Sequence Models
コメント
コメントを投稿