머신러닝 & 딥러닝/딥러닝

[AI 기초 다지기] 스탠포드 대학 딥러닝 기초(1) - Image Classification & Linear classification

Haru_29 2024. 11. 4. 21:00

시작하기 전

지금으로부터 4년전 OpenAI의 CEO 샘 알트먼이 둠 프로그래머로 유명한 존 카맥을 초대하여 openAI 사람들과 이야기하며 일리야 수츠키버가 자신이 정리한 30가지 항목을 주며 이를 다 이해하면 업계 내의 정보 90퍼센트를 따라왔다라고 이야기를 하였습니다. 물론 4년전 내용이라 과거의 내용일지 모르겠지만 기초를 다시 다지는데 이보다 더 좋은 코스는 없을 것 같아 조금씩 따라가 보도록 하겠습니다.

https://tensorlabbet.com/2024/09/24/ai-reading-list/

 

스탠포드 대학 딥러닝 기초 목차

1. Image Classification: Data-driven Approach, k-Nearest Neighbor, train/val/test splits

2. Linear classification: Support Vector Machine, Softmax

3. Optimization: Stochastic Gradient Descent

4. Backpropagation, Intuitions

5. Neural Networks Part 1: Setting up the Architecture

6. Neural Networks Part 2: Setting up the Data and the Loss

7. Neural Networks Part 3: Learning and Evaluation

8. Putting it together: Minimal Neural Network Case Study

9. Convolutional Neural Networks: Architectures, Convolution / Pooling Layers

10. Understanding and Visualizing Convolutional Neural Networks

11. Transfer Learning and Fine-tuning Convolutional Neural Networks

 

 

Image Classification

 

1. 이미지 분류의 기초 개념

 

1.1 정의

이미지 분류는 주어진 이미지를 사전에 정의된 카테고리 중 하나로 분류하는 컴퓨터 비전의 기본적인 작업입니다. 예를 들어, 이미지가 '고양이', '개', '자동차' 등의 클래스 중 어디에 속하는지 판단하는 것입니다.

 

1.2 디지털 이미지의 구조

  • 픽셀 구성: Width × Height × Channels(RGB)
  • 색상 채널:
    • Red (0-255)
    • Green (0-255)
    • Blue (0-255)
  • 예시: 248×400×3 이미지는 총 297,600개의 숫자로 구성

 

1.3 분류 과정

  1. 이미지 입력 → 픽셀 배열 변환
  2. 특징 추출/학습
  3. 클래스 예측
  4. 결과 출력

 

2. 이미지 분류의 주요 도전 과제

 

2.1 시점 변화(Viewpoint Variation)

  • 정의: 동일 객체의 다양한 카메라 각도
  • 영향:
    • 2D 투영의 변화
    • 객체 인식의 어려움
  • 해결방안:
    • 다양한 각도의 학습 데이터 사용
    • 회전 불변성 특징 추출

 

2.2 크기 변화(Scale Variation)

  • 이미지 내 크기:
    • 가까이/멀리 있는 객체
    • 다양한 해상도
  • 실제 크기:
    • 같은 클래스 내 크기 차이
    • 예: 코끼리 vs 쥐
  • 대응 방법:
    • 다중 스케일 처리
    • 피라미드 기법 적용

 

2.3 변형(Deformation)

  • 유연한 객체:
    • 자세 변화
    • 형태 변형
  • 예시:
    • 동물의 다양한 포즈
    • 옷의 주름
  • 해결책:
    • 변형 모델링
    • 데이터 증강

 

2.4 가림 현상(Occlusion)

  • 특징:
    • 부분적 가려짐
    • 객체 간 겹침
  • 문제점:
    • 정보 손실
    • 불완전한 특징
  • 대처 방안:
    • 부분 기반 인식
    • 문맥 정보 활용

 

2.5 조명 조건(Illumination)

  • 변화 요소:
    • 밝기
    • 그림자
    • 색상 왜곡
  • 영향:
    • 픽셀 값 변화
    • 특징 추출 어려움
  • 해결 방법:
    • 조명 정규화
    • 불변 특징 사용

 

2.6 배경 혼잡(Background Clutter)

  • 문제점:
    • 객체-배경 구분 어려움
    • 노이즈 영향
  • 해결 전략:
    • 배경 제거
    • 객체 분할
    • 주의 메커니즘

 

2.7 클래스 내 변동(Intra-class Variation)

  • 다양성:
    • 같은 클래스 내 다른 모양
    • 색상, 텍스처 변화
  • 예시:
    • 의자의 다양한 디자인
    • 고양이의 다양한 품종
  • 접근 방법:
    • 충분한 학습 데이터
    • 계층적 특징 학습

 

3. k-최근접 이웃(k-NN) 분류기 상세 분석

 

3.1 기본 원리

class NearestNeighbor:
    def train(self, X, y):
        self.Xtr = X
        self.ytr = y

    def predict(self, X):
        num_test = X.shape[0]
        Ypred = np.zeros(num_test, dtype=self.ytr.dtype)
        
        for i in range(num_test):
            distances = np.sum(np.abs(self.Xtr - X[i,:]), axis=1)
            min_index = np.argmin(distances)
            Ypred[i] = self.ytr[min_index]
            
        return Ypred
 

 

3.2 거리 측정 방법

  1. L1 거리 (Manhattan)
distances = np.sum(np.abs(self.Xtr - X[i,:]), axis=1)

    2. L2 거리 (Euclidean)

distances = np.sum(np.abs(self.Xtr - X[i,:]), axis=1)

 

 

3.3 하이퍼파라미터 최적화

  • 교차 검증 절차:
    1. 데이터 분할 (k-fold)
    2. 파라미터 그리드 서치
    3. 검증 성능 평가
    4. 최적 파라미터 선택

 

4. 실제 구현 가이드라인

 

4.1 데이터 전처리

1. 정규화

X = (X - np.mean(X)) / np.std(X)

2. 차원 축소

from sklearn.decomposition import PCA
pca = PCA(n_components=100)
X_reduced = pca.fit_transform(X)

 

4.2 데이터 분할

# 학습/검증 분할
X_train, X_val = X[:45000], X[45000:]
y_train, y_val = y[:45000], y[45000:]

 

4.3 모델 평가

def evaluate_accuracy(model, X, y):
    predictions = model.predict(X)
    return np.mean(predictions == y)

 

 

4.4 성능 최적화 팁

  1. 메모리 효율성:
    • 배치 처리
    • 희소 행렬 사용
  2. 계산 속도:
    • 벡터화 연산
    • 병렬 처리
  3. 정확도 향상:
    • 앙상블 방법
    • 특징 공학

 

5. 실제 응용 사례

 

5.1 CIFAR-10 데이터셋

  • 60,000개 이미지
  • 10개 클래스
  • 32×32 픽셀
  • RGB 컬러

 

5.2 성능 벤치마크

  • k-NN 기준선: ~35-40% 정확도
  • 최신 CNN: ~95% 정확도

 

6. 고급 최적화 기법

 

6.1 k - Nearest Neighbor Classifier

from sklearn.neighbors import NearestNeighbors
nbrs = NearestNeighbors(n_neighbors=k, algorithm='ball_tree')
nbrs.fit(X_train)

 

6.2 차원 축소 기법

  1. PCA
  2. t-SNE
  3. UMAP

 

6.3 앙상블 방법

  • 다중 k-NN 조합
  • 가중치 투표

 

7. 성능 모니터링 및 개선

 

7.1 성능 지표

  • 정확도
  • 혼동 행렬
  • 정밀도/재현율

 

7.2 오류 분석

  • 오분류 패턴 식별
  • 데이터 품질 검사
  • 모델 개선 방향 설정

 

Linear Classification

 

1. 개요

이미지 분류는 고정된 카테고리 세트에서 이미지에 단일 레이블을 할당하는 작업입니다. 이전에 살펴본 k-Nearest Neighbor (kNN) 분류기는 몇 가지 단점이 있었습니다:

  • 모든 학습 데이터를 기억하고 저장해야 함 (기가바이트 크기의 데이터셋 문제)
  • 테스트 이미지 분류 시 모든 학습 이미지와 비교해야 하는 비효율성

이러한 단점을 극복하기 위해 더 강력한 접근 방식인 선형 분류기를 알아보겠습니다.

 

2. 선형 분류기의 주요 구성 요소

선형 분류기는 두 가지 주요 구성 요소를 가집니다:

  1. 점수 함수(Score Function): 원시 데이터를 클래스 점수로 매핑
  2. 손실 함수(Loss Function): 예측된 점수와 실제 레이블 간의 일치도를 정량화

 

2.1 점수 함수 (Score Function)

가장 단순한 형태의 매핑 함수는 선형 매핑입니다:

f(xi,W,b) = Wxi + b
  • xi: 이미지의 모든 픽셀을 하나의 열 벡터로 변환
  • W: 가중치 행렬
  • b: 편향 벡터

예를 들어 CIFAR-10의 경우:

  • xi: 3072 x 1 크기 (32x32x3 픽셀)
  • W: 10 x 3072 크기
  • b: 10 x 1 크기
  • 출력: 10개의 클래스 점수

 

2.2 선형 분류기 해석

  1. 템플릿 매칭으로서의 해석
    • W의 각 행은 특정 클래스의 템플릿/프로토타입
    • 각 클래스의 점수는 이미지와 템플릿의 내적으로 계산
    • 예: "배" 클래스의 템플릿은 파란색 픽셀이 많음 (바다를 반영)
  2. 이미지를 고차원 점으로 보는 해석
    • 각 이미지는 고차원 공간의 한 점
    • 각 클래스 점수는 이 공간에서의 선형 함수

3. 손실 함수 (Loss Functions)

 

3.1 Multiclass Support Vector Machine (SVM) 손실

SVM 손실은 정답 클래스의 점수가 오답 클래스보다 특정 마진(Δ)만큼 높기를 "원합니다":

Li = Σj≠yi max(0, sj - syi + Δ)
  • 정답 클래스와 오답 클래스의 점수 차이가 최소 마진(Δ) 이상이어야 함
  • 마진을 넘는 차이는 추가 손실에 영향을 주지 않음
  • 정규화(Regularization) 항을 추가하여 가중치의 크기를 제한

 

3.2 Softmax 분류기

Softmax 분류기는 클래스에 대한 "확률"을 제공합니다:

Li = -log(e^fyi / Σj e^fj)

주요 특징:

  • 각 클래스에 대한 확률값 제공
  • 정규화 강도(λ)에 따라 확률 분포의 첨도가 달라짐
  • 크로스 엔트로피 손실 사용

 

4. SVM vs Softmax 비교

  1. 점수 해석
    • SVM: 클래스 점수로 해석 (보정되지 않은 값)
    • Softmax: 정규화된 로그 확률로 해석
  2. 목적 함수 특성
    • SVM: 마진만 만족하면 더 이상 점수를 신경 쓰지 않음
    • Softmax: 항상 더 나은 확률 분포를 위해 노력
  3. 실제 성능
    • 대부분의 경우 성능 차이가 크지 않음
    • 데이터셋과 문제에 따라 선택

 

5. 실용적 고려사항

  1. 전처리
    • 입력 특성의 정규화가 중요
    • 평균 이미지를 빼서 중심화
    • [-1, 1] 범위로 스케일링
  2. 수치적 안정성
    • Softmax 계산 시 지수 함수로 인한 오버플로우 주의
    • logC = -maxj fj 를 사용한 정규화 트릭 적용

 

6. 결론

선형 분류기는 다음과 같은 장점을 제공합니다:

  1. 학습 후 훈련 데이터를 버릴 수 있음
  2. 새로운 이미지에 대한 예측이 빠름 (단일 행렬 곱)
  3. 다양한 손실 함수를 통한 유연한 학습 가능
  4. 신경망으로의 자연스러운 확장 가능

다음 단계는 이러한 손실 함수를 최소화하는 최적의 매개변수를 찾는 최적화 과정을 학습하는 것입니다.