Normalization
정규화가 모델 학습과 정확도를 향상하는 방식을 살펴보세요. Min-Max 스케일링, Z-점수 표준화 및 Ultralytics YOLO26 프로젝트에서의 역할을 알아보세요.
정규화는 데이터 전처리의 기본적인 기법으로, 수치형 특성을 표준 범위로 재조정하는 과정을 의미합니다. 머신 러닝 (ML)의 맥락에서 데이터셋에는 연령 범위(0–100)와 소득 수준(0–100,000)처럼 서로 다른 척도를 가진 특성이 포함되는 경우가 많습니다. 이러한 차이를 처리하지 않으면 최적화 알고리즘이 큰 값에 편향되어 수렴이 느려지고 성능이 저하될 수 있습니다. 데이터를 정규화하면 모든 특성이 최종 결과에 비례하여 기여하도록 보장할 수 있으며, 신경망이 더 효율적으로 학습할 수 있습니다.
일반적인 정규화 기법#
데이터를 변환하는 표준 방법에는 여러 가지가 있으며, 각 방법은 서로 다른 분포와 알고리즘 요구 사항에 적합합니다.
- Min-Max 스케일링: 정규화의 가장 직관적인 형태입니다. 데이터를 일반적으로 [0, 1]의 고정된 범위로 재조정합니다. 이 변환은 최솟값을 빼고 범위(최댓값에서 최솟값을 뺀 값)로 나누어 수행합니다. 픽셀 강도가 0에서 255 사이로 제한된 이미지 처리에서 널리 사용됩니다.
- Z-점수 표준화: 정규화와 혼용되는 경우가 많지만, 표준화는 데이터를 평균 0, 표준 편차 1이 되도록 변환하는 것을 의미합니다. 이는 데이터가 가우시안 분포를 따를 때 특히 유용하며, 정규 분포를 가정하는 서포트 벡터 머신 (SVM)과 같은 알고리즘에 필수적입니다.
- 로그 스케일링: 극단적인 이상치를 포함하거나 멱법칙을 따르는 데이터의 경우 로그 변환을 적용하면 값의 범위를 압축할 수 있습니다. 이를 통해 추론 엔진이 대규모 값의 급격한 변동으로 인해 왜곡되지 않고 분포를 더 효과적으로 해석할 수 있습니다.
실제 적용 사례#
정규화는 다양한 산업 분야의 고성능 AI 시스템 파이프라인에서 표준 단계로 사용됩니다.
-
컴퓨터 비전 (CV): 객체 감지 및 이미지 분류와 같은 작업에서 디지털 이미지는 0에서 255 사이의 픽셀 값으로 구성됩니다. 이러한 큰 정수를 네트워크에 직접 입력하면 경사 하강법이 느려질 수 있습니다. 표준 전처리 단계에서는 픽셀 값을 255.0으로 나누어 [0, 1] 범위로 정규화합니다. 이 방법은 일관된 입력을 보장하여 YOLO26과 같은 고급 모델의 학습 안정성을 Ultralytics Platform에서 향상합니다.
-
의료 이미지 분석: 의료 분야의 AI에 사용되는 의료 스캔은 서로 다른 강도 척도를 가진 다양한 장비에서 생성되는 경우가 많습니다. 정규화를 수행하면 MRI 또는 CT 스캔의 픽셀 강도를 환자와 장비가 달라도 서로 비교할 수 있습니다. 이러한 일관성은 정확한 종양 감지에 매우 중요하며, 모델이 밝기 변화가 아니라 구조적 이상에 집중할 수 있도록 합니다.
관련 개념 구분하기#
딥러닝에서 사용되는 유사한 전처리 및 아키텍처 용어와 정규화를 구분하는 것이 중요합니다.
- 배치 정규화와의 비교: 데이터 정규화는 원시 입력 데이터셋이 네트워크에 들어가기 전에 적용하는 전처리 단계입니다. 반면 배치 정규화는 모델 학습 중 네트워크 전체의 계층 사이에서 내부적으로 작동합니다. 학습 과정을 안정화하기 위해 이전 활성화 계층의 출력을 정규화합니다.
- 이미지 증강과의 비교: 정규화가 픽셀 값의 스케일을 변경하는 반면, 증강은 데이터셋의 다양성을 높이기 위해 이미지의 내용 또는 기하학적 구조(예: 뒤집기, 회전 또는 색상 변경)를 변경합니다. Albumentations와 같은 도구는 증강에 사용되며, 정규화는 수학적 스케일링 연산입니다.
구현 예시#
컴퓨터 비전에서 정규화는 파이프라인의 첫 단계인 경우가 많습니다. 다음 Python 예제에서는 NumPy 라이브러리를 사용하여 이미지 데이터를 수동으로 정규화하는 방법을 보여줍니다. 이 과정은 학습 중 Ultralytics YOLO26 데이터 로더에서 자동으로 수행됩니다.
import numpy as np
# Simulate a 2x2 pixel image with values ranging from 0 to 255
raw_image = np.array([[0, 255], [127, 64]], dtype=np.float32)
# Apply Min-Max normalization to scale values to [0, 1]
# This standardizes the input for the neural network
normalized_image = raw_image / 255.0
print(f"Original Range: {raw_image.min()} - {raw_image.max()}")
print(f"Normalized Range: {normalized_image.min()} - {normalized_image.max()}")








