안녕하세요
오늘은 머신러닝의 주요 개념 중 '최적화'에 대해 알아보겠습니다.
앞서 데이터를 정확하게 분석, 예측하기 위한 여러가지 모델 선정 방법과 모델이 분석한 예측값이 정확한지, 잘 표현되었는지 손실에 대해 계산하는 손실함수에 대해 설명드렸습니다. 이번에는 손실함수를 이용하여 모델이 학습을 하는 방법을 알아보겠습니다. '최적화'란 손실함수의 결과값을 최소화하는 모델의 인자를 찾는 것입니다.
대표적으로 '경사하강법', '뉴턴/준뉴턴 방법', '확률적 경사하강법', '역전파'가 있습니다.
'경사하강법'은 임의의 점을 선정한 후 경사를 따라가다가 최저값에 도달하도록 하는 방법입니다. 가장 간단한 최적화 방법 중 하나입니다. 경사값을 구하는 방법은 함수의 1차 미분값으로 구할 수 있습니다. 경사는 함수의 방향을 설정하고,
기울기는 학습률 (또는 스텝 크기)에 의해 결정됩니다. 학습률이 크면 변화가 많아 빠른 시간 내 학습을 진행할 수 있습니다. 그러나 최소값 근처에서 안정적이지 못한 모습을 보일 수 있습니다. 학습률이 작다면 학습 진행 속도는 느리지만, 최소값에 도달하는 형태 더 안정적일 것입니다.
'뉴턴/준뉴턴 방법'은 임의의 학습률을 사용하며, 1차 미분값과 2차 미분값을 활용하여 학습을 업데이트합니다. 뉴턴 방법은 경사하강법보다 빠른 최적화 속도를 보이지만 계산이 어려워 많이 사용되지는 않습니다.
준 뉴턴 방법은 1차 미분값을 활용해 2차 미분값을 근사해서 사용합니다. 대표적인 방법으로 'BFGS'와 'LBFGS'가 있습니다. Quasi-Newton 방법 중 가장 많이 쓰이는 알고리즘으로, 특정 경계 내에서 파라미터 학습에 용이합니다.
이 두가지 방식은 데이터가 많지 않을 때 효과적입니다.
'확률적 경사하강법(SGD)'은 요즘과 같이 데이터 많아지면서 많이 사용되는 최적화 방법입니다. 이 방법은 모든 손실함수와 미분값을 구하지 않고 일부 데이터만 분석하여 근사값으로 계산합니다. 일부 데이터를 선택하는 방법에는 '데이터를 처음부터 끝까지 하나씩 업데이트하는 SGD'와 '미니배치 SGD'가 있습니다. 첫 번째 방법은 데이터를 순차적으로 선택하여 미분값을 계산, 손실함수를 수렴시킵니다. 또는 정해진 숫자만큼 임의 선택하여 손실함수를 계산합니다. 그러나 이 방법은 전체 데이터를 활용한 1차 미분값보다 부정확한 단점이 있습니다. 미니배치 SGD는 데이터를 랜덤 선택하여 1차 미분값의 평균을 구합니다. 최근 많이 사용되는 방법입니다. 전반적으로 확률적 경사하강법은 말 그대로 확률적이기 때문에 시간은 단축시킬 수 있으나, 선택하는 데이터의 수나 학습률에 따라 미분값이 불안정하게 됩니다. 현재 이 방법을 효과적으로 활용하기 위한 연구가 이루어지고 있습니다.
'역전파' 방법은 딥러닝에서 사용되는 방법으로, 한족 방향으로 층층이 연결된 구조에서 사용됩니다. 한 번에 손실함수를 계산하는 것이 아니라 계층별로 계산하여 업데이트 합니다. '순방향 패스'와 '역방향 패스 방법'이 있습니다. 순방향 패스는 입력-출력 순으로 파라미터를 입력하여 계산합니다. 역방향 패스는 출력-입력 순으로 에러를 계산합니다.
'최신 최적화 방법'으로 미분값의 변화 추이를 이용해서 학습률을 자동 조절하는 방식이 있습니다. 'Adam' 와 'AdaGrad' 입니다. Adam은 과거 미분값의 방향과 분산을 계속 가중평균 내면서 효율적으로 업데이트 합니다. AdaGrad는 미분값의 크기를 추적하여 학습률을 데이터에 적응하면서 학습을 수행합니다.
모델이 손실함수를 계산하여 최적의 값을 찾을 수 있도록 하는 최적화 단계, 계산을 최소화하고 정확도를 최대화하는 효율적인 모델과 손실함수가 필요한 과정입니다. 구체적인 최적화 계산 과정까지 다루지는 않았으나, 머신러닝에서 최적화를 왜 하는지 어떤 방법들로 구성하는지 개념을 이해하는 것이 중요합니다. 이후에 각각의 방법을 구체적으로 다루도록 노력하겠습니다. 다음에는 머신러닝의 주요 개념으로 모델의 평가에 대해 알아보겠습니다.
감사합니다.
'머신러닝' 카테고리의 다른 글
[머신러닝 입문]머신러닝 주요 모델 - 데이터형 (0) | 2020.03.31 |
---|---|
[머신러닝 입문]머신러닝 주요 개념-모델 평가 (0) | 2020.03.29 |
[머신러닝 입문]머신러닝 주요 개념 : 손실함수 (0) | 2020.03.27 |
[머신러닝 입문]머신러닝의 주요 개념-모델 (0) | 2020.03.26 |
[머신러닝 입문]머신러닝의 관점과 기법 (0) | 2020.03.24 |