새소식

반응형
AI/Machine Learning

[AI] 하이퍼파라미터의 원리와 이해

  • -
반응형

AI 로고 이미지입니다.
AI

 

하이퍼파라미터의 원리와 이해


 

기계 학습에서 하이퍼파라미터(Hyperparameter)는 모델 학습 과정을 조절하는 데 사용되는 매개변수이다. 이는 모델의 구조나 학습 알고리즘에 직접적으로 영향을 미치지 않으며, 모델 학습을 조절하거나 최적화하는 데 사용된다. 일반적으로 하이퍼파리미터는 모델을 학습하기 전에 사전에 설정되어야 하며, 학습 중에는 조절되지 않는다.

 

📢 일반 파라미터와 하이퍼파라미터의 차이점은?

일반 파라미터는 모델이 학습하면서 조절되고 최적화되는 매개변수이며, 하이퍼파라미터는 모델의 학습 프로세스를 제어하고 조절하기 위한 고정된 매개변수이다. 하이퍼파라미터는 모델 학습 이전에 사람이 수동으로 설정하거나 조정하는 것이 일반적이다.

 

다음은 하이퍼파라미터의 한 종류인 Loss에 대해 알아보자.

 

Loss


Loss(손실)는 모델이 예측한 값과 실제 데이터 간의 차이를 나타내는 지표이다(y - y-hat). 모델이 학습하는 동안 이 차이를 최소화하려고 노력한다. 그리고 손실은 모델이 얼마나 정확하게 예측하고 있는지를 평가하는 데 사용되며, 이 값을 최소화하는 것이 학습의 목표이다. (참고 : 기계는 어떻게 학습할까?)

 

Loss를 계산하는 방법에는 여러 종류가 있지만 이번 시간에는 많이 사용되는 MSE, MAE, Huber 세 가지 종류에 대해 알아보자. 

 

MSE(Mean Squared Error)


 

y -  ŷ  

 

MSE는 평균 제곱 오차의 약어로, 머신러닝 및 통계학에서 모델의 예측값과 실제값 사이의 차이를 측정하는 데 사용되는 대표적인 손실 함수이다. 주로 회귀 문제에서 모델의 성능을 평가하는 데에 많이 활용된다. 

 

MSE는 각 데이터 포인트에서 실제 값(y)과 예측 값( ŷ)의 차이의 제곱의 평균이며, 두 값의 차이에 비례하여 기울기가 커진다.(차이의 제곱을 하는 이유는 음수를 양수로 변환하기 위한 것이기 때문이다.)

 

 

 

MSE이 대한 이미지입니다.
MSE

 

위의 그림에서 오른쪽 그림은 y와 ŷ의 차이, 즉 에러에 따라 Loss 값이 어떻게 변화되는지 그래프로 확인할 수 있다. MSE 그래프의 특징은 에러의 절대값의 크기가 커짐에 따라 기울기의 절대값도 점점 커진다는 것이다. 마찬가지로, 에러의 절대값의 크기가 작아질수록 기울기의 절대값도 작아진다. 

 

기울기는 영어로 Gradient라고 하는데 Loss에서 그레이디언트는 옵티미제이션이 이러한 기울기를 사용하여 파라미터를 업데이트하기 때문에 매우 중요하다. 

 

MAE(Mean Absolute Error)


 

|y - ŷ|

 

MAE는 평균 절대 오차의 약어로, 회귀 문제에서 모델과 예측 값과 실제 값 간의 평균적인 차이를 측정하는 데 사용되는 손실 함수이다. 

 

MAE는 각 데이터 포인트에서 예측 값과 실제 값의 절대 값 차이를 계산하고, 이를 모든 데이터 포인트에 대해 평균을 낸 값으로 정의된다. 차이에 절대 값을 취하는 이유는 마찬가지로 음수를 양수로 변환하기 위함이다. 

 

 

MAE에 대한 이미지입니다.
MAE

 

위의 이미지에서 MAE가 계산되는 과정을 알 수 있다. 그리고 오른쪽 그래프를 보면 에러에 따라 로스 값이 어떻게 변환하는지 확인할 수 있다. MAE 그래프의 특징은 에러가 커지던 작아지던 기울기는 항상 마이너스 1 또는 1로 일정하다는 것이다. 에러가 음수이면 기울기는 항상 마이너스 1이고, 에러가 양수이면 기울기는 항상 플러스 1이다. 

 

Huber


휴버 손실(Huber loss)은 회귀 문제에서 사용되는 손실 함수 중 하나이다. 휴버 손실은 앞서 살펴보았던 평균 제곱 오차(Mean Squared Error, MSE)와 평균 절대 값 오차(Mean Absolute Error, MAE) 사이의 중간 지점에 위치한 손실 함수로써, 이상치(outliers)에 대해 민감하지 않으면서도 안정적인 훈련을 제공한다.

 

Huber 손실 함수에 대한 이미지입니다.
Huber

 

Huber의 식은 위와 같이 다소 복잡한데, 사실 위의 식을 정확히 이해할 필요는 없다고 생각한다(물론 이해하면 좋겠지만). 우측의 그림을 보고 Huber 그래프의 특징을 한 번 해석해 보자. 우측 그림을 보면 라벨 Y 값과 모델이 예측한 Y 값의 차의 크기가 작을 때, Huber는 MSE와 비슷하다. 따라서 에러의 크기가 작을 때는 MSE처럼 차이에 비례하여 기울기가 커지게 되는 것이다. 

 

반면에, Y와 예측한 Y의 값의 차의 크기가 클 때는 MAE와 비슷하다. 따라서 에러의 크기가 클 때는 MAE처럼 에러 값에 상관없이 기울기가 항상 +1 또는 -1로 일정하게 된다. 즉, Huber는 MSE에서 기울기가 무한히 커지는 것을 제한하도록 변형된 것이다. 

 

 

이렇게 Loss의 3 종류인 MSE, MAE, Huber에 대해 간단하게 배워봤다. 짐작했겠지만 이 3개 외에도 더 많은 종류의 Loss가 존재한다. 하지만 해당 포스팅은 머신러닝의 대한 기초적인 이론을 다루기 때문에 이 3개만 살펴보아도 충분하다고 생각한다. 

 

Opimizer


저번 시간에 우리는 옵티미제이션에 대해 배운 적이 있다. 다시 언급하자면, 옵티미제이션은 Loss가 줄어들도록 모델의 파라미터를 업데이트하는 것이다. 그리고 이러한 업데이트를 수행하는 함수옵티마이저라고 한다. 옵티미제이션도 하이퍼 파라미터 중 하나이며, 여러 종류가 존재하지만 그중 가장 기본이 되는 것은 경사하강법이다. 대부분의 옵티마이저들이 경사하강법에 기반을 두고 파생되었다. 그래서 이번 시간에는 경사하강법에 대해 중점적으로 알아보는 시간을 가져보자.

 

경사하강법에 대한 이미지입니다.
경사하강법

 

우선 위의 그림에서 x축은 파라미터 및 가중치이며, y축은 로스를 나타낸다. 앞서 배웠다시피 파라미터를 수정하여 로스 값이 줄어들 수 있도록 하는 것이 목표이다. 그리고 초기 파라미터는 랜덤으로 설정된다. 위의 그림에서 볼 수 있다시피 초기의 파라미터는 0.1로 설정되었고, 이때 로스는 30이라고 가정해 보자. 이제 로스를 줄이기 위해서 파라미터를 과연 어떻게 수정해야 할까?

 

사실 이것은 그리 단순한 문제는 아니다. 만약 파라미터 값에 따라 로스가 어떻게 달라지는지 그래프를 알 수 있다면 정말 좋을 것이다. 그래프를 알 수 있다면 로스가 가장 작은 값일 때의 파라미터를 찾는 것이 매우 쉽기 때문이다. 하지만 문제는 이러한 그래프를 알 수가 없다는 것이다. 몇몇 단순한 모델의 경우 그래프를 알 수 도 있겠지만, 딥러닝과 같이 복잡한 모델을 쓰는 경우 이러한 그래프를 찾는 것은 불가능하다. 

 

그래디언트 = -0.3
Gradient = -0.3

 

한 가지 다행인 것은 특정한 파라미터 값에서 로스 그래프의 기울기를 구하는 방법은 이미 알려져 있다는 것이다. 그림을 보면 파라미터가 0.1일 때 로스는 30이고 이때의 기울기는 -0.3이다. 전체 그래프를 알지는 못하지만 기울기를 통해 그래프의 국소적인 부분은 알 수 있는 것이다. 

 

그럼 위의 그림과 같이 파라미터가 0.1일 때 기울기가 음수라는 것을 알게 되었을 때 지금보다 로스 값을 감소시키려면 파라미터 값을 0.1보다 더 크게 해야 할까? 아니면 더 작게 해야 할까? 정답은 파라미터 값을 0.1보다 더 크게 해서 그래프의 우측 방향으로 이동시켜야 한다. 따라서 기울기의 부호가 반대 방향인 + 방향으로 파라미터를 수정해야 한다. 

 

경사하강법에서 파라미터가 값을 0.4로 수정한 이미지입니다.
파라미터 값을 0.4로 수정

 

따라서, 위의 이미지와 같이 파라미터를 0.1에서 기울기 -0.3을 뺀 0.4로 수정해 보자. 다시 한번 강조하지만, 기존 파라미터에서 기울기 값을 더하는 것이 아니라 빼야 한다. 기울기가 음수일 때 파라미터 값이 커져야 로스가 감소하기 때문이다. 

 

파라미터를 0.4로 수정했을 때 로스 값이 20으로 감소하는 걸 보여주는 이미지입니다.
로스 값이 20으로 감소

 

파라미터가 0.4로 수정되었을 때, 로스는 기존 30에서 20으로 줄어들게 된 것을 확인할 수 있다. 하지만 앞서 배웠다시피 모델은 업데이트를 한 번만 하지 않고 여러 번 반복해야 한다.  

 

파라미터를 0.4로 수정되었을 때 기울기는 -0.1인 것을 확인할 수 있는 이미지입니다.
기울기 -0.1


파라미터를 업데이트하기 위해 기울기를 다시 계산해야 한다. 이번에는 기울기가 -0.1로 계산되었다고 가정해 보자. 이전 기울기는 -0.3이었던 것에 반해 이번 기울기는 -0.1로 덜 가파르다는 걸 확인할 수 있다. 이 것은 파라미터가 이전보다는 적게 수정되어야 함을 의미하게 된다. 기울기의 크기에 비례하여 파라미터 값이 수정되기 때문에 이전보다 조금만 수정될 것이다. 그럼 앞선 과정과 마찬가지로 파라미터에서 기울기를 빼줘 보자. 

 

파라미터를 계속 업데이트 하여 결국 로스 값이 변경되지 않을 때까지 반복합니다.
업데이트를 계속 반복

 

파라미터를 두 번 수정하여 현재는 0.5가 되었다. 이 과정을 반복하여 파라미터를 계속 수정할 것이다. 그럼 해당 과정을 반복하다 보면 더 이상 로스가 줄어들지 않는 시점이 오게 된다. 이렇게 로스가 줄어들지 않게 되면 모델 학습을 중단하는 것이다. 

 

지금까지 경사하강법에서 파라미터를 어떻게 수정하는지 원리를 알아보았다. 경사하강법 외에 다른 옵티마이저들의 작동원리는 조금 다르지만 대부분 이와 비슷하다. 

 

위의 그림들에서 살펴보았듯이 기울기를 이용해서 로스를 하강시키기 때문에 경사하강법이라고 불리게 되었다. 사실 지금까지 보았던 예시는 설명의 편의를 돕기 위해 약간의 거짓이 포함되어 있다. 정확한 경사하강법의 식은 아래와 같이 되어있다. 아래의 그림과 같이 기존의 파라미터는 기울기를 빼서 새로운 파라미터로 업데이트된다. 그런데 사실은 기울기의 학습률을 곱하여 새로운 파라미터로 업데이트한다. 학습률은 기계 학습에서 가장 중요한 하이퍼 파라미터 중 하나이다. 

 

경사하강법 업데이트 수식에 대한 이미지입니다.
경사하강법 업데이트 수식

 

기호 의미
w 현재 파라미터(가중치)값
a 학습률(learning rate)
w Loss 손실 함수에 대한 파리미터 w의 기울기(그래디언트) 

 

학습률은 파라미터를 업데이트할 때 강도를 조절하는 역할을 한다. 이에 대해 좀 더 자세히 살펴보자. 앞에서 본 것처럼 경사하강법은 기울기의 학습률을 곱하여 파라미터를 업데이트한다. 이것은 파라미터가 지나치게 수정되어 모델이 불안정해지는 것을 막기 위함이다. 또한 학습률은 파라미터가 수정되는 강도를 조절할 수 있다. 

 

작은 학습률을 사용하면 파라미터가 조금씩 수정되고, 큰 학습률을 사용하면 파라미터가 크게 수정된다. 학습률이 작으면 파라미터는 안정적으로 수정되지만 학습 속도는 느려지게 된다. 또한, 학습률이 크면 파라미터는 불안정하게 수정되지만 학습 속도는 빨라진다. 그래서 적절한 학습률을 통해 학습 속도와 학습의 안정성 사이에 균형을 맞추는 것이 중요하다. 

 

학습률은 일반적으로 0.001에서 0.142로 설정한다. 또한, 학습 초기에는 학습률을 높게 설정하고 학습이 진행될수록 학습률을 점점 작게 설정하는 것이 좋다. 학습 초기에 학습률을 크게 하는 이유는 전역적 탐색을 유도하여 로스를 빠르게 하강시키기 위한 것이다. 그리고 학습 후기에 학습률을 작게 하는 이유는 구소적 탐색을 유도하여 로스를 안정적으로 수렴시키기 위함이다. 

 

BackPropagation


최근 인공지능에서 사용하는 모델은 많게는 수천억 개의 파라미터를 가지고 있다. 역전파 알고리즘은 이러한 수많은 파라미터들의 그레이디언트를 빠르게 계산할 수 있도록 도와주는 알고리즘이다. 딥러닝에서 사용하는 모델은 역전파 알고리즘을 사용하여 파라미터들을 최적화한다. 

 

Batch Size


이번에는 배치 사이즈에 대해 알아보자. 먼저 전체 데이터를 여러 개로 분할하여 만든 소규모 데이터를 미니 배치(Mini Batch)라고 한다. 

 

mini batch에 대한 이미지입니다.
mini batch

 

그리고 미니 배치 포함된 데이터의 개수를 배치 사이즈라고 한다. 예를 들어, 전체 데이터가 640개이고 배치 사이즈가 64이면 미니 배치의 개수는 10개이다. 일부 모델의 경우 파라미터를 업데이트할 때 전체 데이터를 사용하지 않고 미니 배치를 사용한다. 전체 데이터로 한 번만 업데이트하는 것이 아니라 미니 배치를 사용하여 여러 번 업데이트를 진행하는 것이다. 

 

특히, 딥러닝 모델은 이러한 방식을 주로 사용한다. 그리고 배치 사이즈는 일반적으로 8, 16, 32, 64, 128 등의 2의 제곱수로 설정한다. 이렇게 미니 배치로 업데이트를 하는 이유는 다음과 같다. 

목적 이유
메모리 관리 데이터를 메모리에 한꺼번에 올리는 것은 컴퓨터에 무리가 갈 수 있다.
학습 속도 개선 전체 데이터로 여러번 업데이트하여 학습 속도가 빠르다.
모델 성능 일반화 데이터의 다양성을 보장하여 과적합(Overfitting)을 방지할 수 있다.

 

 

Epoch


마지막으로 에포크에 대해 알아보자. 에포크는 기계 학습에서 전체 데이터셋을 한 번 학습하는 것을 의미한다. 전체 데이터에는 여러 개의 미니 배치가 존재하기 때문에 실제로 업데이트하는 횟수는 1회가 아니라 미니 배치의 개수와 같다. 사람은 한 가지 주제에 대해 여러 번 학습해야 그 내용을 잘 이해할 수 있다. 기계도 마찬가지로 한 번만 학습하는 것보다 여러 번 학습하는 것이 좋다. 따라서 일반적으로 한 번의 에포크를 하는 것이 아닌 여러 번의 에포크를 수행하게 된다. 

 

 

예를 들어, 전체 데이터 수가 640개일 때, 배치 사이즈는 64, 에포크를 5로 설정했다고 가정해 보자. 이때 전체 미니 배치의 개수는 10개이고, 이것을 전체 5번 학습함으로 파라미터의 총 업데이트 횟수는 50회가 되겠다. 

728x90
반응형

'AI > Machine Learning' 카테고리의 다른 글

[AI] 기계는 어떻게 학습할까?  (0) 2024.01.15
[AI] 머신러닝이란?  (2) 2024.01.04
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.