9/3(sat) の マルレク課外 ディープラーニング入門6時間集中講義 に出席したので、そのメモ
TL;DR
- ニューラル・ネットワークは人間の神経シナプス構造を模しているから、その動きを理解することがニューラル・ネットワークを理解する近道
-
ディープラーニングが昨今注目されているのは、コンピューティングパワーのおかげ
基礎自体は結構前に考えだされたもので、それ自体はあまり進展していない。時代が追いついた -
ニューラル・ネットワークのコーディング(?)環境はまだ揃っていない
たとえば出力値に対する検証・デバッグってどうするの?ってことに対して利用しやすい方法が確立していない - 適用用途は "クラス分け" → "推論・対話" → "知覚・運動系へのフィードバック" → "言語理解" → "数学的理解" と進んでいくはずだが、現在位置は "推論・対話" が実用レベル
-
ニューラル・ネットワークを使って学習させるデータは、低解像度でも十分
実際、手書き数字を認識させる場合は縦横28pxのデータを使っている。それよりも重要なのは、そのデータに特徴が現れているかどうか。高解像度であることと特徴が際立っていることは同義ではない -
計算量と経済的合理性は常に比較して挑む
そうでないと自己満足で終わってしまううえ、お金の面でも無きを見る
個人的感想
TensorFlow等の実装系を理解するには
これはニューラル・ネットワークの基礎を学ぶことで、実装内容が詳しく理解できるようになるので、基礎を学ぶこと
学習データの準備方法
入力の次元数の計算方法
よくMNISTの手書き数字を学習させる方法として次元数(入力数)を784としますが、なぜ784なのか
これは入力のバイト数だった
2px * 2px の 256階調画像なら
1[0..255] 2[0..255]
3[0..255] 4[0..255]
となり 4 が入力数となる
RGBなら 入力数は 12
1[0..255, 0..255, 0..255] 2[0..255, 0..255, 0..255]
3[0..255, 0..255, 0..255] 3[0..255, 0..255, 0..255]
MNISTの手書き数字は 28px * 28px * 256階調 なので 28 * 28 * 1 = 784 ということ
この考え方を応用すれば、たとえ画像でなくとも入力数は決められる
例)
10秒に一回の温度データ出力で1分間の特徴量を学習させる場合
| 0秒前の温度データ | 10秒前の温度データ | 20秒前の温度データ | ... | 50秒前の温度データ
と入力数を6にしてあれば良い
入力データのサイズ
高解像度が常に良いわけではなく、低解像度化することでむしろ特徴が際立ち、かつ入力も小さくなるため、学習データとして適切になる可能性もある
(モザイク画像に対して目を細めることで特徴抽出するようなもの)
要するに「間引き方」が大切
機械学習における最大の課題
"学習済みモデル"を「作る人」と「利用する人」をうまく分離できてないところにある
学習済みモデルというのは、いわゆるアルゴリズムに相当する。SHA256みたいなのもの
現在の機械学習はそのアルゴリズムを作る人と使う人が同じで、再利用が極めて難しい
(この辺は、学習済みモデルを再利用するという観点でググっていただければ、そういうエントリーが乏しいことに気づいていただけるであろう)
これでは毎度毎度車輪の再発明しているようなもので、この辺はHadoopが一般的にならなかった理由にも近い。毎度毎度ソートアルゴリズム書くの?おれが?まじで?みたいな。
よって 学習済みモデルの再利用性を高めることが、この分野を促進するために必要なことだと考える
あとがき
ほんと、疲れた