Slide 1

Slide 1 text

やさしくわかる PyTorch入門

Slide 2

Slide 2 text

● 名前: 早野 康太 ● お仕事: ○ 深層学習エンジニア ● 好きなこと: ○ 音ゲー ○ アニメ ○ ウマ娘 ○ 犬とか猫 発表者紹介

Slide 3

Slide 3 text

● Facebook AI Research (FAIR)により 開発された深層学習ライブラリ ● Pythonで深層学習するなら TeonsorFlowとの2択 ● モデルの構造や学習の過程を 直感的に記述することができる PyTorchについて

Slide 4

Slide 4 text

● Tensor ○ numpyとほとんど同じ感覚で使える ○ 勾配 (偏微分) に関する 情報を持っている ○ GPU上での行列計算が可能 ● nn.Module ○ 全てのモデルのベースとなる型 ○ 新しいモデルを定義するときは これを継承する Tensor型とModule型

Slide 5

Slide 5 text

● Tensor ○ numpyとほとんど同じ感覚で使える ○ 勾配 (偏微分) に関する 情報を持っている ○ GPU上での行列計算が可能 ● nn.Module ○ 全てのモデルのベースとなる型 ○ 新しいモデルを定義するときは これを継承する Tensor型とModule型

Slide 6

Slide 6 text

● nn.Module ○ パラメータをstate_dictの形式で 書き出せる ■ {‘layer1’: Tensor()...} みたいな感じ Tensor型とModule型

Slide 7

Slide 7 text

● nn.Module ○ パラメータをstate_dictの形式で 書き出せる ■ {‘layer1’: Tensor()...} みたいな感じ ○ forward ■ 入力側から変数を流す ■ モデルに合わせて自分で定義 Tensor型とModule型 forward

Slide 8

Slide 8 text

● nn.Module ○ パラメータをstate_dictの形式で 書き出せる ■ {‘layer1’: Tensor()...} みたいな感じ ○ forward ■ 入力側から変数を流す ■ モデルに合わせて自分で定義 ○ backward ■ モデルの出力テンソルに対して 実行する ■ 誤差逆伝播法で勾配を計算する Tensor型とModule型 backward forward

Slide 9

Slide 9 text

● nn.Module ○ パラメータをstate_dictの形式で 書き出せる ■ {‘layer1’: Tensor()...} みたいな感じ ○ forward ■ 入力側から変数を流す ■ モデルに合わせて自分で定義 ○ backward ■ モデルの出力テンソルに対して 実行する ■ 誤差逆伝播法で勾配を計算する Tensor型とModule型 backward forward

Slide 10

Slide 10 text

● 出力側から入力側に向かって 誤差信号を伝播させていく ● 誤差信号 = 偏微分の値 ○ (正確ではないが) ∂z/∂yとか∂y/∂xが伝播するイメージ 誤差逆伝播法 x y z backward forward

Slide 11

Slide 11 text

● PyTorchではTensor型同士の 計算が行われる際、 計算結果の中に勾配計算に 必要な情報が保持される ● 計算結果にbackwardメソッドを 実行することで 誤差逆伝播法によって 勾配が計算される 自動微分

Slide 12

Slide 12 text

● y = x2, z = Σx ij 自動微分 x y z

Slide 13

Slide 13 text

● y = x2, z = Σx ij ● z.backward() 自動微分 x y z dz/dy dy/dx

Slide 14

Slide 14 text

● y = x2, z = Σx ij ● z.backward() ● backward()を実行するとgrad内に勾配値が記録される ○ y.grad = dz/dy ○ x.grad = dz/dy * dy/dx 自動微分 x y z dz/dy dy/dx

Slide 15

Slide 15 text

● 勾配の分だけパラメータを更新する 微分→パラメータ更新 Loss Weight 勾配

Slide 16

Slide 16 text

● 勾配の分だけパラメータを更新する 微分→パラメータ更新 Loss Weight

Slide 17

Slide 17 text

● 勾配の分だけパラメータを更新する 微分→パラメータ更新 Loss Weight

Slide 18

Slide 18 text

● 勾配の分だけパラメータを更新する ○ 実際はもう少し工夫があって アルゴリズムによっていろんな 更新の仕方がある ● 勾配更新のアルゴリズム ○ SGD ○ Adam ← 大体これ使とけば間違いない ○ AdaBeliaf 微分→パラメータ更新 Loss Weight

Slide 19

Slide 19 text

● forward ○ モデルに入力を流仕込む ○ モデルの出力と正解との誤差を計算する PyTorchでの深層学習の3つのステップ

Slide 20

Slide 20 text

● forward ○ モデルに入力を流仕込む ○ モデルの出力と正解との誤差を計算する ● backward ○ 誤差逆伝播で勾配を計算する PyTorchでの深層学習の3つのステップ

Slide 21

Slide 21 text

● forward ○ モデルに入力を流仕込む ○ モデルの出力と正解との誤差を計算する ● backward ○ 誤差逆伝播で勾配を計算する ● step ○ 勾配の分だけパラメータを更新する PyTorchでの深層学習の3つのステップ

Slide 22

Slide 22 text

● 手書き文字画像データ(MNIST)の分類に PyTorchでチャレンジしてみます ○ Google Colabのノートブック PyTorch実践 ラベル = 5

Slide 23

Slide 23 text

● PyTorchの特徴 ○ 自動微分の機能により forward → backwardの流れを直感的に記述することができる ○ (今回は触れなかったが) ■ GPU上での計算を高速化する手法に対応している ■ モデルのレイヤーごとに学習率をいじれるなど 柔軟性の高いモデル設計が可能 ● Google Colaboratoryで結構カンタンに試せちゃうので 興味ある方はぜひ触ってみてください さいごに