機械学習プロジェクトの進め方：『Machine Learning Yearning』28-30章（Learning curves）

現在、AIや機械学習界隈で最も有名なスタンフォード大学のAndrew Ng教授が、「Machine Learning Yearning」というオンライン書籍を執筆中です。2018年4-5月に、そのドラフト版（1-35章）がオンラインで公開中です。この投稿では、いち早く翻訳を進めています。

http://www.mlyearning.org/
![図1.png](https://qiita-image-store.s3.amazonaws.com/0/188414/741778bb-9523-9feb-736b-6bd5aedc42e6.png)

この本は、機械学習プロジェクトの構築方法を提供します。また、機械学習アルゴリズムを教えるのではなく、機械学習アルゴリズムが機能する方法に焦点を当てています。

本投稿は、**28-30章(Learning curves)**の翻訳になります。少しづつ翻訳していきます。※翻訳違っていたらご指摘ください。
本書籍は、とても読みやすく、かつ各章短めに記載されています。

##### **1～27章までの翻訳**
https://qiita.com/Ishio

##**28. Diagnosing bias and variance: Learning curves(バイアスとバリアンスの診断：学習曲線)**
これまで、回避可能なバイアスとバリアンスに起因するエラー量を評価する方法についてみてきました。最適なエラー率（error rate）を評価し、アルゴリズムのトレーニングセットと開発セットのエラーを計算することによってこれを行いました。ここからは、学習曲線（learning curve）をプロットすることによる、より有益な手法について説明しましょう。

学習曲線はトレーニングセットのサンプル数に対する開発セットのエラーをプロットします。プロットするために、異なる規模のトレーニングセットを使ってアルゴリズムを実行します。例えば、もし1,000件のサンプルを持っている場合、100件、200件、300件・・・1,000件と、別々にアルゴリズムをトレーニングするでしょう。それによって、トレーニングセットによって、どう開発セットのエラーが変化するかをプロットすることができます。次に例を示します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/ddaf6bb4-785a-9dde-c5e3-6563df5aa95f.png)

トレーニングセットのサイズが増加するとき、開発セットのエラーは減少するはずです。

私たちはしばしば、学習アルゴリズムが最終的に達成することを望まれる「望ましいエラー率（desired error rate）」を持ちます。例えば、

* もし人間レベルのパフォーマンスを望むなら、人間のエラー率が「望ましいエラー率」になる可能性があります。
* もし、私たちの学習アルゴリズムがいくつかの製品を提供する場合（EX：猫の写真を配信する、など）、ユーザに素晴らしい体験を与えるために、どれくらいのレベルのパフォーマンスが望まれるかについての直感があるかもしれません。

* もし長い間重要なアプリケーションに携わってきたなら、どれくらいの進歩が次の四半期/1年で合理的に達成できるかについての直感を持っているでしょう。

学習曲線に望まれるレベルのパフォーマンスを追加しましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/0e1163f4-6f47-5aa6-6f92-850afe5b8a4f.png)

データを追加することで、望まれるレベルのパフォーマンスにどれくらい近づいているか、赤線の「dev error（開発セットのエラー）」曲線を視覚的に追加することで理解できます。上記の例では、トレーニングセットのサイズを2倍にすると、望まれるパフォーマンスに到達できる可能性があります。

しかし、もし開発セットのエラー曲線が平坦な状況を迎えている場合には、すぐにデータを追加しても目標に到達できないことがわかります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/40ba6e99-34eb-ae27-1801-854aeb8b25c7.png)

したがって、学習曲線を利用することで、2倍の量のトレーニングセットを収集するために、数カ月を過ごすことを避けることができます。
このプロセスの2つの欠点は、もし開発セットのエラー曲線だけをみていると、より多くのデータを保持している場合に、赤線の曲線の状況を正確に予測することが難しいことです。追加で1つプロットすることで、データ追加のよる影響を推定することができます。それは、トレーニングセットのエラーです。

##**29. Plotting training error (トレーニングセットのエラーのプロット)**
開発セット（&テストセット）のエラー数は、トレーニングセットのサイズが成長するにしたがい減少するはずです。しかし、トレーニングセットのエラーは、トレーニングセットのサイズが増えるたびに増加します。
この効果について例を説明しましょう。トレーニングセットがたった2件のサンプルを持っているとしましょう。1つは猫のサンプル画像、もう一方は猫以外のサンプル画像です。学習アルゴリズムがこれら両方のサンプルをトレーニングセットに「記憶」することは簡単です、そしてトレーニングセットのエラー0%を得ることができるでしょう。たとえ、トレーニングサンプルの片方もしくは両方のラベルが誤っていたとしても、まだアルゴリズムに両方のラベルを記憶させることは簡単です。
今、トレーニングセットが100件のサンプルを持っているとしましょう。ひょっとしたら、いくつかの画像はとてもぼやけていて、数件のサンプルは誤ったラベルが付けられている、もしくは曖昧であるかもしれません。よって人間でさえ猫であるかどうかを識別することができません。ひょっとしたら、学習アルゴリズムは多くの（またはすべての）トレーニングセットを記憶することができるかもしれませんが、100%の正解率を手に入れることは難しいでしょう。トレーニングセットを2から100サンプルに増やすことによって、トレーニングセットの精度がわずかに低下することがわかるでしょう。
最後に、トレーニングセットに10,000県のサンプルがあるとします。この場合では、アルゴリズムが10,000サンプル全てに完璧に適合することはさらに困難です。特に、曖昧もしくは誤ったラベル付けが含まれている場合にはそうなります。このように、学習アルゴリズムはトレーニングセット上ではさらに悪化します。
以前の学習曲線に、トレーニングセットのエラー数を追加しましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/02f7713a-d548-30c8-825c-8d8be07087eb.png)

青線のトレーニングセットのエラー数の曲線は、トレーニングセットのサイズとともに増加していることがわかります。さらに、アルゴリズムは通常、学習セットのほうが開発セットよりも優れています。したがって、赤線の開発セット曲線は、青線のトレーニングセット曲線よりも厳密に上にあります。次にこれらのプロットをどのように解釈するかについて説明しましょう。


##**30. Interpreting learning curves: High bias(学習曲線の解釈：ハイバイアス)**
開発セットの学習曲線が、次のようになっているとしましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/8ec3b2fd-6c5a-65c9-f9b7-68ea9efe472e.png)

以前に、開発セットが平坦であれば、データを追加することによって望まれるパフォーマンス（Desired performance）を達成することはできない、と言いました。
しかし、赤線（開発セットのエラー曲線）がどのように見えるかを正確に判断することは難しいです。開発セットが小さかったり、曲線にノイズが混じって正確性が低い可能性もあります。
このプロットにトレーニングセットのエラー曲線を追加して、次のようにします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/9693eb36-8fc7-0145-77ea-d6f9d286fb96.png)

さて、今我々はさらに多くのデータを追加するだけでは十分でないと確信することができます。何故でしょう？2つの観察結果について覚えておいてください。

* トレーニングセットを追加すると、トレーニングセットのエラーは悪化する可能性があります。したがって、青線（トレーニングセットのエラー曲線）は同水準か、より高く推移するだけです。よって、緑線の「望まれるパフォーマンス（Desired  Performance）」から遠ざかる可能性があります。

* 赤線（開発セットエラー曲線）は通常青線（トレーニングセットのエラー曲線）よりも高い水準にあります。したがって、トレーニングセットエラーが要求されるパフォーマンスレベルよりも高い場合には、より多くのデータを追加することによって赤線（開発セットのエラー曲線）が緑線（望まれるパフォーマンスレベル）にまで下がることはほとんどありません。

開発セットのエラー曲線とトレーニングセットのエラー曲線の両方を同じプロット上で検査すると、より確実に開発セットのエラー曲線を推定することができます。
議論のために、望まれるパフォーマンスが最適なエラー率の推定値であるとします。上記の図は、回避可能なハイバイアスがどのように見えるかを示す標準的な「教科書」のサンプル図です。上図でトレーニングセットが最大サイズにあたる場合、トレーニングセットのエラーと望まれるパフォーマンスの間には大きなギャップがあり、回避可能なバイアスが大きいことを示しています。さらに、トレーニングセットと開発セットの曲線間のギャップは小さく、バリアンスが小さいことを示しています。
以前は、トレーニングセットと開発セットのエラーの最も右側にプロットされている部分のみを測定していました。これは使用可能なトレーニングデータをすべて利用していることに相当します。完全な学習曲線を描くことで、異なるトレーニングセットサイズ間でのアルゴリズムのパフォーマンスをより包括的に把握することができます。