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

最短コースでPyTorchと ディープラーニングを 征服するためのツボ

makaishi2
January 26, 2022

最短コースでPyTorchと ディープラーニングを 征服するためのツボ

PyTorchは、ディープラーニングプログラミングのフレームワークとして最近急速に注目を浴びていますが、一方でKerasと比較すると、わかりずらい側面があります。講演者はこの課題に対応するため書籍「最短コースでわかるPyTorch&深層学習入門」を出版しました。
当講演では、この本の内容を引用しつつ、「Define by Run」「勾配計算」などの重要概念や、「予測計算」「損失計算」「勾配計算」「パラメータ修正」の繰り返しによって成り立つディープラーニングの学習アルゴリズムのポイントを、数式によらず図を多用してわかりやすく解説します。当講演を聴講することで、「PyTorch」と「ディープラーニングの学習アルゴリズム」がどんなものであるか、イメージから理解することができるはずです。

makaishi2

January 26, 2022
Tweet

More Decks by makaishi2

Other Decks in Business

Transcript

  1. 「最短コースでわかる PyTorch &深層学習プログラミング」 想定読者 1. まだPythonもKeras/TensorFlowも知らないが、ディープラーニングプログラミングをこれ から勉強してみたいという⽅ 2. ⼊⾨書を読んで機械学習やディープラーニングアルゴリズムの実装イメージは持てたが、この 先どのように活⽤したらよいかがわからない⽅

    3. 理⼯系の⼤学・⼤学院の学⽣で研究の⼀環としてディープラーニングのプログラムを開発す る必要がある⽅ 4. 企業でディープラーニングプログラムを業務で利⽤している、あるいはこれから利⽤しようとし ているITエンジニアや研究者 サポートサイト (書籍中のコードをすべて公開。デモアプリをGoogle Colabで簡単に試せます。) https://github.com/makaishi2/pytorch_book_info/blob/main/README.md
  2. ⽬次 1. 機械学習の数学的原理 関数 微分 損失関数 ⼭登りアルゴリズム(勾配降下法) 2. PyTorchの特徴的機能 テンソル

    Define by Run 計算グラフ 勾配計算 3. PyTorchによる機械学習 機械学習アルゴリズム全体像 予測計算 損失計算 勾配計算 パラメータ修正 繰り返し処理
  3. 微分 ディープラーニングで合成関数と並んで重要な数学概念は微分です。微分の計算⽅法は以下の通りです。 グラフ上の⼆点を結んだ傾きの式で、⼆点間の距離ℎを限りなく0に近づけた結果です。 (𝑥, 𝑓 𝑥 ) (𝑥 + ℎ,

    𝑓 𝑥 + ℎ ) ℎ 𝑓 𝑥 + ℎ − 𝑓(𝑥) f0(x) = lim h!0 f(x + h) f(x) h 関数上の2点間の傾き 2点間の距離を限りなく0に近づける dy = f(x + dx) f(x) ; f0(x)dx 𝒉を𝒅𝒙と置き換えると、𝒅𝒙が⼗分⼩さいとき下記の近似式が成⽴します。
  4. 極⼤・極⼩ 𝑓(𝑥)の増加量は 𝑓" 𝑥 𝑑𝑥と近似的に等しいです。 -> 𝒇" 𝒙 = 𝟎となるような𝑥では、𝑓(𝑥)の値は増えも減りもしないです。

    -> 極⼤値または極⼩値になります。 極大 極小 𝑓′ 𝑥 < 0 𝑓′ 𝑥 > 0 𝑓′ 𝑥 > 0 ディープラーニングではある関数(損失関数)の値が最⼩に なるパラメータ値を求めることが⽬的です。 -> パラメータで微分した結果が0になる場所を求める問題 と同じになります。 -> 「勾配降下法」の動作原理です。 dy = f(x + dx) f(x) ; f0(x)dx
  5. 損失関数 「分類」と呼ばれる、1か0かを判断するモデルでは、損失は下記のような「交差エントロピー関数」になります。 なぜこの関数で損失が計算できるかはやや複雑な話なので省略しますが、 損失から先のパラメータ最適化の考え⽅は「回帰」の場合とまったく同じです。 ͠·͍ɺଛࣦؔ਺ؒͰͷਫ਼౓ͷൺֱ͕೉͘͠ͳͬͯ͠·͏ͷͰɺฏۉΛ ͱΔ͜ͱͰσʔλ݅਺ͷӨڹΛͳ͘͠·͢ɻ ɹ ʢʣ 1ZUIPO Ͱ͸഑ྻͷΠϯσοΫε͸

     ͔Β࢝·ΔͷͰɺm ͷ։࢝஋Λ  ͱ͠·͢ɻ ɹ͢Δͱ࠷ऴతͳଛࣦؔ਺ͷࣜ͸࣍ͷܗʹͳΓ·͢ ɻ ɹͨͩ͠ ʢʣ L(w0, w1, w2) = − 1 M M−1 m=0 (yt(m) · log (yp(m)) + (1 − yt(m)) log (1 − yp(m))) u(m) = w · x(m) = w0 + w1x(m) 1 + w2x(m) 2 yp(m) = f(u(m))  ࣮͸ ʢʣ ͷ͕ࣜొ৔͢Δͷ͸ຊॻͰ  ౓໨Ͱ͢ɻ࠷ॳʹग़͖ͯͨͷ͸  અ ʮ͸͡Ίͯͷػ ※この理由を詳しく知りたい⽅には、講演者の著書の⼀つである「ディープラーニングの数学」がお勧めです。 https://www.amazon.co.jp/dp/4296102508
  6. テンソルの特徴1: 任意の階数のデータ配列 「次元」という⾔葉は、ベクトルの要素数の意味でも使うことがあるため、 混同しないように「階数」という⾔葉を⽤います。 具体例から説明します。 0階テンソル : 単なる数値。数学⽤語でいうと「スカラー」 1階テンソル: 1つのインデックスを持つデータ配列。数学⽤語でいうと「ベクトル」

    2階テンソル: 2つのインデックスを持つデータ配列。数学⽤語でいうと「⾏列」 3階、4階テンソル : それぞれ3つ、4つのインデックスを持つデータ配列。対応する数学⽤語はない この点だけでいうと、⾏列演算⽤のライブラリである NumPy と違いはありません。 2階テンソル(⾏列)の例
  7. Define by Run PyTorchのフレームワークとしての最⼤の特徴といえる、「Define by Run」について説明します。 Define by Run とは、

    テンソル変数間で演算をする際の過程を「計算グラフ」の形で⾃動的に記録する機能 ということができます。 この機能を利⽤したい場合、対象とするテンソル変数で、 requires_grad属性をTrueにします。 なぜ、このような仕組みを持っているかというと、それは、次に説明する「勾配計算」をするためということになります。
  8. 計算グラフの⽣成 テンソル変数 𝑥 から計算されたテンソル変数 𝑦 と 𝑧 は、「計算グラフ」を保持しています。 𝑦 =

    2𝑥! + 2 の計算をしながら 計算グラフ⽣成 更に 𝑦 の要素をすべて⾜した結果を 𝑧 に代⼊ (この計算でも計算グラフを⽣成)
  9. 勾配計算結果の可視化 関数 𝑦 = 2𝑥! + 2 の計算結果 (y.data)と、関数の勾配計算結果 (y.grad.data)をグラフ表⽰します。

    2次関数とそれを微分した1次関数が表⽰され、正しく勾配計算できていることが確認できます。
  10. パラメータ修正 パラメータ修正の実装は ① 最適化クラス(この例ではoptim.SGDクラス)のインスタンス変数 optimizer を⽣成 ② step関数呼び出しで、パラメータ修正実施 からなります。 (初期処理)

    最低化関数optimizer を optim.SGDクラスのインスタンスとして⽣成 パラメータで指定している lr は学習率で、機 械学習において最も重要なパラメータ (繰り返し処理) step関数呼び出しにより予測関数net内のパラメータ を修正