機械学習プロジェクトの進め方：『Machine Learning Yearning』47-49章（End-to-end deep learning）

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

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

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

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

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



## **47. The rise of end-to-end learning（end-to-end学習の台頭）**
オンライン製品レビューを検査するシステムを構築し、自動的に投稿者がその商品を好んでいるか嫌っているかを把握したいとします。例えば、次のレビューが非常に肯定的であると認識することを望みます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/14528459-d8d2-8a0e-63d7-904efbb2a296.png)
そして、非常に否定的なコメントもあります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/a4edd4e4-b90d-fb3c-ce9b-251b4f6fea4c.png)
ポジ vs ネガの意見を認識することの問題は、センチメント分類（Sentiment Classification）と呼ばれます。
このシステムを構築するために、2つのコンポーネントからなるパイプラインを構築します。

1. パーサー（parser）：最も重要な単語を識別する情報をテキストで注釈をつけるシステムです。例えばパーサーを利用して、全ての形容詞と名詞にラベルを付けることができます。したがって、次のような注釈付きテキストを得るでしょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/f4c7b587-4302-fe6c-458a-9499f867fe81.png)
2. センチメント分類器：注釈付きテキストを入力としてとり、総合的な感情を予測する学習アルゴリズム。パーサーの注釈はこの学習アルゴリズムを大きく助けるでしょう。形容詞に高い重みを与えることによって、アルゴリズムは例えば'great'
のように、素早く重要な単語に焦点を当てることができます。そして'this'のような、あまり重要でない単語は無視できます。

次のように、2つのコンポーネントのパイプラインは、視覚化することができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/35f9ce9a-5c1f-0b98-ed13-c4b607bad624.png)
近年、パイプラインシステムを1つの学習アルゴリズムに置き換える傾向があります。end-to-end学習アルゴリズムは、シンプルに生テキストデータ “This is a great mop!”を入力として受け取り、直接センチメントを認識しようとします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/213e5ef4-f750-ccfb-f601-44518413c234.png)
ニューラルネットワークは一般的にend-to-end学習システムが利用されます。“end-to-end”という用語は、学習アルゴリズムに対して入力から望まれる出力を直接要求している事実を指しています。すなわち、学習アルゴリズムは直接システムの「入力端」を「出力端」に接続します。
データが豊富な問題では、end-to-endシステムは非常に成功しています。しかし、常に良い選択というわけではありません。次のいくつかの章では、さらなるend-to-endシステムの例といつ使用すべきか／使用しないべきかのアドバイスを提供します。

## **48. More end-to-end learning examples（end-to-end学習のいくつかの例）**
音声認識システムを構築したいとします。次の3つのコンポーネントでシステムを構成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/ac3e9989-8e48-157f-fa97-34c0aaa9c020.png)
コンポーネントは次のように動作します。

1. 特徴量計算：発声の内容を捕らえようとするMFCC（Mel-frequency cepstrum coefficients）機能など、手作業で設計された特徴量を抽出します。
2. 音素認識器：一部の言語学者は、「音素」と呼ばれる音の基本単位として利用します。たとえば、”keep”の最初の"k"音は、”cake”の”c”音と同じです。 オーディオクリップ内の音素を認識しようとします。
3. 最終的な認識器：認識された音素のシーケンス情報を取り出し、文字列に変換し出力します。

対照的に、end-to-endシステムはオーディオクリックを入力し、直接出力しようとします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/60443bda-7313-c28c-01bd-a21626e008d4.png)

これまでは、完全に直線型の機械学習パイプラインのみ記述してきました。つまり出力は、1つのステージから次のステージへと連続的に通過していきます。パイプラインはもっと複雑にすることができます。例えば、ここに自律型自動車のためのシンプルなアーキテクチャがあります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/ebdec7da-ad83-0d00-d3d3-06d2274c5cf8.png)
3つのコンポーネントがあります。1つは、カメラ画像を利用して他の車を検知します。1つは、歩行者を検知島明日。最後のコンポーネントは、他の車と歩行者を避けて運転するための経路を計算します。
パイプラインの全てのコンポーネントを学習する必要はありません。例えば、“robot motion planning”に関する文献には、自動車の最終的な経路計画ステップのための多数のアルゴリズムがあります。これら多くのアルゴリズムは学習を伴いません。

対照的に、end-to-endアプローチはセンサー入力を取り込み、ステアリングの方向を直接出力するでしょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/629b27f0-8137-801a-e7b9-b1360e463b2e.png)
end-to-end学習は多くの成功を収めていますが、必ずしも最良のアプローチではありません。例えば、end-to-endの音声認識器はうまく機能します。しかし、自律的な運転のためのend-to-end学習に対しては懐疑的です。以降の数章で、その理由を説明します。

## **49. Pros and cons of end-to-end learning（end-to-end学習の長所と短所）**
前述の例と同じ、音声認識器のパイプラインを考えてみましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/09061346-1747-e6f5-f97a-af27dc48f645.png)
このパイプラインの多くの部分は、hand-engineered（マニュアル設計）されたものでした。

* MFCCは、hand-engineered（マニュアル設計）されたオーディオに関する一連の特徴量です。入力オーディオの合理的な要約を提供するが、いくつかの情報を捨てて入力信号を単純化します。
* 音素は言語学者の発明です。これらは音声の不完全な表現です。音素が現実の貧弱な近似である限り、音素表現を使うようにアルゴリズムに強制すると、音声システムのパフォーマンスが制限されます。

これらのhand-engineered（マニュアル設計）されたコンポーネントは音声システムの潜在的なパフォーマンスを制限します。しかしながら、いくつかの利点もあります。

* MFCCの特徴量は、スピーカーのピッチなど、コンテンツに影響を与えない音声のいくつかのプロパティに対して堅牢です。 したがって、学習アルゴリズムの問題を単純化するのに役立ちます。
* 音素が音声の合理的な表現である限り、学習アルゴリズムが基本的なサウンドコンポーネントを理解し、そのパフォーマンスを向上させるのに役立ちます。

hand-engineered（マニュアル設計）されたコンポーネントを利用することにより、一般的に音声システムはより少ないデータで学習することができます。MFCCと音素によって補足されたhand-engineeredの知識は、アルゴリズムがデータから得る知識を補う。多くのデータがない場合、この知識は役に立ちます。
いま、end-to-endシステムを考えてみましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/9baf3e0a-4d6a-befa-151d-0c9ce3d86f2f.png)
このシステムはhand-engineered（マニュアル設計）による知識が欠けています。したがって、訓練セットが小さい場合、hand-engeneeredパイプラインよりも悪化する可能性があります。
しかしながら、訓練セットが大きい場合には、MFCCや音素表現の限界によって妨げられることはありません。もし、学習アルゴリズムが十分に大きいニューラルネットワークであり、十分な量の訓練データの訓練されていれば、それは非常にうまくいく可能性があり、ひょっとしたら最適エラー率に近づく可能性もあります。

End-to-end学習システムは、「両端」（入力側と出力側）に多くのラベルデータがあるとうまくいく傾向があります。この例では、音声と転写のペアの大きなデータセットが必要です。このタイプのデータが利用できない場合は、end-to-end学習に十分注意してアプローチしてください。訓練セットが非常に少ない機械学習の問題に取り組んでいる場合、アルゴリズムの知識の大半は人間の洞察から来なければなりません。すなわち、'hand-engineering'のコンポーネントから。
 end-to-endシステムを使用しないことを選択した場合は、パイプライン内のステップとそのプラグインの接続方式を決定する必要があります。次のいくつかの章では、このようなパイプラインを設計するためのいくつかの提案を行います。