신경망 파라미터·메모리 계산기 쉽게 이해하기 — 개념과 원리
완전 연결(밀집) 신경망에서는 모든 연결마다 가중치가, 모든 뉴런마다 편향이 하나씩 있습니다. 이 계산기는 밀집 층을 쌓은 구조에서 학습 가능한 파라미터 수를 세고, 이를 선택한 수치 정밀도에서의 가중치 메모리와 Adam 최적화로 학습할 때의 대략적인 메모리로 바꿔 줍니다. 모델을 만들기 전에 장치에 들어갈지 미리 확인하는 데 유용합니다.
계산 방법
- 이웃한 두 층마다 파라미터 수 = 입력 수 × 출력 수 + 출력 수(출력 뉴런당 편향 1개)
- 전체 파라미터 = 모든 층 쌍의 합
- 가중치 메모리(MB) = 파라미터 × 파라미터당 바이트 ÷ 10⁶ (FP32 4바이트, FP16/BF16 2, INT8 1, INT4 0.5)
- Adam 학습 메모리 ≈ 파라미터 × 16바이트 ÷ 10⁶
층 크기는 입력층부터 출력층까지 뉴런 수를 순서대로 적습니다.
원리
밀집 층은 y = Wx + b를 계산합니다. 가중치 행렬 W는 입력-출력 쌍마다 하나씩, 편향 벡터 b는 출력마다 하나씩 값을 가지므로 입력 × 출력 + 출력이 됩니다. 학습에는 가중치 말고도 더 많은 메모리가 듭니다. 흔히 FP32 가중치 4바이트, 그 기울기 4바이트, Adam의 두 이동 평균(1차·2차 모멘트) 8바이트를 더해 파라미터당 16바이트로 계산합니다. 혼합 정밀도 학습도 구성은 다르지만 대략 16바이트가 됩니다. 배치 크기에 따라 달라지는 활성값 메모리는 별도이며 여기에 포함되지 않습니다.
예제 풀이
- 층 구조는 784 → 256 → 128 → 10입니다(예: 28 × 28 이미지를 10개 클래스로 분류).
- 784 × 256 + 256 = 200,960, 256 × 128 + 128 = 32,896, 128 × 10 + 10 = 1,290입니다.
- 합계는 235,146개입니다.
- FP32 가중치는 235,146 × 4 = 940,584바이트 = 0.940584MB입니다.
- Adam 학습은 235,146 × 16 = 3,762,336바이트 = 3.762336MB입니다.
결과 해석
첫 번째 층이 전체 파라미터의 약 85%를 차지합니다. 입력층이 크면 그 층이 파라미터 수를 좌우합니다. 정밀도를 절반으로 줄이면 가중치 메모리도 절반이 되므로 배포 단계에서 FP16이나 INT8을 씁니다. 여기서 MB는 10⁶바이트이며, 운영체제가 보여 주는 MiB(2²⁰바이트)는 약 4.9% 더 큽니다.
흔한 실수
- 편향을 빠뜨리거나 입력층에도 편향을 더하는 경우
- 합성곱 층에 밀집 층 공식을 쓰는 경우(합성곱은 커널 높이 × 너비 × 입력 채널 × 출력 채널 + 출력 채널)
- 가중치가 들어가니 학습도 될 것이라고 보는 경우(활성값과 배치 크기가 더 클 때가 많습니다)
자주 묻는 질문
배치 정규화 층도 파라미터가 있나요?
네. 채널마다 학습되는 값 2개(스케일, 이동)가 있고, 학습되지 않는 이동 통계 2개를 따로 저장합니다.
INT8로 양자화하면 파라미터 수가 줄어드나요?
아닙니다. 파라미터당 바이트 수가 줄어들 뿐 개수는 같습니다.
SGD가 Adam보다 메모리를 적게 쓰는 이유는 무엇인가요?
순수 SGD는 모멘트를 저장하지 않고, 모멘텀 SGD는 하나, Adam은 두 개를 저장하기 때문입니다.
출처: I. Goodfellow, Y. Bengio and A. Courville, Deep Learning, MIT Press, 2016 · D. P. Kingma and J. Ba, Adam: A Method for Stochastic Optimization, ICLR 2015 · S. Rajbhandari et al., ZeRO: Memory Optimizations Toward Training Trillion Parameter Models, SC20, 2020