AI · Deep Learning · Computer Vision · 판별형 모델

OUTTA Basic — 함수 근사와 비선형 분류를 신경망으로 이해하기

2026-08-01 · 수정 2026-08-01 · Hyeongrok Ryu

Sigmoid basis로 함수를 근사하고 spiral data의 decision boundary를 학습하면서 신경망의 깊이와 학습 실패를 비교했다.

Series
2024 OUTTA AI 부트캠프 Basic · 2
유형 / 난이도
study-note · beginner
Tools
Python, PyTorch, Matplotlib
01Sigmoid를 basis로 보기

이 글에서 순서대로 다시 확인하는 학습 포인트입니다.

02Loss와 backpropagation

이 글에서 순서대로 다시 확인하는 학습 포인트입니다.

03Spiral data 분류

이 글에서 순서대로 다시 확인하는 학습 포인트입니다.

04실패한 학습 읽기

이 글에서 순서대로 다시 확인하는 학습 포인트입니다.

이 글의 목차에서 자동으로 만든 개념 흐름도입니다.

Sigmoid를 basis로 보기

먼저 신경망이 무엇인지 neuron 개수로만 생각하지 않고, 입력을 여러 함수로 바꾼 다음 가중합하는 구조로 정리했다. 71쪽 인공신경망 모듈의 activation 설명을 보면서 sigmoid의 기울기와 위치를 weight·bias가 어떻게 바꾸는지 Notebook에서 비교했다.

한 hidden layer의 출력을 다음처럼 적어 보니 그림과 식이 연결됐다.

ŷ(x) = Σⱼ vⱼσ(wⱼx + bⱼ) + c

Loss와 backpropagation

근사함수와 목표함수의 차이를 평균제곱오차로 두고 모든 parameter에 gradient를 전달했다. 당시 저장된 loss 곡선은 2,000 epoch 부근까지 감소했지만, epoch 수 자체보다 curve가 진동하면서도 내려가는지 확인하는 데 사용했다.

함수 근사 학습에서 2천 epoch 동안 감소한 training loss
초기 진동 뒤 loss가 점차 0에 가까워지는 저장 출력.

Spiral data 분류

직선으로 나눌 수 없는 세 class spiral을 보면서 hidden layer가 왜 필요한지 확인했다. CrossEntropyLoss에는 softmax 전 logit을 넣고, 출력 shape가 (batch, 3)인지 먼저 출력했다. 학습이 진행되자 경계가 점 구름 사이를 휘어 지나갔다.

실패한 학습 읽기

두 번째 spiral 실험에서는 loss가 약 1.10 근처에서 움직이고 accuracy가 1/3에 머물렀다. 세 class를 무작위로 고를 때의 수준이다. activation을 빠뜨렸는지, label dtype이 long인지, optimizer가 실제 model parameter를 받는지부터 순서대로 확인했다.

최소 분류 모델

model = torch.nn.Sequential(
    torch.nn.Linear(2, 32),
    torch.nn.Tanh(),
    torch.nn.Linear(32, 32),
    torch.nn.Tanh(),
    torch.nn.Linear(32, 3),
)

logits = model(features)
assert logits.shape == (features.shape[0], 3)
loss = torch.nn.functional.cross_entropy(logits, labels.long())

이번에 정리한 기준

나는 loss 감소, accuracy 상승, decision boundary 세 가지를 함께 봤다. 한 그래프만 좋아 보여도 다른 두 개가 맞지 않으면 model·label·split을 다시 확인했다. 저장된 Notebook 사본 15개 중 이 모듈과 연결된 출력은 basis, loss, spiral, 경계까지 이어져 있어 성공과 실패를 함께 공부하기 좋았다.

사용한 자료

  • 인공신경망 — course-pdf; perceptron, activation, backpropagation
논문 첫 페이지 미리보기