AI VIDEO BRIEFING

역전파 원리와 파이토치 오토그라드 직접 구현하기, ARENA AI 안전 교육 강의 정리

AI 안전 교육 프로그램 ARENA의 역전파 강의를 정리했다. 연쇄법칙을 이용한 기울기 재활용, 계산 그래프와 레시피, 잎 노드와 위상 정렬까지 파이토치가 뒤에서 대신해 주던 일을 직접 구현하며 배우는 과정을 담았다.

역전파는 마법이 아니다: 파이토치 오토그라드를 밑바닥부터 만들어 보는 수업 영상 대표 이미지

핵심 메시지

  • 역전파의 핵심은 연쇄법칙 자체가 아니라, 앞서 계산해 둔 기울기를 재활용해 순전파 한 번과 역전파 한 번으로 모든 기울기를 한꺼번에 얻는다는 점이다.
  • 파이토치는 기울기의 수식을 구하는 것이 아니라 특정 지점에서의 기울기 값만 계산한다. 그래서 모든 함수마다 미분 정의가 내부에 표로 준비돼 있어야 한다.
  • 텐서에는 데이터 배열, 기울기 추적 여부, 기울기 저장 공간, 그리고 어떤 연산과 어떤 입력에서 나왔는지를 기록한 '레시피'가 함께 들어 있다.
  • 신경망은 방향이 있고 순환이 없는 그래프여야 하며, 스킵 연결이 있는 모델에서는 계산 순서를 정하기 위해 위상 정렬이 필요하다.
  • 브로드캐스팅·인덱싱 같은 연산의 역전파는 개념이 어려운 게 아니라 구현이 번거로운 문제라, 막히면 붙잡고 있기보다 넘어가라는 조언이 반복된다.

쉽게 이해하기

AI 안전 교육 프로그램 ARENA의 0주차 4일 차 강의는 그동안 당연하게 써 온 역전파를 직접 만들어 보는 시간이다. 강사는 파이토치에서 loss.backward()를 부를 때 뒤에서 벌어지는 일을 전부 손으로 구현해, 수강생이 자기만의 오토그라드 엔진으로 작은 신경망을 MNIST 데이터에 학습시키는 것을 목표로 삼는다. 느리고 불편하겠지만 그 과정을 거치고 나면 내부를 최적화해 온 엔지니어들에게 고마움을 느끼게 될 것이라고 말한다.

강의는 아주 단순한 예로 시작한다. 입력 3을 제곱해 9를 만들고 그것을 두 배로 만들어 18을 내놓는 두 단계짜리 함수다. 최종 출력을 입력으로 직접 미분할 수도 있지만, 층이 80개쯤 되는 신경망이라면 그 방식은 감당하기 어렵다. 대신 중간 단계의 미분을 이미 구해 뒀다면 그것들을 사슬처럼 이어 붙여 추가 계산 없이 최종 기울기를 얻을 수 있고, 이 재활용이 역전파의 전부라는 설명이다.

여기서 중요한 단서가 하나 붙는다. 이렇게 얻는 것은 기울기의 해석적인 수식이 아니라 특정 지점에서 평가된 기울기 값이다. 파라미터를 갱신하는 데는 그 값만 있으면 되므로 문제가 없지만, 대신 프레임워크는 tanh나 sin 같은 모든 함수의 미분 정의를 내부에 갖고 있어야 한다. 수학 교과서 뒤에 붙어 있던 미분 공식표가 코드로 들어와 있는 셈이고, 수강생은 그중 몇 개를 직접 작성해 보게 된다.

파이토치는 연산이 일어날 때마다 계산 그래프를 배후에서 기록한다. 강의에서는 이를 텐서에 붙는 '레시피'라고 부른다. 레시피에는 어떤 함수가 쓰였는지, 어떤 값에서 평가됐는지, dim 같은 부가 인자는 무엇이었는지, 그리고 부모에 해당하는 입력 텐서가 무엇인지가 담긴다. 텐서 자체에는 여기에 더해 데이터 배열, 기울기를 추적할지 여부, 계산된 기울기를 담을 공간이 함께 들어 있다.

역전파를 실제로 돌리려면 어디서 멈출지와 무엇을 계산할지도 정해야 한다. 부모가 없는 잎 노드에 도달하면 더 내려가지 않고, requires_grad 표시로 기울기를 구할 대상을 가린다. 강사는 입력 이미지에 대해서는 기울기를 구하지 않는다는 점을 예로 들며, 그렇게 하면 손실 함수가 이미지 자체를 분류하기 쉬운 쪽으로 바꿔 버릴 것이라고 설명한다. 반면 중간 활성값은 옵티마이저가 직접 건드리지 않더라도 가중치까지 기울기를 흘려보내기 위해 계산해야 한다.

마지막으로 다루는 걸림돌은 구현의 번거로움이다. 행렬 곱의 미분은 유도 과정이 지저분하고, 브로드캐스팅이나 인덱싱·전치의 역전파는 개념보다 코딩이 성가시다. 신경망은 순환이 없는 방향 그래프이므로 계산 순서를 정하는 위상 정렬도 필요한데, 순차적인 신경망은 순서가 뻔하지만 스킵 연결이 있는 ResNet이나 트랜스포머에서는 그렇지 않다. 강사는 이런 부분에서 오래 막히면 마법 함수로 두고 넘어가도 좋다고 반복해 말한다.

주요 인사이트

  • 역전파를 '연쇄법칙'이라는 한 문장으로 정리하면 정작 중요한 부분을 놓친다. 핵심은 이미 계산한 중간 미분을 버리지 않고 재활용해 전체 기울기를 한 번의 역방향 순회로 끝낸다는 계산 전략에 있다.
  • 자동 미분은 수식을 다루는 기호 연산 시스템이 아니다. 특정 점에서의 기울기 값만 구하기 때문에, 순전파에서 이미 얻은 출력값을 재사용해 미분을 더 싸게 계산하는 최적화가 가능해진다. tanh의 미분을 1에서 출력의 제곱을 뺀 값으로 정의하는 것이 그 예다.
  • 입력 이미지에 기울기를 흘리지 않는다는 규칙은 성능 문제가 아니라 학습이 성립하기 위한 조건이다. 손실이 입력을 직접 바꿀 수 있다면 모델을 개선하는 대신 문제 자체를 쉽게 만들어 버린다.
  • 직접 구현해 본 사람만 얻는 감각이 있다. 강사는 이 과정을 마치면 자기가 만든 오토그라드가 느리고 불편하다는 사실을 체감하게 되고, 그 대비로 프레임워크 내부 최적화의 가치를 알게 된다고 말한다.
  • 학습 설계 측면에서도 참고할 만하다. 이 강의는 개념적으로 중요한 부분과 단순히 손이 많이 가는 부분을 분명히 구분해 주고, 후자에서는 과감히 건너뛰라고 안내한다.

자주 묻는 질문

역전파에서 '기울기를 재활용한다'는 말은 구체적으로 무슨 뜻인가요?

최종 출력을 입력으로 곧장 미분하는 대신, 중간 변수에 대한 미분을 먼저 구해 두고 그것들을 연쇄법칙으로 이어 붙이는 방식을 뜻합니다. 강의의 예에서는 출력을 중간값으로 미분한 결과와 중간값을 입력으로 미분한 결과를 곱해 추가 계산 없이 최종 기울기를 얻습니다. 덕분에 순전파 한 번과 역전파 한 번으로 모든 기울기를 한꺼번에 구할 수 있습니다.

파이토치가 텐서마다 저장한다는 '레시피'에는 무엇이 들어 있나요?

순전파에서 실제로 쓰인 함수, 그 함수가 평가된 인자 값, dim이나 keepdim처럼 미분에는 쓰이지 않지만 함수 계산에 필요한 부가 인자, 그리고 부모에 해당하는 입력 텐서에 대한 참조가 담깁니다. 이 참조들이 이어지면서 전체 계산 그래프가 자연스럽게 만들어집니다.

왜 신경망에 위상 정렬이 필요한가요?

역전파를 하려면 노드를 어떤 순서로 계산할지 정해야 하는데, 신경망은 순환이 없는 방향 그래프이므로 그 순서를 정할 수 있습니다. 층이 일렬로 이어진 신경망은 왼쪽에서 오른쪽, 역방향은 그 반대로 하면 되지만, 스킵 연결이 있거나 구조가 복잡한 모델에서는 순서가 자명하지 않아 정렬 알고리즘이 필요합니다.

입력 데이터에는 왜 기울기를 계산하지 않나요?

손실 함수가 입력에 직접 손댈 수 있어서는 안 되기 때문입니다. 강사는 이미지 분류를 예로 들어, 손실이 입력 이미지의 기울기를 이용할 수 있다면 모델을 개선하는 대신 이미지를 분류하기 쉬운 형태로 바꿔 버릴 것이라고 설명합니다. 반대로 중간 활성값은 가중치까지 기울기를 전달해야 하므로 계산 대상에 포함됩니다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식

#역전파#오토그라드#파이토치#딥러닝 기초#AI 안전 교육