🚨cs231n 2017 강의를 듣고 작성하였습니다.
🚨해당 게시글에 포함된 이미지 중 출처가 쓰여있지 않은 이미지는 모두 직접 그렸습니다.
2.1. 선형 분류(Linear Classification)
2.1.1. KNN 단점
- 모든 학습 데이터를 기억해야하고, 나중에 테스트 데이터와 비교하기 위해 저장해두어야한다. → 메모리 공간 관점에서 매우 비효율적
- 테스트 이미지를 분류할 때 모든 학습이미지와 다 비교를 해야하기 때문에 계산량/시간이 매우 많이 소요된다.
2.1.2. 이미지 분류를 위한 방법들의 요소
이미지 분류를 위한 보다 강력한 방법들을 발전시켜 나갈 것인데, 이는 나중에 NN과 CNN으로 확장될 것이다. 이 방법들은 아래와 같은 중요한 요소가 있다.
- 데이터를 클래스 스코어로 매핑시키는 스코어 함수
- 예측한 스코어와 실제 라벨과의 차이를 정량화해주는 손실 함수
→ 이를 최적화 문제로 바꾸어서 스코어 함수의 파라미터들에 대한 손실 함수를 최소화!
2.2. 선형분류기(Linear Classifier)
2.2.1. 이미지에서 라벨 스코어로의 파라미터화된 매핑(mapping)

이미지의 픽셀값들을 각 클래스에 대한 신뢰도 점수로 매핑시켜주는 스코어 함수를 정의하자.
즉, 학습할 데이터 N개가 있고(각각은 D차원의 벡터), 총 K개의 서로 다른 클래스가 있다.
딥러닝은 바로 이 함수 f의 구조를 적절하게 잘 설계하는 일이라고 할 수 있다.
(e.g. CIFAR-10에서는 N=50000개의 학습데이터 이미지들이 있고, 각각은 D=32x32x3=3072 픽셀로 이루어져있으며, 10개의 서로 다른 클래스가 있으므로 K=10이다.)
2.2.2. 선형 매핑함수


각 이미지 x_i를 모든 픽셀들이 flatten된 [Dx1] 모양을 갖는 하나의 열벡터로 나타낼 수 있다.
이때, [KxD]차원의 행렬 W와 [Kx1]차원의 벡터 b는 이 함수의 파라미터이다.
(e.g. CIFAR-10에서 x_i는 i번째 이미지의 모든 픽셀을 [3072x1]크기로 모양을 바꾼 열벡터이며, W는 [10x3072], b=[10x1]이다. 3072개의 숫자가 함수의 입력(이미지 픽셀 값들)으로 들어와 10개의 숫자가 출력(클래스 스코어)된다.)
W안의 파라미터들은 보통 weight라고 불리고, b는 bias벡터라 불린다. (b가 실제 입력 데이터와의 아무런 상호작용없이 출력스코어에는 영향을 주기 때문)
- 한번의 행렬곱만으로 10개의 클래스로 다른 분류기를 병렬로 계산하는 효과를 나타내고 있다. (이때 W행렬의 각 행이 각각 하나의 분류기가 된다.)
- 입력 데이터 (x_i,y_i)는 주어진 값이고 고정되어있지만. 파라미터들인 W,b의 세팅은 조절가능하다.
전체 학습 데이터에 대해서 계산할 스코어 값들이 실제 라벨과 가장 잘 일치하도록 파라미터값을 정하는 것이 최종목표이다.
2.2.3. parametric model
- Linear classifier는 “parametric model”의 가장 단순한 형태
- parametric model에는 두 개의 요소가 있다. → 입력 이미지를 X, 가중치를 W라고 한다.
- 학습 데이터의 정보를 요약하고 요약된 정보를 파라미터 W에 모아준다.

이 함수는 data X와 parameter W를 가지고 10개의 숫자를 출력하며, 출력되는 숫자는 CIFAR-10의 카테고리의 스코어이다.
“고양이”의 스코어가 높다는 것은 입력 이미지 X가 “고양이”일 확률이 크다는 것!
딥러닝은 이 함수 f의 구조를 적절하게 잘 설계하는 일이다!
2.3. 선형 분류기 분석하기

Linear classifier는 2X2 이미지를 입력으로 받고 이미지를 4차원 열벡터로 펼쳐준다.
3가지 클래스만 있다고 하면, W는 4X3 행렬이 된다.
주어진 함수에는 3차원 bias 벡터가 있다.
2.3.1. 템플릿 매칭으로서의 선형분류기 해석
가중치 행렬 W의 각 행은 각 이미지에 대한 템플릿(위에서 말한 분류기)에 해당된다.
이미지의 각 클래스 스코어는 각 템플릿들을 이미지와 내적을 통해 하나하나 비교함으로써 계산되고, 이 스코어를 기준으로 가장 잘 맞는 것이 무엇인지 정한다.
즉, 선형분류기가 결국 템플릿 매칭을 하고있고, 각 템플릿이 학습을 통해 배워진다고 할 수 있다.

위 슬라이드 하단의 이미지는 10개의 카테고리에 해당하는 행 벡터를 시각화시킨 것이다.
선형분류기는 클래스 스코어를 이미지의 모든 픽셀값들의 가중치 합으로 스코어를 계산하고 각 픽셀의 3개의 색 채널을 모두 고려한다. 이때, 각 가중치에 어떤 값을 주느냐에 따라 스코어함수는 이미지의 특정 위치에서 특정 색깔을 선호하거나 선호하지 않을 수 있다.
(e.g. “ship”클래스는 이미지의 가장자리 부분에 파란색(물에 해당하는 색)이 많은 경우에 스코어 값이 더 높아질 것이라고 추측해볼 수 있다. “ship”분류기는 파란색 채널의 파라미터(weight)들이 양의 값을 갖고, 빨강/초록색 채널에는 음의 값을 갖는 파라미터들이 많을 것이라고 예상할 수 있다.)
→ Linear Classifier의 문제 중 하나는 각 클래스에 대해서 단 하나의 템플릿만을 학습한다는 것이다,
2.3.2. 이미지와 고차원 공간상의 점에 대한 비유
이미지들을 고차원 열벡터로 펼쳤기 때문에, 우리는 각 이미지를 고차원 공간 상의 하나의 점으로 생각할 수 있다. 전체 데이터셋은 라벨링된 고차원 공간상의 점들의 집합이 될 것이다.
(e.g. CIFAR-10 데이터셋의 각 이미지는 32x32x3개의 픽셀로 이루어진 3072차원 공간 상의 한 점이다.)

각 이미지를 고차원 공간의 한 점이라고 생각하면, Linear classifier는 각 클래스를 구분시켜주는 선형 결정 경계를 그어주는 역할이다.
(e.g. 왼쪽 상단에 비행기를 예로 들어보면 Linear classifier는 파란색 선을 학습해서 비행기와 다른 클래스를 구분할 수 있다.)
하지만, 이 관점에서 직면할 수 있는 문제도 존재한다.

위의 그림은 두 개의 클래스를 가진 데이터 셋이다.
이 데이터를 선 하나로 분류할 수 있는 방법은 없다.
첫 번째 그림과 같이 홀/짝수를 분류하는 것과 같은 반전성 문제(parity problem)과 세 번째 그림과 같이 Multimodal problem은 일반적으로 선형 분류기로 풀기 힘들다.
2.3.3. Bias 트릭
앞에서 정의한 스코어 함수를 생각해보자.

두 파라미터 W,b를 하나의 행렬로 합치고, x_i를 항상 1의 값을 갖는 한차원(디폴트 bias 차원)을 늘리는 방식이다.
이 한 차원을 추가하는 것으로 새 스코어 함수는 행렬곱 한 번으로 계산이 가능해진다.

e.g. CIFAR-10에서 x_i는 [3072x1]대신 [3073x1]이 된다.

2.3.4. 이미지데이터 전처리
위의 예시에서는 0~255 사이의 픽셀 값을 사용했다. 머신러닝에서는 항상 입력 특징의 정규화를 수행하는 것이 매우 일반적인 관행이다. 특히, 모든 특성에서 평균을 빼서 데이터를 중앙에 두는 것이 중요하다. 이미지의 경우에는 학습 이미지 전체에 걸쳐 평균 이미지를 계산하고 모든 이미지에서 이를 빼서 픽셀 범위가 대략 -127~127인 이미지를 얻는 것에 해당한다. 더욱 일반적인 전처리는 -1~1 범위가 되도록 조정하는 것이다.
2.4. 손실함수(Loss function)
많은 양의 데이터에 대해 스코어가 정답과 가깝도록 정답을 출력하는 스코어 함수는 ‘잘 만들어진’ 스코어 함수라고 할 수 있다.
즉, 예측한 클래스가 얼마나 정답과 유사한지 오차를 측정하여 그 오차값이 최대한 작도록 해야 잘 만들어진 스코어 함수라는 것이다. → 이때 그 오차 값을 loss라 하고 비용을 계산하는 함수를 loss function이라 부른다.
2.4.1. 손실함수
손실함수란? W를 입력으로 받아서 각 스코어를 확인하고 이 W가 얼마나 안좋은지를 정량적으로 말해주는 것
최적화 과정이란? 행렬 W가 될 수 있는 모든 경우의 수에 대해서 가장 좋은 W를 찾는 것

예측함수란 입력이미지 x와 가중치 W를 입력으로 받아 Y를 예측하는 것이다. 즉, f(x,W)는 예측함수이다.
예측함수가 예측한 Y값과 실제 Y값을 비교하여 각 샘플의 Loss를 구할 수 있으며, 최종 loss인 L은 데이터셋에서 각 N개의 샘플들의 Loss의 평균이 된다. 따라서, 위에 주어진 예제에 대한 손실함수는 슬라이드의 우측 하단과 같은 공식이 된다.
나중에는 이 최종 Loss를 이용해서 최적화를 진행하게 된다.
2.5. Multiclass Support Vector Machine(SVM) 손실함수
- Multiclass SVM은 여러 클래스를 다루기 위한 이진 SVM의 일반적인 형태이다.
- SVM 손실은 SVM이 '각 이미지에 대한 정답 클래스'가 '잘못된 클래스'보다 '고정 마진 delta만큼 높은 점수'를 갖기를 원하도록 설정됨 → 정답 스코어가 다른 스코어들보다 높으면 좋다는 것

위 예시에서는 고정 마진 delta를 1로 설정하였다.
cat을 i=1, car를 i=2, frog를 i=3이라 하였을 때, Multiclass SVM Loss를 생각해보면 아래와 같다.
L1=max(0,5.1-3.2+1)+max(0,-1.7-3.2+1)=2.9
L2=max(0,-1.3-4.9+1)+max(0,2.0-4.9+1)=0
L3=max(0,2.2+3.1+1)+max(0,2.5+3.1+1)=12.9
→전체 학습의 최종 Loss는 각 트레이닝 이미지의 Loss들의 평균이므로 L=(L1+L2+L2)/3=5.3
경첩(Hinge loss) : 0과 다른 값의 최댓값, max(0,value)와 같은 식으로 손실 함수를 만드는 류의 손실함수

여기서 x축은 실제 정답 클래스의 스코어이고, y축은 Loss이다. 정답 카테고리의 스코어가 올라갈수록 Loss는 선형적으로 줄어든다.
이때 중요한 것은 단순히 오답 스코어보다 높아야만 하는 것이 아니라, 오답 스코어보다 'Safety Margin(여기서는 1)'만큼 더 높아야 Loss가 0이 된다.
따라서 Loss가 말하고자 하는 것은 정답 스코어가 다른 스코어들보다 높으면 좋다는 것이다.
2.5.1. 정규화(Regularization)
위 내용에서 확인한 최종 손실값은 오직 데이터의 Loss에 대해서만 신경쓰고 있다. Loss가 0인 W를 선택하는 것은 마치 학습 데이터에 꼭 맞는 W를 찾으라고 말하는 것과 같다. 하지만 실제로는 학습 데이터에 얼마나 꼭 맞는지는 전혀 신경쓰지 않는다.
기계학습(machine learning)의 핵심은, 학습 데이터를 활용하여 어떤 분류기를 찾는 것인데, 그 분류기는 "학습 데이터"가 아닌 "테스트 데이터"에 적용할 것이기 때문이다. → 학습 데이터에서의 성능이 아닌, 테스트 데이터에 대한 성능에 관심이 있다.
구체적인 예를 들어 확인해보자.

파란 점의 데이터셋이 주어졌을 때, 파란색 점(training set)에 꼭 맞는 곡선은 파란색 곡선과 같을 것이다.
하지만, 고려해야하는 부분은 학습 데이터의 성능이 아니라 테스트 데이터의 성능이다. 즉, 초록색 점(test data)이 주어졌을 때 초록색 선을 만들길 원한다.
따라서, 파란색 곡선이 아닌 초록색 선을 만들기 위해 손실함수에 항을 하나 추가하여 정규화를 한다.

“Data loss term”에서는 분류기가 학습 데이터에 핏하게 한다.
손실 함수에 “Regularization term”을 추가하는데 이 항이 조금 더 단순한 W를 선택하도록 도와준다.
이렇게 되면 일반적인 손실함수의 형태는 “Data Loss”와 “Regularization” 두 개의 항을 갖게 된다.
또한, 하이퍼파라미터인 람다는 두 항 간의 trade off이다. 이는 고려해야 할 중요한 요소이다.

실제로 Regularization에는 여러 가지 종류가 있으며, 가장 보편적인 것은 L2 Regularization이다.
→ Regularization은 모델이 트레이닝 데이터셋에 완벽히 fit하지 못하도록 모델의 복잡도에 패널티를 부여하는 방법이다.
2.6. Softmax 분류기(Multinomial Logistic regression)
SVM이 스코어 자체의 차이를 마진(Margin)으로 해석했다면, Softmax 분류기는 점수를 확률로 해석한다.

먼저, 스코어를 0과 1 사이의 값으로 압축하고, 그 총합이 1이 되도록 만든다.
여기서, z_j는 분류기가 예측한 초기 스코어이며, f_j는 Softmax를 거쳐 나온 '이 클래스일 확률'이다.
이제 'softmax를 이용해 예측한 확률'과 '실제 정답 확률'이 얼마나 다른지 계산해야 한다.

이때 Softmax 분류기는 정답 클래스의 예측 확률에 로그를 씌운 값을 손실(Loss)로 사용한다.
예를 들어, 정답이 '고양이'인데 고양이일 확률을 0.9(90%)로 높게 예측했다면 -log(0.9)≈0.1로 손실이 작다. 반대로 고양이일 확률을 0.1(10%)로 낮게 예측했다면 -log(0.1)≈2.3으로 손실이 커진다. 즉, 정답 클래스의 확률을 1에 가깝게 높이는 것이 목표이다.

정보 이론 관점에서 확인해보자.
확률이 낮으면 -log의 값이 커지므로 귀한 정보이고 확률이 높다면 -log의 값이 작아지므로 흔한 정보이다.
이렇게 귀한 정보를 정답으로 예측하지 못한 경우에는 손실이 커지도록 하는 것이다.
위 손실함수는 교차 엔트로피(cross-entropy) 손실의 개념과 동일하다.

실제 분포 p와 예측 분포 q사이에는 위와 같은 교차 엔트로피가 발생하며, 이때 q는 softmax 함수의 결과값이다.
여기서 실제 분포 p는 0 또는 1로써 해당 클래스가 맞다면 1, 틀리면 0이다. 따라서 정답이 아닌 항들은 0이 되어 사라지고, 정답 클래스에 해당하는 항만 남게 된다.
softmax 분류기는 이 교차엔트로피의 합을 최소화하는 것이 목표이다. 따라서 교차 엔트로피식은 예측된 클래스 확률 q가 최대한 p와 가깝기를 바랄 것이다.
2.6.1. Softmax 함수
스코어들에 지수를 취해서 양수가 되도록 만들고, 지수들의 합으로 아래와 같이 정규화시킨다.

Softmax 함수를 거치게 되면 확률분포를 얻을 수 있고, 그것은 해당 클래스일 확률이다. (확률이므로 0~1의 값이고 모든 확률의 합은 1이다.)
→ Softmax에서 나온 확률이 정답 클래스에 해당하는 클래스의 확률을 1에 가깝게 하고싶다.
→ Loss는 -log(정답클래스의 확률)이다. (’-’는 얼마나 좋은지가 아니라 얼마나 나쁜지를 확인하기 위함이다)
→ Softmax loss의 최솟값은 0이고 최댓값은 무한대이다.


선형분류기의 출력으로 나온 스코어를 통해 확인해보자.
먼저 스코어를 지수화시키고(양수가 되도록), 합이 1이 되도록 정규화시킨다. 그리고 정답 확률에만 -log를 씌운다.
2.7. SVM과 Softmax 비교
2.7.1. 공통점
- 선형분류기를 통한 값을 이용한다.
2.7.2. 차이점
- SVM에서는 정답 스코어의 값과 정답이 아닌 스코어간의 마진을 신경썼지만, Softmax는 정답스코어의 값 자체에 신경을 쓴다.
- SVM은 hinge loss에서 볼 수 있듯이 일정 성능에 도달하면, 성능을 개선하려고 하지 않지만. Softmax는 계속 성능을 개선하려한다.
'ML,DL' 카테고리의 다른 글
| [cs231n] 신경망 파트 2 : 데이터 준비 및 Loss (0) | 2026.02.04 |
|---|---|
| [cs231n] 신경망 파트 1 : 네트워크 구조 정하기 (0) | 2026.02.03 |
| [cs231n] Backpropagation, 직관 (0) | 2026.02.02 |
| [cs231n] 최적화 : 확률 그라디언트 하강(Stochastic Gradient Descent) (0) | 2026.02.01 |
| [cs231n] 이미지 분류 : 데이터 기반 방법론, k-Nearest Neighbor, train/val/test 구분 (0) | 2026.01.30 |