AI VIDEO BRIEFING
역전파 직접 구현 강의 정리 — 카파시가 loss.backward()를 끄는 이유와 배치정규화 미분
안드레이 카파시의 makemore 4편 강의를 정리했다. 자동미분을 끄고 역전파를 텐서 수준에서 손으로 구현하며 얻는 디버깅 감각, 그리고 교차엔트로피와 배치정규화를 한 줄로 줄이는 해석적 미분식을 다룬다.

핵심 메시지
쉽게 이해하기
안드레이 카파시의 makemore 시리즈 네 번째 강의는 새 모델을 만들지 않는다. 앞서 만든 2층 다층 퍼셉트론을 그대로 두고, 파이토치의 loss.backward() 한 줄만 지운 뒤 역전파를 텐서 수준에서 손으로 다시 구현한다. 그는 이 작업을 실용적 기술이 아니라 훈련이라고 분명히 말한다. 오늘날 역전파를 직접 쓰는 사람은 연습 목적 외에는 없다는 것이다.
그럼에도 이 훈련이 필요한 이유로 그는 역전파를 '새는 추상'이라고 부른다. 미분 가능한 블록을 아무렇게나 쌓고 자동미분에 맡기면 다 된다는 생각은 위험하다는 뜻이다. 활성화 함수의 평평한 꼬리에서 기울기가 죽는 문제, 죽은 뉴런, 순환 신경망의 기울기 폭발과 소실이 모두 여기에 속한다. 그는 실제로 인터넷에서 발견한 코드 조각을 예로 든다. 기울기를 제한하려던 작성자가 손실값 자체를 잘라내는 바람에, 크게 틀린 예제의 기울기가 0이 되어 학습에서 조용히 무시되고 있었다.
강의의 앞부분은 순전파를 잘게 쪼개 만든 중간 텐서들을 거꾸로 거슬러 올라가며 하나씩 미분을 채우는 작업이다. 이 과정에서 반복해 등장하는 규칙이 있다. 덧셈은 위에서 내려온 기울기를 참여한 모든 원소에 그대로 나눠주는 라우터이고, 하나의 변수가 여러 번 쓰였다면 그 쓰임에서 온 기울기를 모두 더해야 한다. 순전파에서 브로드캐스팅으로 복제된 축은 역전파에서 합이 되고, 순전파에서 합으로 사라진 축은 역전파에서 복제로 되살아난다.
행렬곱 구간에서 카파시는 공식을 외우지 말라고 권한다. 2×2 정도의 작은 예를 종이에 풀어쓰면 결과가 결국 또 다른 행렬곱이라는 사실이 보이고, 실제 구현할 때는 만들어야 할 텐서의 모양이 정해져 있으니 그 모양이 나오게 곱을 배치하는 방법이 하나뿐이라 전치를 어디에 붙일지가 저절로 정해진다는 것이다. 자신도 공식을 기억하지 못한다고 그는 덧붙인다.
후반부는 방향을 바꾼다. 잘게 쪼갠 조각을 하나하나 거슬러 오르는 대신, 손실 전체를 하나의 수식으로 보고 종이에서 미분해 간단한 형태로 줄이는 것이다. 교차엔트로피는 소프트맥스 확률에서 정답 위치의 값만 1을 빼는 형태로, 배치정규화도 한 줄짜리 식으로 정리된다. 마지막 연습은 이렇게 얻은 20여 줄의 수동 역전파로 loss.backward() 없이 모델을 끝까지 학습시키는 것이고, 결과 손실은 자동미분을 썼을 때와 같다.
주요 인사이트
- 교차엔트로피의 기울기는 직관적으로 읽힌다. 각 행의 값을 더하면 0이 되므로, 틀린 후보의 확률을 끌어내리는 힘과 정답의 확률을 끌어올리는 힘이 정확히 균형을 이룬다. 확신에 차서 틀렸을수록 그 당김이 세진다.
- 수치 안정성을 위해 각 행의 최댓값을 빼는 연산은 손실을 바꾸지 않으므로 이론상 기울기가 0이어야 한다. 실제로 계산해 보면 부동소수점 오차 수준의 아주 작은 값이 나와, 쪼개어 계산해도 수학이 어긋나지 않음을 확인해 준다.
- 카파시는 배치정규화의 분산 계산에서 학습 때는 편향 추정(n으로 나눔), 추론 때는 불편 추정(n-1로 나눔)을 쓰는 관행을 학습·평가 불일치로 보고 버그에 가깝다고 말한다. 그래서 강의 코드는 양쪽 모두 n-1을 쓴다.
- 편향값을 0으로 초기화하면 기울기 식이 지나치게 단순해져 잘못된 구현이 우연히 맞아 보일 수 있다. 그래서 강의에서는 일부러 작은 난수로 초기화해 오류가 드러나게 만든다.
- 10여 년 전에는 역전파를 손으로 쓰고 수치 미분과 비교해 검증하는 것이 표준이었다. 자동미분이 표준이 된 지금, 그 시절 사람들이 갖고 있던 직관은 의도적으로 연습하지 않으면 얻기 어렵다.
자주 묻는 질문
실무에서도 역전파를 직접 구현해야 하나요?
아닙니다. 카파시도 오늘날 손으로 역전파를 쓰는 사람은 연습 목적 외에 없다고 말합니다. 다만 신경망을 디버깅하고 무엇이 잘못됐는지 판단하려면 내부 동작을 이해하고 있어야 한다는 것이 강의의 취지입니다.
잘게 쪼개 미분하는 방식과 수식으로 한 번에 미분하는 방식은 무엇이 다른가요?
결과는 같지만 효율이 다릅니다. 조각별 역전파는 연습에는 좋지만 계산이 많고, 손실 전체를 하나의 수식으로 보고 미분하면 항들이 상쇄되어 훨씬 짧고 빠른 식이 나옵니다. 교차엔트로피가 대표적인 예입니다.
손으로 구현한 기울기가 맞는지 어떻게 확인하나요?
강의에서는 파이토치가 계산한 기울기와 비교하는 함수를 씁니다. 완전히 같은지, 부동소수점 오차 범위 안에서 비슷한지, 그리고 가장 큰 차이가 얼마인지를 함께 출력해 판단합니다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗