시작하기 전
지금으로부터 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 분류 과정
- 이미지 입력 → 픽셀 배열 변환
- 특징 추출/학습
- 클래스 예측
- 결과 출력
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 거리 측정 방법
- 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 하이퍼파라미터 최적화
- 교차 검증 절차:
- 데이터 분할 (k-fold)
- 파라미터 그리드 서치
- 검증 성능 평가
- 최적 파라미터 선택
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 성능 최적화 팁
- 메모리 효율성:
- 배치 처리
- 희소 행렬 사용
- 계산 속도:
- 벡터화 연산
- 병렬 처리
- 정확도 향상:
- 앙상블 방법
- 특징 공학
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 차원 축소 기법
- PCA
- t-SNE
- UMAP
6.3 앙상블 방법
- 다중 k-NN 조합
- 가중치 투표
7. 성능 모니터링 및 개선
7.1 성능 지표
- 정확도
- 혼동 행렬
- 정밀도/재현율
7.2 오류 분석
- 오분류 패턴 식별
- 데이터 품질 검사
- 모델 개선 방향 설정
Linear Classification
1. 개요
이미지 분류는 고정된 카테고리 세트에서 이미지에 단일 레이블을 할당하는 작업입니다. 이전에 살펴본 k-Nearest Neighbor (kNN) 분류기는 몇 가지 단점이 있었습니다:
- 모든 학습 데이터를 기억하고 저장해야 함 (기가바이트 크기의 데이터셋 문제)
- 테스트 이미지 분류 시 모든 학습 이미지와 비교해야 하는 비효율성
이러한 단점을 극복하기 위해 더 강력한 접근 방식인 선형 분류기를 알아보겠습니다.
2. 선형 분류기의 주요 구성 요소
선형 분류기는 두 가지 주요 구성 요소를 가집니다:
- 점수 함수(Score Function): 원시 데이터를 클래스 점수로 매핑
- 손실 함수(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 선형 분류기 해석
- 템플릿 매칭으로서의 해석
- W의 각 행은 특정 클래스의 템플릿/프로토타입
- 각 클래스의 점수는 이미지와 템플릿의 내적으로 계산
- 예: "배" 클래스의 템플릿은 파란색 픽셀이 많음 (바다를 반영)
- 이미지를 고차원 점으로 보는 해석
- 각 이미지는 고차원 공간의 한 점
- 각 클래스 점수는 이 공간에서의 선형 함수
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 비교
- 점수 해석
- SVM: 클래스 점수로 해석 (보정되지 않은 값)
- Softmax: 정규화된 로그 확률로 해석
- 목적 함수 특성
- SVM: 마진만 만족하면 더 이상 점수를 신경 쓰지 않음
- Softmax: 항상 더 나은 확률 분포를 위해 노력
- 실제 성능
- 대부분의 경우 성능 차이가 크지 않음
- 데이터셋과 문제에 따라 선택
5. 실용적 고려사항
- 전처리
- 입력 특성의 정규화가 중요
- 평균 이미지를 빼서 중심화
- [-1, 1] 범위로 스케일링
- 수치적 안정성
- Softmax 계산 시 지수 함수로 인한 오버플로우 주의
- logC = -maxj fj 를 사용한 정규화 트릭 적용
6. 결론
선형 분류기는 다음과 같은 장점을 제공합니다:
- 학습 후 훈련 데이터를 버릴 수 있음
- 새로운 이미지에 대한 예측이 빠름 (단일 행렬 곱)
- 다양한 손실 함수를 통한 유연한 학습 가능
- 신경망으로의 자연스러운 확장 가능
다음 단계는 이러한 손실 함수를 최소화하는 최적의 매개변수를 찾는 최적화 과정을 학습하는 것입니다.
'머신러닝 & 딥러닝 > 딥러닝' 카테고리의 다른 글
[AI 기초 다지기] 스탠포드 대학 딥러닝 기초(4) - Convolutional Neural Networks (6) | 2024.11.08 |
---|---|
[AI 기초 다지기] 스탠포드 대학 딥러닝 기초(3) - Neural Networks (1) | 2024.11.07 |
[AI 기초 다지기] 스탠포드 대학 딥러닝 기초(2) - Optimization: Stochastic Gradient Descent & Backpropagation, Intuitions (2) | 2024.11.05 |
[딥 러닝] 인공 신경망(Artificial Neural Network)이란 무엇인가? (0) | 2023.06.01 |
[딥 러닝] 퍼셉트론이란 무엇인가? (0) | 2023.06.01 |