Model Weights
모델 가중치는 네트워크의 입력을 예측으로 변환하는 학습된 수치입니다. 학습 과정에서 가중치가 설정되는 방식, 가중치 파일, 압축을 다룹니다.
모델 가중치는 신경망 내부의 학습 가능한 숫자로, 입력을 예측값으로 변환합니다. 각 가중치는 두 유닛 사이를 전달하는 신호의 크기를 조정하거나 합성곱 필터의 값 하나를 구성하며, 가중치가 함께 모델이 학습 데이터에서 학습한 모든 내용을 인코딩합니다. 이 용어는 "사전 학습 가중치" 또는 "오픈 가중치 모델"에서처럼 편향과 정규화 값까지 포함한 모델의 모든 학습된 파라미터를 가리키는 말로 흔히 느슨하게 사용됩니다. 가중치 수는 몇 자릿수 규모에 걸쳐 달라집니다. ResNet-50의 파라미터는 약 2,560만 개인 반면, 대규모 언어 모델의 파라미터는 수십억 개입니다.
학습 과정에서 가중치가 설정되는 방식#
새 네트워크는 He 초기화와 같은 방식으로 추출한 작은 무작위 가중치로 시작합니다. 이 방식은 각 레이어의 크기에 맞춰 무작위 값의 규모를 조정하여, 여러 레이어를 통과하는 동안 신호가 소실되거나 폭주하지 않도록 합니다. 이 시점에서 모델의 예측은 노이즈에 불과합니다. 이후 학습은 데이터의 각 배치마다 다음 과정을 반복합니다. 순전파가 예측값을 생성하고, 손실 함수가 예측 오류를 평가하며, 역전파가 각 가중치가 오류에 기여한 정도를 계산합니다. 그런 다음 확률적 경사 하강법 (SGD)이나 Adam 옵티마이저 같은 옵티마이저가 모든 가중치를 조금씩 조정하여 오류를 줄입니다. 이러한 작은 업데이트를 수백만 번 거치면 가중치는 정확한 예측을 생성하는 값으로 수렴하며, 추론 중에는 고정된 상태로 유지됩니다.
가중치와 관련 용어 비교#
- 편향:
y = Wx + b을 계산하는 레이어에서 가중치W는 입력에 곱해지고 편향b는 오프셋을 더합니다. 이를 통해 유닛의 활성화 함수는 임계값을 이동시키고 모든 입력이 0일 때도 0이 아닌 출력을 생성할 수 있습니다. 편향과 가중치 모두 학습 과정에서 학습됩니다. - 하이퍼파라미터: 학습률과 배치 크기처럼 학습 전에 선택하여 가중치 학습 방식을 제어하는 설정입니다. 경사 하강법은 하이퍼파라미터를 업데이트하지 않습니다.
- 활성화값: 특정 입력에 대해 네트워크가 계산하는 중간 출력입니다. 가중치는 모든 입력에서 동일하게 유지되지만, 활성화값은 입력마다 다시 계산됩니다.
- Weights & Biases: 이름에 두 가지 파라미터 유형을 차용한 실험 추적 플랫폼입니다.
가중치 저장 및 로드#
학습된 가중치는 파일로 저장되므로 추론을 위해 다시 불러오거나 공유하거나 전이 학습의 시작점으로 사용할 수 있습니다. PyTorch에서 모델 가중치는 state_dict에 저장되며, 일반적으로 .pt 파일로 저장됩니다. 이러한 파일은 Python의 pickle 형식을 사용하며, 로드할 때 코드를 실행할 수 있습니다. 따라서 PyTorch 2.6부터는 torch.load가 기본적으로 weights_only=True을 사용합니다. safetensors 형식은 원시 텐서만 저장하므로 코드 실행을 방지하고 메모리 매핑을 통한 빠른 로드를 지원하며, Hugging Face의 표준 형식입니다. ONNX 파일은 가중치와 연산 그래프를 함께 패키징하여 다른 런타임에서도 모델을 실행할 수 있게 합니다.
Ultralytics YOLO26 .pt 체크포인트는 가중치의 지수 이동 평균 (EMA)을 저장하여 단계별 노이즈를 완화하고, 학습 인수와 에포크별 결과도 함께 저장합니다. 모든 학습 실행은 weights 폴더에 best.pt 및 last.pt를 기록합니다. 학습된 가중치를 사용한 경우와 사용하지 않은 경우에 동일한 아키텍처를 로드하면 모델의 지식이 어디에 저장되는지 확인할 수 있습니다.
from ultralytics import YOLO
# Same YOLO26n architecture with two different sets of weights
trained = YOLO("yolo26n.pt") # weights learned on COCO
untrained = YOLO("yolo26n.yaml") # randomly initialized weights
for name, model in [("trained", trained), ("untrained", untrained)]:
results = model("https://ultralytics.com/images/bus.jpg")
print(f"{name}: {len(results[0].boxes)} objects detected")학습된 가중치는 이미지에서 버스와 사람을 찾아내지만, 동일한 네트워크를 무작위로 초기화한 복사본은 아무것도 감지하지 못합니다.
배포를 위한 가중치 압축#
가중치 정밀도는 모델의 파일 크기와 메모리 사용량을 결정하며, 이는 엣지 AI 기기에서 특히 중요합니다. 모델 양자화는 더 낮은 정밀도로 가중치를 저장합니다. 32비트 부동소수점에서 8비트 정수로 변경하면 크기가 4분의 1로 줄고, 정수 연산을 지원하는 하드웨어에서는 추론 속도가 빨라집니다. 가지치기는 출력에 거의 기여하지 않는 가중치를 제거하며, 지식 증류는 작은 모델이 큰 모델을 모방하도록 학습합니다. 규모를 예로 들면, 파라미터가 70억 개인 언어 모델의 가중치는 32비트에서 약 28GB, 16비트에서 14GB, 4비트에서 3.5GB의 공간을 차지합니다.










