역전파 (Backpropagation)

pppanghyun·2022년 7월 12일
0

Pytorch 기본

목록 보기
2/21

역전파 (Backpropagation)

딥러닝에서 인공 신경망을 최적화하는 과정에서 미분은 필수적인 요소. Pytorch를 사용하면 역전파 과정을 매우 쉽게 할 수 있는 자동 미분 계산을 제공함.

import torch

# requires_grad=True는 해당 텐서를 기준으로 모든 연산들을 추적할 수 있게 하는 옵션
# 즉, x에 대해서 연쇄 법칙을 이용한 미분이 가능하다는 것
x = torch.ones(2,2, requires_grad=True)

# y는 x에 대한 식, z는 y에 대한 식, res는 z에 대한 식 (미분가능)
y = x+1
z = 2*y**2
res = z.mean()
print("y: ", y)
print("z: ", z)
print("Result: ", res)
# grad_fn=..은 추적이 잘 되고 있다는 의미

#result
y:  tensor([[2., 2.],
        [2., 2.]], grad_fn=<AddBackward0>)
z:  tensor([[8., 8.],
        [8., 8.]], grad_fn=<MulBackward0>)
Result:  tensor(8., grad_fn=<MeanBackward0>) # 추적 잘 되는 중 

# 역전파
res.backward() # res를 기준으로 역전파를 진행

# res = (z_1 + .. +z_4)/4 
# z_i = 2 y_i **2
# z_i = 2(x_i+1)**2
# d(res)/dx_i = x_i + 1

print(x)
print(x.grad) # x.grad는 backward()가 선언 된 변수를 기준으로 미분. 
              # 즉 d(res)/dx를 계산

#result
tensor([[1., 1.],
        [1., 1.]], requires_grad=True)      
tensor([[2., 2.],
        [2., 2.]])
profile
pppanghyun

0개의 댓글