Patrick's 데이터 세상

Gradient Descent 본문

Deep Learning/Math for AI

Gradient Descent

patrick610 2022. 7. 19. 22:39
반응형
SMALL

 

 

👉🏻 경사 하강법(Gradient Descent)

경사 하강법은 딥러닝에서 비용 함수를 미분하여 기울기(Gradient)를 구해서 오차를 최소화하는 방향을 찾아내는 알고리즘을 말합니다.

 

Pytorch에서는 torch.autograd로 자동 미분 엔진을 제어합니다.

순전파(Forward Propagation) 단계에서 정답을 맞추기 위한 최선의 추측(guess)를 진행하고 입력 데이터를 각 함수들에서 실행합니다.

역전파(Backward Propagation) 단계에서는 출력(output)으로부터 역방향으로 이동하면서 오류에 대한 함수 매개변수들의 미분값을 수집, 경사하강법으로 매개변수들을 최적화합니다.

 

ex)

nb_epochs = 2000
for epoch in range(nb_epochs+1):
    # H(x) 계산
    prediction = model(x_train)
    # model(x_train)은 model.forward(x_train)와 동일함.
    # cost 계산
    cost = F.mse_loss(prediction, y_train) # <== 파이토치에서 제공하는 평균 제곱 오차 함수
    # cost로 H(x) 개선하는 부분
    # gradient를 0으로 초기화
    optimizer.zero_grad()
    # 비용 함수를 미분하여 gradient 계산
    cost.backward()
    # W와 b를 업데이트
    optimizer.step()

 

 

👉🏻 경사하강법 수학적 접근

 

경사하강법을 이해하기 전에 먼저 손실 함수에 대해 알아보겠습니다.

손실 함수신경망이 출력한 값과 실제 값과의 오차에 대한 함수를 말하며 가중치와 편차를 조정할 때는 손실 함수의 값이 최소가 되도록 만들어야 합니다.

ex) 평균제곱오차 MSE(Mean Squared Error)

위 과정으로 계산하여 가중치와 편차를 계산하면 너무 많은 변수가 생성되어 답을 내리기가 어렵습니다.

이러한 경우에 경사 하강법을 사용합니다.

 

 

경사 하강법은 함수의 그래프를 따라 움직이면서 기울지를 조사하고, 이 때 구한 기울기의 값이 작아지는 방향으로 조금씩 내려가는 방법입니다.

 

경사하강법 미분

 

 

△x와 df(x)/dx의 부호가 서로 반대일 때 그래프를 따라 내려가고 그래프를 따라 내려가면 그래프의 가장 아랫부분 함수의 최솟값에 도달합니다.

 

 

학습률(learning rate)이라 하고, 너무 크면 이동하는 폭이 넓어 최솟값에 수렴하지 못하고 건너뛰어 발산하고, 너무 작으면 이동하는 폭이 좁아 경사를 하강하는데 너무 오래 걸려 최솟값에 도달하지 못합니다.

 

 

 

 

👉🏻 딥러닝에서의 경사하강법

 

딥러닝에서 모델을 만들 때는 경사하강법의 일종인 확률적 경사하강법(SGD: Stochastic Gradient Descent)를 사용합니다.

경사하강법은 모든 학습 데이터에 대해 오차를 계산해야 하는데 학습 시간이 너무 오래 걸릴 뿐만 아니라 예상치 못한 부작용을 초래할 수 있습니다.

위 약점을 보완하기 위해 학습 데이터 중 N개 데이터만 골라 학습시킨 후, 그 결과로 나온 손실 함수에 경사하강법을 적용하여 가중치를 구하는 방법입니다.

 

 

 

 


참고

 

PyTorch로 시작하는 딥 러닝 입문 - 유원준 외 1명

 

PyTorch로 시작하는 딥 러닝 입문

이 책은 딥 러닝 프레임워크 PyTorch를 사용하여 딥 러닝에 입문하는 것을 목표로 합니다. 이 책은 2019년에 작성된 책으로 비영리적 목적으로 작성되어 출판 ...

wikidocs.net

 

인공지능을 위한 수학 - 프리렉

 

인공지능을 위한 수학

인공지능을 위한 수학

freelec.co.kr

 

 

반응형
LIST
Comments