Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- Focal loss
- deformable covolution
- posec3d
- Swin Transformer
- CNN
- C++
- depthwise convolution
- computer graphics
- Deep Learning
- 포인터
- 티스토리챌린지
- 모수 추정 방법
- 최대 가능도 추정
- mobilenet
- OpenGL
- 오블완
- covolution
- convolution
- 딥러닝
- Vision Transformer
- Image denoising
- Unreal Engine
- 최대 사후 확률
- DDPM
- Action Recognition
- Diffusion
Archives
- Today
- Total
심드렁하게 저장
정규화 - Layer Normalization (레이어 정규화) 본문
Artificial intelligence/Deep Learning
정규화 - Layer Normalization (레이어 정규화)
Ggoosae 2025. 3. 12. 00:111. Layer Normalization이란?

Layer Normalization은 각 샘플(배치 내 개별 데이터)의 모든 뉴런을 정규화하는 기법이다. Batch Normalization은 배치 단위로 정규화 하지만, Layer Normalization은 배치 크기에 독립적으로 동작한다. Layer Normalization은 배치 크기에 의존하지 않으며 Transformer, NLP 모델, 순환 신경망에서 효과적이다.
2. Layer Normalization의 동작 방식
Layer Normalization은 각 샘플(인스턴스) 내 뉴런 전체를 정규화 하는 방식이다. 정규화 수식은 아래와 같다.

- $x_(n,i}$ : 입력 데이터 (배치 내 샘플 n , 뉴런 i)
- $\mu_{n}$ : 샘플(레이어) 내 뉴런들의 평균
- $\sigma^2_{n}$ : 샘플 내 뉴런들의 분산
- $\gamma_{i}\beta_{i}$ : 학습 가능한 Scale 및 Shift 이동 파라미터 (BN과 동일)
- $\epsilon$ : 수치적 안정성을 위한 작은 값
- Layer Nomalization은 각 샘플 단위로 정규화하여 배치 크기에 무관하게 동작
- BN과 달리 배치 크기가 1이거나, 순서가 중요한 시퀀스 데이터에서도 효과적
- Batch Normalization은 배치 크기가 작아지면 성능이 저하되지만, Layer Noramlization은 그대로 유지
3. Layer Normalization 구현 (Pytorch)
Scratch 구현
class LayerNorm(nn.Module):
def __init__(self, num_features, epsilon=1e-5):
'''
num_features = 입력 차원
epsilon: 0으로 나누는 것 방지
'''
super(LayerNorm,self).__init__()
# 학습가능한 파라미터
self.gamma = nn.Parameter(torch.ones(1, num_features))
self.beta = nn.Parameter(torch.zeros(1, num_features))
self.epsilon = epsilon
def forward(self,x):
# x: (N,D) # N: 배치 크기, D: 특성 수
# 인스턴스 별 평균과 분산 계산
mean = x.mean(dim=-1,keepdim=True) # (N,1)
print(mean.shape)
var = x.var(dim=-1,keepdim=True,unbiased=False) # (N,1)
# 정규화
x_hat = (x - mean) / torch.sqrt(var + self.epsilon)
# Scale & Shift 적용
return self.gamma * x_hat + self.beta
#
# 사용 예시
x = torch.randn(4, 5) # 배치 크기 4, 특성 수 5
layer_norm = LayerNorm(num_features=5)
output = layer_norm(x)
print("Layer Normalization 적용 후 출력:", output)
결과:
Layer Normalization 적용 후 출력: tensor([[ 0.7920, 0.8190, -0.6239, -1.6821, 0.6950],
[-0.4835, -0.6417, -1.1334, 1.6387, 0.6199],
[ 0.2372, -0.2102, 1.6278, -1.4909, -0.1639],
[-1.9368, 0.7724, 0.0871, 0.7181, 0.3592]], grad_fn=<AddBackward0>)
- 각 샘플(배치 내 개별 데이터) 단위로 뉴런 전체를 정규화
- Transformer, BERT 등의 모델에서 사용가능
pytorch method로 구현
import torch.nn as nn
# Layer Normalization 적용
layer_norm = nn.LayerNorm(normalized_shape=5, elementwise_affine=True) # 학습 가능 γ, β 포함
4. Layer Normalization 정리
- Layer Normalization은 각 샘플 내 뉴런 전체를 정규화 하는 기법
- 배치 크기에 독립적이며 NLP 및 Transformer에서 사용
- 배치 정규화와 달리 배치 크기가 작아도 안정적인 학습 가능
- Pytorch에서 nn.LayerNorm()으로 적용 가능
'Artificial intelligence > Deep Learning' 카테고리의 다른 글
| 학습률 스케줄링 (Learning Rate Scheduling) (0) | 2025.03.16 |
|---|---|
| 정규화 - Instance Normalization & AdaIN(Adaptive Instance Normalization) (0) | 2025.03.12 |
| 정규화 - Batch Normalization (배치 정규화) (0) | 2025.03.11 |
| 최적화 - Adam Optimizer (Adaptive Moment Estimation) (0) | 2025.03.11 |
| 최적화 - 모멘텀(Momentum)과 RMSprop (0) | 2025.03.11 |