정칙화
딥러닝 정칙화
- 정칙화(regularization): 모델의 과대적합을 막기 위한 방법들
- Weight decay: 파라미터를 업데이트할 때마다 줄임
- Dropout: 일부 파라미터를 훈련에서 배제
- Batch/Layer Normalization: 레이어의 출력값을 정규화
- Label Smoothing: 모형 출력의 목표값을 줄임
검증 성능을 기준으로 훈련 시점을 선택하는 방법은 조기 종료와 모델 체크포인트에서 학습.
weight decay
- 원래의 경사하강법:
- weight decay: 파라미터를 업데이트를 할 때 가중치를 줄이는 것
- 손실 함수에 L2 노름을 추가하고, SGD로 파라미터를 업데이트 한 것과 동일
- 경사하강법 알고리즘에
weight_decay인자- 위 수식의 와 같음(클 수록 더 많이 줄임)
노름 Norm
- 노름(norm): 길이 또는 크기를 일반화한 개념
- Lp 노름

손실 함수에 노름을 추가하면
- L1 정칙화(LASSO): 파라미터를 0으로
- L2 정칙화(Ridge): 파라미터를 전반적으로 작게

드롭아웃 dropout
- 학습 과정에서 배치마다 입력층과 은닉층의 출력값을 무작위로 0으로 대체
- 특정한 특징에 과적합되는 것을 방지하기 위한 정칙화 방법
- 드롭아웃의 비율은 0~1 사이에서 조정
- Keras는 훈련 중 남은 출력값을 배로 보정하는 역 드롭아웃을 사용
- : 드롭아웃 비율
- 예측 시에는 모든 출력값을 그대로 사용하고 별도로 크기를 줄이지 않음

드롭아웃 적용
model = keras.models.Sequential([
keras.layers.Rescaling(1/255),
keras.layers.Flatten(),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dropout(0.5), # 드롭아웃 비율 50%
keras.layers.Dense(10)
])
Normalization
- 넓은 의미로 통계학에서 변수값의 크기를 일정하게 만들어 주는 것
- 대표적인 예로 표준화(standardization):
- : 값
- : 평균
- : 표준편차
- 평균 = 0, 표준편차 = 1이 됨
- 서로 다른 평균과 표준편차를 가진 변수를 비교하기 쉽게 해줌
- Normalization은 "정규화"로 많이 번역하나, regularization과 혼동
- 좁은 의미로 0~1 범위로 변환하는 min-max scaling만을 normalization이라고 쓰는 사람들도 있음
- 이 경우에는 표준화 ≠ normalization
입력 Normalization
- 이미지 입력도 Normalization을 해주면 성능에 도움
- 보통 0
255 범위의 픽셀 값을 -1 ~ +1 또는 01 범위로 normalize - 특징(feature, 이미지의 경우 픽셀값)에 따라 값의 크기가 매우 다른 경우, 특징들의 값의 범위를 비슷하도록 normalize하면 경사하강법에서 진동이 줄어들어 수렴이 더 빨라짐


Batch Normalization
- 각 레이어의 입력도 normalize하면 성능이 향상될 수 있음
- 모형의 입력과 달리 각 레이어의 입력은 학습 과정에서 매번 해줘야 하므로 계산 비용이 높음
- batch 단위로 normalize 하여 효율을 향상
- 종류:
- Batch Norm: 미니배치 전체에 걸쳐 채널별로 normalize
- Layer Norm : 각 사례의 모든 채널을 normalize
- Instance Norm : 각 사례를 채널별로 normalize
- Group Norm : 각 사례의 채널들을 그룹으로 묶어 normalize

Covariance Shift
- 다층신경망에서는 한 은닉층의 출력이 다른 은닉층의 입력이 됨
- 학습 과정에서 각 층의 출력이 변화 → 다음 층의 입력이 변화
- 각 층이 받는 입력이 지속적으로 변화하므로 문제가 됨(covariance shift)
- BN은 이를 방지하여 학습 효율을 높인다는 지적(아니라는 의견도 있음)

BN의 효과
- 포화를 억제
- 신경망의 활성화 함수는 기울기가 0에 가까운 영역이 존재
- 신경망의 출력을 일정 범위로 제한하여 포화를 억제
- 학습 속도 향상
- 높은 학습률에도 학습이 안정적으로 이뤄짐
- 활성화 함수에서 포화되는 영역에 빠지는 문제를 피할 수 있음
- 경사가 사라지거나 폭발하는 문제를 완화
- 정칙화 효과
- 배치에 따라 평균과 표준편차가 달라지므로 출력값에 일정한 오차가 생김
- Dropout과 비슷한 효과 → Dropout을 안 써도 된다 → 학습 속도도 빨라짐
Batch Normalization
model = keras.models.Sequential([
keras.layers.Rescaling(1/255),
keras.layers.Flatten(),
keras.layers.Dense(128, activation='relu'),
keras.layers.BatchNormalization(),
keras.layers.Dense(10)
])
one-hot encoding
- 머신러닝에서 범주형 변수를 표현하는 방법
- 사례마다 변수의 값을 범주의 개수와 같은 길이의 벡터로 표현
- 벡터의 다른 모든 원소는 0(cold)
- 사례의 범주에 해당하는 원소 하나만 1(hot)
- 예: 신문 기사를 정치, 사회, 경제, 문화 네 가지 범주로 분류하는 경우
- 정치 → (1, 0, 0, 0)
- 사회 → (0, 1, 0, 0)
- 경제 → (0, 0, 1, 0)
- 문화 → (0, 0, 0, 1)
- 범주 하나를 제외해서 벡터의 길이를 -1 한 것은 더미 코딩(dummy coding)이라고 함
- 예) 사회 → (1, 0, 0) # 정치는 표시 제외
- 머신러닝에서는 잘 사용하지 않고, 주로 통계에서 사용
label smoothing
- 레이블은 부정확하게 붙어있을 수 있거나 예외적인 사례일 수 있음
- 이러한 데이터에 과적합될 경우 모형의 예측력이 떨어짐
- 원-핫 레이블과 모든 클래스가 같은 균등 분포를 섞는 방법
- 클래스 수가 이고 스무딩 비율이 일 때 변환식:
- , 인 예:
keras.losses.BinaryCrossentropy(label_smoothing=0.15) # 이항 분류
keras.losses.CategoricalCrossentropy(label_smoothing=0.15) # 다항 분류
keras.losses.SparseCategoricalCrossentropy는 지원X