• 検索結果がありません。

スライド 研究会 首都大学東京 自然言語処理研究室(小町研)

N/A
N/A
Protected

Academic year: 2018

シェア "スライド 研究会 首都大学東京 自然言語処理研究室(小町研)"

Copied!
40
0
0

読み込み中.... (全文を見る)

全文

(1)

Chainer 入門

(2)

Chainerとは

・ ニューラルネットワーク実装のためのライブラリ

・ 簡単かつ直感的に記述できる

(3)

Chainerの基本的な機能

Variable

links

functions

optimizers

(4)

Chainerの基本的な機能

Variable

links

functions

optimizers

(5)

ニューラルネット

・ ・ ・

t a n h

t a n h

(6)

Variable

・ ・ ・

t a n h

t a n h

(7)

Variable

変数に対応するオブジェクト

iルport nuルpy

froル chainer iルport Variabリe

x セ Variabリe(nuルpy.array([[1, 2, 3], [4, 5, 6]], dtype セ nuルpy.fリoat32)) y セ x ** 2 + 5 * x

y.grad セ nuルpy.ones((2, 3), dtypeセnuルpy.fリoat32) #勾配の次元を定義

y.bacラward() #微分の計算 (y’セ 2 * x + 5)

(8)

Variable

arrayをVariableにすることで微分の計算が可能に

Variableとして使用するarrayのdtypeは

(9)

Chainerの基本的な機能

Variable

links

functions

optimizers

(10)

ニューラルネット

・ ・ ・

t a n h

t a n h

(11)

links

・ ・ ・

t a n h

t a n h

(12)

links

重み行列に対応するオブジェクト

iルport nuルpy

froル chainer iルport Variabリe, リinラs

h セ リinラs.Linear(4, 2) #2×4の重み行列を作成

print(h.W.data) #hの重み行列

print(h.b.data) #hのバイア

x セ Variabリe(nuルpy.array([[1, 2, 3, 4]]).astype(nuルpy.fリoat32)) y セ h(x)

(13)

links

linksで重み行列を定義することで

重みとバイアスの初期値も定義される

ほとんどのlinksに入力するVariableは

バッチサイズ データの次元数の行列

(14)

Chainerの基本的な機能

Variable

links

functions

optimizers

(15)

ニューラルネット

・ ・ ・

t a n h

t a n h

(16)

functions

・ ・ ・

t a n h

t a n h

(17)

functions

Variableに対応した関数

iルport nuルpy

froル chainer iルport Variabリe, functions

x セ Variabリe(nuルpy.array([[1, 2, 3], [4, 5, 6]], dtype セ nuルpy.fリoat32)) y セ functions.tanh(x)

print(y.data)

y.grad セ nuルpy.ones((2, 3), dtypeセnuルpy.fリoat32) #勾配の次元を定義

y.bacラward() #微分の計算 (y’セ 1 – y ** 2)

(18)

functions

functionsは活性化関数や損失関数を含め

様々な関数が提供されている

(19)

Chainerの基本的な機能

Variable

links

functions

optimizers

(20)

optimizers

最適化(重みの更新)アルゴリズムに対応する

確率的勾配降下法(SGD)をはじめ

様々な最適化アルゴリズムが提供されている

froル chainer iルport optiルizers

ルodeリ セ NeuraリNetworラ(input_size) #モ の生成

opt セ optiルizers.SGD(リrセλ) #最適化ア ゴ ムの定義

(21)

Chainerの基本的な機能

Variable

links

functions

optimizers

(22)

serializers

モデルのセーブ・ロードに関するモジュール

pickleのchainer版みたいな

froル chainer iルport seriaリizers

seriaリizers.save_npz(ルodeリ_path, ルodeリ) #モ の保存

(23)

実際の利用例

NLPチュートリアルの課題をChainerで実装

文書分類(1 or -1)

・モデルの定義

・最適化アルゴリズムの定義

・学習

(24)

モデルの定義

・ ・ ・

t a n h

t a n h

(25)

モデルの定義

cリass NeuraリNetworラ(Chain):

def __init__(seリf, input_size):

super(NeuraリNetworラ, seリf).__init__(

リinラ1 セ リinラs.Linear(input_size, 2), #入力層→中間層

リinラ2 セ リinラs.Linear(2, 1), #中間層→出力層

)

def __caリリ__(seリf, x, y):

y_predict セ seリf.forward(x) #順伝搬 yを予測

return functions.ルean_squared_error(y_predict, y) / 2 #損失関数

def forward(seリf, x):

hidden セ functions.tanh(seリf.リinラ1(x)) #中間層を計算

(26)

順伝搬

・ ・ ・ t a n h t a n h

" Vector (Vocab)

# Vector (2)

" Matrix (2, Vocab)

" Vector (2)

(27)

順伝搬

t a n h

,

= tanh

#

 

#

+

#

(28)

モデルの定義

順伝搬の定義が簡単にできる

functionsには損失関数として二乗誤差

(29)

最適化アルゴリズムの定義

確率的勾配降下法(SGD)で最適化

この3行で最適化アルゴリズムが設定可能

ルodeリ セ NeuraリNetworラ(input_size) #モ の生成

opt セ optiルizers.SGD(リrセλ) #最適化ア ゴ ムの定義

(30)

学習

for i in range(epoch):

accuル_リoss セ 0 #そのepoch の誤差の合計を初期化

for phi_0, y in feat_リab:

ルodeリ.zerograds() #勾配の初期化

リoss セ ルodeリ(Variabリe(phi_0), Variabリe(y)) #誤差の計算

accuル_リoss +セ リoss.data #計算した誤差を蓄積し いく

リoss.bacラward() #逆伝搬、勾配の計算

opt.update() #重みの更新

print(accuル_リoss) #そのepoch の誤差の合計

(31)

逆伝搬

t a n h

err =  

,

− �

 

,

2

,

=

derr

d�

,

=

,

− �

,

5

=

derr

d

#

 

#

+

#

      =

derr

d�

,

d�

,

d

#

 

#

+

#

(32)

逆伝搬

t a n h

# Vector (2)

#

=

derr

d�

#

        =

derr

d

#

 

#

+

#

d

#

 

#

+

#

d

#

=

,

5

 

#

# Matrix (1, 2)

# Vector (1)

5,

(33)

逆伝搬

t a n h t a n h

#

5

=

derr

d

"

 

"

+

"

      =

derr

d�

#

d�

#

d

"

 

"

+

"

      =

#

1 −

#

,

(34)

逆伝搬

・ ・ ・ t a n h t a n h

" Matrix (2, Vocab)

" Vector (2)

"

=

derr

d�

"

        =

derr

d

"

 

"

+

"

d

"

 

"

+

"

d

"

=

#

5

 

"

5#

Vector (2)

"

(35)

重みの更新

・ ・ ・ t a n h t a n h

"

−= λ

89::

8

;

<

 = λ

 �

#

5

8

;

<

 

=

<

>

?

<

8

;

<

= λ 

#

5

"

"

−= λ 

89::

8

?

<

 = λ 

#

5

8

;

<

 

=

<

>

?

<

8

?

<

= λ 

5

5

(36)

重みの更新

t a n h

5,

Vector (1)

# Vector (2)

# Matrix (1, 2)

# Vector (1)

#

−= λ

89::

8

;

@

 = λ

 �

,

5

8

;

@

 

=

@

>

?

@

8

;

@

= λ 

,

5

#

#

−= λ 

89::

8

?

@

 = λ 

,

5

8

;

@

 

=

@

>

?

@

8

?

@

(37)

学習

複雑だった逆伝搬の計算、重みの更新が

それぞれ1行ずつで記述可能

リoss.bacラward()

(38)

テスト

ルodeリ セ NeuraリNetworラ(input_size)

seriaリizers.リoad_npz(ルodeリ_path, ルodeリ) #モ をロー

with open(fin_path, "r") as fin: for x in fin:

phi_0 セ create_features(x)

score セ ルodeリ.forward(Variabリe(phi_0)) #順伝搬 scoreを計算

(39)

その他にも様々な機能

linksにはLSTMやConvolutionなどもあるので

RNNやCNNも実装できる

optimizersにはSGD以外にもいろいろ

functionsもいろいろ

(40)

まとめ

・ Chainerを使うと複雑な構造が簡単に書ける

・ 特に勾配の計算を記述しなくて良いのが楽

参照

関連したドキュメント

機械物理研究室では,光などの自然現象を 活用した高速・知的情報処理の創成を目指 した研究に取り組んでいます。応用物理学 会の「光

 入  犬  猫  牛  馬  甲 山 羊 緬 羊  兎 海 三 十日三 白 鼠 家 鼠.  蛇  蛙  鮒

小林 英恒 (Hidetsune Kobayashi) 計算論理研究所 (Inst. Computational Logic) 小野 陽子 (Yoko Ono) 横浜市立大学 (Yokohama City.. Structures and Their

”, The Japan Chronicle, Sept.

関西学院大学手話言語研究センターの研究員をしております松岡と申します。よろ

(1)東北地方太平洋沖地震発生直後の物揚場の状況 【撮影年月日(集約日):H23.3.11】 撮影者:当社社員 5/600枚.

手話言語研究センター講話会.

【 大学共 同研究 】 【個人特 別研究 】 【受託 研究】 【学 外共同 研究】 【寄 付研究 】.