Adam Optimization Algorithm(아담 최적화 알고리즘)
포스트 난이도: HOO_Senior
# SGD Algorithm and Optimal Algorithm
딥러닝(Deep learning)을 통해 머신러닝(Machine learning)을 통해서 학습을 할 때 GD(Gradient Descent) 알고리즘을 활용한다. Gradient descent(줄여서 GD) 알고리즘을 사용함으로써 Deep learning 안의 Neural network의 가중치라고 불리는 Weight를 조절할 수 있다. 이를 통해 우리는 Loss function에서 Global 최솟값을 얻어낼 수 있다. 하지만 GD 알고리즘은 Local 최솟값 문제나 전체 데이터에 대한 Loss function을 계산하고 산출해야 된다는 점과 같은 단점들을 가지고 있다. 그래서 GD의 시간적 효율성을 보완한 SGD를 활용한다.
그럼에도 불구하고 SGD는 시간적 효율성이 상대적으로 좋지만 로컬 최솟값 문제를 해결해주지는 못한다. 한마디로 GD 중에서도 SGD인 확률적 경사 하강법을 통해서 학습을 하지만 이 역시도 완벽한 학습 모델의 알고리즘은 아니다. SGD도 대표적인 몇 가지 문제점들이 발생할 가능성이 있다. 예를 들어서 로컬 최솟값에 빠지는 문제나 학습 과정에서 극단적인 데이터 학습 방법 등이 있다. 이러한 문제를 해결하기 위해서 최적화 알고리즘을 활용한다.
최적화 알고리즘은 GD 알고리즘과 전혀 다른 알고리즘이 아니라 GD 알고리즘을 보완한 알고리즘에 해당되기에 우리는 Gradient descent optimization algorithm이라고 부른다. 한국말로는 경사 하강법 최적화 알고리즘이라고 부르기도 한다. GD optimization algorithms은 여러 방식의 응용 알고리즘들이 존재한다. 심지어 여러 응용된 방식이 서로 또 보완하고 합쳐져서 나오는 방식도 있다.
# Adam Optimization Algorithm
Adam optimization algorithm은 GD optimization algorithm의 한 종류이다. 줄여서 Adam이라고 부르는 최적화 알고리즘은 딥러닝에서도 컴퓨터 비전 및 자연어 처리 분야에서 많이 사용되는 알고리즘이며, 나름 핫한 녀석 중 하나이다. 나온 지 오래되지 않는다는 점에서도 핫하지만 사용에 있어서 편리하다 보니 최적화 알고리즘 중에서도 많이 사용되는 알고리즘이 아담(Adam)이다.
아담(Adam)을 통해서 기존 방식에 해당하는 GD 알고리즘을 대신하여 Weight을 업데이트하는데 효과적으로 사용이 되며, 경사하강법 방식과 같이 Iteration 하여 weight 업데이트도 가능하다. 아담은 Adaptive moment estimation에서 파생되었으며, 기존 GD의 문제점이나 최적화 알고리즘들의 문제점들이 보완된 알고리즘에 해당한다.
우선적으로 아담은 nosiy 하거나 sparse gradients를 처리하는데 적합한 알고리즘이기에 고정적이지 않은 objective를 다루는데 적합하다. 또한 큰 데이터나 매개 변수(Parameters)들의 문제를 다루는데도 적합하며 Gradients가 재조정될 때 Gradients가 가진 특징을 보존하고 있는다. Hyper parameters들의 경우에는 직관적 해석이 되며 약간의 Tuning이 필요로 한다. 이러한 특징을 가지고 있기에 아담을 사용하는 데 있어 복잡하고 메모리 사용량이 커야 할 것 같지만 이 마저도 아니라는 것이 큰 특징이다. 위에서 언급한 장점을 포함하면서도 아담을 구현하는 것 자체가 어렵지 않으며 메모리 요구 사항도 적다. 그렇기 때문에 아담을 통해서 효율적인 계산이 가능하다는 것이다.
# Advantage of Adam Optimization Algorithm
nosiy/sparse gradient를 처리하는 적합하다.
Big size of data or parameters들의 문제를 다루는데 적합하다.
Resclae gradients에 대해 기존 gradients 특징을 보존한다.
Hyper parameters들의 경우에는 직관적으로 해석된다.
Hyper parameters들의 경우에는 Tuning이 필요하다.
Memory 사용량이 크지 않다.
Adam을 구현하는데 복잡하지 않다.
# Adam 특징
아담 알고리즘은 SGD의 문제점을 보완하여 나온 최적화 알고리즘이기에 Weight 업데이트하는 과정에서도 조금 다른 특징을 가지고 있다. Adam은 SGD와 달리 학습률이 훈련 중에 변경되지 않는다. 따라서 각각의 네트워크의 Weight 또는 Parameters들에 대한 학습률이 유지되면서 독립적으로 학습이 이루어져 조정이 된다. 이러한 특징을 가질 수 있는 이유는 Adam은 AdaGrad와 RMSProp라고 부르는 Root mean square propagation의 기능이 포함되어 있기 때문이다.
이를 통해 기존 최적화 알고리즘을 결합하여 사용함으로써 GD의 문제점을 보완할 뿐만 아니라 효율성 또한 가져갈 수 있었다. 그렇다 보니 Machine learning의 가장 큰 효율 문제로 대두되는 시간 소모량을 줄이면서도 원하는 결과를 얻을 수 있는 Adam은 Deep learning 알고리즘에서 인기가 있다. 대량의 데이터 문제를 다루는데 적합한 Adam은 대규모 딥러닝 문제를 해결하는데 효율적이기에 많은 개발자들이 Adam을 최적화 알고리즘으로 많이 사용하고 있는 추세이다.
# Adam's Parameters
Adam 알고리즘에는 알파, 베타1, 베타 2, 그리고 입실론의 Parameters들이 포함되어 있다. 아래는 각각의 매개 변수(Parameters)들의 역할을 나타내고 있다.
알파: Learning rate(학습률) 또는 Step size를 나타낸다.
베타 1: 첫 번째 moment estimates에 대한 Exponential decay rate에 해당한다.
베타 2: 두 번째 moment estimate의 대한 Exponential decay rate에 해당한다.
엡실론: Implementation에서 0을 나누는 걸 방지하기 위한 숫자이기에 매우 작은 숫자에 해당한다.
우선 알파의 경우에는 학습률을 나타내고 있기 때문에 Weight 값에 따라서 초기 학습이 달라진다. Weight에 해당하는 가중치 값이 클수록 초기 학습이 빨라지는데 0.001에서 0.3까지 달리 지정을 한다. 만약에 학습하는 알파 값이 0.001보다 더 작은 수치이면 당연히 Training 속도가 느려진다.
베타 1과 베타 2는 둘 다 moment estimate를 나타내지만 베타 1은 첫 번째 모멘트 예상 값을 나타내며 베타 2는 두 번째 모메트 예상 값을 나타낸다. 첫 번째 모멘트 값인 베타 1에는 0.9를 일반적으로 입력하며 두 번째 모멘트 값에는 0.999를 입력하는데 NLP 문제에 따라 1.0에 근접하게 값을 설정해야 한다.
마지막으로 엡실론의 경우에는 예방 차원에 있는 숫자이기에 10의 -8 제곱과 같은 매우 작은 수치를 설정해준다. 실제로 Adam 가설을 입증한 논문 자료에 따르면 가장 이상적인 설정 값들이 나와 있다.
https://hypothes.is/a/jaqnaKP6EeqVPVsf9EaYTg
하지만 이는 추천하는 기본 설정 값이지 학습 모델에 따라서 달리 수정하여 진행하는 게 더 좋은 모델을 산출할 수도 있다. 하지만 처음 시작할 때 기본적으로 제시해주는 설정 값부터 시작하는 것이 작업을 훨씬 수월하게 도와준다.
'Computer Science > Algorithms' 카테고리의 다른 글
[Algorithms] Network Analysis Metrics: Eccentricity, Katz Centrality and Closeness Vitality (2) | 2024.01.25 |
---|---|
[Deep Learning Algorithms] SGD(Stochastic Gradient Descent), 확률적 경사 하강법 (0) | 2022.07.29 |
[Algorithms] Topology, Network Topology (0) | 2022.07.22 |
[알고리즘] Machine Learning Algorithm: Random Forest (0) | 2022.06.09 |
[알고리즘] Machine Learning Algorithm: Support Vector Machine(SVM) (0) | 2022.06.01 |
댓글