AI VIDEO BRIEFING

넘파이와 수식만으로 신경망 밑바닥부터 구현하기: 순전파·역전파와 MNIST 손글씨 숫자 분류

텐서플로나 케라스 없이 넘파이와 선형대수 수식만으로 2층 신경망을 만들어 MNIST 손글씨 숫자를 분류한다. 순전파와 활성화 함수, 역전파, 경사하강법의 원리를 코드로 하나씩 직접 따라가며 신경망의 작동을 구체적으로 이해한다.

텐서플로 없이 넘파이와 수식만으로 신경망을 밑바닥부터 만들기 영상 대표 이미지

핵심 메시지

  • 고수준 프레임워크 대신 넘파이와 수식으로 직접 구현하면 신경망이 실제로 어떻게 동작하는지 훨씬 구체적으로 이해할 수 있다.
  • MNIST 손글씨 숫자(28x28, 784픽셀)를 입력층 784, 은닉층 10, 출력층 10의 간단한 2층 신경망으로 분류한다.
  • 순전파는 가중치와 편향을 곱해 더한 뒤 ReLU와 소프트맥스 활성화 함수를 통과시켜 예측을 만든다.
  • 역전파는 예측과 정답의 오차를 거꾸로 전파해 각 가중치·편향이 오차에 기여한 정도를 구하고 경사하강법으로 갱신한다.
  • 30분 남짓 만에 짠 모델이 학습 데이터 약 84%, 검증 데이터 약 85.5% 정확도를 냈다.

쉽게 이해하기

발표자는 텐서플로나 케라스 같은 라이브러리를 쓰지 않고 넘파이와 선형대수 수식만으로 신경망을 밑바닥부터 만든다. 고수준에서 '층과 노드를 연결한다'는 식의 설명은 모호하게 느껴지기 쉬운데, 방정식을 직접 구현해 보면 신경망의 작동을 훨씬 명확하게 이해할 수 있다는 문제의식에서 출발한다.

다루는 과제는 손글씨 숫자 분류다. MNIST 데이터셋의 28x28 회색조 이미지는 784개의 픽셀 값(0~255)으로 펼쳐진다. 여러 이미지를 행렬로 놓되, 각 열이 하나의 예제가 되도록 전치한다. 신경망은 입력층 784개 노드, 은닉층 10개 유닛, 출력층 10개 유닛(각 숫자 0~9에 대응)으로 구성된 단순한 2층 구조다.

학습은 세 단계로 이뤄진다. 첫째 순전파에서는 입력에 가중치 행렬을 곱하고 편향을 더해 Z1을 얻은 뒤 ReLU를 적용하고, 다시 두 번째 가중치·편향을 거쳐 출력층에서는 소프트맥스로 각 숫자의 확률(0~1)을 만든다. 활성화 함수를 쓰지 않으면 층이 선형결합에 그쳐 은닉층이 없는 것과 같아지므로, 비선형성을 주는 활성화 함수가 필수다.

둘째 역전파에서는 예측에서 시작해 정답과의 오차를 구한다. 출력층 오차 dZ2는 예측에서 원-핫 인코딩한 정답을 뺀 값이고, 여기서 dW2와 db2를 계산한다. 은닉층으로 갈 때는 두 번째 가중치를 전치해 오차를 거꾸로 전파하고 ReLU의 도함수를 곱해 dZ1을 얻는다. ReLU의 도함수는 입력이 0보다 크면 1, 아니면 0이라 간단하게 구현된다.

셋째로 학습률 알파를 곱해 가중치와 편향을 갱신하고, 순전파-역전파-갱신을 반복하는 경사하강법을 돈다. 캐글 노트북에서 데이터를 불러와 학습/검증 세트로 나눈 뒤 실행했더니, 초기 가중치 설정과 변수 혼동 같은 버그를 잡고 나서 반복 250회쯤에 학습 정확도 약 84%, 검증 세트에서 약 85.5%가 나왔다. 층과 유닛을 늘리면 더 개선할 여지가 있다.

주요 인사이트

  • 활성화 함수가 없으면 여러 층을 쌓아도 결국 하나의 선형회귀와 같아, 비선형성이 신경망의 표현력을 만든다.
  • 출력층의 소프트맥스는 각 노드 값을 지수화한 뒤 열 전체 합으로 나눠 확률처럼 0~1 사이로 만든다.
  • 정답 레이블을 원-핫 인코딩해 예측과 뺄셈함으로써 출력층 오차를 바로 구할 수 있다.
  • 역전파는 가중치를 전치해 오차를 거꾸로 흘려보내고 활성화 함수의 도함수로 되돌리는 과정이다.
  • 학습률은 모델이 학습하지 않는 하이퍼파라미터로, 사람이 직접 정해 경사하강법의 갱신 폭을 조절한다.
  • 과적합을 피하려고 학습에 쓰지 않는 검증(dev) 세트를 떼어 두고 성능을 확인한다.

자주 묻는 질문

왜 텐서플로 같은 프레임워크 대신 넘파이로 직접 구현하나요?

고수준 프레임워크는 편리하지만 내부 동작이 가려져 이해가 모호해지기 쉽습니다. 넘파이와 수식으로 밑바닥부터 만들면 순전파와 역전파, 경사하강법이 실제로 어떻게 계산되는지 구체적으로 파악할 수 있습니다.

활성화 함수는 왜 필요한가요?

활성화 함수가 없으면 각 층이 이전 층의 선형결합에 그쳐, 층을 쌓아도 결국 하나의 선형모델과 같아집니다. ReLU나 소프트맥스 같은 비선형 함수를 넣어야 신경망이 복잡하고 강력한 함수를 표현할 수 있습니다.

출력층에서 소프트맥스를 쓰는 이유는 무엇인가요?

출력층의 10개 노드는 각 숫자에 대한 확률이어야 하므로 0과 1 사이 값이 필요합니다. 소프트맥스는 각 노드를 지수화한 뒤 전체 합으로 나눠 확률처럼 만들어 줍니다.

이 간단한 모델의 정확도는 어느 정도였나요?

반복 250회 부근에서 학습 데이터 약 84%, 학습에 쓰지 않은 검증 세트에서 약 85.5% 정확도를 얻었습니다. 층과 유닛을 늘리면 더 높일 수 있다고 설명합니다.

원문과 출처

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

YouTube 원본 영상 보기 ↗

관련 AI 소식