본문 바로가기

딥러닝 & 머신러닝/머신러닝 지식

정규화(Normalization)의 목적과 방법들

# 정규화를 왜 해야 할까요? 정규화의 방법은 무엇이 있나요?

 

우리가 아무리 좋은 데이터를 갖고 있어도 모델에 학습시키기 위해선 스케일링(Scaling)을 해줘야 합니다. 머신러닝 모델은 데이터가 가진 feature(특징)을 뽑아서 학습합니다. 이때 모델이 받아들이는 데이터의 크기가 들쑥날쑥하다면 모델이 데이터를 이상하게 해석할 우려가 있습니다. 예를 들어 아파트 가격을 예측한다고 합시다. 아파트 가격에 영향을 미치는 요소로는 지어진 지 몇 년이나 되었는지, 현재 가격은 얼마인지, 연 가격 상승률은 얼마인지 등등이 있을 것입니다. 각각을 5, 1억, 0.1이라고 칩시다. 그렇다면 모델이 세 가지의 feature를 보고 학습할 땐 5와 0.1은 무시하고 1억만 중요하게 볼 수도 있겠죠?

 

저는 실제로 이러한 문제를 겪은 적이 있습니다. ‘kp지수 예측 경진대회’에 참여했을 때 많은 데이터 전처리가 필요했는데, 당시에 이러한 정규화를 할 생각을 못 해 모델의 성능이 그다지 좋지 않았던 기억이 있습니다. 예를 들면 300이라는 값을 갖는 feature와 0.5라는 값을 갖는 feature를 함께 쓴 꼴이었습니다. 따라서 이런 문제가 발생하지 않도록 모든 데이터가 같은 정도의 스케일(중요도)로 반영되도록 해주는 것이 정규화의 목표입니다. 다시 말하면, 머신러닝 모델에 주입되는 데이터들을 균일하게 만드는 모든 방법이라고 할 수 있습니다.

 

이제 정규화 방법들을 소개해드리겠습니다.

 

# Min-Max Normalization (최소-최대 정규화)

 

먼저 Min-Max Normalization(최소-최대 정규화)이 있습니다. 이 방법은 모델에 투입될 모든 데이터 중에서 가장 작은 값을 0, 가장 큰 값을 1로 두고, 나머지 값들은 비율을 맞춰서 모두 0과 1 사이의 값으로 스케일링해주는 것입니다. 따라서 만약 X라는 값을 Min-Max Normalization 시킨다면 X는 (X - MIN) / (MAX-MIN)라는 값이 될 것입니다. 저 같은 경우는 태양 이미지를 처리할 때 각 이미지의 픽셀값에 대해 Min-Max Normalization을 시켜서 모델에 넣었던 기억이 납니다.

 

하지만 Min-Max Normalization에는 이상치(outlier)에 대해 취약하다는 점이 있습니다. 예를 들어 100개의 값이 있는데 그중 99개는 0과 40 사이에 있고, 나머지 하나가 100이면 어떨까요? 그러면 99개의 값이 모두 0부터 0.4 사이의 값으로 변환되지만 단 하나뿐인 100은 1.0으로 변환됩니다. 결국, 데이터의 분포가 0부터 0.4 사이의 값들로 치우치게 됩니다. 만약 100개 모두 0과 40 사이에 있었다면 0은 0으로, 40은 1로 변환되어 좀 더 고른 형태의 데이터 분포를 기대할 수 있었을 겁니다.

 

#  Z-Score Normalization (Z-점수 정규화)

 

이러한 문제를 해결할 수 있는 Z-Score Normalization(Z-점수 정규화)이라는 방법이 있습니다. 고등학교 통계 시간에 배웠던 표준화 작업을 한다고 보면 됩니다. 그래서 그런지 어떤 글에서는 Min-Max Normalization을 정규화, Z-Score Normalization을 표준화라고도 합니다. 여기선 그냥 둘 다 정규화의 기법들로 보고 설명하려고 합니다. 우리는 이 방법을 이용해 이상치에 해당하는 데이터의 문제를 피할 수 있습니다.

 

Z = (X – 평균) / (표준편차)를 통해 X라는 값을 Z라는 Z-점수로 바꿀 수 있습니다. 어떤 데이터가 표준 정규 분포(가우시안 분포)에 해당하도록 값을 바꿔준다고 보면 될 것 같습니다. 그래서 데이터 X가 평균값과 같다면 0으로 정규화되겠지만, 평균보다 작으면 음수, 평균보다 크면 양수로 나타납니다. 이때 계산되는 음수와 양수의 크기는 그 feature의 표준편차에 의해 결정됩니다. 그래서 만약 데이터의 표준편차가 크면, 즉 값이 넓게 퍼져있으면, 정규화되는 값이 0에 가까워집니다. 분모에 표준편차가 들어가고 분자에는 원래 데이터의 값에서 전체 데이터의 평균이 빠진다는 것을 유념하시면 이해가 빠를 것 같습니다.

 

위 그림은 불균형한 데이터 분포를 평균이 0, 표준편차가 1이 되도록 변환한 것을 나타냅니다. 즉, 각각의 축으로 투영(projection)시켰을 때 정규분포가 되도록 한다는 것입니다.

 

지금까지 데이터 정규화에 대해 알아보았습니다. 한줄로 요약하자면, 데이터 정규화는 어떤 feature가 다른 feature를 지배하지 못하도록 만드는 과정이고, 결국 모델이 더 잘 알아들을 수 있도록 데이터를 정제하는 과정이라고 할 수 있겠습니다.

 

정규화 기법들 중 L1 정규화, L2 정규화라는 기법이 있는데, 이것들은 정규화라고도 하고 제가 배울 땐 규제(Regularization)라는 용어로 배웠기 때문에 다른 게시물에서 설명하도록 하겠습니다.