분석하고싶은코코

Optimizer - OGD, SGD, RLS 본문

머신러닝&딥러닝

Optimizer - OGD, SGD, RLS

코코로코코 2023. 3. 26. 22:51
반응형

 실시간 데이터에 처리 알고리즘을 공부하는 과정에서 OGD(Online Gradient Descent), SGD(Stochastic Gradient Descent), RLS(Recursive Least Squares)에 대해서 알게 되었다.  공부한 내용을 정리하고자 작성합니다.

 

 

실시간 데이터를 처리하는 방법에 앞서 Online Learning(온라인 학습)에 대해서 간단하게 이야기 하고 처리 방법에 대해서 서술하겠습니다.

 

 

Online Learning(온라인 학습)


온라인 학습은 실시간으로 들어오는 데이터에 대한 모델의 업데이트가 필요한 경우에 매우 유용합니다. 예를 들어, 금융 분야에서는 매일 새로운 데이터가 발생하므로 실시간으로 데이터를 처리하고 모델을 업데이트하여 예측력을 높이는 것이 중요합니다. 또한, 인터넷 사용자의 검색 이력이나 쇼핑 이력과 같은 데이터도 실시간으로 처리하여 개인화된 추천 서비스를 제공하는 데 활용됩니다.

 

온라인 학습의 장점은 실시간으로 데이터를 처리하고 모델을 업데이트할 수 있어 최신 정보를 반영하여 예측력을 높일 수 있다는 점입니다. 또한, 대량의 데이터를 한 번에 처리하는 것보다 작은 배치 단위로 처리하기 때문에 메모리 사용량이 적어집니다. 그러나 온라인 학습의 단점은 데이터의 순서에 따라 모델의 성능이 크게 달라질 수 있다는 점입니다. 또한, 일부 이상치 데이터나 노이즈가 많은 데이터가 모델에 직접 영향을 끼치게 되어 모델의 예측력이 떨어질 수 있습니다. 따라서, 이러한 문제를 해결하기 위해서는 적절한 데이터 전처리와 모델 선택이 필요합니다.

 

Optimizer는 모델을 학습시키는 과정에서 가중치(weight)를 조절하며 학습하는 알고리즘입니다. 이 가중치는 입력 데이터를 모델에 통과시켜 예측값을 계산할 때 사용됩니다. 따라서, 온라인 학습에서는 실시간으로 들어오는 데이터를 기반으로 모델의 가중치를 업데이트해야 하므로, 이를 처리하는 옵티마이저의 선택은 매우 중요합니다. OGD, SGD, Adam등 다양한 옵티마이저가 존재하고 있습니다. 이 옵티마이저에는 각자 장단점이 존재하기 때문에 처리하려고 하는 데이터의 목적이 어떤지에 따라 다양하게 선택이 가능합니다.

 

 

OGD(Online Gradient Descent)


OGD는 온라인 학습에 최적화된 알고리즘 중 하나입니다. 무엇보다 빠른 계산속도와 적은 메모리 사용량의 저하를 가장 우선적인 목표로 하는 알고리즘입니다.  OGD는 각 데이터에 대한 손실 함수의 기울기를 계산하고 가중치를 조정합니다. 이 때 OGD는 일정한  학습률을 사용합니다. 일반적으로 OGD에서는 미니배치(mini-batch) 방식을 사용하여 효율적으로 학습을 진행합니다. 

 

OGD는 메모리 사용량이 적고 역산 속도가 빠르다는 것이 장점입니다. 따라서 대용량의 데이터에서도 높은 효율을 보장해주비다. 그렇기 때문에 실시간 예측에 적합한  알고리즘입니다. 하지만 OGD는 새로 들어온 데이터에 대해서만 평가가 가능하기 때문에 과거 데이터와의 관계를 제어할 수 없습니다. 따라서 새로 들어온 데이터가 과거 데이터와 연관된 데이터라면 다른 최적화 알고리즘을 고려해야 합니다.

 

 

(미니배치 - 미니배치는 전체 데이터 셋에 대해서 일부 데이터를 랜덤 추출하여 학습시킬 단위를 만드는 것을 의미합니다. 보통 미니배치는 랜덤으로 추출하지만 시계열 데이터에 대한 미니배치를 진행할 경우 순차적으로 배치를 정합니다.)

 

 

 

SGD(Stochastic Gradient Descent)


SGD는 가장 기본적인 경사 하강법(GD)의 한 종류로, 일반적으로 딥러닝에서 많이 사용되는 최적화 알고리즘 중 하나입니다.

GD는 gradient를 계산한 뒤 이들의 평균 gradient를 구하여 가중치를 업데이트 합니다. 하지만 데이터가 많을 경우 이 계산은 상당히 많은 시간을 소요하게 됩니다. 반면, SGD는 무작위로 선택한 하나의 데이터에 대한 손실 함수를 계산한 뒤 가중치를 업데이트합니다. 이를 반복하면 전체 데이터셋에 대한 평균적인 경향성을 파악할 수 있습니다. 따라서 GD보다 빠르게 학습이 가능합니다. 하지만, SGD는 무작위로 선택한 데이터에 대한 경향성만 파악할 수 있기 때문에 최적점을 찾지 못할 가능성이 높습니다.  즉, SGD는 랜덤하게 추출한 데이터를 통해 가중치를 업데이트하고 다음 값의 손실함수가 앞선 데이터보다 낮은 상황이 반복되면 종료할 수 있다. 또한 일정한 에포크 만큼 반복하거나, 일정한 시간 동안 학습을 진행하는 등의 조건으로 종료할 수 있다. 그렇기 때문에 시간적으로 단축 될 수 있지만 최적점을 찾지 못할 수 있는 것이다. 이러한 단점을 보완하기 위해 학습률과 모멘텀과 같은 방법을 사용할 수  있습니다.

 

기본적인  SGD는 전체 데이터 중 하나의 랜덤 데이틀 통해 가중치를 업데이트 하는 과정은 많은 시간이 소요되기 때문에 미니배치 SGD라는 방법이 사용하게 됩니다. 시계열 데이터에서는 순서가 정해져있기 때문에 window를 지정한 미니배치 SGD를 통해 온라인 학습을 할 수 있습니다.  시계열의 미니배치 방법에는 Slide와 Moving winodw방법이 있습니다. 하지만 SGD의 단점인 최적의 가중치 값을 찾지 못할 수 있다는 단점은 해결되지 않습니다.

 
 
 
 
 
 

RLS(Recursive Least Squares)


RLS는 과거의 데이터를 통해서 현재의 데이터를 예측하고 그 오차를 줄여나가는 알고리즘이다. 그래서 시계열 데이터에서 주로 사용되는 알고리즘입니다. RLS는 표현에서 보이듯 재귀(Recursive)방법이 사용되는데 이를 통해서 과거 데이터에 대한 영향력을 설정할 수 있습니다. 이를 'Forgetting Factor'라고 합니다.
 
앞서 이야기한 OGD, SGD에 비해서 방대한 양의 데이터를 다루게 된다면 시간이 오래걸릴 수 밖에 없습니다. 그런데 이를 해결 할 수 있는 방법이 좀 전에 이야기한 'Forgetting Factor'를 이용해 먼 과거의 데이터의 영향력을 평가하여 사용하지 않는 방법이 있습니다.
 
RLS에는 한계점이 존재하는데 시계열 데이터 중에서도 과거의 데이터가 큰 영향력을 가진 데이터가 존재한다면 'Forgetting Factor'를 수정할 필요가 있습니다. 그렇게 되면 앞서 이야기한 많은 양의 데이터를 처리할 때 시간을 단축하는 방법이 없어지게 됩니다.
 
그럼에도 시계열 데이터에서 훌륭한 옵티마이저로 RLS가 선택되는 이유는 이러한 예외적인 상황이 없는 데이터라면  과거 데이터에 대한 설명이 가능한 실시간 데이터 처리에서 속도와 정확도에서 가장 효과적인 방법이기 때문입니다.

 

 

 

 

 

딥러닝에 대한 잘못된 이해! ㅠ 링크를 통해 옵티마이저에 대해서 이해하시면 됩니다.

(+)옵티마이저에 대한 개념이 정확하게  잡히지 않아서 추가적으로 공부하였습니다.

우선 옵티마이저라는 것은 위에서 설명했듯 가중치를 조절하며 학습하는 알고리즘입니다. 여기서 의문이었던 점은 딥 러닝 분야에서도 옵티마이저가 사용되고 있는데 딥 러닝에서는 역전파 과정을 통해서 가중치를 업데이트 한다고 알고 있었기 때문에 둘의 관계에 대해서 궁금증이 생겼습니다. 그래서 이 역전파와 옵티마이저가 같은 개념인가 생각했지만 둘은 다른 개념이라고 합니다. 딥 러닝 분야에서는 역전파 과정을 통해서 먼저 가중치 업데이트가 이뤄진다고 합니다. 그런데 이 업데이트된 가중치가 항상 최적일 수는 없다고 합니다. 그럴때 최적의 가중치를 찾아줄 필요가 있는데 여기서 옵티마이저가 그 역할을 한다고합니다. 딥 러닝 모델이 아닌 모델의 경우에는 설정한 이 옵티마이저가 가중치 업데이트를 전담하기 때문에 어떤 옵티마이저를 선태하는지도 모델 성능을 좌지우지 할 수 있는 중요한 요소라고 합니다.(딥 러닝에서도 옵티마이저 선택은 중요한 요소중 하나입니다..!)

반응형