AI: 패딩 및 배치 처리
ㅁ 패딩 및 배치 처리
ㅇ 정의:
서로 다른 길이의 시퀀스 데이터를 동일한 길이로 맞추기 위해 패딩을 적용하고, 효율적인 학습을 위해 이를 배치 단위로 처리하는 기법.
ㅇ 특징:
– 시퀀스 길이 불일치 문제 해결
– 메모리 낭비를 최소화하기 위한 다양한 패딩 전략 존재
– RNN, Transformer 등 시퀀스 모델 학습 시 필수적
ㅇ 적합한 경우:
– 자연어 처리, 음성 인식, 시계열 분석 등 가변 길이 입력 데이터 처리 시
ㅇ 시험 함정:
– 패딩 토큰이 모델 학습에 영향을 주지 않도록 마스킹 필요
– ‘패딩=0’이 항상 맞는 것은 아님(특정 토큰 ID를 패딩으로 설정 가능)
ㅇ 시험 대비 “패턴 보기” 예시:
O: “패딩 처리는 시퀀스 길이를 맞추기 위한 전처리 과정이다.”
X: “패딩 처리는 모델 파라미터 수를 줄이기 위한 기법이다.”
================================
1. Dynamic Padding
ㅇ 정의:
각 배치마다 해당 배치 내에서 가장 긴 시퀀스 길이에 맞추어 패딩하는 방법.
ㅇ 특징:
– 배치별로 패딩 길이가 달라짐
– 불필요한 패딩 최소화로 메모리 효율성 향상
– DataLoader 단계에서 구현 가능
ㅇ 적합한 경우:
– 시퀀스 길이의 분산이 큰 데이터셋
– GPU 메모리 최적화가 필요한 경우
ㅇ 시험 함정:
– 배치 간 길이가 달라지므로 ONNX 등 고정 입력 크기 환경에서는 부적합
– 동적 연산 최적화가 지원되지 않는 환경에서는 속도 저하 가능
ㅇ 시험 대비 “패턴 보기” 예시:
O: “Dynamic Padding은 배치별 최대 길이에 맞춰 패딩한다.”
X: “Dynamic Padding은 전체 데이터셋에서 가장 긴 길이에 맞춘다.”
================================
2. Bucketing
ㅇ 정의:
비슷한 길이의 시퀀스들을 동일한 버킷(bucket)에 모아 배치를 구성하는 방법.
ㅇ 특징:
– 각 배치 내 시퀀스 길이 편차 최소화
– 패딩 낭비 감소
– 사전 정렬 또는 길이 기반 그룹핑 필요
ㅇ 적합한 경우:
– 매우 다양한 길이의 시퀀스가 존재하는 데이터셋
– 학습 속도 최적화 및 메모리 효율성 중요 시
ㅇ 시험 함정:
– 버킷 크기를 잘못 설정하면 오히려 패딩 낭비가 증가
– 데이터 순서가 고정되면 학습에 편향 발생 가능 → 셔플 필요
ㅇ 시험 대비 “패턴 보기” 예시:
O: “Bucketing은 유사한 길이의 시퀀스를 묶어 패딩 낭비를 줄인다.”
X: “Bucketing은 모든 시퀀스를 동일 길이로 잘라낸다.”
================================
3. Packed Sequence
ㅇ 정의:
패딩 토큰이 포함된 시퀀스를 RNN 등에 입력하기 전에 실제 유효 토큰만을 압축하여 처리하는 방식.
ㅇ 특징:
– PyTorch의 pack_padded_sequence, pad_packed_sequence API 활용
– 패딩 토큰에 대한 불필요한 연산 제거
– 가변 길이 시퀀스 처리 효율성 향상
ㅇ 적합한 경우:
– RNN, LSTM, GRU 등 순차 처리 모델에서 패딩 연산 낭비 최소화 필요 시
ㅇ 시험 함정:
– 입력 시퀀스는 길이 내림차순 정렬 필요(일부 프레임워크는 자동 처리)
– Packed Sequence는 Transformer 계열 모델에서는 직접적 사용이 드묾
ㅇ 시험 대비 “패턴 보기” 예시:
O: “Packed Sequence는 패딩 토큰에 대한 연산을 건너뛴다.”
X: “Packed Sequence는 패딩 토큰을 삭제하여 데이터 손실을 발생시킨다.”
ㅁ 추가 학습 내용
추가 학습 정리
1. Dynamic Padding과 Bucketing의 하이브리드 접근법
– Bucketing: 유사한 길이의 시퀀스를 같은 그룹(버킷)에 모아 패딩 낭비를 줄이는 방법
– Dynamic Padding: 각 배치마다 해당 배치의 최장 시퀀스 길이에 맞춰 패딩 길이를 동적으로 조정
– 하이브리드 방식: 먼저 시퀀스를 길이별로 버킷에 분류한 뒤, 각 버킷 내에서 Dynamic Padding 적용 → 전체적으로 패딩 낭비를 최소화하고 연산 효율 향상
2. Transformer 모델과 RNN의 패딩 처리 차이
– Transformer: 어텐션 연산 시 패딩 토큰이 연산에 영향을 주지 않도록 패딩 마스크(mask) 사용. 마스크는 어텐션 스코어 계산 시 패딩 위치를 무한대 음수로 처리하여 무시
– RNN: Packed Sequence를 사용하여 실제 유효 토큰만 순차적으로 처리. 패딩 토큰은 연산에서 제외되며, pack_padded_sequence와 pad_packed_sequence API 사용
3. 배치 정규화와 패딩의 상호작용
– 배치 정규화는 배치 내 모든 시퀀스의 동일 위치 토큰을 평균과 분산으로 정규화
– 시퀀스 길이가 다르고 패딩이 포함되면, 패딩 값이 평균/분산 계산에 포함되어 왜곡 발생 가능
– 해결 방법: 마스크를 적용하거나, Layer Normalization 사용, 또는 패딩 위치를 정규화 계산에서 제외
4. 패딩 토큰과 임베딩 레이어
– 임베딩 레이어에서 padding_idx를 설정하면 해당 인덱스의 임베딩 벡터는 학습되지 않고 항상 0으로 유지
– 이를 통해 패딩 토큰이 모델 학습에 영향을 주지 않도록 함
5. 실무에서의 패딩 전략 구현 예시
– PyTorch DataLoader: collate_fn에서 배치 내 최장 길이에 맞춰 pad_sequence 사용
– TensorFlow tf.data API: padded_batch를 사용하여 동적 패딩 적용
– HuggingFace Datasets: DataCollatorWithPadding을 사용하여 토크나이저와 함께 자동 패딩 처리