DonHurry

step37. ν…μ„œλ₯Ό 닀루닀 λ³Έλ¬Έ

DeZero/πŸ—»μ œ4κ³ μ§€

step37. ν…μ„œλ₯Ό 닀루닀

_도녁 2023. 2. 12. 00:54

πŸ“’ λ³Έ ν¬μŠ€νŒ…μ€ λ°‘λ°”λ‹₯λΆ€ν„° μ‹œμž‘ν•˜λŠ” λ”₯λŸ¬λ‹3을 기반으둜 μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 배운 λ‚΄μš©μ„ κΈ°λ‘ν•˜κ³ , 개인적인 곡뢀λ₯Ό μœ„ν•΄ μž‘μ„±ν•˜λŠ” ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ ꡐ재 ꡬ맀λ₯Ό κ°•λ ₯ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€.

 

 

μ§€κΈˆκΉŒμ§€λŠ” 주둜 슀칼라 λ³€μˆ˜λ₯Ό λ‹€λ€˜μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ¨Έμ‹ λŸ¬λ‹, λ”₯λŸ¬λ‹ λ“±μ˜ λΆ„μ•Όμ—μ„œλŠ” 주둜 λ²‘ν„°λ‚˜ ν–‰λ ¬ λ“±μ˜ ν…μ„œλ₯Ό λ‹€λ£Ήλ‹ˆλ‹€. 사싀 μ§€κΈˆκΉŒμ§€μ˜ κ΅¬ν˜„λ„ ν…μ„œλ₯Ό λ¬Έμ œμ—†μ΄ λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€. μ£½, μ§€κΈˆκΉŒμ§€ κ΅¬ν˜„ν•œ ν•¨μˆ˜λ“€μ€ ν…μ„œλ₯Ό μ΄μš©ν•΄ 계산해도 λ¬Έμ œμ—†μ΄ μž‘λ™ν•©λ‹ˆλ‹€. κ·Έλ™μ•ˆ 슀칼라λ₯Ό λŒ€μƒμœΌλ‘œ μ—­μ „νŒŒλ₯Ό κ΅¬ν˜„ν–ˆμ§€λ§Œ, λ‹€μŒκ³Ό 같은 이유둜 정상 μž‘λ™ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

  • DeZero ν•¨μˆ˜μ— ν…μ„œλ₯Ό 건넀면 ν…μ„œμ˜ μ›μ†Œλ§ˆλ‹€ 슀칼라둜 κ³„μ‚°ν•©λ‹ˆλ‹€.
  • ν…μ„œμ˜ μ›μ†Œλ³„ 슀칼라 계산이 이루어지면 슀칼라λ₯Ό κ°€μ •ν•΄ κ΅¬ν˜„ν•œ μ—­μ „νŒŒλŠ” ν…μ„œμ˜ μ›μ†Œλ³„ κ³„μ‚°μ—μ„œλ„ μ„±λ¦½ν•©λ‹ˆλ‹€.

 

μ½”λ“œλ₯Ό ν†΅ν•΄μ„œλ„ ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λ•Œ sum ν•¨μˆ˜λŠ” λͺ¨λ“  μ›μˆ˜μ˜ 총합을 κ΅¬ν•˜λŠ” μ½”λ“œμΈλ°, 39λ‹¨κ³„μ—μ„œ κ΅¬ν˜„ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. sum ν•¨μˆ˜λŠ” μ£Όμ–΄μ§„ ν…μ„œμ˜ λͺ¨λ“  μ›μ†Œμ˜ 총합을 ꡬ해 ν•˜λ‚˜μ˜ 슀칼라둜 좜λ ₯ν•˜κ²Œ λ©λ‹ˆλ‹€. κ²°κ³Όλ₯Ό 확인해보면 μ •μƒμ μœΌλ‘œ μ—­μ „νŒŒκ°€ 좜λ ₯λ˜λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

import numpy as np
from dezero import Variable
import dezero.functions as F

x = Variable(np.array([[1, 2, 3], [4, 5, 6]]))
c = Variable(np.array([[10, 20, 30], [40, 50, 60]]))
t = x + c
y = F.sum(t)

y.backward(retain_grad=True)
print(y.grad)
print(t.grad)
print(x.grad)
print(c.grad)

variable(1)

variable([[1 1 1]

            [1 1 1]])

variable([[1 1 1]

            [1 1 1]])

variable([[1 1 1]

            [1 1 1]])

 

μœ„μ˜ μ˜ˆμ œλ‘œλΆ€ν„° μ€‘μš”ν•œ νŠΉμ§•μ„ ν•˜λ‚˜ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°μšΈκΈ°μ™€ λ°μ΄ν„°μ˜ ν˜•μƒμ΄ μΌμΉ˜ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. x.shape 와 x.grad.shapeλŠ” λ™μΌν•˜λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 μ„±μ§ˆμ„ μ΄μš©ν•˜μ—¬ sumμ΄λ‚˜ reshape λ“±μ˜ ν•¨μˆ˜λ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (μ—¬κΈ°μ„œ λ§ν•˜λŠ” κΈ°μšΈκΈ°λŠ” ν…μ„œμ˜ 미뢄을 λœ»ν•©λ‹ˆλ‹€.)

 

μ΄μƒμœΌλ‘œ μ§€κΈˆκΉŒμ§€μ˜ DeZeroκ°€ 슀칼라 뿐만 μ•„λ‹ˆλΌ ν…μ„œκΉŒμ§€ 잘 λ‹€λ£¨λŠ” 것을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.