Upgrade to Pro — share decks privately, control downloads, hide ads and more …

やさしくわかるPyTorch入門 / Easy to Learn PyTorch

36e1fb3501914495b3d3366729d7a787?s=47 payanotty
October 28, 2021

やさしくわかるPyTorch入門 / Easy to Learn PyTorch

connpassで実施したセミナーの資料になります。

https://studyco.connpass.com/event/227486/

36e1fb3501914495b3d3366729d7a787?s=128

payanotty

October 28, 2021
Tweet

More Decks by payanotty

Other Decks in Programming

Transcript

  1. やさしくわかる PyTorch入門

  2. • 名前: 早野 康太 • お仕事: ◦ 深層学習エンジニア • 好きなこと:

    ◦ 音ゲー ◦ アニメ ◦ ウマ娘 ◦ 犬とか猫 発表者紹介
  3. • Facebook AI Research (FAIR)により 開発された深層学習ライブラリ • Pythonで深層学習するなら TeonsorFlowとの2択 •

    モデルの構造や学習の過程を 直感的に記述することができる PyTorchについて
  4. • Tensor ◦ numpyとほとんど同じ感覚で使える ◦ 勾配 (偏微分) に関する 情報を持っている ◦

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

    GPU上での行列計算が可能 • nn.Module ◦ 全てのモデルのベースとなる型 ◦ 新しいモデルを定義するときは これを継承する Tensor型とModule型
  6. • nn.Module ◦ パラメータをstate_dictの形式で 書き出せる ▪ {‘layer1’: Tensor()...} みたいな感じ Tensor型とModule型

  7. • nn.Module ◦ パラメータをstate_dictの形式で 書き出せる ▪ {‘layer1’: Tensor()...} みたいな感じ ◦

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

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

    forward ▪ 入力側から変数を流す ▪ モデルに合わせて自分で定義 ◦ backward ▪ モデルの出力テンソルに対して 実行する ▪ 誤差逆伝播法で勾配を計算する Tensor型とModule型 backward forward
  10. • 出力側から入力側に向かって 誤差信号を伝播させていく • 誤差信号 = 偏微分の値 ◦ (正確ではないが) ∂z/∂yとか∂y/∂xが伝播するイメージ

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

    自動微分
  12. • y = x2, z = Σx ij 自動微分 x

    y z
  13. • y = x2, z = Σx ij • z.backward()

    自動微分 x y z dz/dy dy/dx
  14. • 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
  15. • 勾配の分だけパラメータを更新する 微分→パラメータ更新 Loss Weight 勾配

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

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

  18. • 勾配の分だけパラメータを更新する ◦ 実際はもう少し工夫があって アルゴリズムによっていろんな 更新の仕方がある • 勾配更新のアルゴリズム ◦ SGD

    ◦ Adam ← 大体これ使とけば間違いない ◦ AdaBeliaf 微分→パラメータ更新 Loss Weight
  19. • forward ◦ モデルに入力を流仕込む ◦ モデルの出力と正解との誤差を計算する PyTorchでの深層学習の3つのステップ

  20. • forward ◦ モデルに入力を流仕込む ◦ モデルの出力と正解との誤差を計算する • backward ◦ 誤差逆伝播で勾配を計算する

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

    • step ◦ 勾配の分だけパラメータを更新する PyTorchでの深層学習の3つのステップ
  22. • 手書き文字画像データ(MNIST)の分類に PyTorchでチャレンジしてみます ◦ Google Colabのノートブック PyTorch実践 ラベル = 5

  23. • PyTorchの特徴 ◦ 自動微分の機能により forward → backwardの流れを直感的に記述することができる ◦ (今回は触れなかったが) ▪

    GPU上での計算を高速化する手法に対応している ▪ モデルのレイヤーごとに学習率をいじれるなど 柔軟性の高いモデル設計が可能 • Google Colaboratoryで結構カンタンに試せちゃうので 興味ある方はぜひ触ってみてください さいごに