- 2020년 9월 18일 오후 1:27
- 조회수: 5324
REFERENCES
INFORMATION
- 2020년 9월 25일
- 오후 1시 ~
- 온라인 비디오 시청(YouTube)
- 온라인 비디오 시청 (YouTube)
TOPIC
On-Line Video
OVERVIEW
요약: 현재 인공지능 분야의 큰 열기를 끌고 있는 딥러닝은 많은 수의 파라미터로 작동된다. 이 때, 최적의 성능을 내는 파라미터(optimal paramter)를 찾고자 경사하강법(Gradient Descent)이 사용되고, 많은 데이터를 학습할수록 성능이 향상되는 딥러닝 특성을 따라 확률적 경사하강법(Stochastic Gradient Descent)이 제안되었다. 이 때, 더 깊고 복잡한 딥러닝을 효율적으로 학습시키고자 다양한 Optimizer들이 연구되었고, 딥러닝이 인공지능 분야의 큰 열기를 이끌수 있게 하였다. 금일 세미나는 확률적 경사하강법 개념과 이를 응용한 Adam, Lookahead Optimizer를 소개하도록 한다.
참고문헌:
1. BOTTOU, Léon; CURTIS, Frank E.; NOCEDAL, Jorge. Optimization methods for large-scale machine learning. Siam Review, 2018, 60.2: 223-311.
2. KINGMA, Diederik P.; BA, Jimmy. Adam: A method for stochastic optimization. arXiv preprint arXiv:1412.6980, 2014.
3. ZHANG, Michael, et al. Lookahead optimizer: k steps forward, 1 step back. In: Advances in Neural Information Processing Systems. 2019. p. 9597-9608.
발표자 후기
금일 세미나는 Stochastic Gradient Descent로 딥러닝의 학습 도구에 대해 알아가는 시간을 가져보았다. 세미나를 준비하면서 평소에는 별 생각없이 사용하였던 옵티마이저들에 대해 자세히 알아갈 수 있는 시간을 갖게 되어 뿌듯하였고, 앞으로는 어떠한 원리로 내 모델이 학습되고 있는지 알아갈 수 있어서 연구를 좀 더 효과적으로 진행할 수 있지 않을까 생각하게 되었다. 발표 자료와 내용을 구상할 때 옵티마이저에 대한 기초가 없는 사람들도 쉽게 이해할 수 있도록 수식 관련 부분은 최대한 빼도록 노력하였고, 연구원들에게도 새로운 옵티마이저를 소개해주고 싶어 Adam 이외에 직관적이고 이해하기 쉬운 Lookahead optimizer를 선정하여 세미나를 진행했다. 다만 아쉬운 점은 영상을 촬영하고 보니 영상 길이가 조금 짧다라는 생각이 들어 옵티마이저 알고리즘의 디테일한 특성이나 더 많은 옵티마이저를 소개하였으면 세미나가 좀 더 풍요로워지지 않을까 생각하였다. 향후 세미나에서는 어떤 주제 내용을 소개해야 본인 및 연구원들이 연구하는데 도움을 줄 수 있을지 깊게 생각해야겠다. 끝으로 첫 세미나 준비에 도움을 준 212호 연구원들에게 감사의 말을 전하며 세미나 후기를 마친다.
청취자 후기
이번 세미나는 진수가 Stochastic Gradient Descent를 주제로 세미나를 진행하였다. Gradient Descent는 기울기(gradient)를 구하는 데이터를 사용하는 정도에 따라서 크게 세 가지로 나누어 볼 수 있다. 먼저 Batch Gradient Descent(BGD)는 전체 데이터를 사용하고 Stochastic Gradient Descent(SGD)는 데이터셋에서 하나의 데이터만을 사용하며 Mini-batch Gradient Descent(MSGD)는 데이터의 일부만을 사용한다. 최적의 파라미터를 찾아가는 과정을 그래프로 그려보았을 때 BGD가 헤매지 않고 가장 효율적으로 탐색하는 것으로 보인다. 하지만 계산 비용을 고려해보면 모든 데이터를 사용한다는 점에서 비효율적인 측면이 강하기 때문에 오늘날에 대부분 사용하는 방법은 보다 계산 효율적인 MSGD이다. 한편 데이터가 방대해지고 모델이 복잡해지면서 효과적으로 학습시키는 방법에 대한 연구가 필요하게 되었다. 따라서 gradient descent에도 많은 보완이 이루어졌는데 그 중 하나가 Momentum이라는 기법이다. Momentum은 이전 단계에서 계산한 기울기 값의 일부분을 반영해서 현재 기울기 값에 가산하여 파라미터를 업데이트하도록 한다. 이를 통해서 최적의 파라미터 지점이 아님에도 손실함수의 그래프에서 기울기가 0이 되어버리는 지점(saddle point 또는 local minima)을 잘 넘어갈 수 있도록 해준다. Adaptive stepsize는 파라미터 별로 stepsize(또는 learning rate)를 다르게 적용하는 방법이다. 이전 단계들의 기울기의 누적제곱합에 대한 제곱근으로 stepsize를 나누어 학습되는 정도를 조절하게 된다. Adam은 해당 두 기법을 모두 사용하는 optimizer로서 이전 단계에서의 기울기를 반영함(Momentum)과 동시에 각 파라미터 별로 누적된 기울기에 따라 stepsize를 다르게 적용(Adaptive stepsize)하여 파라미터를 업데이트하게 된다. 다만 Adaptive stepsize의 방법을 그대로 사용할 경우에는 학습이 길어질수록 stepsize가 너무 작아져서 학습이 진행되지 않는다는 단점이 있다. 따라서 기울기를 단순 누적하지 않고 바로 이전 누적 값을 사용하여 지수가중이동평균을 구하는 방법으로 해결하였다. 최근에는 Lookahead라는 방법론이 나왔는데 이는 gradient descent를 진행하면서 일정횟수마다 멈춘 뒤 시작(또는 다시 시작)했던 파라미터가 있는 방향으로 일정 비율만큼 되돌아가서 해당 값에서 다시 gradient descent를 진행하는 방법이다. Optimizer의 기본적인 이론부터 최신 기법까지 준비할 내용이 많았을 텐데 밀도 있게 잘 준비해준 진수에게 감사의 말을 전한다.
금일 세미나는 Stochastic Gradient Descent를 주제로 진행되었다. 가장 작은 Loss값을 찾아가는 Optimizer에 대한 기초 용어들에 대한 설명부터 그 용어들의 개념을 모두 활용하여 제안된 방법론들에 대해서 들어볼 수 있었다. Gradient Descent란 gradient를 learning rate, 또는 step size만큼 움직이면서 지금의 loss값보다 더 낮은 값으로 업데이트 시키는 과정을 의미한다. Gradient Descent 이후에 추가적으로 등장한 Momentum이란 Saddle point, local minimum 등의 문제를 해결할 수 있는 기법으로, 이전에 움직인 방향과 앞으로 움직일 방향을 함께 고려하게 된다. 마지막으로, 이렇게 Gradient를 업데이트 시키는 과정에서 각 파라미터별로 step size를 다르게 설정하고 학습을 진행하면서 이를 조절하는 것이 Adaptive step size 기법이다.
세미나에서 먼저 설명해준 ADAM 기법은 위의 기초 개념들을 함께 활용하여 개발된 방법론이다. 현재의 gradient와 과거의 momentum을 기반으로 현재의 momentum을 결정하고, 학습 초기에 momentum 벡터들이 0으로 편향되는 것을 방지하고자 추가적인 보정을 진행하는 과정을 통하여 업데이트를 하게 된다. 또한, 이 외에 추가적으로 설명해준 Lookahead Optimizer 기법은 하이퍼파라미터에 해당하는 횟수인 k번만큼 ADAM, 또는 SGD 방식을 경사하강법을 진행한 후, 첫 파라미터의 방향으로 되돌아가는 방식을 반복하면서 Gradient Descent를 진행하게 된다. 이는 주로 local minimum을 빠져나가기 어려운 경우에 좋은 성능을 보이고 있어 자주 활용되는 Optimizer이다.
평소에 Adam이라는 Optimizer에 대해서는 자주 들어보았고 실제로도 자주 활용하고 있었지만, 이렇게 명확하게 공부해본적은 없어서 모델이 어떻게 학습되고 있는지 더 이해할 수 있는 좋은 시간이었다. 뿐만 아니라, 추가적으로 알아본 Lookahead Optimizer에 대해서도 공부해본만큼 해당 방식 역시 적용해보고 싶다는 생각이 들었다. 이 외에도 다양한 Optimizer들이 다양한 방법으로 모델을 학습시키고 있을 것이라는 생각이 들어, 다른 기법들도 공부해보고 적용해보아야겠다.
이번 세미나는 Stochastic Gradient Descent에 대한 주제로 진행되었다. 이번 기회를 통해 Gradient Descent에 대한 기본적인 개념부터 알게 된 것 같다. Optimizer는 Loss를 줄이기 위한 파라미터 W를 찾을 수 있도록 최적화하는 도구인데, 그 방법으로 Gradient Descent가 처음 나오게 되었다. Loss Function이 어떤 모습인지 모르는 상황에서 최적 파라미터 W를 찾기 위해 현재 지점에서의 Quadratic approximation으로 최적점을 찾아갈 수 있음이 증명되었고, 이를 통해 Gradient와 Learning rate(Step size)를 사용한 Gradient Descent 방법이 나오게 되었다. Learning rate에 대한 개념이 Quadratic approximation으로부터 나오게 되었다는 것을 처음 알게 되었고, 어떤 의미를 갖는지 확실히 알게 되었다. 한편, 전체 데이터를 사용해서 GD를 하게 되면 분명히 최적점을 향해 갈 수 있게 되긴 하지만, 계산비용이 너무 많이 든다는 단점이 있다. 그래서 한개 또는 일부의 데이터만으로 GD를 하는 Stochastic/Mini-batch 개념이 나오게 되었고, 이는 최적점을 향해 곧바로 가진 않지만 계산시간을 훨씬 단축할 수 있게 되었다. Momentum과 Adaptive에 대한 개념이 소개되었는데, Momentum은 최적점을 찾아가는 과정에서 Saddle point나 Local minimum에 빠지게 되는 경우를 방지하기 위해 이전단계에서 계산한 파라미터 갱신량의 일부를 현재단계의 파라미터에 반영하는 방법이다. Adaptive는 일반적으로 모든 파라미터에 대해 상수값으로 고정하는 Stepsize를 파라미터별로 다르게 적용하고자 하는 개념으로, 최적점을 찾아가는 과정에서 큰 변화량을 가진 파라미터의 Stepsize는 작게, 작은 변화량을 가진 파라미터의 Stepsize는 크게 늘려주는 방법이다. SGD에 Momentum과 Adaptive 개념을 도입한 Optimizer가 바로 ADAM Optimizer이다. 즉 기본적인 SGD 방법에 Momentum을 적용하여 이전단계에서 계산된 결과를 반영해주고, 또한 Stepsize를 파라미터별로 다르게 적용하면서 최적 파라미터 W를 찾아가는 방법이라고 할 수 있다. 그동안 Adam Optimizer에 대해 막연하게만 들어왔는데 이번 설명을 통해 명확하게 알게 된 것 같다. 마지막으로 최근 발표된 Lookahead Optimizer에 대한 소개가 있었다. 이 방법은 Adam이나 SGD 등을 통해 k번 업데이트를 하고 나서 처음 시작했던 point를 향해 1step back하고 그 지점에서 다시 k번 업데이트를 시작하는 방법으로, Adam이나 SGD로는 빠져나오기 힘든 Local Minima에서도 빠져나올 수 있게 해주는 장점이 있다. 앞으로 Optimizer에 대해서도 어떤 종류가 있는지 어떤 특징이 있는지 파악하면서 사용해야겠다는 생각을 했고, 기본적인 내용부터 단계적으로 설명해주면서 새로운 내용까지 소개해준 배진수 연구원에게 감사의 말을 전한다.
본 세미나는 Stochastic Gradient Descent로 딥러니의 학습 방법에 대한 주제로 진행하였고,
딥러닝이 가장 작은 Loss값을 찾아갈수 있도록 도와줄 수 있는 Optimizer와 현재보다 더 작은 Loss를 향해 Parameter를 Setpsize만큼 이동시키는 방법론인 Gradient Descent라는 방법을 자세히 설명해주었다. 또한 Stochastic Gradient 및 Momentum, Adaptive에 대해 이해를 도와주는 설명을 진행하였다.
5가지(Optimizer, Gradient, Stochastic, Momentum, Adaptive)를 기반해 5만회 인용이 있었던 ADAM Optimizer 에 대한 설명을 진행하였다. ADAM 알고리즘은 parameter 수가 많은 모델도 학습 가능하며, Gradient와 Momentum을 기반하여 작동하여 메모리 효율도 좋고, step size를 조절해주는 장점을 가지고 있다. 이에 따라 오늘날 가장 많이 사용하는 Optimization 모델이다.
ADAM의 성능 우수성을 증명하는 부분을 설명하면서, Lookahead Optimizer 를 추가설명을 진행해주었으며, Lookahead Optimizer의 1Step back 방법을 사용하며, Local minimum 탈출과 Slow weight 업데이트 학습 방법에 대한 부분에 대한 이해를 도와주었다.
Optimizer의 연구 흐름과 최근 방법 연구 동향에 대해 이해할 수 있는 세미나였다.
이번 세미나는 진수가 stochastic gradient descent를 주제로 발표하였다. Gradient descent와 Optimizer는 딥러닝 연구를 시작하는 사람들이 가장 처음 접하게 되는 주제 중 하나이고 기본적인 내용인 만큼 다양한 연구가 오늘날까지도 수행되고 있다. 진수가 첫 세미나를 위해 준비한 자료는 처음 딥러닝을 입문하는 사람이 들어도 쉽게 이해할 수 있을 만큼 중요한 내용을 깔끔한 피피티와 설명으로 전달해주었다. 2년 전에 딥러닝을 처음 공부할 때 이 세미나를 들었으면 좀 더 쉽게 이해할 수 있었을 것 같다. 그리고 딥러닝을 공부하면서 Adam 까지만 공부하고 어느 순간 모델 아키텍쳐에만 관심을 두고 Optimizer 쪽은 공부를 본의 아니게 안하고있었는데 진수가 마지막에 소개해준 Lookahead optimizer라는 최근에 연구된 논문을 소개해주어서 복습차원 뿐만 아니라 새로운 지식까지도 얻어갈 수 있었다. 아이디어의 핵심 컨셉은 Local Minimum을 빠져나가기 위해 K step forward + 1 step backward 방식으로 gradient descent를 진행하는 것이였다. 모델링을 하면서 습관적으로 Adam 과 AdamW만 사용했었는데, 재밌는 아이디어인것 같아 나중에 한번 사용해보려고 한다. 첫 세미나를 잘 준비해준 진수에게 감사하다는 말을 전한다.
금일 세미나는 “Stochastic Gradient Descent”에 대한 주제로 진수가 발표하였다. 딥러닝을 연구하는 입장에서 Optimizer와 Gradient Descent는 가장 기본적이고 핵심적인 내용이며 최근까지도 많은 연구가 진행되고 있다. 이번 세미나에서는 2019년에 발표한 Lookahead optimizer를 새롭게 배울 수 있었다. Lookahead는 Local minimum에 빠지는 문제점을 해결하기 위해 K step forward와 1 step back 방식으로 진행한다. 이를 시각화 자료를 사용하여 쉽게 설명해준 덕분에 쉽게 이해할 수 있었다. 현재 진행하고 있는 연구에는 AdamW optimizer를 사용하여 딥러닝 모델을 학습하고 있다. 최적의 학습 모델을 찾기 위해서는 사용 데이터, 모델 구조 등에 맞게 Optimizer를 찾아보는 것도 중요하다고 생각한다. 기회가 된다면 오늘 접한 Lookahead를 진행하는 연구에 적용해보고 Optimizer 간의 학습 결과를 비교해보고자 한다.
심층 신경망 모형 학습에 있어서 Optimizer, Learning rate, Batch size를 적절하게 선택하는 것은 항상 어려운 문제이다. 특히 Optimizer와 Learning rate을 선택하기 어려워 많은 실험을 진행해보고야 선택을 하게되며, 굉장한 시간을 필요로 한다. 전체 데이터를 한번에 학습하는 Full batch의 경우 RAM 메모리에 올릴수 없거나 적은 횟수로 업데이트 하기에 많은 연산 시간이 필요하다. 학습 데이터 셋의 일부를 추출하여 학습하는 Mini batch 상황에서는 Local optima에 빠지기 쉽다는 문제가 있다. 금일 세미나에서 나온 Lookahead optimizer의 아이디어에서 많은 영감을 받았다. 손실 함수 공간에서 일종의 터널을 뚫어 Local optima를 빠져나갈 수 있다는 아이디어를 들은 적 있었지만 진수가 알기 쉽게 설명해주어 이해할 수 있었다. 나의 실험에서도 해당 optimzier를 사용해 보아야 겠다고 생각했다. 첫 세미나라 많이 떨렸을텐데 진수에게 고생했다는 말을 전하고 싶다.
이번 세미나는 진수가 Gradient Descent의 기초부터 Adam, 그리고 최근에 나온 Lookahead Optimizer까지 소개해주었다. 실험을 진행할 때 일반적으로 Adam Optimizer를 baseline으로 선택하는 편이지만, 거의 습관적으로 사용하던 차라, 이번 세미나의 직관적인 시각화로 다시 한번 optimizer에 작동 아이디어에 대해 차근차근 리마인드할 수 있었다. 또한 Adam 이후에 새로운 나온 Optimizer들은 거의 Adam이랑 아이디어가 비슷하다고 생각해서 보지 않고 있었는데, 금일 소개된 Lookahead Optimizer는 기존 Gradient Descent(Adam, SGD,..etc)로 똑같이 k-step 진행하면서, 빙빙 도는 k-step 중에 local-minima 가 있을 수 있음을 강하게 두고, k-step지점 간 내적점으로 weight를 수정함으로써 local minima를 해결하는 신선한 접근법을 보여주었다. 직관적으로는 간단한 등고선 그림 상 interpolation 한 점으로 weight 업데이트를 하더라도 최적점에 도달할 수 있다고 눈으로 이해가 갔는데, learning-rate가 크면 널뛰기 현상이 일어나는 것처럼 혹시 Slow-weight update시에도 그런 현상이 일어나는지 궁금하다. 부담없이 들을 수 있도록 매끄럽게 PPT를 바쁜 와중에 준비해준 진수에게 고맙다는 말을 전한다.
오늘 세미나는 배진수 연구원이 Stochastic Gradient Descent라는 주제로 진행해주었다. 그동안 나는 수업을 들을 때 인공신경망 이외에 타 알고리즘에 대해서 배우더라도 어떤 최적화 기법이 활용되었는지 자세히 살피지않고 넘기는 경우가 많았다. 또한 최근 코딩을 할 때도 기계적으로 optimizer를 Adam으로 사용하였던 나에게 이번 기회에 다시 한번 복습할 기회가 되었던 세미나였다. Gradient descent 방식 내 구성요소 중 어느 방향으로 파라미터를 업데이트할지를 의미하는 gradient와 얼마만큼 업데이트할지를 결정하는 stepsize가 존재한다. 이 두개에 변형을 주어 Global한 최적해에 파라미터 값들이 최대한 빠르고 안정적으로 근사되도록 optimizer는 발전되어왔고 그 가운데 가장 흔히 활용되는 Adam과 작년 NIPS에서 발표된 Lookahead라는 방법론에 대해서 설명들을 수 있었다. 유익한 세미나였고 진수의 첫 세미나였던 만큼 오늘의 세미나 준비 및 발표가 진수의 성장에 큰 디딤돌이 되었기를 바란다.
오늘은 진수가 ‘Stochastic Gradient Descent’라는 주제로 세미나를 진행해주었다. 모델을 구축하기 위해서는 크게 학습의 대상이 되는 파라미터와 학습방식을 결정하는 loss function이 필요하다. 결과적으로 loss function이 최소가 되는 최적의 파라미터를 결정하는 것이 모델을 학습시킨다는 의미를 가지고 있다. Gradient descent를 구성하는 요소로 (1)gradient와 (2)step size(learning rate)가 있다. Gradient는 방향을 의미하며, step size는 줄이는 크기를 의미한다. 전체 관측치에 대한 gradient를 구하는 방식은 full gradient이며, 이는 모든 관측치에 대해 gradient를 구해야하기 때문에 큰 연산량을 요구한다. 따라서, 이를 완화하기 위해 일부 관측치를 샘플링하여 gradient를 구하는 stochastic gradient descent/mini batch gradient descent를 적용하기도 한다. 연산 비용 관점에서는 stochastic gradient가 full gradient보다 빠르게 하강한다는 장점이 있지만, 샘플링마다 결과가 다르기 때문에 loss가 오르내림이 있다는 특징이 있다. 추가적인 구성요소로 momentum이 사용되는데, momentum은 관성이라는 의미와 동일하게 이전 단계에서 연산한 gradient값의 일부를 반영하여 현재 gradient를 산출한다는 의미로, saddle point와 local optimum값에서 수렴되지 않도록 하는 역할을 한다. 또한, adaptive는 step size를 adaptive하게 조절하는 것을 의미한다. 파라미터 별로 step size를 다르게 조절하여 보다 최적값으로의 수렴이 안정적으로 진행될 수 있도록 한다. Adam또한 gradient와 momentum을 활용한 loss function이다. 더불어 작년 NeurIPS에서 발표된 Lookahead optimizer에 대해서도 알 수 있는 기회였다. 최근 진수가 연구를 수행하면서 loss function의 학습경향에 대해 관심을 갖고 있는 것으로 알고 있었는데, 해당 문제를 해결하기 위해 여러 문헌을 살펴보고, 이렇게 세미나를 진행해주어 다시한번 평소 간과하기 쉬운 모델 학습과정에 대해 다시한번 생각해볼 수 있는 기회였다. 진수의 연구도 금일 소개된 자료를 바탕으로 잘 보완되어 마무리되길 응원한다.
모델 학습 과정을 진수가 차근차근 설명해 주었다. 특정 데이터 단위로 (stochastic) 학습을 진행할 때 (gradient descent) 학습 정도를 조절할 수 있는 momentum (가중치 변화 크기)와 adaptive(gradient 반영율)를 고려할 수 있는 점을 차례로 소개하며 ADAM optimizer 까지 연결지어 주었다. Lookahead Optimizer 개념이 재밌다. 2보전진을 위한 1보 후퇴의 장점을 가진 것 같다. 요새 자주 등장하는 주식철학과도 비슷하다고도 생각했다(조급하지 말고 적립식 장기투자..). 마음먹지 않으면 깊게 들여다볼 일이 자주없는 최척화 개념을 알기 쉽게 분류해주고, 용어정리를 할 수 있는 시간이었다.
금번 세미나에서는 Stochastic Gradient Descent에 관해 진행되었다.
Gradient Descent는 Loss값이 작아지는 방향으로 step size(Learning rate)만큼 이동시키는 딥러닝의 학습 방법론이다. Stochastic Gradient Descent는 전체 데이터의 Gradient를 사용하는 것이 아닌 일부 데이터의 Gradient만 사용하는 것으로, 효율성 측면에서 고안된 방법이다. Mini-batch형태로 많이 사용 중이며 Momentum, Adaptive 개념을 접목하여 더 효과적인 딥러닝 학습이 가능하다. Momentum은 파라미터가 이전에 움직였던 방향과 현재 움직이려는 방향을 함꼐 고려하여 더 빠르게 학습시키기 위해 고안된 방법(Saddle point, Local minimum 지점을 탈피하여 계속적인 학습 진행이 가능, 까다로운 경사하강법을 적용하거나 딥러닝을 일부분씩 학습시킬 필요 없음)이며,
Adaptive는 파라미터 별로 각각 상이한 Step size(learning rate)를 적용하여, 학습 진행 과정 중에 Step size를 조정함으로써 학습을 효과적으로 진행할 수 있게 한다. 이와 더불어 깊고 복잡한 딥러닝을 효율적으로 학습시키는데 활용되는 Adam, Lookahead Optizer에 살펴볼 수 있었다. 금번 세미나에서는 키워드 중심으로 순차적으로 개념 설명을 해 주셔서 Stochastic Gradient Descent를 보다 쉽게 이해할 수 있었습니다. 세미나 진행 감사드립니다.
이번 세미나는 "Stochastic Gradient Descent"를 주제로, 딥러닝의 기초이자 핵심 개념인 Optimizer와 Gradient Descent가 무엇인지, 효율적인 Gradient 방식에는 어떤 것들이 있는지를 소개하였다. Optimizer는 더 작은 Loss를 향해(Descent) Stepsize만큼 파라미터를 이동시키는 역할을 한다. Gradient는 Full Gradient, Stochastic Gradient, Mini-batch Gradient로 구분할 수 있다. Full Gradient는 모든 관측치에 대한 Gradient를 계산하는 방법으로, 데이터의 크기와 차원에 따라 연산량이 크게 증가한다는 문제점이 있었고, 연산량 감소를 위해 관측치의 일부만 샘플링하여 Gradient를 계산하는 Stochastic Gradient와 Mini-batch Gradient 방법이 제안되었다. 이후 Momentum과 Adaptive에 대한 개념이 소개되었는데, Momentum은 전단계에서 계산한 값의 일부를 현재단계의 계산에 반영하여 Saddle Point나 Local minimum에 빠지게되는 문제점을 보완한 방법론이고, Adaptive 파라미터별로 Stepsize를 다르게 적용하는 방법론이다. 마지막으로 Optimizer 종류 중 가장 보편적으로 사용되는 Adam과 비교적 최근에 제시된 Lookahead를 소개하며 각 Optimizer의 개념과 구동방식을 쉽게 설명해주었다. 이번 세미나를 통해 Gradient Descent에 대한 이해도를 더욱 탄탄히 할 수 있게 되었고, Lookahead에 대해 새롭게 알게되었다. 다음 프로젝트 때 해당 Optimizer를 활용해보고, 여러 Optimizer의 구동 방식과 결과에 따른 인과관계를 다시 한번 생각해보는 기회로 활용하고자한다.
금일은 Stochastic Gradient Descent를 주제로 세미나가 진행되었다. 세미나는 Optimizer, Gradient, Stochastic, Momentum, Adaptive 5가지 키워드를 중심으로 설명이 진행되었다. 이번 세미나는 딥러닝, 머신러닝의 기본이 되는 내용을 소개한 것으로 쉽게 넘어갈 수 있는 내용을 하나, 하나 천천히 설명해주어서 좋았다. Stochastic Gradient는 Full Gradient와 달리 데이터 내 일부분만 사용해서 Gradient를 구하는 방식이다. Momentum은 파라미터가 이전에 움직인 방향과 현재 움직여야하는 방향을 함께 고려하면서 학습을 진행하는 개념이다. 이 경우 Saddle point나 Local Minimum에 빠지지 않고 학습을 잘 할 수 있다는 장점이 존재한다. Adaptive는 학습 진행시 파라미터에 적합한 Step size를 다르게 적용하자는 개념이다. 이 경우 학습을 진행하면서 Gradient 값에 따라 파라미터에 더 적합한 Step size를 조절하게 된다. 이처럼 Stochastic Gradient Descent의 기본이 되는 개념들을 설명한 이후 최근 자주 사용되는 ADAM optimizer와 최근 제안된 Lookahead Optimizer에 대한 소개가 마지막으로 진행되었다. ADAM optimizer는 파라미터 수가 많아도 학습이 잘되고, 메모리 효율이 좋다는 장점이 있다. Lookahead Optimizer은 Momentum을 이용해도 Local Minimum을 빠져나가지 못하는 경우에 적용하면 Local Minimum을 잘 빠져나와 학습을 잘 할 수 있다는 장점이 있다. 개인적으로 모델을 학습할 때 가장 많이 사용되고 있는 ADAM optimizer를 너무 당연하게 적용하고 있었던 것 같다. 이번 세미나를 기반으로 다른 optimizer에 대한 공부를 더하고 적용해보며 optimizer별 장단점에 대해서도 더 잘 알아야겠다고 생각했다. 좋은 세미나를 준비해준 진수에게 수고했다고 말해주고 싶다.
비선형의 손실함수를 갖는 딥러닝 모델은 1차 미분계수를 활용한 경사하강법(Stochastic Gradient Descent, SGD)로 학습한다. 이번 세미나에서는 가장 기본적인 SGD, 학습 파라미터마다 학습율을 동적으로 조절하는 Adam, 그리고 복수의 미분계수들의 평균으로 업데이트하는 Lookahead optimizer를 다루었다. 모멘텀이 가미된 SGD와 Adam은 많은 논문들에서 디폴트로 사용하기도 하고, 실제로도 안정적인 학습이 보장되기 때문에 우리 모두에게 익숙할 것이다. 하지만 이 둘 마저도 적절한 학습율(learning rate)를 찾아줘야 하기 때문에 손이 많이 가는 편이다. 한편 비교적 새로운(?) Lookahead의 경우 learning rate 값에 덜 민감하다는 점에서 상당한 이점이 있다고 본다. 논문의 저자가 직접 TensorFlow/PyTorch 코드를 작성하여 공개해두었으니 한번 쯤 모두 사용해보면 좋을 것 같다. Lookahead와 맥을 같이하며 하는 optimizer 중에서 Stochastic Weight Averaging (SWA)도 요새 주목을 많이 받고 있는데, Lookahead의 경우 복수의 미분계수들의 평균을 사용한다면 SWA는 여러 파라미터 값의 평균을 사용한다는 점이 다르다 볼 수 있다. 또한, Lookahead와 SWA는 분산 학습과 궁합이 매우 잘 맞을 것으로 생각되는데, 관련된 연구가 있는 지 찾아보면 좋을 것 같다.
이번 세미나는 "Stochastic Gradient Descent"를 주제로 진행되었습니다. 딥러닝의 학습 과정은 손실함수를 정의하고 손실함수를 최소화하는 방향으로 학습을 진행해 나가는 과정을 의미합니다. 결국, 어떤 방법으로 손실함수를 최소화 할건지에 대한 최적화 방법론이 딥러닝 학습 과정에서 중요한 부분을 차지하고 있습니다. 오늘 세미나에서는 손실함수를 최소화하는 다양한 최적화 방법론들에 관해서 소개되었습니다. 먼저 딥러닝 학습의 기본이 되는 경사 하강법에 대해서 소개되었습니다. 함수의 미분 값을 계산하면 함수가 가장 빠르게 증가하는 방향이 계산되고 해당 방향의 반대로 진행해 나가면 함수의 최솟값을 향해 나아갈 수 있다는 아이디어가 경사 하강법 입니다. 하지만 경사 하강법은 두 가지 단점이 있다. 첫 번째는 미분 값이 0이 되면 파라미터를 업데이트할 수 없다는 단점이 있고 두 번째는 파라미터별로 미분 값의 차이가 클 때 같은 스텝 크기를 사용하면 지그재그 형태로 파라미터가 업데이트된다는 것이다. 첫 번째 단점을 해결하는 방법으로는 모멘텀을 활용하는 방법이 있다. 모멘텀은 과거의 미분 값을 활용해 현재의 미분 값이 0이라고 하더라도 파라미터를 업데이트할 수 있는 방법이다. 두 번째 단점을 해결하는 방법은 파라미터별로 다른 스텝 크기를 사용하는 것이다. 스텝 크기를 미분 값으로 나눠주면 미분 값이 큰 파라미터는 작은양이 업데이트되고 미분 값이 작은 파라미터는 큰 양이 업데이트된다. 따라서 파라미터가 지그재그 형태로 업데이트되는 것을 막아준다. 위의 두 가지 아이디어를 모두 활용한 옵티마이저가 Adam이다. Adam은 많은 딥러닝 모델에서 기본적으로 사용될 만큼 성능이 인정된 방법론이다. 다음으로 소개된 방법론은 Lookahead Optimizer이다. Lookahead Optimizer는 k 스텝을 업데이트한 후 1 스텝을 원래 파라미터가 있었던 방향으로 돌아가게 된다. 이를 통해서 기존에 통과할 수 없었던 local optima를 지나 더 좋은 방향으로 진행해 나갈 수 있게 되며 실험적으로도 기존의 optimizer들에 비해 좋은 성능을 보여주었다. 이번 세미나를 통해서 optimizer에 대해서 한 번 더 정리할 수 있어서 의미 있는 세미나가 되었다. 세미나를 열심히 준비해준 진수에게 감사의 뜻을 표하며 세미나 후기 마무리하겠습니다.
이번 세미나는 Stochastic Gradient Descent에 관한 주제로 진행되었다. 딥러닝이 많이 보편화되면서 여러 optimizer를 쉽게 사용할 수 있게 되었지만, 정확한 원리를 이해하면서 선택하지 않고 경험적으로 사용하는 경우가 많다. 이번 세미나를 통해 optimizer들의 작동 방식을 조금 더 이해할 수 있게 되었다. 가장 기본적으로, 전체 데이터의 gradient를 사용하는 batch gradient descent 부터 stochastic grdient descent 그리고 가장 많이 쓰이는 mini batch 를 설명해 주었다. 결과적으로는 적절한 비용으로 좋은 값을 찾아내는 방법은 mini batch인 경우가 대부분이기 때문에 많이 쓰인다. 또한 gradient 방법에는 치명적인 단점이 있는데, local optimal point나 saddle point를 지나가지 못한다는 것이다. 이러한 것들을 극복하기 위해 Momentum이라는 개념을 사용했다. 관성이라는 개념처럼, Momentum은 이전 단계에서 구한 기울기를 반영하여 다음 업데이트에도 사용이 된다. 따라서 관성에 의한 것처럼 local optimal point나 saddle point를 지나치게 된다. 또한 Adaptive한 stepsize를 이용하여, 기울기별로 상황에 맞는 만큼 업데이트 되게 된다. 이러한 방법들을 사용하면, 기존의 단순한 gradient descent 방법론들보다 대부분 빠르게 optimal point를 찾아낸다. 사실 Adam optimizer에 대해서는 많은 설명이 필요한데, 간단히 요약해서 설명해 주었다. 마지막으로 Lookahead라는 방법론을 설명해 주었는데, 말 그대로 지나온 점과 업데이트 된 점 사이의 값을 사용하는 방법이다. 많은 parameter space를 탐색하고, 조금 더 보수적인 방법으로 업데이트 하는 방법이다. 파라미터들이 많아지고, 레이어가 깊어질수록 작은 변화에도 많이 변하기 때문에 이러한 보수적인 업데이트가 적합할 수 있을 것 같다. optimizer에 대한 연구들은 많이 있지만, 경험적으로 사용하던 optimizer를 사용하게 되는 것이 일반적이다. 다음에는 새로운 optimizer를 사용해서 비교해 보도록 해야겠다.
이번주 세미나는 진수가 ‘Stochastic Gradient Descent’라는 주제를 가지고 진행하였다. 현재 사용되고 있는 딥러닝 알고리즘은 매우 많은 파라미터를 가지고 학습한다. 학습을 진행하면서 알고리즘은 최고의 성능을 내는 파라미터를 찾아가고 이렇게 파라미터를 찾아가는 방식으로 Gradient Descent가 사용된다. 이렇게 학습하면서 효율적인 학습을 위하여 다양한 optimizer들을 사용하고 있다. Optimizer에는 SGD, ADAM등 많은 optimizer들이 존재하며 현재 가장 보편적으로 사용하는 optimizer는 ADAM이다. 여태 optimizer는 아무런 생각없이 사용해왔는데 진수 세미나를 들으면서 다시 한번 공부할 수 있어서 좋은 기회였으며 새로운 optimizer에 관한 연구에 관해서도 언급해 주어 새로운 정보도 얻을 수 있었다. 자세한 설명으로 세미나를 진행해준 진수에게 감사하다는 말을 전하고 싶다.
딥러닝은 모델의 아키텍처 및 Loss Function의 정의 뿐만 아니라, 해당 Loss를 줄여나가는 Optimization 기법도 상당히 중요하다. 복잡한 딥러닝 모델의 모든 파라미터를 최적화시키는 알고리즘은 이론 뿐만 아니라, 실제로 구현하면서 Computational Complexitiy 나 Memory 에 부닥치는 문제까지 해결해야한다.
딥러닝을 처음 공부하는 사람들이 보통 책을 사서 공부하며, 책에 나와있는 예제 코드를 보고 Adam의 원리를 모른체 쓰고 있는 것을 종종 봤다. SGD, Momentum, Adagrad, Adam 등 기존의 Optimizer가 어떠한 문제를 해결하고자 하였는지를 알고 이해하면 더욱 더 Task에 적합한 Optimizer와 Hyper Parameter를 튜닝하는데 도움이 되지않을까 생각한다.
마지막에 나왔던 Look-Ahead Optimizer가 상당히 Scheme이 독창적인 것 같다. 무작정 직진하기보다는 갔던 길을 다시 어느정도 뒤로 물러나서 보면 더 좋은길(더 좋은 Gradient)을 찾을 것이라는 아이디어에서 착안되었다. Pseudo Code가 직관적이고 명료해서 좋았다.
발표를 준비하느라 고생하신 진수형께 감사의 말씀을 드린다.
이번 세미나는 진수가 " Stochastic Gradient Descent" 주제로 발표해주었다. 최근 여러 딥러닝 알고리즘을 구현하면서 가장 크게 느낀 것은 옵티마이저와 경사하강법은 반드시 알아야하는 개념이라는 것이다. 특정 문제를 풀기 위해 복잡하고 우수한 알고리즘을 사용하는 것도 중요하지만 알고리즘에 적용한 옵티마이저의 종류에 따라서도 성능 차이가 많이 나기 때문이다. 하지만 옵티마이저나 경사하강법과 관련된 내용을 깊게 알아보지 않아서 대게 알고리즘을 개선하는 부분에 많은 고민을 했었는데 이번 세미나에서 진수가 내가 잘 몰랐던 부분들을 구체적이고 이해하기 쉽도록 설명해주었다. 평소 나는 고리즘을 구현하고 SGD나 Adam을 사용해서 둘 중 좋은 성능을 보이는 것을 최종적으로 선택해서 사용했었다. 진수가 오늘 마지막에 설명해준 Lookahead Optimizer가 개인적으로 인상 깊었는데 새로운 공식의 옵티마이저가 아니라 기존에 사용하던 SGD나 Adam을 가지고 업데이트하는 과정에서 k steps forward와 1 step back 방식을 반복하며 Optimal 지점을 찾아가는 것이 Lookahead Optimizer의 핵심 아이디어였다. SGD나 Adam을 사용하면서 불편했던 부분은 학습이 어느정도 안정적으로 수렴된거 같다가도 새로운 Local Optimal을 찾게될 때가 있었고 그럴 때마다 stepsize를 너무 키워버리면 학습이 불안정해진다는 것이었다. Lookahead Optimizer는 이러한 한계점을 해결하는데 도움을 줄 수 있는 방법으로 Local Optimal에 빠질 위험을 줄여주는 동시에 학습의 안정성까지 보장된다고 하니 나중에 꼭 적용해보면 좋을 것 같다는 생각이 들었다. 평소에도 프로젝트를 진행하면서 진수에게 알고리즘의 수식적인 부분이나 기본적인 이론에 대해서 많이 자문을 구했는데 이번 세미나를 들으면서 진수가 정말 기본적인 지식이나 수식 원리에 대해서 기초가 튼튼한 친구라는 걸 한번 더 느낄 수 있었다.
이번 세미나에서는 딥러닝 모델을 학습하기 위해 필요한 gradient-based optimizer에 대해서 다루었다. 딥러닝 모델을 구축하고 학습하는 과정을 이루는 요소들을 크게 꼽아보면 데이터, 네트워크, 손실함수, optimizer 정도로 구성할 수 있을 것 같다. 최근에는 SGD, Adam 등 몇몇 유명한 optimizer를 사용하고 scheduling을 하는 것이 일반적인 셋팅이다. 보편적인 셋팅에 맞추어서 실험을 하다보면 종종 까먹지만 의외로 optimizer를 바꾸는 것이 모델 성능에 많은 영향을 끼칠때가 많다. (최근 준지도학습에 관해서 논문을 읽다가 stochastic weight averaging (SWA)를 사용해서 성능을 향상시킨 모델도 찾을 수 있었다. 엄청나게 많은 연구가 되어있는 분야임에도 성능향상을 이끌어냈다는 점이 놀랍다.) 그만큼 놓치기 쉬운 요소이지만 충분히 공부를 하고 사용해야 하는 분야인만큼 이번 세미나를 통해서 개인적으로도 다시 한번 알고 있던 내용들을 리마인드 할 수 있어서 좋았다. 진수가 새롭게 소개해 준 Lookahead는 learning rate에 강건한 알고리즘이라고 하는데 이는 학습 파라미터 튜닝을 하는데 큰 부담을 덜 수 있기 때문에 다시 한번 살펴볼만 한 논문이라고 생각된다. k-step에 민감할 것이라고 생각했었는데 강건한 성능을 보여준 것은 의외였다.
금일 세미나는 “Stochastic Gradient Descent”를 주제로 진행되었다. Optimizer, Gradient, Stochastic, Momentum, Adaptive 5가지 키워드를 중심으로 설명이 진행되었다. 딥러닝에서 그냥 생각없이 사용려면 값만 조금씩 바꿔 가면서 사용하는 것들을 기본적인 개념부터 하나하나 잘 설명을해주어서 참 세미나 듣기가 좋았다. Optimizer는 Loss를 줄이기 위하여 W:Parameter를 조절하여 현재 지점에서 최적의 W값을 찾기위해 Quadratic approximation으로부터 찾아진다. 이렇게 Gradient와 Learning rate를 사용한 Gradient Descent방법이 등장하게 되었다. 하지만 이 방법은 너무나 많은 계산이 들어가기에 Stochastic의 방법을 사용하여 전부 사용이 아닌(Full Gradient) 일부분 또는 하나(Stochastic Gradient),(Mini-batch Gradient descent)를 사용한다. Momentum은 이전단계에서 계산된 파라미터 일부를 현재에 반영하여 이전방향과 현재방향을 함께 고려할 수 있다. Adaptive는 기존에 상수로 사용되는 stepsize를 파라미터 별로 다르게 사용하여 큰 변화량을가지면 stepsize를 작게, 작은 변화량을 가지면 stepsize를 크게하여 조절한다. 이 방법들을 잘 활용한것인 Adam Optimizer이다. 기존에는 당연히 Adam Optimizer가 제일 좋은 성능이 나온다고 하여 사용하던것의 기본적인 이해를 할수 있게 되어서 좋았다. 마지막으로 Lookagead Optimizer는 Local Minima에 빠졌을때 빠져나올수 있는 장점을 가지고 있다. 이번 세미나를 통해 기존에 그냥 사용하였던 Optimizer에 대해 다시 한번 조금이나마 이해하게 되었다. 좋은 세미나에 감사를 표한다.
경사하강법(Gradient descent)의 원리와 이를 활용한 여러 옵티마이저를 이해할 수 있는 세미나였다. 경사하강법은 머신러닝 모델에서 가장 적은 손실을 낳는 파라미터(가중치)를 찾기 위한 최적화 방법이다. 처음 설정된 가중치에서 손실함수 기울기와 stepsize를 곱한 값을 빼가면서 손실 최저점을 찾아가는 식인데, 하이퍼파라미터인 stepsize를 어떻게 지정하느냐에 따라 가중치가 움직이는 폭이 달라진다.
다만 데이터 크기가 커질수록 모든 데이터에 대해 손실을 계산, 가중치를 업데이트 하는 데 많은 시간이 걸리게 된다. 이에 일부 샘플 데이터만 뽑아 손실을 계산하는 Stochastic/Mini-batch 경사하강법이 고안됐다. 그중에서도 미니배치 경사하강법이 빠르고 안정적으로 최적점을 찾아가 많이 쓰이고 있다.
이후 SGD를 변형, 보완해 발전시키려는 노력이 계속해서 이뤄졌다. 주목할 만한 아이디어는 크게 2가지인데, 우선 Momentum은 가중치 업데이트 시 이전 단계의 업데이트(기울기)값을 함께 반영하는 방법론이다. 이를 이용하면 로컬 옵티멈에 도달해 기울기가 0이 된다 해도 여기서 빠져나와 가중치를 계속 업데이트 시킬 수 있다. 다른 하나는 Adaptive 방식으로, 가중치마다 다른 stepsize를 부여하는 방법론이다. 이전 단계에서 변화가 많았던 가중치엔 낮은 stepsize를, 변화가 적었던 가중치엔 높은 stepsize를 적용한다.
모멘텀과 어댑티브를 모두 적용한 옵티마이저가 2015년 개발된 Adam이다. 효율적인 SGD 기법을 다 넣어 만든 만큼 성능도 좋은 것으로 입증되면서 오늘날 가장 많이 사용되고 있다. 또한 2019년 제시된 Lookahead Optimizer도 각광받고 있다. Adam 등 SGD를 반복해서 사용하다 한번씩 이전 파라미터가 있던 방향으로 이동시켜주는 방식이다.
오늘 세미나 덕분에 머신러닝의 기본에 해당되는 옵티마이저를 꼼꼼히 살펴볼 수 있어 매우 유익했다. 각각의 방법론들이 갖고 있는 원리가 얼핏 단순해 보이면서도 창의적이라는 생각이 들어 세미나 내내 재밌게 들었다. 많은 준비를 해준 진수에게 감사 인사를 전한다.
다섯가지 키워드 optimizer, Gradient, Adaptive, Stochastic, Momentum 를 중심으로 인공지능에 대해 설명해주셔서 이해하기 좋은 세미나였습니다. Gradient 라는 개념이 어떻게 나오게 되었는 지 시작에서 부터 경사하강법이 나오게 된 이유, 모든 데이터에 대한 파라미터를 다 체크하는 Batch gradient descent, 하나만 체크하는 Stochastic gradient descent, 랜덤으로 몇 개의 샘플을 뽑아 파라미터를 계산하는 Mini-batch gradient descent로부터 모멘텀의 개념이 등장하게 된 흐름 등 쉽게 정의내릴 수 있도록 설명해주셔서 스스로도 확실하게 말로 표현할 수 있을 것같습니다. 이러한 개념들을 알고 있다는 것과, 실제로 다른 분들에게 설명하는 것은 매우 달라서 종종 설명할 시간이 있을 때 애를 먹는 경우가 많았기 때문에 도움이 많이 되었습니다. 좋은 세미나 감사 드립니다.
금일 세미나는 “Stochastic Gradient Descent”를 주제로 배진수 연구원께서 진행해주었다. 딥러닝은 인공신경망을 구축하고 수많은 데이터를 이용하여 예측과 학습을 반복하고, 이 과정을 통해 최적의 성능을 내는 파라미터를 찾는다. 딥러닝, 인공신경망이라고 표현하기 때문에 대단히 어려운 개념이지만(실제적으로 구현하기에도 매우 어렵지만….), 간단히 생각해보면 결국 가지고 있는 변수(X)를 가지고 f(X)라는 함수를 사용하여 결과(Y)를 만들어 내는 과정이다. 모든 변수(X)에 대해서 예측한 값(Y’)과 실제 값(Y)의 차이가 없다면, 함수 f(X)의 예측력은 신뢰할 수 있다고 할 수 있다. 때문에 딥러닝은 예측한 값(Y’)과 실제 값(Y)의 차이를 줄이는 방향으로 파라미터를 업데이트 하는 방식을 사용하여 학습하는데 이때 Gradient를 Step Size만큼씩 이동하며 최적의 파라미터를 찾는 방법을 Gradient Descent라고 한다. 금일 세미나는 간과하고 있던 딥러닝의 핵심 기초인 Gradient Descent를 설명하고, Batch의 개념과 Mini-Batch 사용의 장단점에 대해서 자세히 설명해 주었다. 또한 가장 널리 쓰이고 있는 옵티마이저인 Adam과 NIPS에서 최근에 발표된 Lookahead와의 비교를 Visual적으로 비교해서 설명해주어 직관적으로 이해할 수 있는 세미나였다. 사실 개인연구를 하면서도 딥러닝의 구조적인 측면에서만 고민을 했고 학습을 위한 세세한 조건에 대해서는 경시하는 경향이 있었는데, 세미나를 들으면서 많은 반성을 하게 되었다. 이러한 기초적인 부분을 다루는 세미나가 신입시절에 많았으면 연구 생활에 훨씬 도움이 되었을 거라는 생각을 했다. 훌륭한 세미나를 해준 배진수 연구원께 감사의 인사를 보낸다.