分散深層学習の研究を行うために必要な知識な得るためのステップについて考える
2018年3月19日
UQ消化期間に突入したのでぼちぼち研究活動の前段階であるinputをかき集める作業に着手している。 が、その前に、分散深層学習に関する研究をするためにはどのようなステップが必要なのか考えねばなるまい。
研究すること
- ディープラーニングの学習および推論フェーズにおける計算機科学的な問題のどれかを解決する手法を提案する
- 計算機的な問題とは
- スループットの低さ
- 学習におけるスケールアウトの難しさ
- (ChainerMNのスライドとか見ると
モデル並列
とデータ並列
、および同期型
と非同期型
のアプローチの系統があるらしい
- (ChainerMNのスライドとか見ると
- NWボトルネック
- GPGPUの活用
- でもこれCUDA使う以外に何かできることあるんか?
現状
- パーセプトロン、多層パーセプトロンとしてのニューラルネットワーク、勾配、確率的勾配降下法、ぐらいまでしか人に説明できない程度の知識
- ディープラーニング界隈における最新の研究トピックは全然しらない
- ディープラーニングで解決できる課題に関してそれなりに知っているのはMNISTとパンダ画像の分類問題しか知らない
- 分散処理の知識も皆無に等しい
- c++はAtCoderの問題を解く程度のスキルしかない
- CUDA?OpenMP? MPI? なにそれ美味しいの?
4月中にやること
- ゼロからDeep Learningを熟読する
- 多分これがエンジニア脳には一番やさしい
- 深層学習本の知らないところだけを読む
- OSSのDLフレームワークに関する以下の項目を調べる
- スケーラビリティ
- ネットワークの実装スタイル
- パフォーマンス(これは実際に研究室のマシンで動かしたい)
- DLの代表的なベンチマーク的なアレを調べる
- MNISTでもいいがもう少し難しくてデータ量が多いのがいい
- いいのあった https://github.com/arXivTimes/arXivTimes/tree/master/datasets
- 一方でMapReduceを適用するケースについてもやりたいので手を付けておきたい