본문 바로가기
Study 공부할레나

[스터디/밑시딥3] 제 3고지 고차미분계산_35. 고차 미분 계산 그래프

by LENA-cfg 2023. 9. 11.

이번에 추가할 함수는 tanh인데 tanh는 쌍곡 탄젠트 혹은 하이퍼볼릭 탄젠트라고 읽습니다.

입력을 -1 ~ 1 사이의 값으로 변환 합니다. 

35.1 tanh 함수 미분

자연 로그의 밑(e)에 대해 ∂e**x/∂x = e**x이고 ∂e**-x/∂x = -e**-x인 점을 이용하면 위와 같이 미분할 수 있습니다.

 

tanh의 미분은 분수 함수의 미분을 이용해 간단하게 변환할 수 있고 1-y**2의 결과를 얻을 수 있습니다.

35.2 tanh 함수 구현

class Tanh(Function):
    def forward(self, x):
        y = xp.tanh(x)
        return y

    def backward(self, gy):
        y = self.outputs[0]() 
        gx = gy * (1 - y * y)
        return gx


def tanh(x):
    return Tanh()(x)

forward 메서드에서는 넘파이의 np.tanh 메서드를 이용합니다. 

역전파에서는 gy * (1-y*y) 형태로 구현합니다. 

35.3 고차 미분 그래프 시각화

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

x = Variable(np.array(1.0))
y = F.tanh(x)
x.name = 'x'
y.name = 'y'
y.backward(create_graph=True)

iters =0

for i in range(iters):
    gx = x.grad
    x.cleargrad()
    gx.backward(create_graph=True)

gx = x.grad
gx.name = 'gx' + str(iters + 1)
plot_dot_graph(gx, verbose=False, to_file='tanh.png')

해당 코드로 계산 그래프를 시각화 합니다.

iters = 0 일때 계산 그래프 입니다. 

Mul, Sub, Tanh등 여러 함수들이 사용되고 있습니다.

2차 미분                                                                             3차 미분
4차 미분

 

5차 미분

차수가 늘어날 수록 계산 그래프가 굉장히 복잡해지면 역전파를 할때마다 기존 계산에 새로운 계산 그래프가 만들어지므로 노드 수가 기하급수적으로 증가합니다.