Gradient Descent

오상윤·2023년 4월 13일
0

딥러닝

목록 보기
7/12

Gradient Descent

  • x로 미분하여 기울기를 활용하여 좀 더 낮은 곳으로 점차 나아가기

Global and Local Minima

  • 가장 loss가 낮은 곳(Global minima)이 아닌 골짜기(Local minima)에 빠질 가능성이 있다

Loss minimization using Gradient Descent

  • 1D 케이스를 높은 차원의 파라미터로 확장

Number of Parameters in Linear Layer

  • 1D 케이스를 높은 차원의 파라마터로 확장
  • 파라미터 수 : nxm + m

Local minima

  • 실제 딥러닝의 경우 파라미터의 크기가 수백만 단위
  • 수백만 차원의 loss 함수 surface에서 global minima를 찾는 문제
  • 수 많은 차원에서 동시에 local minima를 위한 조건이 만족되기는 어려움
  • 따라서 local minima에 대한 걱정을 크게 할 필요 없다

Learning Rate

  • 파라미터가 업데이트 될 때, gradient의 크기에 영향을 받게 됨
    • 이때, learning rate가 step-size를 정해주게 됨
  • 실험을 통해 최적화하는 것이 필요하다
  • 초보자들은 처음에 어떤 값을 정해야할 지 난감하다
  • 나중에 Adam Optimizer를 통해 learning rate에 대한 고민을 없앨 수 있다.

Large LR

  • 너무 큰 LR는 loss가 발산할 수 있음

Small LR

  • 너무 작은 LR는 수렴이 너무 늦는다
  • 자칫 Local minima에 빠질 수 있다.

Gradient 실습

Pytorch AutoGrad

미분을 자동으로 해준다

import torch
x = torch.FloatTensor([[1,2],
					   [3,4]]).requires_grad_(True)

x1 = x + 2
x2 = x - 2
x3 = x1 * x2
y = x3.sum()

y.backward()

Gradient Descent

import torch
impoty torch.nn.functional as F

target = torch.FloatTensor([[.1, .2, .3],
							[.4, .5, .6],
                            [.7, .8, .9]])

# 랜덤한 x 생성
x = torch.rand_like(target)
# gradient를 가질 수 있다
x.requires_grad = True

# loss 구하기
loss = F.mse_loss(x, target)

threshold = 1e-5
learning_rate = 1
iter_cnt = 0

while loss > threshold:
	iter_cnt += 1 
    loss.backward() # Calculate gradients, 백워드 호출(loss를 미분)
    x = x - learning_rate * x.grad # x를 업데이트
    x.detach_()
    x.requires_grad_(True)
    loss = F.mse_loss(x,target)

    print("%d-th Loss : %.4e" % (iter_cnt, loss))
    print(X)

gradient descent 사용 이유

  1. 실제하지만 알 수 없는 함수를 근사하고 싶다
  2. 나의 모델(함수)의 파라미터를 조절하자
  3. 손실 함수를 최소화 하도록 파라미터를 조절하자
  4. 미분을 통해 gradient를 얻고, loss를 낮추는 방향으로 파라미터를 업데이트

learning rate

  • 실험을 통해 최적화하는 것이 필요
    1. 현재 LR에서 실험이 안정될 경우, 값을 증가 : 최적화 속도 증가
    2. 현재 LR에서 실험이 불안정할 경우, 값을 감소
  • 초보자들은 처음에 어떤 값을 정해야 할 지 난감
    • 고민할바에 그냥 아주 작은 값으로 엄청 오래 돌려도 괜찮다
  • 나중에 Adam Optimizer를 통해 learning rate에 대한 고민을 없앨 수 있음
                        
profile
가보자가보자~

0개의 댓글

관련 채용 정보