이번 포스팅에서는 정규화(Normalization)에 대해 정리했다. 정규화란 데이터를 특정 범위로 변환하여 모델의 학습을 돕는 과정으로, 다음과 같은 목적으로 사용된다.
- 스케일 조정: 다양한 특성들이 서로 다른 범위나 단위를 가질 때, 이러한 차이가 모델의 성능에 부정적인 영향을 미칠 수 있다. 예를 들어, 거리 기반 알고리즘(예: K-Nearest Neighbors, SVM 등)은 특성의 스케일에 매우 민감하므로, 모든 특성을 동일한 스케일로 조정하는 것이 중요하다.
- 수렴 속도 개선: 경사 하강법과 같은 최적화 알고리즘은 스케일이 조정된 데이터에서 보다 더 빠르게 수렴한다.
- 수치 안정성 개선: 일부 알고리즘(예: 로지스틱 회귀, 심층 신경망 등)은 입력 값의 크기가 클 경우 수치 안정성 문제를 겪을 수 있다.
- 모델 해석력 개선: 정규화된 데이터에서 학습된 모델은 각 특성이 목표 변수에 미치는 상대적 영향력을 쉽게 이해할 수 있다.
정규화에는 여러가지 방법이 있는데, 각각의 역할이 다르지만 영어를 번역하면 모두 정규화이기 때문에 유의해야한다. 아래에 개별 방법의 특징에 대해 정리해보았다.
Normalization
- 값의 범위(Scale)을 0~1 사이의 값으로 바꾸는 것 ex) Min-Max Scaler
- 학습 전에 Scaling
- 머신러닝에서 scale이 큰 feature의 영향이 비대해지는 것을 방지
- 딥러닝에서 Local Minima에 빠질 위험을 감소, 학습 속도 향상
- Local Minima : Graident Descent(경사 하강법)을 통해 Cost Function(비용 함수)의 최소값을 탐색하는 과정에서 극소값(Global Minima)에 다다르지 않았는데 기울기가 0이 되는 현상
- Local Minima는 Normalization 뿐만 아니라, 다양한 Optimizer(adagrad, Adam,.SGD 등)의 기법을 사용해 방지
Standardization
- 값의 범위(Scale)를 평균 0, 분산 1이 되도록 변환 ex) StandardScaler
- 학습 전에 Scaling
- 머신러닝에서 scale이 큰 feature의 영향이 비대해지는 것을 방지
- 딥러닝에서 Local Minima에 빠질 위험을 감소, 학습 속도 향상
- 정규 분포를 표준 정규분포로 변환하는 것과 동일, 표준화라고 부르기도 함
- Z-score(표준 점수) : 표준 편차를 단위로 보았을 때 측정치가 평균에서 얼마만큼 벗어났는지를 확인, 숫자가 클수록 outlier일 확률이 높음
Regularization

- Weight를 조정하는데 규제(제약)를 거는 기법으로, 모델의 특정 가중치가 과도하게 커지지 않도록 하여 일반화 성능을 제고
- Overfitting(과적합)을 막기 위해 사용
- L1 : L1 규제는 손실 함수에 가중치의 절대값인 L1 norm을 추가한다. 규제가 커질 수록 훈련 데이터의 손실과 검증 데이터의 손실이 커지고(과소적합), 규제가 커질 수록 가중치 값이 0에 가까워진다. 가중치가 0인 중요하지 않은 특성들을 제외해줌으로써 모델에서 중요한 특성이 무엇인지 알 수 있게 한다. 알파값의 조절을 통해 몇몇 가중치들은 0으로 수렴하고, 이에 따라 feature의 수도 감소한다.
- L2 : L2 규제는 손실 함수에 가중치에 대한 L2 norm의 제곱을 더한다. L1 규제와 비슷한 양상을 보이나, 규제가 강해 과소 적합이 심해지지 않는 특성을 가지고 있기 때문에 L2 규제를 많이 사용한다. 가중치의 절댓값을 가능한 작게 만드는 작업을 하며, 이를 Weight decay라고 한다. Weight decay는 특정 가중치가 비이상적으로 커지고 그것이 학습 효과에 큰 영향을 주는 것을 방지한다.
위의 3가지는 기계학습에서 데이터를 Scaling 하는 방법이다. 3가지 외에도, 신경망에서 사용하는 normalization도 간단하게 정리했다.
Internal Convariant Shift(내부 공변량 변동)

ICS는학습 과정에서 각 레이어의 입력 데이터 분포가 바뀌는 현상을 의미한다. 이 현상은 딥러닝 모델의 학습 속도를 저하시키고, 모델의 성능을 떨어트릴 수 있다. 딥러닝 모델은 여러 층으로 구성되어 있으며, 각 층은 이전 층에서 받은 출력을 입력으로 사용한다. 초기에는 각 층의 가중치가 무작위로 초기화되므로, 특정 층의 가중치가 업데이트될 때마다 그 다음 층에 전달되는 입력 데이터의 분포도 함께 바뀐다.
예를 들어, 첫 번째 층에서 가중치가 크게 변경되면 두 번째 층에 전달되는 입력 값들이 크게 변할 수 있다. 이렇게 되면 두 번째 층에서 학습한 정보가 실제로 유효하지 않을 수 있게 된다. 바꿔 말하면, 각각의 네트워크 계층이 앞선 계층들로부터 받아들이는 데이터 분포가 계속해서 바뀌기 때문에, 해당 네트워크 계층은 자신에게 들어오는 데이터 분포를 파악하기 위한 지속적인 조정이 필요하다. 이것은 학습 속도를 저하시키고 최적화 문제를 복잡하게 만드는 문제가 있다. 이러한 문제를 해결하기 위해 고안된 방법이 batch normalization 이다.
Batch normalization

- Batch normalization은 데이터가 다양한 분포를 가질 때, 이를 평균과 분산을 활용해 정규화 하는 방법
- 각 layer에서 활성화 함수를 통과하기 전에 mini-batch 단위로 정규화 실행
- Gradient Vanishing(기울기 소실)과 Gradient Exploding(기울기 폭주)를 방지하는 방법으로도 활용, ICS 문제 해결 및 학습 속도를 높이는 방법
- 신경망이 깊어지는 경우에도 학습이 가능, Regularization 효과가 있어 L1, L2, Dropout 생략 가능
- Gradient의 Scale이나 초기 값에 대한 의존성이 줄어 Learning_rate를 높게 설정할 수 있음
- 하지만, batch_size 만큼 데이터를 사용하기 때문에 batch에 대한 과도한 의존성 문제 발생
- 예를 들어, Sequence Data를 사용하거나 batch size가 작은 경우 전체 Dataset을 표현하는 데 어려움이 있음
Layer normalization


- Layer norm의 문제점을 해결하기 위해 batch에 있는 모든 Feature의 평균과 분산을 구함
- 모든 Channel의 평균과 분산을 구하기 때문에 1개 batch에서도 동작 가능
- 개별 hidden node의 feature별 평균과 분산이 아닌 hidden layer 전체의 평균과 분산으로 normalization 진행, 이후 과정은 batch norm과 동일
- Sequence 길이를 자유롭게 변경할 수 있어서, RNN에서도 사용가능
그 외 방법론
- Instance Normalization : Image Style Transfer의 성능을 제고하기 위해 등장한 방법으로, batch 단위가 아닌 각 이미지에 대해 개별적으로 normaliztion을 진행
- Image Style Transfer : 이미지의 내용을 다른 스타일로 재구성하는 Computer vision 기술
- Group Normalization : Batch Normalization이 batch size에 따라 성능이 달라지는 문제를 해결한 방법으로, batch size가 극도로 적은(1 혹은 2) 상황에서는 batch normalization보다 좋은 성능을 보인다.
이처럼 정규화에는 여러가지 방법이 있다. 단순히 하나의 방법을 사용하는 것이 아니라, 프로젝트에서 사용하는 데이터나 모델의 구조에 맞는 다양한 방법을 고민해야 한다.
'Data Science' 카테고리의 다른 글
| [Pytorch] 가중치 초기화 (0) | 2023.10.26 |
|---|---|
| [Linux] 명령어 정리 (0) | 2023.10.22 |
| [Metric] 분류/시계열 (0) | 2023.10.11 |
| [Metric] 회귀 (0) | 2023.10.09 |
| [NLP] LLM Benchmark (0) | 2023.10.03 |