Submit Search
数式を綺麗にプログラミングするコツ #spro2013
208 likes
51,226 views
S
Shuyo Nakatani
1 of 26
Download now
Downloaded 361 times
1
2
3
4
5
6
7
8
9
10
11
Most read
12
13
14
15
16
Most read
17
18
19
20
21
22
23
Most read
24
25
26
More Related Content
PDF
[DL輪読会]Deep Learning 第15章 表現学習
Deep Learning JP
PDF
指数時間アルゴリズム入門
Yoichi Iwata
PDF
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
PDF
ウェーブレット木の世界
Preferred Networks
PDF
Statistical Semantic入門 ~分布仮説からword2vecまで~
Yuya Unno
PDF
プログラミングコンテストでのデータ構造
Takuya Akiba
PDF
最適輸送の解き方
joisino
PDF
非ガウス性を利用した因果構造探索
Shiga University, RIKEN
[DL輪読会]Deep Learning 第15章 表現学習
Deep Learning JP
指数時間アルゴリズム入門
Yoichi Iwata
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
ウェーブレット木の世界
Preferred Networks
Statistical Semantic入門 ~分布仮説からword2vecまで~
Yuya Unno
プログラミングコンテストでのデータ構造
Takuya Akiba
最適輸送の解き方
joisino
非ガウス性を利用した因果構造探索
Shiga University, RIKEN
What's hot
(20)
PDF
深層生成モデルと世界モデル
Masahiro Suzuki
PDF
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
PDF
Automatic Mixed Precision の紹介
Kuninobu SaSaki
PDF
明日使えないすごいビット演算
京大 マイコンクラブ
PDF
機械学習モデルのハイパパラメータ最適化
gree_tech
PDF
プログラミングコンテストでの動的計画法
Takuya Akiba
PPTX
劣モジュラ最適化と機械学習1章
Hakky St
PDF
Transformer メタサーベイ
cvpaper. challenge
PDF
Union find(素集合データ構造)
AtCoder Inc.
PDF
PRMLの線形回帰モデル(線形基底関数モデル)
Yasunori Ozaki
PDF
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
PDF
Transformerを多層にする際の勾配消失問題と解決法について
Sho Takase
PDF
Stan超初心者入門
Hiroshi Shimizu
PDF
Deep Learningと画像認識 ~歴史・理論・実践~
nlab_utokyo
PDF
coordinate descent 法について
京都大学大学院情報学研究科数理工学専攻
PPTX
猫でも分かるVariational AutoEncoder
Sho Tatsuno
PDF
画像認識の初歩、SIFT,SURF特徴量
takaya imai
PDF
画像生成・生成モデル メタサーベイ
cvpaper. challenge
PDF
GAN(と強化学習との関係)
Masahiro Suzuki
PDF
Variational AutoEncoder
Kazuki Nitta
深層生成モデルと世界モデル
Masahiro Suzuki
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
Automatic Mixed Precision の紹介
Kuninobu SaSaki
明日使えないすごいビット演算
京大 マイコンクラブ
機械学習モデルのハイパパラメータ最適化
gree_tech
プログラミングコンテストでの動的計画法
Takuya Akiba
劣モジュラ最適化と機械学習1章
Hakky St
Transformer メタサーベイ
cvpaper. challenge
Union find(素集合データ構造)
AtCoder Inc.
PRMLの線形回帰モデル(線形基底関数モデル)
Yasunori Ozaki
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
Transformerを多層にする際の勾配消失問題と解決法について
Sho Takase
Stan超初心者入門
Hiroshi Shimizu
Deep Learningと画像認識 ~歴史・理論・実践~
nlab_utokyo
coordinate descent 法について
京都大学大学院情報学研究科数理工学専攻
猫でも分かるVariational AutoEncoder
Sho Tatsuno
画像認識の初歩、SIFT,SURF特徴量
takaya imai
画像生成・生成モデル メタサーベイ
cvpaper. challenge
GAN(と強化学習との関係)
Masahiro Suzuki
Variational AutoEncoder
Kazuki Nitta
Ad
Viewers also liked
(16)
PDF
NumPy闇入門
Ryosuke Okuta
PDF
数式をnumpyに落としこむコツ
Shuyo Nakatani
PDF
CuPy解説
Ryosuke Okuta
PDF
PRML 2.3
Yuto Suzuki
PDF
Prml 2.3
Yuuki Saitoh
PDF
Prml4.4 ラプラス近似~ベイズロジスティック回帰
Yuki Matsubara
PDF
多次元配列の効率的利用法の検討
Yu Sato
PDF
111015 tokyo scipy2_ディスカッション
Shohei Hido
PDF
猫に教えてもらうルベーグ可測
Shuyo Nakatani
PDF
無限関係モデル (続・わかりやすいパターン認識 13章)
Shuyo Nakatani
PDF
Chainer Contribution Guide
Kenta Oono
PDF
Lighting talk chainer hands on
Ogushi Masaya
PPTX
ディープラーニングにおける学習の高速化の重要性とその手法
Yuko Fujiyama
PDF
ボケるRNNを学習したい (Chainer meetup 01)
Motoki Sato
PDF
Chainer meetup lt
Ace12358
PPTX
Simple perceptron by TJO
Takashi J OZAKI
NumPy闇入門
Ryosuke Okuta
数式をnumpyに落としこむコツ
Shuyo Nakatani
CuPy解説
Ryosuke Okuta
PRML 2.3
Yuto Suzuki
Prml 2.3
Yuuki Saitoh
Prml4.4 ラプラス近似~ベイズロジスティック回帰
Yuki Matsubara
多次元配列の効率的利用法の検討
Yu Sato
111015 tokyo scipy2_ディスカッション
Shohei Hido
猫に教えてもらうルベーグ可測
Shuyo Nakatani
無限関係モデル (続・わかりやすいパターン認識 13章)
Shuyo Nakatani
Chainer Contribution Guide
Kenta Oono
Lighting talk chainer hands on
Ogushi Masaya
ディープラーニングにおける学習の高速化の重要性とその手法
Yuko Fujiyama
ボケるRNNを学習したい (Chainer meetup 01)
Motoki Sato
Chainer meetup lt
Ace12358
Simple perceptron by TJO
Takashi J OZAKI
Ad
Similar to 数式を綺麗にプログラミングするコツ #spro2013
(20)
PDF
【Zansa】第12回勉強会 -PRMLからベイズの世界へ
Zansa
PDF
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
Kensuke Otsuki
PDF
Math in Machine Learning / PCA and SVD with Applications
Kenji Hiranabe
PDF
行列計算アルゴリズム
Takuo Tachibana
PPTX
Gmm勉強会
Hayato Ohya
PDF
クリエイティブコーディングのための数学 JavaScript 入門 [三角関数と行列]
Nobuhiro Takahashi
PDF
線形写像を行列で表現しよう
HanpenRobot
PDF
線形代数の視覚的理解のためのノート
Kenji Hiranabe
PPTX
PRML第9章「混合モデルとEM」
Keisuke Sugawara
PDF
Stanの紹介と応用事例(age heapingの統計モデル)
. .
PDF
Trianguler
Ken Ogura
PDF
秘密分散法の数理
Akito Tabira
PDF
Lispでやる記号微分
Keiichi Watanabe
PDF
論文紹介 Semi-supervised Learning with Deep Generative Models
Seiya Tokui
PPTX
CODE FESTIVAL 2014 エキシビジョン 解説
AtCoder Inc.
PDF
2015年度春学期 画像情報処理 第8回 行列の直交変換と画像情報圧縮 (2015. 6. 10)
Akira Asano
PPTX
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
Masashi Komori
PDF
第9回スキル養成講座講義資料
keiodig
PPTX
Practical topology
Tatsuki SHIMIZU
PDF
数学教材(中間発表)
Mizuguchi1205
【Zansa】第12回勉強会 -PRMLからベイズの世界へ
Zansa
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
Kensuke Otsuki
Math in Machine Learning / PCA and SVD with Applications
Kenji Hiranabe
行列計算アルゴリズム
Takuo Tachibana
Gmm勉強会
Hayato Ohya
クリエイティブコーディングのための数学 JavaScript 入門 [三角関数と行列]
Nobuhiro Takahashi
線形写像を行列で表現しよう
HanpenRobot
線形代数の視覚的理解のためのノート
Kenji Hiranabe
PRML第9章「混合モデルとEM」
Keisuke Sugawara
Stanの紹介と応用事例(age heapingの統計モデル)
. .
Trianguler
Ken Ogura
秘密分散法の数理
Akito Tabira
Lispでやる記号微分
Keiichi Watanabe
論文紹介 Semi-supervised Learning with Deep Generative Models
Seiya Tokui
CODE FESTIVAL 2014 エキシビジョン 解説
AtCoder Inc.
2015年度春学期 画像情報処理 第8回 行列の直交変換と画像情報圧縮 (2015. 6. 10)
Akira Asano
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
Masashi Komori
第9回スキル養成講座講義資料
keiodig
Practical topology
Tatsuki SHIMIZU
数学教材(中間発表)
Mizuguchi1205
More from Shuyo Nakatani
(20)
PDF
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
Shuyo Nakatani
PDF
Generative adversarial networks
Shuyo Nakatani
PDF
Memory Networks (End-to-End Memory Networks の Chainer 実装)
Shuyo Nakatani
PDF
人工知能と機械学習の違いって?
Shuyo Nakatani
PDF
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
Shuyo Nakatani
PDF
ドラえもんでわかる統計的因果推論 #TokyoR
Shuyo Nakatani
PDF
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
Shuyo Nakatani
PDF
星野「調査観察データの統計科学」第3章
Shuyo Nakatani
PDF
星野「調査観察データの統計科学」第1&2章
Shuyo Nakatani
PDF
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
PDF
Zipf? (ジップ則のひみつ?) #DSIRNLP
Shuyo Nakatani
PDF
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
Shuyo Nakatani
PDF
ソーシャルメディアの多言語判定 #SoC2014
Shuyo Nakatani
PDF
アラビア語とペルシャ語の見分け方 #DSIRNLP 5
Shuyo Nakatani
PDF
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
Shuyo Nakatani
PDF
Active Learning 入門
Shuyo Nakatani
PDF
ノンパラベイズ入門の入門
Shuyo Nakatani
PDF
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...
Shuyo Nakatani
PDF
Short Text Language Detection with Infinity-Gram
Shuyo Nakatani
PDF
[Karger+ NIPS11] Iterative Learning for Reliable Crowdsourcing Systems
Shuyo Nakatani
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
Shuyo Nakatani
Generative adversarial networks
Shuyo Nakatani
Memory Networks (End-to-End Memory Networks の Chainer 実装)
Shuyo Nakatani
人工知能と機械学習の違いって?
Shuyo Nakatani
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
Shuyo Nakatani
ドラえもんでわかる統計的因果推論 #TokyoR
Shuyo Nakatani
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
Shuyo Nakatani
星野「調査観察データの統計科学」第3章
Shuyo Nakatani
星野「調査観察データの統計科学」第1&2章
Shuyo Nakatani
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
Zipf? (ジップ則のひみつ?) #DSIRNLP
Shuyo Nakatani
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
Shuyo Nakatani
ソーシャルメディアの多言語判定 #SoC2014
Shuyo Nakatani
アラビア語とペルシャ語の見分け方 #DSIRNLP 5
Shuyo Nakatani
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
Shuyo Nakatani
Active Learning 入門
Shuyo Nakatani
ノンパラベイズ入門の入門
Shuyo Nakatani
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...
Shuyo Nakatani
Short Text Language Detection with Infinity-Gram
Shuyo Nakatani
[Karger+ NIPS11] Iterative Learning for Reliable Crowdsourcing Systems
Shuyo Nakatani
数式を綺麗にプログラミングするコツ #spro2013
1.
数式を綺麗に プログラミングするコツ 夏のプログラミングシンポジウム 2013 2013/8/25 中谷 秀洋@サイボウズ・ラボ
/ @shuyo
2.
今回のおはなし
3.
「ビッグデータの手法を実装」って どうするの? 手法いろいろ 数式! 数式!! 数式!!! 実装
4.
「数式→実装」は共通 機械学習 数式! 数式!! 数式!!! 実装 こ こ は 共 通 ← 数値解析
統計処理
5.
数式から実装まで 数式! 数式!! 数式!!! 実装 数式見てすぐ実装? ムリムリ!
6.
小さいステップに分解 数式! 数式!! 数式!!! 実装 数式から 行間の情報を読み解く 「逐語訳」できる形に 数式を書き換える 今日のポイント
7.
この後の流れ 1. 数式がそこにあった – 「式はどうやって出てきたか」は考慮しない 2.
数式を読み解く 3. 数式を書き換える 4. 数式を「逐語訳」で実装
8.
対象とする「数式」 • 行列やその要素の掛け算が出てくる数式 – 機械学習などの手法には、行列を使って表さ れているものが多い –
強力な線形代数ライブラリをうまく使えば楽 に実装できる • 数式の例はC.M.ビショップ「パターン認 識と機械学習」(以降 PRML)から採用 – ただし機械学習の知識は一切要求しない
9.
方針 • 「楽に」「確実に」実装しよう – 間違いにくく、可読性が高い –
最速は必ずしも目指していない • 動くものを確かに作れるようになってから • Python/numpy と R での実装例を紹介 – 基本的な行列計算しか使わないので、その他 の環境(Eigen など)にも参考になる(はず)
10.
書き換え不要なパターン
11.
まずは一番簡単なパターンから 𝒘 = 𝚽
𝑇 𝚽 −1 𝚽 𝑇 𝒕 (PRML 3.15 改) • 線形回帰のパラメータ推定の式 – 「線形回帰とは何か」などは一切気にせず、 この式を実装することのみ考える
12.
数式の「読み解き」 𝒘 = 𝚽
𝑇 𝚽 −1 𝚽 𝑇 𝒕 (PRML 3.15 改) • 𝚽:N×M次元の特徴行列 – 「特徴行列とは?」は気にしない – 「N×M次元の行列」ということだけ • t:N次のベクトル(正解データ) – 中身は気にしない(以下同様) • w はベクトル? 行列? 何次の?
13.
掛け算した行列(ベクトル)のサイズ 𝒘 = 𝚽
𝑇 𝚽 −1 𝚽 𝑇 𝒕 M×1 ← (M×N N×M) M×N N×1 隣接する行列の列数と行数は一致。 そうでなければどこかが間違ってる 各行列のサイズ。 ベクトルは 1列の行列として この段階で勘違いしていると実装できないので 丁寧に確認しておく 両端の行数・列数が 行列(ベクトル)のサイズ。 列数が1ならベクトル
14.
numpy に「逐語訳」 𝒘 =
𝚽 𝑇 𝚽 −1 𝚽 𝑇 𝒕 (PRML 3.15 改) # PHI = N×M次元の特徴行列 # t = N次のベクトル(正解データ) w = numpy.linalg.solve(numpy.dot(PHI.T, PHI), numpy.dot(PHI.T, t)) ※ 逆行列のところで inv() を使ってもいいが solve() の方がコードが短く、速度も速い numpy.dot(PHI.T, PHI) numpy.dot(PHI.T, t) 𝑨−1 𝒃 = numpy.linalg.solve(𝑨, 𝒃)
15.
R に「逐語訳」 𝒘 =
𝚽 𝑇 𝚽 −1 𝚽 𝑇 𝒕 (PRML 3.15 改) # PHI = N×M次元の特徴行列 # T = N次のベクトル(正解データ) w <- solve(t(PHI) %*% PHI, t(PHI) %*% T) # crossprod(X) = t(X) %*% X 関数を使っても良い w <- solve(crossprod(PHI), crossprod(PHI, T)) t(PHI) %*% PHI t(PHI) %*% T 𝑨−1 𝒃 = solve(𝑨, 𝒃)
16.
書き換えが必要になるパターン
17.
多クラスロジスティック回帰の 誤差関数の勾配 𝛻𝒘 𝑘 𝐸 𝑾
= 𝑦 𝑛𝑘 − 𝑡 𝑛𝑘 𝝓 𝑛 𝑁 𝑛=1 (k = 1, ⋯ , 𝐾) (PRML 4.109 改) • 𝒀 = 𝑦 𝑛𝑘 : N×K 次行列(予測値) • 𝑻 = 𝑡 𝑛𝑘 : N×K 次行列(1-of-K 表現) • 𝑾 = 𝒘1, … , 𝒘 𝐾 = (𝑤 𝑚𝑘) : M×K 次行列 • 𝚽 = 𝜙 𝑛𝑚 = 𝝓1, ⋯ , 𝝓 𝑁 𝑇 : N×M 次行列 – 𝝓 𝑛 = 𝝓 𝒙 𝑛 = 𝜙 𝑚 𝒙 𝑛 𝑇: M 次ベクトル 与 え ら れ て い る 情 報 実装に関係する のはサイズだけ
18.
「勾配」の扱い 𝛻𝒘 𝑘 𝐸 𝑾
= 𝑦 𝑛𝑘 − 𝑡 𝑛𝑘 𝝓 𝑛 𝑁 𝑛=1 • 右辺は M 次ベクトル – 𝑦 𝑛𝑘 − 𝑡 𝑛𝑘 はただのスカラー – 一般には先ほどの方法で次元を読み解けばいい • だから左辺 𝛻𝒘 𝑘 𝐸 𝑾 も M 次ベクトル – それが k=1,……,K 個あるだけ • 「M×K次元の行列 𝛻𝐸 𝑾 」を求めると読み解く – 「勾配」そのものは実装には関係ない これ
19.
「逐語訳」できる形に書き換える • 掛けて行列になるパターンは大きく3通り – 上から要素積、行列積、直積 𝑐𝑖𝑗
= 𝑎𝑖𝑗 𝑏𝑖𝑗 ⇔ C = A * B 𝑐𝑖𝑗 = 𝑎𝑖𝑘 𝑏 𝑘𝑗𝑘 ⇔ C=numpy.dot(A, B) 𝑐𝑖𝑗 = 𝑎𝑖 𝑏𝑗 ⇔ C=numpy.outer(a, b) 数式を左の形に書き換えれば、 右の numpy コードに「逐語訳」できる ※他に「外積」もあるが、使う人やシーンが限られるので略
20.
R 版「逐語訳」 • 掛けて行列になるパターンは大きく3通り –
上から要素積、行列積、直積 𝑐𝑖𝑗 = 𝑎𝑖𝑗 𝑏𝑖𝑗 ⇔ C <- A * B 𝑐𝑖𝑗 = 𝑎𝑖𝑘 𝑏 𝑘𝑗𝑘 ⇔ C <- A %*% B 𝑐𝑖𝑗 = 𝑎𝑖 𝑏𝑗 ⇔ C <- outer(a, b) ※直積は outer(a, b) の他に a %o% b という書き方もある
21.
式を書き換える (1) 𝛻𝒘 𝑘 𝐸
𝑾 = 𝑦 𝑛𝑘 − 𝑡 𝑛𝑘 𝝓 𝑛 𝑁 𝑛=1 • 行列の要素の式になおす 𝛻𝐸 𝑾 𝑚𝑘 = 𝑦 𝑛𝑘 − 𝑡 𝑛𝑘 𝜙 𝑛𝑚 𝑁 𝑛=1 (𝑚 = 1, ⋯ , 𝑀; 𝑘 = 1, ⋯ , 𝐾) – 「求める行列𝛻𝐸 𝑾 」の (m, k) 成分の式にする M次ベクトルの式 スカラー
22.
式を書き換える (2) 𝛻𝐸 𝑾
𝑚𝑘 = 𝑦 𝑛𝑘 − 𝑡 𝑛𝑘 𝜙 𝑛𝑚 𝑁 𝑛=1 • 注:右辺の添え字に未解決のものは残らない – 左辺に現れる : m, k – 右辺で解決 : n (総和で消える) • 3種類の積のどれかに帰着するよう変形 – この場合、総和があるので 𝑐𝑖𝑗 = 𝑎𝑖𝑘 𝑏 𝑘𝑗𝑘 に
23.
式を書き換える (3) 𝑨 =
𝑎 𝑛𝑘 = 𝑦 𝑛𝑘 − 𝑡 𝑛𝑘 とおくと(𝑁 × 𝐾 行列) 𝛻𝐸 𝑾 𝑚𝑘 = 𝑎 𝑛𝑘 𝜙 𝑛𝑚 𝑁 𝑛=1 = Φ 𝑇 𝑚𝑛 𝐴 𝑛𝑘 𝑁 𝑛=1 • ○mk=Σn○mn○nk の形に調整 – 右辺の内側の添え字とΣは同じ n – 添え字の順序を逆にしたければ転置 • 𝛻𝐸 𝑾 = 𝚽 𝑇 𝑨 であることがわかる
24.
numpyに「逐語訳」 𝛻𝒘 𝑘 𝐸 𝑾
= 𝑦 𝑛𝑘 − 𝑡 𝑛𝑘 𝝓 𝑛 (k = 1, ⋯ , 𝐾) 𝑁 𝑛=1 𝑨 = 𝒀 − 𝑻, 𝛻𝐸 𝑾 = 𝚽 𝑇 𝑨 • ここまで簡単になれば、実装は一瞬 # PHI = N×M 次元の特徴行列 # Y, T = N×K 次元の行列 gradient_E = numpy.dot(PHI.T, Y - T) 式の書き換え
25.
R に「逐語訳」 𝛻𝒘 𝑘 𝐸
𝑾 = 𝑦 𝑛𝑘 − 𝑡 𝑛𝑘 𝝓 𝑛 (k = 1, ⋯ , 𝐾) 𝑁 𝑛=1 𝑨 = 𝒀 − 𝑻, 𝛻𝐸 𝑾 = 𝚽 𝑇 𝑨 • 同様に R での実装例: # PHI = N×M 次元の特徴行列 # Y, T = N×K 次元の行列 gradient_E <- t(PHI) %*% (Y - T)
26.
まとめ • 数式から条件を読み解こう – この段階で間違っていると、うまく行かない –
さぼらず紙と鉛筆で確認するのが一番賢い • 「逐語訳」できる数式なら実装かんたん – 難しい数式は「逐語訳」できる形に書き換え – さぼらず紙と鉛筆
Download