SlideShare a Scribd company logo
1 of 21
Download to read offline
ディープラーニングの
フレームワークの自作
http://lkzf.info/mkfn
1/21
自己紹介
● CUDAを使った画像処理の仕事をしてました。
● 個人的にソースコードの解析などの開発ツールを
作ってました。
● AIの勉強を始めたのは半年前。
AIの実務の経験はありません。
2/21
なぜフレームワークを自作?
● 既存のフレームワークは内部がブラックボックスでデ
バッグがむつかしい。
● フレームワークなしでもデバッグはむつかしい。
デバック用のコードもCUDAで書かないと計算時間が
かかる。
シンプルなCUDA対応のフレームワークを作りたい。
3/21
基本的な動作
● 順伝播の式をC#で書く。
● C#のソースコードを解析して、逆伝播の数式を生成
● CUDAゃC++のプログラムのソースコードを生成
● MathJaxの形で順伝播や逆伝播の式を出力
4/21
フレームワークの予備知識
● 順伝播と誤差逆伝播
● 多変数関数の微分と高校の微分
● 行列の知識は不要
● C#、C++、CUDA
5/21
多層パーセプトロンの例
多層パーセプトロンの順伝播の式
6/21
レイヤーのクラス定義
7/21
コンストラクター
配列のサイズを指定。
例えば配列wのサイズは Y行,X列
8/21
順伝播の式の定義
Forwardという名前のメソッドで定義
Range(n)は0からn-1までのintの配列を返す関数
9/21
逆伝播の式を生成
10/21
C++やCUDAのソースコードを生成
for (int j = 0; j < X; j++) {
for (int _batch_idx = 0; _batch_idx < BatchSize; _batch_idx++) {
double _wk = 0;
for(int i = 0; i < Y; i++){
_wk += delta_u[i * BatchSize + _batch_idx] * w[X * i + j];
}
delta_x[j * BatchSize + _batch_idx] = _wk;
}
}
ミニバッチのforループも追加
11/21
プログラムの処理の流れ
● C#のソースコードを解析
● 字句解析、構文解析、名前解決、型推論
● 逆伝播の式を作成
● 変数の順伝播先を調べる
● 逆伝播の方程式を作る
● 微分
● 数式の簡約化
● CUDAやC++のソースコードを作成
●
実行順序の決定
12/21
字句解析
ソースコードの文字列を字句の列に分解
from j in Range(X) select x[j]
from j in Range ( X ) select x [ j ]
13/21
構文解析
字句の列を
木構造に変換
+
*
a b 3
a b 3+ *
加算の解析
乗算の解析
a b 3
乗算の解析
基本要素
解析
関数の再帰呼び出しで
木構造を作成
+ *
基本要素
解析
基本要素
解析
14/21
名前解決と型推論
class FullyConnectedLayer {
double[] y;
double[] x;
void Forward() {
foreach (int i in Range(Y)) {
y[i] = x[i];
}
}
}
名前解決 : 木構造を上方向にたどって、
変数の宣言場所を探す
型推論 : 変数の型から式の型を計算
例 : xはdoubleの配列なのでx[i]はdouble
15/21
変数の順伝播先を調べる
LSTMのメモリセルsの値は
5箇所で使用
16/21
逆伝播の方程式を作る
17/21
微分
変数自身の微分は1
変数を含まない式の微分は0
定数倍の微分は微分の定数倍
和の微分は微分の和
多変数関数の微分
18/21
数式の簡約化
加算に0が含まれていれば除去
乗算に0が含まれていれば値は0
加算の中の定数値を計算
乗算の中の定数値を計算
加算の中の定数の係数を計算
入れ子の加算は外に出す
19/21
実行順序の決定
変数の依存関係で実行順序を決める。
下の3個の式は上の式の を使うので、上の式の後に実行する。
CUDAではイベントを使い実行待ちの制御をして、下の3個の式は並列で実行
する。
計算グラフ(データフローグラフ)と同様の制御になる。
20/21
まとめ
現在、ソースコードの生成のデバッグ中。
多層パーセプトロンのC++のコードは動作しました。
ディープラーニングのフレームワークは
計算グラフ(データフローグラフ)で作る場合が多いで
すが、数式処理でも作れそう。
内部的には計算グラフと考えてよいかも。
ご清聴ありがとうございました。
21/21

More Related Content

Similar to ディープラーニングのフレームワークの自作

InDesign正規表現勉強会_名古屋_0727
InDesign正規表現勉強会_名古屋_0727InDesign正規表現勉強会_名古屋_0727
InDesign正規表現勉強会_名古屋_0727ShinyaNakagawa
 
NGN2012B 発表資料
NGN2012B 発表資料NGN2012B 発表資料
NGN2012B 発表資料Kenji Nagase
 
Blenderソースコードリーディング
BlenderソースコードリーディングBlenderソースコードリーディング
BlenderソースコードリーディングTetsuo Mitsuda
 
3DCAD導入セミナー~3DCADの選び方~
3DCAD導入セミナー~3DCADの選び方~3DCAD導入セミナー~3DCADの選び方~
3DCAD導入セミナー~3DCADの選び方~Teruki Obara
 
Glide活用イメージ紹介20220421
Glide活用イメージ紹介20220421Glide活用イメージ紹介20220421
Glide活用イメージ紹介20220421kazu_1803
 
ゲームエンジンとMVC
ゲームエンジンとMVCゲームエンジンとMVC
ゲームエンジンとMVCAimingStudy
 
Webサイトのようには作れない!Webアプリ設計の考え方
Webサイトのようには作れない!Webアプリ設計の考え方Webサイトのようには作れない!Webアプリ設計の考え方
Webサイトのようには作れない!Webアプリ設計の考え方girigiribauer
 
電光掲示板のコード C#で画像処理
電光掲示板のコード C#で画像処理電光掲示板のコード C#で画像処理
電光掲示板のコード C#で画像処理Takuya Negishi
 
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka -
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka  - 初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka  -
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka - Daiyu Hatakeyama
 
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first timeYusuke Yamada
 
設計書からの卒業
設計書からの卒業設計書からの卒業
設計書からの卒業Fumiyasu Sumiya
 
LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2Yoshitaka Seo
 
Howtoよいデザイン
HowtoよいデザインHowtoよいデザイン
HowtoよいデザインHiroki Yagita
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
普段こういうこと気にしながら、こんな風に作ってます。
普段こういうこと気にしながら、こんな風に作ってます。普段こういうこと気にしながら、こんな風に作ってます。
普段こういうこと気にしながら、こんな風に作ってます。c-mitsuba
 
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜kusukawa
 
機械学習環境にハマってみよう
機械学習環境にハマってみよう機械学習環境にハマってみよう
機械学習環境にハマってみようYou&I
 

Similar to ディープラーニングのフレームワークの自作 (20)

InDesign正規表現勉強会_名古屋_0727
InDesign正規表現勉強会_名古屋_0727InDesign正規表現勉強会_名古屋_0727
InDesign正規表現勉強会_名古屋_0727
 
NGN2012B 発表資料
NGN2012B 発表資料NGN2012B 発表資料
NGN2012B 発表資料
 
Blenderソースコードリーディング
BlenderソースコードリーディングBlenderソースコードリーディング
Blenderソースコードリーディング
 
3DCAD導入セミナー~3DCADの選び方~
3DCAD導入セミナー~3DCADの選び方~3DCAD導入セミナー~3DCADの選び方~
3DCAD導入セミナー~3DCADの選び方~
 
Slides mkmk5
Slides mkmk5Slides mkmk5
Slides mkmk5
 
Glide活用イメージ紹介20220421
Glide活用イメージ紹介20220421Glide活用イメージ紹介20220421
Glide活用イメージ紹介20220421
 
ゲームエンジンとMVC
ゲームエンジンとMVCゲームエンジンとMVC
ゲームエンジンとMVC
 
Webサイトのようには作れない!Webアプリ設計の考え方
Webサイトのようには作れない!Webアプリ設計の考え方Webサイトのようには作れない!Webアプリ設計の考え方
Webサイトのようには作れない!Webアプリ設計の考え方
 
電光掲示板のコード C#で画像処理
電光掲示板のコード C#で画像処理電光掲示板のコード C#で画像処理
電光掲示板のコード C#で画像処理
 
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka -
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka  - 初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka  -
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka -
 
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
 
設計書からの卒業
設計書からの卒業設計書からの卒業
設計書からの卒業
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2
 
Howtoよいデザイン
HowtoよいデザインHowtoよいデザイン
Howtoよいデザイン
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
普段こういうこと気にしながら、こんな風に作ってます。
普段こういうこと気にしながら、こんな風に作ってます。普段こういうこと気にしながら、こんな風に作ってます。
普段こういうこと気にしながら、こんな風に作ってます。
 
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜
 
機械学習環境にハマってみよう
機械学習環境にハマってみよう機械学習環境にハマってみよう
機械学習環境にハマってみよう
 
3 d printer_ivent
3 d printer_ivent3 d printer_ivent
3 d printer_ivent
 

ディープラーニングのフレームワークの自作