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

自動微分の話

mt_caret
March 29, 2018
120

 自動微分の話

mt_caret

March 29, 2018
Tweet

Transcript

  1. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ࣗಈඍ෼ͷ࿩ mt caret class-ai 2018-03-29 mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 1 / 14
  2. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ࣗݾ঺հ @mt caret ৽ B3 KCS ϩϘοτٕज़ݚڀձ Haskell & Nix :love: https://mt-caret.github.io/blog/ https://mt-caret.github.io/nippo/ mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 2 / 14
  3. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Automatic Differentiation ͱ͸ʁ ೚ҙͷΞϧΰϦζϜ 1 ͷඍ෼Λಋग़͢ΔͨΊͷख๏ NumericalɾSymbolic Differentiation ͱ͸ҧ͏ Numerical Differentiation: খ͍͞ h Λͱͬͯ f′(x) = limh→0 f(x+h)−f(x) h Λۙࣅ → h ΛݮΒͯ͠ߦ͘ͱؙΊޡ͕ࠩӨڹ͖ͯͯ͠ਫ਼౓͕ѱ͍ Symbolic Differentiation: ղੳతʹಋؔ਺Λಋ͘ → ಋؔ਺ͷࣜͷܗ͕ෳࡶʹͳΔ͜ͱ͕ଟ͘ޮ཰͕ѱ͍ 1ʮఆٛҬʹؚ·ΕΔ͋ΒΏΔೖྗʹରͯ͠ɺ༗ݶ࣌ؒ಺ʹఀࢭ͢Δ΋ͷʯ(ٱอాɾ ҏཬ, 1999, p.12) mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 3 / 14
  4. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Forward-mode AD (1) f(x, y, z) = sin(x ∗ y) + z ʹ͓͍ͯ ∂f ∂x , ∂f ∂y , ∂f ∂z ΛٻΊ͍ͨͱ͢Δɻ mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 4 / 14
  5. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Forward-mode AD (2) f(x, y, z) = sin(x ∗ y) + z a = x ∗ y b = sin a f = b + z mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 5 / 14
  6. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Forward-mode AD (2) f(x, y, z) = sin(x ∗ y) + z a = x ∗ y b = sin a f = b + z ∂a ∂? = x ∗ ∂y ∂? + ∂x ∂? ∗ y ∂b ∂? = ∂a ∂? ∗ cos a ∂f ∂? = ∂b ∂? + ∂z ∂? mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 5 / 14
  7. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Forward-mode AD (3) ∂a ∂? = x ∗ ∂y ∂? + ∂x ∂? ∗ y ∂b ∂? = ∂a ∂? ∗ cos a ∂f ∂? = ∂b ∂? + ∂z ∂? mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 6 / 14
  8. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Forward-mode AD (3) ∂a ∂? = x ∗ ∂y ∂? + ∂x ∂? ∗ y ∂b ∂? = ∂a ∂? ∗ cos a ∂f ∂? = ∂b ∂? + ∂z ∂? set ? ← x to evaluate ∂f ∂x . ∂a ∂x = x ∗ ∂y ∂x + ∂x ∂x ∗ y = x ∗ 0 + 1 ∗ y = y ∂b ∂x = ∂a ∂x ∗ cos a = y ∗ cos(x ∗ y) ∂f ∂x = ∂b ∂x + ∂z ∂x = y ∗ cos a + 0 = y ∗ cos(x ∗ y) mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 6 / 14
  9. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Implementing Forward-mode AD with Dual Numbers Forward-mode AD ͸ؔ਺ͷධՁ࣌ͷ਺஋Λ x + ˙ xϵ where ϵ2 = 0, ϵ ̸= 0 Ͱ̍࣍ۙࣅ͍ͯ͠Δ΋ͷͱݟΔ͜ͱ͕Ͱ͖Δɻ͢Δͱɺ (x + ˙ xϵ) + (y + ˙ yϵ) = (x + y) + ( ˙ x + ˙ y)ϵ (x + ˙ xϵ) ∗ (y + ˙ yϵ) = (x ∗ y) + ( ˙ x ∗ y + x ∗ ˙ y)ϵ (1) ͱͳΓਖ਼͘͠ඍ෼͕ߦΘΕ͍ͯΔ͜ͱ͕෼͔Δɻ͜͜Ͱɺ f(x + ˙ xϵ) = f(x) + f′(x) ∗ ˙ xϵ ͱ͢Δͱؔ਺ʹؔ͢Δඍ෼΋্ख͘੒ཱ͢Δɻ͜ΕΛ֤छԋࢉࢠɾؔ਺ ͷΦʔόʔϩʔυ΍ιʔείʔυϨϕϧͰͷม׵ʹΑΓ࣮૷ɻ mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 7 / 14
  10. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Characteristics of Forward-mode AD ఆ਺ഒͷܭࢉྔɾۭؒܭࢉྔͷΦʔόʔϔουʹΑΓ࣮ݱ 1 ճͷܭࢉͰ f : R → Rm ͷඍ෼Λܭࢉ͢Δ͜ͱ͕Ͱ͖Δ Ұํɺf : Rn → R ͷޯ഑͸ n ճͷܭࢉ͕ඞཁ ͕ͨͬͯ͠ɺf : Rn → Rm ʹ͓͍ͯ n ≫ m ͷ৔߹ Forward-mode AD ͸޲͔ͳ͍ mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 8 / 14
  11. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Reverse-mode AD (1) f(x, y, z) = sin(x ∗ y) + z ʹ͓͍ͯ ∂x ∂f , ∂y ∂f , ∂z ∂f ΛٻΊΔɻ mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 9 / 14
  12. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Reverse-mode AD (2) f(x, y, z) = sin(x ∗ y) + z a = x ∗ y b = sin a f = b + z mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 10 / 14
  13. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Reverse-mode AD (3) ∂f ∂f = 1 ∂f ∂b = ∂f ∂f ∗ ∂f ∂b = 1 ∗ 1 = 1 ∂f ∂a = ∂f ∂b ∗ ∂b ∂a = 1 ∗ cos a = cos(x ∗ y) ∂f ∂x = ∂f ∂a ∗ ∂a ∂x = cos(x ∗ y) ∗ y = y ∗ cos(x ∗ y) ∂f ∂y = ∂f ∂a ∗ ∂a ∂y = cos(x ∗ y) ∗ x = x ∗ cos(x ∗ y) ∂f ∂z = ∂f ∂f ∗ ∂f ∂z = 1 ∗ 1 = 1 ϙΠϯτ: 1 ύεͰ ∂x ∂f , ∂y ∂f , ∂z ∂f ΛٻΊ͍ͯΔɻ mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 11 / 14
  14. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Implementing Reverse-mode AD as a computational graph Wengert Tape mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 12 / 14
  15. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ AD Demo import Numeric.AD grad’ (\[x,y,z] -> sin (x*y) + z) [0, 1, 0] f(x, y, z) = sin(x ∗ y) + z ∂f ∂x = y ∗ cos(x ∗ y) ∂f ∂y = x ∗ cos(x ∗ y) ∂f ∂z = 1 mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 13 / 14
  16. ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

    ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Further Reading Theory Introduction to Automatic Differentiation Automatic Differentiation - Or mathemagically finding derivatives Reverse-mode automatic differentiation: a tutorial Automatic Differentiation in Machine Learning: a Survey ΞϧΰϦζϜͷࣗಈඍ෼ͱԠ༻ Implementation/Application ad: Automatic Differentiation Differentiating regions Introduction to ad-3.4, an automatic differentiation library in Haskell Automatic Propagation of Uncertainty with AD Automasymbolic Differentiation mt caret (class-ai) ࣗಈඍ෼ͷ࿩ 2018-03-29 14 / 14