IoTシステム技術基礎検定 #11　機械学習とIoT

#はじめに
5章目後半です。
最近の流行でもある機械学習、深層学習について触れていきます。

#今回取り組む内容
・5-5～5-7 (テキストP156-164)
機械学習と深層学習、システムへの適用例に関して。

#5-5　機械学習とは
####機械学習の概要

5-4に出てきた統計手法をデータ分析では、データ同士の関連性を人間が推定してモデルを構築し、モデルに含まれるパラメータを算出していた。
この手法は分かりやすく計算しやすい利点があるが、複雑な問題のモデルを構築しにくいという欠点がある。
欠点への対策として考えられたのが、ビッグデータに潜む隠れパターン（規則性）を発見する**機械学習**の技術。
機械学習では、モデルに含まれるパラメータを算出するのではなく、大量の情報から学習することで最適化する。

###機械学習の適用例

テキストでは、機械学習の例としてよく使われる「手書き文字の認識」で説明している。
テキストの学習モデルは、左側(x1~xn)が入力エッジ（画像入力）、右側(y1~yn)が出力エッジ（識別結果出力）を示している。

入力-出力間の線（ノード）には、重みパラメータ（w,weight）が設定され、学習モデルに画像を入力すると、y1,ynは以下の式で表される。
y1 = x1w11 + x2w12 + … + xnw1n
yn = x1wn1 + x2wm2 + … + xnwnn
(w_出力先_入力元)

y1~y3はそれぞれの文字に対応しており、最も大きい値が識別結果、x1が一番大きければAを出力する。

識別を正しく行わせるには、重みパラメータwを学習させる必要がある。
学習では、最初から答え（識別結果）が分かっている画像を使って、出力が正しいかを調べていく。
出力が間違っていれば重みパラメータwを変化させ、何度も繰り返すことで正確な学習モデルを構築できる。
答えがわからないような画像にも、機械学習による学習モデルを用いることで識別が可能になる。

####機械学習で使われる学習手法

①**教師あり学習　（例；迷惑メールの振り分け）**
前の文字認識では、データとその正解といったセットを使って学習をしていて、こういった学習方法は、正解を教える教師がいる学習は教師あり学習に分類される。
例として、gmailとかで大量に届く迷惑メールが、勝手に迷惑メールフォルダに入っていることがある。
最初に自分で迷惑メールフォルダに入れたメールの内容から学習して、あとから来たメール内容が、迷惑メールに該当するかどうかをシステム側が判断してメールを捌いている。

②**教師なし学習（例；大量の画像からの学習）**
正解のないデータ、例えば、大量の画像を、いくつかのグループ（人、食べ物、犬など）に分けるとき、「どう分けるか」を学習する。こういった方法は、正解を教える教師がいないことから、教師なし学習という。

③**強化学習（例：囲碁、将棋）**
囲碁、将棋といったボードゲーム、TVゲームのように、こちらが何か動作すれば、周りの環境が変化するような状況下で、試行錯誤しながら環境の変化と得られる「報酬」を考え、報酬（ゲームで有利な状況）を最大化するような動作を学ぶ学習方法を強化学習と呼ぶ。

#5-6　深層学習とは
####機械学習の課題

5-5にあった手書き文字認識は、入力となる文字パターンが少ないので、簡単に学習モデルを形成できた。
しかし、問題が複雑になってくると、データをそのまま使うのでは非効率なので、「縦棒の有無」「曲線の存在」といった特徴を抽出し、モデルに入れる必要がある。
では、どういった特徴を取り出せばいいか？今まではシステムに一任できず、人の手でどの特徴を使うか考えるといった手間な作業だった。
このように、今までの機械学習は高度な特徴抽出（人の顔の特徴など）を苦手としていた。

####機械学習

特徴抽出といった課題に対して生まれたのが**深層学習(Deep Learning:ディープラーニング)**である。
近年、AI分野で注目されている深層学習を使うことで、今までの機械学習が成し遂げられなかったレベルでの学習を行うことが可能になってきている。
人の脳の神経（ニューロン）をモデル化した**ニューラルネットワーク**を使うのが特徴で、5-5の学習モデルと比較すると、入力と出力の間に層を増やしているのが分かる。
この層は隠れ層と呼ばれ、隠れ層が複数あるモデルでの学習が深層学習と呼ばれている。
何層も隠れ層を積み重ね、繰り返し学習させることで「特徴を抽出する層」が勝手に生まれ、コンピュータひとりでも特徴抽出が可能になる。

####深層学習の歴史と活用

最近目立ってきた深層学習も、概念自体は1980年代から存在していた。しかし、今ほどコンピュータの性能は良くないし、実行には多くのデータや複雑な計算が必要になるので実用の域にはいたらなかった。
2012年の画像認識コンテストで、トロント大が深層学習を使って好成績を叩き出したことで一気に注目を集め、ネット技術・コンピュータの進歩もあって一気に深層学習はブームになっていった。

深層学習の特徴抽出という強みを使って、主に画像識別（文字認識や医療関連の画像解析、自動運転での障害物認識）や音声認識（Google HomeなどAIスピーカー）、自然言語技術で翻訳といった、あらゆる分野で活躍している。

ニューラルネットワークにも種類があり、順伝播型の**畳み込みニューラルネットワーク（CNN）**や、ループ部分を持ち、音声などの時系列データの学習に役立つ**再帰型ニューラルネットワーク（RNN）**などがある。

####深層学習に使われるライブラリ

さっきも触れたように、深層学習は難しい計算をたくさんする必要があるので、深層学習を効率的に利用できるようなライブラリ、オープンソースソフトウェアがあり、一般でも簡単に使うことができる。
有名どころは、**Caffe**(カリフォルニア大)、**TensorFlow**(米グーグル)、**Chainer**(プリファードネットワークス)がある。

#5-7　深層学習の適用例
####顔認識システム

街角に設置された防犯カメラで、通行人の顔を認識し、指名手配とかのリストの顔と一致したら通報を行うシステム。
こういったシステムでは、深層学習を有効利用できる。
システム構築の際、高精度な識別ができる学習モデルを形成する「学習フェーズ」、
実際に認識を開始する「識別フェーズ」、
2つのフェーズに分けてシステムを構築し、稼働させる。

####学習フェーズ

学習と評価を繰り返し、納得がいく評価になるまで繰り返す。
学習の際は、顔データに対し、その顔が誰であるかを示す正解ラベルを付与する。
その後、顔データを「学習用」「評価用」に分けておく。

次に、どのニューラルネットワーク（NN）を使うかを選ぶ。顔認識では畳み込みNN（CNN）が多く使われる。

NNを選んだら、学習用データを使って学習を行う。多くの計算が必要なので、画像処理を得意とするGPU搭載のコンピュータを使って効率的に学習を行う。
5-6にあったライブラリも、GPUに対応した設計となっている。
また、GPU自体が高価なので、クラウドでGPU搭載のコンピュータを使えるサービスも登場している。

学習が進んだら、進み具合の評価を行う。学習用とは違うデータである評価用のデータを用いて、識別精度を適宜確認する。
目標の識別率を達成したら、学習フェーズを終了とする。

逆に学習しすぎるのも毒で、学習用データのみに入れ込んだモデルとなってしまい、これを**過学習**と呼ぶ。
学習してもうまくいかなければ、使うNNやデータ数を再検討しなければならない。

####識別フェーズ

学習して鍛え上げた学習モデルを実戦導入する。テキストでは監視カメラシステム。
常に顔を見張っているのではデータや通信量が莫大になるので、人を検出したときのみ顔画像の認識を行うようにしている。
1-4のIoTシステムの考え方だと、それぞれ以下のように対応する。

IoTデバイス（実世界でのデータの収集）　　　　：カメラ
IoTゲートウェイ（データをサーバに送るか判断）：前処理用コンピューター
IoTサーバ（受け取ったデータを分析）　　　　　：識別コンピューター

#試験に出そうなところ
AI技術における今最大のトレンドですので、欠かせない部分です。
機械学習や深層学習の分類は、ニュースとかで結構ごっちゃにされてるのでここではっきり区別できるようにしましょう。

####機械学習

・機械学習は、今までの統計的手法とはどこが違うか？
・**どういった流れで学習するか、図とともにイメージできるか？（例：文字認識）**
・**【重要】機械学習はどういった分類があり、各々の例をイメージできるか？**
→「迷惑メールの自動分類で利用されてのは○○学習と✕✕学習のどっちか？」とか出そう。

####深層学習

・**従来の機械学習と深層学習の異なる点は？**
・深層学習は何が得意で、どういった分野で使われているか？
・**ニューラルネットワークとは何か？どういった種類があるか？**
・深層学習のライブラリを覚えているか？（3つ）
→名前見たら「深層学習のやつだ！」って思い出せるように。
・システムで深層学習を利用するとき、どういった手順でシステムを作り、動かすか？
・過学習とは何か？