본문 바로가기
Computer Science/Algorithms

[Deep Learning Algorithms] SGD(Stochastic Gradient Descent), 확률적 경사 하강법

by Henry Cho 2022. 7. 29.
728x90

SGD(Stochastic Gradient Descent), 확률적 경사 하강법


포스트 난이도: HOO_Senior

 

[Notice] 포스트 난이도에 대한 설명

안녕하세요, HOOAI의 Henry입니다. Bro들의 질문에 대한 내용을 우선적으로 포스팅이 되다 보니 각각의 포스트에 대한 난이도가 달라서 난이도에 대한 부분을 작성하면 좋겠다는 의견을 들었습니다

whoishoo.tistory.com


# Gradient Descent와 Stochastic Gradient Descent

 

딥러닝(Deep learning) 또는 인공 신경망 학습 모델은 실제 뇌의 시냅스 작용을 보고 만든 학습 모델 방식에 해당한다. 딥러닝을 한다는 점에서는 동일하지만 어떤 알고리즘을 사용하느냐에 따라서는 딥러닝의 효율성이 달라진다. 대표적인 딥러닝 알고리즘 모델로는 GD, 즉 Gradient Descent가 있다. GD를 경사 하강법 또는 Basic gradient descent라고도 불리는데, 우리가 알고 있는 대표적인 SGD가 존재하기 때문에 구분을 하고자 GD 또는 Basic GD라고 부른다.

 


# Gradient Descent란

 

GD는 수학적 최적화의 방법을 반복에 해당하는 iteraiton과 approximate method을 활용한다. 이때 사용하는 function이 미분 함수인 differentiable function이다. GD는 딥러닝 알고리즘에서 대중적으로 사용되지만 GD만 을 사용하지 않고 여러 조건을 추가하여 사용하는 가장 큰 이유는 Local minimum에 빠질 수 있기 때문이다. 사실 이 부분은 GD랑 SGD랑 동일한 문제 해당한다. 최적의 값을 산출해내기 위해서는 Global minimum 값에 도달해야 하지만 Local minimum이 많아지게 되면 Global minimum, 즉 전역 최솟값에 도달하지 못하고 로컬 최솟값에 머물러 버리는 문제가 발생하기도 한다. 따라서 우리는 이 문제를 해결하기 위해서 모멘텀(Momentum)이나 Adam 또는 batch size를 조정하는 등 여러 가지 방법을 통해서 문제를 예방한다. 


# Stochastic Gradient Descent

 

경사하강법(Gradient Descent) 중에서 Stochastic gradient descent를 사용하는 이유는 앞서 이야기한 문제 때문에 사용하는 것은 아니다. 대신에 시간적 효율성을 높일 수 있다는 점에서 우리는 Deep learning algorithm으로 SGD를 활용한다. SGD는 Mini batch를 활용하여 학습하는 과정을 나눠서 진행하기 때문에 같은 데이터 양과 같은 학습 모델일지라도 GD 알고리즘에 비해 시간적 효율성이 더 좋게 산출된다.

 

이 말인 즉슨, GD는 하나의 학습이 끝나고 나서야 업데이트가 이루어지지만 SGD는 하나의 Mini batch 작업이 끝나고 업데이트가 즉각적으로 반영이 된다는 것이다. 그렇다 보니 SGD 알고리즘을 통해 학습한 모델의 그래프를 시각적으로 표현해보면 부드러운 곡선보다 극단적으로 뾰족한 형태의 그래프로 나타내 진다. 왜냐하면 전체 데이터를 토대로 학습이 되고 업데이트가 진행되는 거와 달리 SGD는 전체 데이터 안에서도 Mini batch를 통해서 나눠서 업데이트가 이루어지다 보니, 특정 batch 안에는 오류가 많을 수도 있고 반대로 특정 batch 안에는 오류가 없는 경우가 생길 수 있기 때문이다. 따라서 최적 값을 찾는 과정에서 SGD는 각 배치마다 각기 다른 결과가 나올 수 있다는 것이다. 그럼에도 불구하고 GD보다도 SGD의 알고리즘을 사용하는 것이 시간적 효율성이 더 좋다.


 

728x90

댓글