AI VIDEO BRIEFING

딥러닝 모델 디버깅 순서 정리: 조용한 실패를 데이터·모델·손실·학습 루프 네 후보로 좁히는 방법

카네기멜런대 딥러닝 수업 실습에서 소개한 모델 디버깅 절차를 정리했다. 에러도 경고도 없이 학습만 진행되고 성능은 나오지 않는 조용한 실패를 데이터·모델·손실·학습 루프 네 곳으로 좁혀가는 순서와 점검 기법을 다룬다.

에러 없이 조용히 망가지는 딥러닝 모델, 순서대로 범인 찾는 법 영상 대표 이미지

핵심 메시지

  • 일반 소프트웨어 버그는 스택 트레이스로 위치를 알려주지만, 딥러닝의 버그는 학습이 매끄럽게 진행되는 와중에 성능만 나오지 않는 형태로 조용히 숨는다.
  • 고칠 순서가 정해져 있다. 예외가 발생하는 코드 오류를 먼저 끝내고 그다음 학습 오류로 넘어간다. 예외가 남아 있는 동안 학습률에 대한 가설을 세워봐야 소용이 없다.
  • 버그가 숨을 수 있는 곳은 데이터, 모델, 손실, 학습 루프 네 군데뿐이며, 알려진 값으로 한 번에 하나씩만 바꿔 끼워 범위를 좁힌다.
  • 학습 시작 시점의 손실을 클래스 수의 로그와 비교하면 출력층 크기·타깃 형식·리덕션이 맞는지 몇 초 만에 확인할 수 있다.
  • 여덟 개 표본을 과적합시키지 못하면 파이프라인 배선이 틀린 것이므로, 학습률 스케줄러를 바꾸는 것으로는 해결되지 않는다.

쉽게 이해하기

카네기멜런대 딥러닝 입문 수업의 실습 세션은 학생들이 가장 많이 시간을 잃는 지점에서 출발한다. 보통의 프로그래밍에서는 버그가 예외를 던지고 스택 트레이스가 문제의 줄을 정확히 알려준다. 그런데 딥러닝에서는 학습이 아무 불평 없이 돌아가는데도 결과가 나오지 않는 일이 흔하다. 조교는 실제로 겪는 세 가지 예를 든다. 레이블이 하나씩 밀려 있으면 정확도가 40% 근처에서 더는 오르지 않고, 크로스엔트로피 앞에 소프트맥스를 한 번 더 적용하면 기울기가 눌려 학습이 아주 느려지며, 검증 집합까지 포함해 정규화 통계를 구하면 검증 성능은 좋아 보이는데 테스트에서 무너진다. 그래서 실패를 두 부류로 나눈다. A는 파이프라인이 멈추는 경우다. 형태 불일치, 디바이스 불일치, 자료형 오류, 메모리 부족처럼 스택 트레이스가 위치를 짚어준다. 성가시지만 원인을 알기에 어렵지 않다. B는 파이프라인이 매끄럽게 도는데 학습이 일어나지 않는 경우다. 경고도 줄 번호도 없고 프로그램은 작성된 대로 얌전히 동작하지만, 손실이 평평하거나 과제가 허용하는 수준보다 한참 높은 지점에 머문다. 이때 조교가 강조하는 규칙은 순서다. 코드 오류를 먼저 끝내고 그다음에 학습 오류를 다룬다. 예외가 남아 있는 한 학습률에 대해 어떤 의견도 가질 자격이 없다는 표현까지 쓴다.

디버깅의 절차는 네 단계로 제시된다. 반증 가능한 주장을 세우고, 그 주장을 가장 싸게 반증할 수 있는 시험을 설계하고, 한 번에 정확히 하나만 바꾸고, 결과를 적어둔다. 레이블을 출력해 확인하거나 데이터를 일부만 잘라 쓰는 식으로 반복 주기를 짧게 만들면 같은 시간에 훨씬 많은 가설을 시험할 수 있다. 반대로 학습률과 배치 크기와 구조를 한 커밋에서 함께 바꾸는 것은 대표적인 안티패턴이다. 무엇이 개선을 만들고 무엇이 악화시켰는지 알 수 없기 때문이다. 기록을 남겨두면 나중에 같은 시도를 반복하지 않고, 절제 실험을 설계할 때도 근거가 된다.

버그가 있을 수 있는 곳은 네 곳이다. 데이터에서는 데이터셋 클래스와 로더를 보며 누수가 있는지, 셔플을 엉뚱한 분할에 적용했는지 확인한다. 모델에서는 구조와 파라미터 불일치, 잘못된 초기화, 체크포인트를 불러온 뒤 얼어붙은 파라미터, 초기화 함수 바깥에서 만들어진 층 등을 본다. 손실에서는 목적 함수가 과제와 맞는지, 활성 함수를 두 번 적용하지 않았는지, 리덕션과 타깃 형식과 자료형이 맞는지 살핀다. 학습 루프에서는 기울기 초기화 누락, 옵티마이저 스텝 누락, 스케줄러를 에폭이 아니라 배치마다 호출하는 실수 등을 확인한다. 증상에서 후보를 좁히는 대응표도 함께 제시된다. 손실이 정확히 고정돼 움직이지 않으면 학습 루프 쪽이고, 0단계 손실이 클래스 수의 로그와 크게 다르면 타깃 형식이나 리덕션, 혹은 손실 앞의 활성 함수를 의심한다.

구체적인 점검 기법도 이어진다. 첫 손실을 클래스 수의 로그와 비교하는 확인은 몇 초면 끝나는데도 손실 쪽 후보 상당수를 한 번에 지워준다. 드롭아웃을 끄고 표본 여덟 개를 외우게 해보는 시험은 순전파·역전파·옵티마이저 배선이 맞는지 증명한다. 손실이 0까지 내려가면 배선은 정상이고 남은 문제는 데이터 규모나 모델 용량이며, 내려가지 않으면 최적화가 잘못된 것이므로 어떤 학습률 스케줄러로도 고쳐지지 않는다. 텐서 형태를 단언문으로 막아두는 것도 중요하다. 브로드캐스팅은 틀린 계산도 에러 없이 굴러가게 만드는 장치라서, B×1과 B 모양을 섞으면 B×B가 나오는데도 손실이 계산되고 기울기가 흐른다. 다만 단언문은 파이썬 최적화 모드에서 통째로 제거되므로 정확성을 여기에 의존해서는 안 된다.

기울기를 직접 들여다보는 방법도 유용하다. 값이 None이면 그 파라미터가 계산 그래프에 없다는 뜻이고, 0이면 그래프에는 있지만 신호를 받지 못한다는 뜻이며, 무한대나 NaN이면 폭발이나 0에 대한 로그·나눗셈을 의심한다. 아주 작지만 0은 아니면 기울기 소실이다. 그리고 무엇보다 버그를 재현할 수 있어야 한다. 파이썬 시드만으로는 부족하고 데이터 로더와 워커가 각자 난수 생성기를 갖고 있다는 점까지 챙겨야 하며, 결정적 알고리즘 설정은 디버깅에는 안정적이지만 느리므로 본 학습 전에 되돌려야 한다. 조교는 도움을 청하기 전에 작은 부분집합·초기 손실·기울기 노름·시드 고정·형태 단언을 확인하고, 네 후보 중 무엇을 어떻게 배제했는지 한 문장으로 말할 수 있어야 한다고 정리한다. 모델은 블랙박스가 아니라 네 곳 중 한 곳에 버그가 있는 프로그램일 뿐이라는 것이 이 실습의 결론이다.

주요 인사이트

  • 딥러닝 디버깅의 어려움은 버그가 어렵다는 데 있지 않고 버그가 신호를 내지 않는다는 데 있다. 그래서 기법보다 '증상에서 후보를 좁히는 순서'가 먼저다.
  • 초기 손실을 클래스 수의 로그와 비교하는 확인은 비용이 거의 0인데 손실 관련 실수 여러 종류를 한 번에 배제한다. 값싼 시험을 먼저 배치하는 것이 디버깅 설계의 핵심이다.
  • 작은 표본을 과적합시키지 못하면 최적화 문제이므로 하이퍼파라미터를 만지는 일이 무의미해진다. 이 한 가지 시험이 '더 오래 돌려보자'는 낭비를 막는다.
  • 브로드캐스팅은 편의 기능이면서 동시에 틀린 코드를 계속 굴러가게 만드는 통로다. 형태를 단언문으로 막아 조용한 실패를 시끄러운 실패로 바꾸는 것이 요령이다.
  • 재현할 수 없는 버그는 고칠 수 없다. 시드 고정이 파이썬뿐 아니라 데이터 로더와 워커까지 미쳐야 한다는 점은 실제로 많이 놓치는 부분이다.

자주 묻는 질문

왜 코드 오류를 학습 오류보다 먼저 고쳐야 하나?

예외가 발생하는 상태에서는 학습에 대해 세우는 모든 가설이 무의미해지기 때문이다. 실습에서는 예외가 남아 있는 동안 학습률에 대해 의견을 가질 자격이 없다고 표현하며, A류 버그가 남아 있으면 그 위에서 한 작업이 쓸모없어진다고 설명한다.

학습 시작 시점의 손실은 무엇과 비교해야 하나?

클래스 수의 자연로그와 비교한다. 값이 그 근처면 출력층 폭과 타깃 형식, 리덕션이 대체로 맞다는 뜻이라 손실 쪽 후보 상당 부분을 몇 초 만에 배제할 수 있다. 크게 벗어나면 활성 함수를 손실 앞에 중복 적용했거나 타깃 형식·리덕션이 잘못된 경우를 의심한다.

여덟 개 표본을 과적합시키는 시험은 무엇을 알려주나?

드롭아웃을 끄고 아주 작은 표본을 외우게 했을 때 손실이 0까지 내려가면 순전파·역전파·옵티마이저 연결이 올바르다는 뜻이고, 남은 문제는 데이터 규모나 용량이다. 반대로 내려가지 않으면 최적화 자체가 잘못된 것이라 학습률 스케줄러를 바꿔도 해결되지 않는다.

형태 단언문을 넣을 때 주의할 점은?

브로드캐스팅 때문에 틀린 모양끼리도 계산이 성공해버리므로 경계에서 형태를 단언해 실패를 눈에 띄게 만드는 것이 좋다. 다만 단언문은 뜨거운 경로에서 실행되어 처리량 측정에 영향을 줄 수 있고, 파이썬 인터프리터의 최적화 모드에서는 통째로 제거되므로 정확성을 여기에만 의존하면 안 된다.

원문과 출처

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

YouTube 원본 영상 보기 ↗

관련 AI 소식