TL;DR
하드코딩된 4개의 필터와 Max Pooling, Softmax를 사용하여 특정 캐릭터 이미지를 분류하는 CNN 모델을 NumPy로 구현했다.
배경
대학 프로젝트의 일환으로 PyTorch나 TensorFlow 같은 프레임워크 대신 NumPy만을 사용하여 이미지 특징 추출부터 역전파 학습까지 직접 구현한 코드를 공유했다.
의미 / 영향
프레임워크의 추상화된 기능 뒤에 숨겨진 CNN의 작동 원리를 NumPy 구현을 통해 명확히 이해할 수 있다. 특히 수동 필터 설계는 딥러닝 이전의 전통적인 컴퓨터 비전 방식과 현대 신경망의 결합 가능성을 보여준다.
실용적 조언
- 이미지 처리 시 PIL의 resize와 convert('RGB')를 사용하여 입력 데이터의 규격을 통일하면 행렬 연산 시 차원 불일치 오류를 방지할 수 있다.
- 학습률(lr)과 초기 가중치 범위를 조정하여 Softmax 확률값이 발산하지 않도록 관리하는 것이 중요하다.
섹션별 상세
def apply_layer(X, F):
"""Applies your custom Conv (element-wise) and 2x2 MaxPool [cite: 9, 11, 13, 15]"""
h, w, c = X.shape
out = np.zeros((h // 2, w // 2, c))
for i in range(0, h - 2, 2):
for j in range(0, w - 2, 2):
for k in range(c):
patch = X[i:i+3, j:j+3, k]
if patch.shape == (3, 3):
out[i//2, j//2, k] = np.max(patch * F)
return out하드코딩된 필터를 적용한 후 2x2 Max Pooling을 수행하는 커스텀 레이어 구현
logits = np.dot(W, z) + b
probs = np.exp(logits) / np.sum(np.exp(logits))
# Gradient
error = probs - y_labels[idx]
dW += np.outer(error, z)
db += error
W -= lr * (dW / 4)
b -= lr * (db / 4)Softmax 연산 및 역전파를 통한 가중치(W)와 편향(b) 업데이트 로직
용어 해설
- Convolutional Filter
- — 이미지의 특징을 추출하기 위해 입력 데이터 위를 슬라이딩하며 연산되는 작은 행렬이다. 이 코드에서는 수평 엣지, 대각선, 십자가 모양 등 하드코딩된 필터를 사용하여 이미지의 기하학적 패턴을 감지하는 역할을 한다.
- Max Pooling
- — 특정 영역 내에서 가장 큰 값을 선택하여 데이터의 차원을 축소하는 다운샘플링 기법이다. 계산량을 줄이고 이미지 내 특징의 위치 변화에 대한 불변성을 제공하여 모델의 일반화 성능을 돕는다.
- Softmax
- — 모델의 출력값(Logits)을 0과 1 사이의 확률값으로 변환하는 활성화 함수이다. 출력된 모든 클래스의 확률 합이 1이 되도록 설계되어 다중 클래스 분류 문제에서 최종 예측을 결정하는 데 사용된다.
- Backpropagation
- — 예측 오차를 출력층에서 입력층 방향으로 전달하며 가중치를 업데이트하는 알고리즘이다. 이 코드에서는 Softmax 오차를 기반으로 가중치 W와 편향 b를 조정하여 손실 함수를 최소화한다.
언급된 도구
행렬 연산 및 신경망 로직 구현
이미지 로딩 및 전처리
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.