Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Generative AI
- 스터디
- 판다스
- Coursera
- 코딩테스트실력진단
- paper review
- Scaling Laws
- 코드트리
- 알고리즘
- speaking
- 최단경로
- 코딩테스트
- 그래프이론
- Python
- 데이터분석
- 완전탐색
- DP
- 플로이드와샬
- 머신러닝
- English
- Study
- 파인튜닝
- peft
- 프로그래머스
- 파이썬
- bfs/dfs
- 이분탐색
- Fine-Tuning
- Lora
- LLM
Archives
- Today
- Total
생각하는 아져씨
파이토치 기초 공부하기 - 역전파(Backprop)를 알아보자 본문
역전파란?
인공 신경망을 최적화 하는 과정에서 미분은 필수적인 요소인데 파이토치는 최적화 과정인 역전파(backpropagation)를 쉽게 할 수 있도록 자동 미분 계산을 제공한다.
자동 미분 준비하기
자동 미분을 하기 위해서는 텐서를 기준으로 모든 연산들을 추적할 수 있어야 한다.
그것이 바로 requires_grad = True
옵션이다.
requires_grad = True
- 해당 텐서를 기준으로 모든 연산들을 추적할 수 있게 하는 옵션이다. (x 기준으로 미분을 할 수 있도록 만들어주는 장치)
x = torch.ones(2,2, requires_grad=True)
print(x)
>>
tensor([[1., 1.],
[1., 1.]], requires_grad=True)
예를 들어 다음의 계산이 있다.
모든 식이 합성 함수의 형태로 x에 대해서 표현이 가능하다는 점!
# y는 x에 대한 식, z는 y에 대한 식, res는 z에 대한 식이다. 따라서 이는 합성함수의 개념으로써 x에 대해서 표현 및 미분이 가능하다.
y = x+1
z = 2*y**2
res = z.mean()
print("y: ", y)
print("z: ", z)
print("Result: ", res)
# grad_fn=..은 추적이 잘 되고 있다는 의미다. -> 현재 x와 연관된 연산을 계속 추적하고 있는 것.
>>
y: tensor([[2., 2.],
[2., 2.]], grad_fn=<AddBackward0>)
z: tensor([[8., 8.],
[8., 8.]], grad_fn=<MulBackward0>)
Result: tensor(8., grad_fn=<MeanBackward0>)
역전파 수행
- backward 함수로 간단하게 역전파를 계산할 수 있다.
backward()
required_grad = True
로 선언된 변수를 기준으로 역전파를 진행한다.
res.backward() # res를 기준으로 역전파를 진행하겠다는 의미다. requires_grad=True로 선언된 변수 기준으로 역전파 진행
# 역으로 식을 써내려 가보자.
# 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
grad
- backward()가 선언된 변수를 기준으로 미분을 한다.
- 즉 $d(res)/dx$를 계산한다.
print(x)
print(x.grad)
# x.grad는 backward()가 선언 된 변수를 기준으로 미분을 한다. 즉 d(res)/dx를 계산한다. -> x를 기준으로 미분값을 구하는 것.
# #d(res)/dx_i = x_i + 1
>>
tensor([[1., 1.],
[1., 1.]], requires_grad=True)
tensor([[2., 2.],
[2., 2.]])
참조
https://tutorials.pytorch.kr/beginner/blitz/neural_networks_tutorial.html#backprop
'Machine & Deep Learning > Pytorch' 카테고리의 다른 글
파이토치 기초 공부하기 - 텐서(Tensor)를 알아보자 (0) | 2023.03.23 |
---|