Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ぼくの実装した最弱のディープラーニング / Weakest deep learning I implemented

ぼくの実装した最弱のディープラーニング / Weakest deep learning I implemented

2015年9月4日の「プログラマのための数学勉強会@福岡 #1」でのプレゼン資料です。
https://maths4pg-fuk.connpass.com/event/18609/

(2023/4/12に再アップ)

Naoki Kishida

September 07, 2015
Tweet

More Decks by Naoki Kishida

Other Decks in Programming

Transcript

  1. ディープラーニング • 階層の深いニューラルネット • 最近、人工知能っていわれてるのは、ほぼこれ • いままでできなかったわけ – コンピュータが遅かった •

    GPUで速い計算 – データがなかった • インターネッツ! – データあさり放題 • クラウドソーシング! – ImageNetの1400万の画像はクラウドソーシングでタグ付けして るらしい
  2. 参考文献 • 「深層学習」 – 広い範囲が解説してある – http://www.amazon.co.jp/dp/4061529021 • AlexNet論文 –

    パラメータなどが詳しく説明して ある http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf
  3. AlexNetの構造 • C->P->N->C->P->N->C->C->C->P->F->F->F – C:畳み込み層 • 96/256/384/384/256 – P:プーリング層 –

    N:正規化層 – F:全結合 • 4096/4096/1000 • いま動いてるやつ – C->P->N->C->P->N->F->F • C:48/96 • F:1024/256
  4. 記述 • Kernelを継承 • runを実装 – getGlobalId()でインデックスを取る • executeを呼び出し –

    引数で与えた回数 runが呼び出される @Override public void run() { int fxy = getGlobalId(); float d = result[fxy] >= 0 ? delta[fxy] : 0; tempBiasDelta[fxy] = learningRate * d; } execute(outputChannels * outputWidth * outputHeight);
  5. 効果 • AlexNetの学習 • 自宅 (Core i7 4コア+GTX 970) –

    CPU 15枚/分 – GPU 95枚/分 • このMac(Core i7 4コア+Intel Iris Pro) – CPU 12枚/分 – GPU 16枚/分 • ImageNetのサンプル1400万枚が100日で学習で きる! – CPUなら640日!
  6. バグがある・・・ • 三項演算子のカッコが反映されない – (修正してプルリクなげてます) • CPUとの結果と比較するテストを用意したほうが いい – けど、丸めの違いを考慮するの面倒

    void proc(int fxy) { float d = (result[fxy] >= 0 ? 1 : 0) * delta[fxy]; tempBiasDelta[fxy] = learningRate * d; } void kishida_cnn_kernels_ConvolutionBackwordBiasKernel__proc(This *this, int fxy){ float d = (float)(this->result[fxy]>=0.0f)?1:0 * this->delta[fxy]; this->tempBiasDelta[fxy] = this->learningRate * d; return; }