패딩: 길이가 다른 데이터를 한 크기로 맞추는 이유와 방법
패딩이 필요한 이유부터 시퀀스·이미지 패딩의 종류, PyTorch·Keras 구현 예시, 장단점과 버킷팅·동적 배칭 최적화 전략까지 정리한다.
2026-08-14 · 최초 발행 2025-05-23
병렬 처리 장치는 크기가 같은 데이터를 원한다
병렬 컴퓨팅 환경에서 효율적인 데이터 처리를 위해서는 입력 데이터의 크기를 통일하는 과정이 필수적이다. 이 과정을 패딩(Padding)이라 하며, 데이터에 특정 값을 채워 데이터의 크기(shape)를 일정하게 조정하는 기법이다. 자연어 처리(NLP)와 이미지 처리 분야에서 널리 활용된다.
GPU나 TPU 같은 병렬 처리 장치는 동일한 크기의 데이터 배치를 처리할 때 최적의 성능을 낸다. 딥러닝에서 여러 샘플을 동시에 처리해 학습 속도를 높이려면 각 샘플의 크기가 일정해야 하고, 균일한 크기의 데이터는 벡터화된 연산에 적합해 계산 효율성도 높아진다. 많은 딥러닝 모델이 애초에 고정된 입력 크기를 전제로 설계돼 있다는 점도 패딩이 필요한 이유다.
문장 길이가 제각각인 자연어 처리에서
자연어 처리에서 문장은 길이가 다양하다. 이런 가변 길이 문장을 처리하려면 패딩이 필수적이다.
시퀀스를 채우는 방식들
-
Zero Padding: 가장 일반적인 방식으로, 문장의 끝이나 시작 부분에 0을 채운다.
# 예시: Keras에서의 패딩 from tensorflow.keras.preprocessing.sequence import pad_sequences sequences = [[1, 2, 3], [4, 5], [6, 7, 8, 9]] padded_sequences = pad_sequences(sequences, maxlen=5, padding='post') # 결과: [[1, 2, 3, 0, 0], [4, 5, 0, 0, 0], [6, 7, 8, 9, 0]] -
Mask Padding: 패딩된 부분을 구분하기 위해 마스크를 사용하는 기법으로, 모델이 패딩된 부분을 무시하도록 한다.
-
Custom Value Padding: 특정 토큰 ID(예: -1, 999 등)를 사용하여 패딩한다.
어디를 채우고 어떻게 맞출지
- Pre-padding: 시퀀스 앞부분에 패딩 값을 추가
- Post-padding: 시퀀스 뒷부분에 패딩 값을 추가
- Fixed Length: 모든 시퀀스를 특정 길이로 맞춤
- Dynamic Padding: 배치마다 해당 배치 내 최대 길이에 맞춰 패딩
컨볼루션 연산을 위한 이미지 패딩
컴퓨터 비전 분야에서는 CNN(Convolutional Neural Network)의 효율적인 작동을 위해 패딩이 사용된다.
이미지 패딩, Valid부터 Full까지
- Valid Padding (No Padding): 패딩을 사용하지 않아 컨볼루션 연산 후 이미지 크기가 감소한다.
- Same Padding: 출력 이미지의 크기가 입력과 동일하도록 패딩을 추가한다.
- Full Padding: 모든 입력 픽셀이 컨볼루션 필터의 중앙이 될 수 있도록 패딩한다.
패딩 값은 무엇으로 채울까
- Zero Padding: 가장 흔히 사용되며, 0값으로 채운다.
- Reflection Padding: 이미지 경계를 반사하여 패딩한다.
- Replication Padding: 이미지 경계 값을 복제하여 패딩한다.
PyTorch와 TensorFlow에서 실제로 구현하면
PyTorch에서의 텍스트 패딩
# PyTorch에서 텍스트 패딩 구현
from torch.nn.utils.rnn import pad_sequence
import torch
# 가변 길이 시퀀스
sequences = [torch.tensor([1, 2, 3]), torch.tensor([4, 5]), torch.tensor([6, 7, 8, 9])]
# 패딩 적용 (기본값: batch_first=False, padding_value=0)
padded_seq = pad_sequence(sequences, batch_first=True, padding_value=0)
# 결과: tensor([[1, 2, 3, 0], [4, 5, 0, 0], [6, 7, 8, 9]])
TensorFlow/Keras에서의 이미지 패딩
# Keras에서 이미지 패딩 레이어 사용
from tensorflow.keras.layers import ZeroPadding2D
from tensorflow.keras.models import Sequential
model = Sequential([
ZeroPadding2D(padding=(1, 1), input_shape=(64, 64, 3)), # 1픽셀 패딩 추가
# 다른 레이어들...
])
패딩이 남기는 득과 실
패딩은 균일한 데이터 크기로 GPU/TPU 활용도를 극대화하고 미니배치 학습의 연산을 최적화하며, 고정 크기 입력을 요구하는 모델과의 호환성을 확보해준다. 반대로 불필요한 패딩은 메모리를 낭비하고, 의미 없는 패딩 값에 대한 추가 연산이 발생하며, 패딩 값이 모델 학습에 부정적 영향을 미칠 가능성도 있다.
낭비를 줄이는 최적화 전략
- 동적 배칭(Dynamic Batching): 유사한 길이의 샘플들을 함께 배치하여 패딩 최소화
- 버킷팅(Bucketing): 데이터를 길이별 버킷으로 분류하여 유사한 길이끼리 배치
- 마스킹(Masking): 패딩된 값을 계산에서 제외하는 마스크 적용
- 패딩 위치 최적화: 태스크에 따라 pre-padding 또는 post-padding 선택
챗봇부터 의료 영상까지, 패딩이 실제로 쓰이는 곳
고객 서비스 챗봇에서 다양한 길이의 사용자 질문을 효율적으로 처리하기 위해 패딩을 적용한다. 실시간 응답 시스템에서는 패딩 전략이 응답 시간에 직접적인 영향을 미친다.
시계열 금융 데이터 분석 시, 거래 기록의 길이가 다양한 경우 패딩을 통해 일관된 입력 형태를 만들어 예측 모델의 정확도를 향상시킨다.
MRI나 CT 스캔 이미지의 경계 보존을 위해 reflection padding을 적용하여 진단 정확도를 높인다.
패딩 없는 모델을 향한 연구
학습 가능한 패딩(Learnable Padding)은 패딩 값을 고정하는 대신 모델이 최적의 패딩 값을 학습하도록 하는 접근법이다. 트랜스포머 모델에서는 어텐션 마스크(Attention Masks)로 패딩된 부분을 무시하도록 하며, 패딩 없이도 효율적으로 작동하는 패딩 없는 아키텍처(Padding-free Architectures)에 대한 연구도 이어지고 있다. 적절한 패딩 전략을 선택하고 최적화하면 모델의 성능을 향상시키고 계산 효율성을 극대화할 수 있다.