DonHurry

step24. λ³΅μž‘ν•œ ν•¨μˆ˜μ˜ λ―ΈλΆ„ λ³Έλ¬Έ

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

step24. λ³΅μž‘ν•œ ν•¨μˆ˜μ˜ λ―ΈλΆ„

_도녁 2023. 1. 25. 00:01

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

 

 

이번 λ‹¨κ³„μ—μ„œλŠ” μ΅œμ ν™” λ¬Έμ œμ—μ„œ 자주 μ‚¬μš©ν•˜λŠ” ν…ŒμŠ€νŠΈ ν•¨μˆ˜λ₯Ό ν™œμš©ν•©λ‹ˆλ‹€. λ‹€μŒ 그림은 μ΅œμ ν™” λ¬Έμ œμ— μ‚¬μš©λ˜λŠ” 벀치마크 ν•¨μˆ˜λ“€μ˜ λͺ©λ‘μž…λ‹ˆλ‹€. 이쀑 Sphere, matyas, Goldstein-Price ν•¨μˆ˜ 3κ°€μ§€λ₯Ό ν™œμš©ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

λ¨Όμ € Sphere ν•¨μˆ˜μž…λ‹ˆλ‹€. μˆ˜μ‹μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ $z = x^2 + y^2$μž…λ‹ˆλ‹€. ν…ŒμŠ€νŠΈλŠ” 3차원 κ³΅κ°„μ—μ„œμ˜ ν•¨μˆ˜λ₯Ό λ‹€λ£Ήλ‹ˆλ‹€.

def sphere(x, y):
    z = x ** 2 + y ** 2
    return z
    
   
x = Variable(np.array(1.0))
y = Variable(np.array(1.0))
z = sphere(x, y)
z.backward()
print(x.grad, y.grad)

 

λ‹€μŒμ€ matyas ν•¨μˆ˜μž…λ‹ˆλ‹€. λ§ˆμ°¨μ‹œλΌκ³  μ½μŠ΅λ‹ˆλ‹€. ν…ŒμŠ€νŠΈλŠ” μœ„μ™€ λ™μΌν•˜κ²Œ μ§„ν–‰ν•˜κ³ , zμ—μ„œ ν•¨μˆ˜λ§Œ λ‹€λ₯΄κ²Œ ν• λ‹Ήν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

def matyas(x, y):
    z = 0.26 * (x ** 2 + y ** 2) - 0.48 * x * y
    return z

 

λ§ˆμ§€λ§‰μœΌλ‘œ Goldstein-Price ν•¨μˆ˜μž…λ‹ˆλ‹€. μ•žμ„  ν•¨μˆ˜λ“€μ— λΉ„ν•΄ 쑰금 λ³΅μž‘ν•©λ‹ˆλ‹€. κ²°κ³Όλ₯Ό 확인해보면, μ΄λ ‡κ²Œ λ³΅μž‘ν•œ 계산도 잘 λ―ΈλΆ„ν•˜λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. 기울기 확인을 톡해 결과도 검증할 수 μžˆμŠ΅λ‹ˆλ‹€.

def goldstein(x, y):
    z = (1 + (x + y + 1)**2 * (19 - 14*x + 3*x**2 - 14*y + 6*x*y + 3*y**2)) * \
        (30 + (2*x - 3*y)**2 * (18 - 32*x + 12*x**2 + 48*y - 36*x*y + 27*y**2))
    return z

 

λ“œλ””μ–΄ 제2고지도 μ λ Ήν–ˆμŠ΅λ‹ˆλ‹€. 제2κ³ μ§€μ—μ„œλŠ” λ³΅μž‘ν•˜κ²Œ μ—°κ²°λœ 계산 κ·Έλž˜ν”„λ„ μ—­μ „νŒŒκ°€ κ°€λŠ₯ν•˜κ²Œ ν•˜κ³ , μ—°μ‚°μž μ˜€λ²„λ‘œλ“œλ₯Ό μ§„ν–‰ν•˜μ—¬ μ½”λ“œ μž‘μ„±μ˜ νš¨μœ¨μ„ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€. 이제 κΈ°μ΄ˆλŠ” μΆ©λΆ„ν•˜κ³ , λ‹€μŒ λ‹¨κ³„λΆ€ν„°λŠ” κ³ κΈ‰ 계산도 μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν™•μž₯ν•΄λ‚˜κ°€κ² μŠ΅λ‹ˆλ‹€.