# AI 이론/DeepLearning

밑바닥부터 딥러닝3 - 고차 미분

alz 2022. 3. 14. 20:25

Tanh(x) - 하이퍼볼릭 탄젠트의 고차미분

y = tanh(x) = (exp(x)+ exp(-x)) / (exp(x) + exp(-x)) 함수를 예시로 살펴보자.

이 함수의 미분형태를 살펴보면 ,1-y^2 으로 표현이 가능하다는 것을 알 수 있다.

이 함수를 간단하게 구현해보면, 이와 같은 코드가 된다.

class Tanh(Function):
	def forward(self,x) : 
    	y = np.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)

이때, 1차 미분 계산 그래프를 그려보면, 

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 # 1차미분일때의 값 

for i in range(iters) : 
	gx = x.grad
    x.cleargrad() # Variable x의 gradient값을 None 으로 초기화 해준후,
    gx.backward(create_graph= True) # 역전파 해준다. 
  
 gx = x.grad # 계산 그래프를 그리기 위한 식을 넘겨준다.
 gx.name = 'gx' + str(iters+1)  
 plot_dot_graph(gx,verbose = False, to_file = 'tanh.png')

해당 그래프의 결과를 Dot 파일에서 png 파일로 변환 후 나타내면 

Tanh(x)의 1차미분 그래프를 그릴 수있다.

 

위 식을 이용해서 5차 미분계수를 나타내보면 , 이와 같이 나타낼 수 있다.