1. 미분, 편미분
편미분: 하나의 입력 변수에 대해서만 미분
gradient : 기울기 벡터
선형계층 미분: m차원의 벡터를 출력으로 갖는 함수 f를 n차원의 벡터 x로 미분하는 경우
2. 경사하강법
경사하강법(gradient descent): 손실함수의 출력을 최소로 만드는 입력을 찾기 위한 방법
-> 손실 함수의 출력값을 낮추기 위해 가중치 파라미터로 미분하여 얻은 그래디언트를
학습률과 곱해서 현재 가중치 파라미터에서 빼줌
->그래디언트와 반대방향으로!
경사하강법은 지역 최소점(local minima)에 빠질 문제점이 존재하지만,
심층신경망은 가중치 파라미터의 크기가 매우 커지게 되는데,
높은 차원의 공간에서는 지역 최소점이 큰 문제가 되지는 않음.
학습률은 하이퍼파라미터로서, 잘 설정해주어야 한다!
(하이퍼파라미터: 데이터를 통해 학습이 진행되는 가중치 파라미터와 달리 모델의 성능에 영향을 줄 수 있지만 사용자에 의해 직접 설정되어야 하는 파라미터)
3. 실습(경사하강법 구현)
파이토치에서는 경사하강법을 위한 자동편미분(autograd)기능을 제공
import torch
import torch.nn.functional as F
target=torch.FloatTensor([[.1,.2,.3],
[.4,.5,.6],
[.7,.8,.9]])
x=torch.rand_like(target)
x.requires_grad=True
loss=F.mse_loss(x,target)
threshold=1e-5
learning_rate=1.
iter_cnt=0
while loss > threshold:
iter_cnt+=1
loss.backward()
x=x-learning_rate*x.grad
x.detach_()
x.requires_grad_(True)
loss=F.mse_loss(x,target)
print('%d-th Loss: %.4e'%(iter_cnt, loss))
print(x)
스칼라 값에 backward: 편미분 수행 -> grad에 그래디언트 값 저장
requires_grad 속성이 True인 텐서가 있을 때, 이 텐서가 들어간 연산의 결과가 담긴 텐서도 자동으로 requires_grad가 True
'딥러닝 > 파이토치 딥러닝' 카테고리의 다른 글
8장. 로지스틱 회귀 (1) | 2024.05.01 |
---|---|
7장 선형회귀(linear regression) (0) | 2024.04.22 |
5장. 손실함수 (0) | 2024.04.10 |
4장. 선형계층 (0) | 2024.04.10 |
3장 파이토치 튜토리얼 (0) | 2024.04.04 |