Spark MLlib

Code Reading
Kai Sasaki(@Lewuathe)
Who am I?
• 佐々木海 (Kai Sasaki)
• Hadoop屋さん
• 好きな非線形関数はReLU
What is Spark?
• Scalaで書かれた汎用分散処理エンジン
• グラフ処理, 機械学習, SQLエンジンなど

のライブラリの付属
• Scala, Java, Python, RのAPIを持つ
MLlib
• Sparkに付属されている機械学習ライブラリ
• I/FやAPIがより洗練されたMLという

フレームワークもあるが実装されている

アルゴリズムがMLlibの方が多い
Structure
Structure
今日はこの中の
Gradient Descent
Gradient Descent
• 勾配法
• ある目的関数を最小化(最大化)するような

変数の組を見つけるためのアルゴリズム
• 学習データとのずれ(目的関数)を最小化するような

モデル(変数の組)を見つけるためによく使う
Gradient Descent
f(w)
w
Gradient Descent
f(w)
w
f(w)を最小化するwが知りたい
Gradient Descent
f(w)
w
1. 適当に初期値を決める
Gradient Descent
f(w)
w
2. この点における勾配を求める(微分する) =
Gradient Descent
f(w)
w
3. 変数を次式で更新する
Gradient Descent
f(w)
w
4. これを何回か繰り返す
Gradient Descent
f(w)
w
4. これを何回か繰り返す
Gradient Descent
f(w)
w
4. これを何回か繰り返す
Gradient Descent
f(w)
w
4. これを何回か繰り返す
Gradient Descent
f(w)
w
4. これを何回か繰り返す
ここがf(w)を最小化するw
Gradient Descent
• w: 変数の組
• : step size(学習率)
• : gradient(勾配)
• : 更新式
• loss: 目的関数の値
GradientDescent
GradientDescent#optimize
GradientDescent
GradientDescent
初期値
操作
GradientDescent
d d d d d d d d
p p p
seqOp seqOp seqOp
GradientDescent
d d d d d d d d
p p p
seqOp seqOp seqOp
GradientDescent
d d d d d d d d
p p p
seqOp seqOp seqOp
GradientDescent
d d d d d d d d
p p p
seqOp seqOp seqOp
combOp
GradientDescent
d d d d d d d d
p p p
seqOp seqOp seqOp
combOp
combOp
GradientDescent
d d d d d d d d
p p p
seqOp seqOp seqOp
combOp
result
combOp
GradientDescent
まとめ
• Gradient Descentアルゴリズムの話
• Sparkでの実装
• Gradient, Updater, treeAggregate

Spark MLlib code reading ~optimization~