【Draft版公開】Machine Learning Yearning 9～10章 by stanford大学Andrew Ng教授

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

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

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

本投稿は、9章、10章の翻訳になります。少しづつ翻訳していきます。

##### **1～5章の翻訳**
[【Draft版公開】Machine Learning Yearning 1～5章 by stanford大学Andrew Ng教授](https://qiita.com/Ishio/items/2096b8806a20c8ca52be)

##### **6章の翻訳**
[【Draft版公開】Machine Learning Yearning 6章 by stanford大学Andrew Ng教授](https://qiita.com/Ishio/items/8ddf5f01a33bb049a907)

##### **7-8章の翻訳**
[【Draft版公開】Machine Learning Yearning 7～8章 by stanford大学Andrew Ng教授](https://qiita.com/Ishio/items/94a73dcba8bdde25e48b)


本書籍は、とても読みやすく、かつ各章短めに記載されています。

## **9. Optimizing and satisficing metrics （最適化尺度／最小限化尺度）**
ここでは、複数の評価尺度を結合する（すなわち単一評価尺度にする）別の方法について説明します。
今あなたは、学習アルゴリズムの正解率（acccuracy）と実行時間（running time）の両方を気にかけているとします。そして、あなたは次の3つの分類器から1つを選択する必要があるとします。

|分類器  |正解率（Accuracy）  |実行時間（Running Time）  |
|---|---|---|
|A  |90%  |80ms  |
|B  |92%  |95ms  |
|C  |95%  |1,500ms |

たとえば、次のように正解率と実行時間を一つの式に入れて、単一尺度を導出することは不自然に思えます。

正解率 - 0.5 ×　実行時間

たとえば、次のように正解率と実行時間を一つの式に入れて、単一尺度を導出することは不自然に思えます。
代わりにできることは次に示す通りです。まず初めに、**許容できる**実行時間を定義します。ここでは100ミリ秒で動作することが許容されるとしましょう。そこで次に、実行時間の基準を満たす分類器を対象にして、正解率を最大化します。ここで、実行時間は**最小限化尺度（satisficing metric）**と呼ばれます。あなたの分類器は、最大100ミリ秒の実行時間の範囲という意味での最小限化尺度上で、十分に良いモデルでなければなりません。正解率は**最適化尺度（optimizing metric）**と呼ばれます。

もし、モデルのバイナリファイルのサイズ、実行時間、正解率のように異なるN個の基準を評価しているのならば、最小限化尺度として**N-1個**の基準の設定を考えることができます。すなわち、単純に特定の価値を満たすことを要求するだけです。そして、最後の1つの基準を**最適化尺度**として定義します。例えば、バイナリファイルのサイズと実行時間については、許容できる閾値の範囲を設定し、それらの制約を考慮した上で正解率を最適化しようと試みることです。

最後の例として、特定のウェイクワード（「アレクサ、こんにちは」のように、端末とのやり取りを呼び出すワード）を話しているユーザの声を聴くために、マイクを使用するハードウェアデバイスを作っているとしましょう。それは、システムを起動させるものになります。
例としては、Amazon Echoが「Alexa」というワードを聴いているなどです。AppleのSiriは「Hey Siri」という音を聞いています。また、Androidは「OK Google」を聴いていますし、Buiduは「Hello Baidu」を聴いています。
あなたはFalse PositiveとFalse Negativeの割合の両方を気に掛けています。

* False Positive：誰もウェイクワードを言っていないときに、誤ってシステムが起動してしまう頻度
* False Negative：誰かがウェイクワードを発したときに、誤ってシステムが起動しない頻度

このシステムのパフォーマンスの合理的なゴールは、24時間の操作ごとにわずか1つのFalse Positiveを許容する制限下で（最小限化尺度）、False Negativeの割合を最小化することです（最適化尺度）。

最適化のためにチームが評価尺度に沿って調整されると、チームはより早く進歩することができます。

## **10. Having a dev set and metric speeds up iterations（反復的試行を高速化するためには、開発セットと評価尺度を持つことが重要）**

新しい問題を考える上で、どのようなアプローチが最もベストであるかを事前に知ることはとても難しいです。経験豊富な機械学習の研究者でさえ、何か満足のいく発見を得るまでに数十ものアイデアを試しています。機械学習のシステムを構築する時には、私はよく次のようにします。

1. そのシステムの構築方法に関するいくつかの**アイデア（idea）**を考えることから始める

2. **コード(code)**でそのアイデアを実装する

3. そのアイデアがどれくらいうまくいくか**実験(experiment)**を行う（いつも、私の最初のアイデアはうまくいかない！！）。これらの学習に基づいて、より多くのアイデアを生成し、繰り返し実行します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/8f438ed3-2bbd-0047-8681-d1046286c894.png)

これは反復的なプロセスです。この繰り返しのループを速く回すほど、あなたのモデルはより早く進歩するでしょう。これが、開発/テストセットと評価尺度を準備することが重要である理由です。というのも、あなたがアイデアを試すたびに、開発セット上でアイデアのパフォーマンスを測定することで、あなたが正しい方向に向かっているかを素早く判断できます。
対照的に、特定の開発/テストセットを持っていないとしましょう。あなたのチームが新しい猫の画像分類器を開発するたびに、アプリに組込み、分類器が改善されているかを知るために数時間アプリを操作しなくてはならない。これは、信じられないほど遅い営みでしょう！！また、チームが分類器の正確性を95.0%から95.1%に向上させる場合、アプリを操作するだけでは0.1%の改善を検出できないかもしれません。しかし、これらの0.1％の改善を積み重ねることによって、あなたのシステムは徐々に進歩していきます。開発セットとテストセットを使用することで、どのアイデアが小さな（もしくは大きな）改善を生んでいるかを素早く検出することができます。そして、どのアイデアを洗練するべきか、どのアイデアを廃棄するべきかの素早い意思決定に役立ちます。