NaITE#32 機械学習のモデルのぞいてみない？ ～ブラックボックスのままでいいの？～ 勉強会メモ

## 1. はじめに
2019年6月29日に開催された「[NaITE#32 機械学習のモデルのぞいてみない？ ～ブラックボックスのままでいいの？～](https://nagasaki-it-engineers.connpass.com/event/130042/)」の勉強会メモです。

資料は上記リンク先からご覧ください。ツイートまとめは[こちら](https://togetter.com/li/1371402)です。

## 2. 参加の動機
一言でいうと機械学習やAIが身近なものとして存在するのにその仕組みを分かっていないモヤっと感です。先人たちのおかげで高度なテクノロジーを手にする敷居が下がったもののいざ手にすると持て余すというかブラックボックスのままだと手が出ないというか。

- 断片的にいろいろ話を聞くものの有機的につながっていない感
- Pythonを触っていると[^1]機械学習が視界に入ってきたり
- NNアクセラレータを載せたプロセッサやそれを組込んだボードが安価に手に入ったり
  - 例えば[Sipeed Maix Bit](https://www.switch-science.com/catalog/5702/)がK210+カメラ+2.4インチTFT液晶+MEMSマイクが付いて税込3,456円
  - カメラと液晶を接続してサンプルコードをコピペするだけで顔認識
  - M5StackとSipeedがコラボして誕生した[M5StickV](https://www.switch-science.com/catalog/5700/)の発売が控えていたり

## 3. セッション1 「機械学習が正直よくわかっていないので、一から学習してみました」 
カルバートさんのセッションです。以下のような構成です。

1. なぜ、機械学習を学ぶのか?
2. 学習の仕組みを知る
3. 機械学習プログラムの仕組みを知る
4. 機械学習の仕組みを知る

### 3.1 なぜ、機械学習を学ぶのか?
カルバートさんの「正体がわからないものは怖い」というのは筆者も同感です。

### 3.2 学習の仕組みを知る
機械が学習する過程をワークを通して人力で体験しました。ワークは前処理済みの学習データ(ペンギンの写真にコウテイペンギン、ケープペンギン、イワトビペンギンのタグが付いたもの)が用意され、

1. ペンギンの写真を学習する(覚える)(5分)
2. 提示された写真を分類する

というものです。まさしく人力識別器ですね。

手順1は筆者は以下のようにテキストに書き出したのですが絵的に覚える方法もありこれが識別器のアルゴリズムの違いなんだなと体感しました。

|種類|特徴|
|----|----|
|イワトビペンギン|目の横に黄色い羽根、くちばしが赤い
|コウテイペンギン|丸い、クールミントガム
|ケープペンギン  |目の周りを白い帯が囲む、お腹に斑点、お腹の縁を黒い帯が囲む

手順2はコウテイペンギンの赤ちゃんは知識としては持っているのにワークで学習していないため判別できずモヤモヤすることに。教師あり学習は分類したいアイテムのぶんだけ学習が必要というのを実感しました。

### 3.3 機械学習プログラムの仕組みを知る
参考書の紹介やプログラムを書いて試すための手順、ワークで人力でやったこととプログラムでやることの対比などの話がありました。

参考書として取り上げられていたのは「[すぐに使える！業務で実践できる！ Pythonによる AI・機械学習・深層学習アプリのつくり方](https://www.socym.co.jp/book/1164)」です。カルバートさんによると1.環境構築、2.サンプルコードの写経、3.サンプルコードの実行を第2章まで行った範囲では動くものを作るぶんには大きなはまりポイントはないとの話でした。

### 3.4 機械学習の仕組みを知る
ここでは従来型プログラムと機械学習プログラムの違いや、機械学習ができること、機械学習の分類といった話がありました。断片的に見聞きしたことのある話もあるのですがワークやプログラムの仕組みをわかったうえで聞いているのでこの話はあれのことだなと話がつながっていきました。

## 4. セッション2 機械学習？AI？それ何からできてるの？ ～モデルの中身をのぞいちゃおう！～
あさこさんのセッションです。以下のような構成です。

1. 勉強会テーマ選定のきっかけ
2. 概論
3. 線形回帰分析(最小二乗法)・ベイズ推定
4. グループワーク2
5. グループワーク発表
6. 終わりに、ふりかえり

### 4.1 勉強会テーマ選定のきっかけ
選定のきっかけに[JaSST'19 Tokyo](http://www.jasst.jp/symposium/jasst19tokyo.html)が挙げられていますが、JaSST'19Tokyoは基調講演、招待講演とも機械学習がテーマだったり企画セッションの一つに機械学習のテストがあったりしてここで機械学習の波に乗らないととケツを叩かれている感があったのを思い出しました[^2]。

### 4.2 概論
カルバートさんのセッションでもあったのですが、大事なのは「背景・理由」であり、背景・理由を満たすために「技術(ツール・手段)」があり、妥当な技術を選ぶには技術だけでなくプロセス(ルール)や知恵(応用を利かせるためのドメイン知識、経験)が必要という話です。

機械学習において「技術xプロセスx知恵」を兼ね備えているとは機械学習の中で何が行われているかを理解しユーザ・顧客に解決方法を提案できる力があることと理解しました。

セッションでは機械学習の中身を知る入り口として線形回帰やベイズ推定が取り上げられました。

### 4.3 線形回帰分析(最小二乗法)・ベイズ推定
人力識別器で行ったことを機械学習に置き換えると以下のようになります。

1. 教師データをモデル化する
2. 学習を繰り返してモデルの正確さを上げる
3. 未知のデータをもっともらしいものに分類する

#### 4.3.1 線形回帰分析(最小二乗法)
教師データをモデル化するとは、教師データの集合を数式で近似することです。

セッションでは散布図(xy平面にプロットされたデータの集合)を近似する方法である最小二乗法が取り上げられました。母集団と標本からスタートし、平均と分散、確率分布を経て最小二乗法の解説がありました。また、回帰モデルを選ぶには微分して相関を見る話もありました。

散布図の近似線はプロットされた個々の点の配置で変わり、教師あり機械学習の学習結果は教師データによって変わります。機械学習はデータが大事というのはよく聞くもののペンギンの画像がどのように数式で近似されるか想像つかないのですが、筆者は散布図と対比することで理解が進みました。

|教師あり機械学習|散布図|
|----|----|
|教師データからノイズを除去する|データから特異点を除去する|
|教師データの準備はドメイン知識が必要|特異点の判別はドメイン知識が必要|
|機械学習のモデルは数式|散布図の近似線は数式|
|モデルは適切に選ぶ必要がある|前提が成立し、相関に応じたモデルを選ぶ必要がある|

#### 4.3.2 ベイズ推定
ある前提条件における確率を条件付き確率と呼び、学習を繰り返すとは新しい情報を与えて条件付き確率を上書きしていくことです(これをベイズ統計ではベイズ更新と呼びます)。セッションでは人狼、オオカミ少年の推定が例示され、ベイズ推定の例を一つ挙げてベイズ更新を行うグループワークを行いました。

未知のデータを一番もっともらしいものに分類するとは、ある結果に対する、その結果をもたらす確率(逆確率、ベイズ統計では事後確率と呼びます)を求めることです。セッションはベイズ更新のグループワークのあと振り返りに進み分類は踏み込まなかったのですが、身近な例では電子メールに含まれる単語から迷惑メールを分類するベイジアンフィルタがあります。

## 5. おわりに
- 人力識別器や散布図の近似線の話は身近なこともあってよくわかった一方、ベイズ推定はあまりなじみがなくグループワークでもベイズ更新の例ってこれでいいのだっけ？と戸惑いました。
- グループワークでご一緒させていただいた方からベイズ推定の例として[モンティホール問題](https://www.google.co.jp/search?hl=ja&as_q=モンティホール問題)を教えていただきました。
- 数学の話は難しいのですが自力で調べる敷居が下がりました。

講師のカルバートさん、あさこさん、勉強会を開催されたNaITEの方々、勉強会に参加されたみなさまにお礼を申し上げます。

[^1]: [M5StackとPythonで受入テスト自動化の要素技術を試す](https://qiita.com/pbjpkas/items/97b6e596a4009a71f1ab)
[^2]: JaSST Tokyoの良いところのひとつにグローバルの最先端やトレンドの話を日本語で得られるというのがあります。