root@의지박약공부노트 ~$

DEEPML(CS231n) Lec.02_2 Linear Classification

Note
@2021-01-04 02:02:19

 Linear Classification은 지난번 포스팅NN(Nearest Neighbor)과 KNN(K-Nearest Neighbor)을 기반으로 한 알고리즘입니다. Linear Classification은 아주 간단한 알고리즘이지만 NN(Neural Network)와 CNN(Convolution Neural Network)의 기반이 되는 알고리즘입니다.

 

 이해가 어려우니 친숙한 레고에 비유해 봅시다. 우선 개별 블록을 Linear Classifier로 생각해 볼까요? 블럭 하나로도 보기 좋지만, 우리는 이를 이용해서 보다 고차원적인 결과물을 만들 수 있습니다. 보통 하나의 레고로 끝내지 않고 뭔갈 쌓게 되죠? 이처럼 이를 구성요소로 하여 쌓아 올린 기둥을 Neural Network라고 생각할 수 있습니다. 그러면 쌓아 올린 각 기둥들을 모아 멋진 성을 만들 수도 있겠죠? 이처럼 NN으로 구성한 구조물을 CNN이라 생각한다면 이해가 좀 더 쉽게 될 것 같습니다.


 이처럼 다양한 종류의 딥러닝 알고리즘의 가장 기본이 되는 블록중 하나가 Linear Classifier입니다. 따라서 Linear Classification이 어떻게 동작하는지 아는 것이 매우 중요하다고 할 수 있습니다. 결국 다양한 NN의 구성 요소니까요.


 다음 그림에서 input은 이미지이고 output은 문장입니다. 이때 이미지 인식에 CNN을, 언어 인식에 RNN을 사용합니다. 단순히 설명하자면 두 모델을 레고 블록처럼 붙이고 한 번에 돌리면 끝입니다. (물론 말도 안 되게 복잡한 과정을 거쳤겠지만요)

 

 

CIFAR-10과 Linear Classification

 이번에도 CIFAR-10 데이터셋을 가지고 설명해 보겠습니다. 우리는 50,000개의 트레이닝 셋이 있고, 10,000개의 테스트 셋이 있습니다. 이들은 각각 32*32*3(32*32픽셀과 RGB 값의 3 채널) 이미지입니다. 

 Linear Classifier는 Parametric Model(데이터를 바탕으로 모델을 선택, 파라미터의 튜닝을 반복하는 모델)의 가장 단순한 형태입니다. Parametric Model은 두 가지 요소를 지닙니다. 일반적으로 x로 나타내는 이미지와 W(혹은 theta)로 나타내는 가중치입니다.

 우리가 만들어야 할 함수는 f(x, W)의 형태로 data x와 parameter W를 가지고 10개의 숫자(10개의 카테고리)를 출력할 것입니다. 이때 출력되는 스코어의 수치가 가장 높은 카테고리가 컴퓨터가 해석한 이미지의 종류입니다. 

 

 앞서 공부한 KNN의 경우, 파라미터 없이 모든 Training set을 가지고 Test time에 사용했습니다. 그러나 Parametic approach는 트레이닝 데이터의 정보를 요약하고 요약된 정보를 파라미터 W에 넘겨줍니다. 이 방식을 사용하면 Test time에 트레이닝 데이터는 필요 없습니다. 우리가 필요한 것은 단지 W 뿐이죠.

 결국 딥러닝은 우리가 원하는 값을 출력할 수 있는 함수 f의 구조를 적절히 설계하는 것입니다. 이 모든 것이 어떤 식으로 가중치 W와 데이터를 조합할지를 여러 가지 복잡한 방법으로 고려해 볼 수 있는데 이 과정들이 모두 다양한 NN 아키텍처를 설계하는 과정입니다. 

 

 

 우선 f(x, W)를 봅시다. 10개의 class로 구성되어 있으니, 10개의 class score를 반환합니다. 다음으로 W를 볼까요? 10개의 클래스별로 3072개씩의 픽셀 값이 정의되어 있습니다. x는 주어진 이미지니까 1개의 3072 픽셀 값이겠죠? 마지막으로 bias가 있습니다. bias는 데이터와 가중치의 계산에 직접적으로 들어가진 않지만 이와 무관하게 특정 클래스에 우선권을 부여합니다. 가령 고양이 데이터가 개에 비해 월등히 많다면 고양이의 bias값이 커지게 됩니다. bias는 직선의 평행이동을 가능하게 합니다. 값은 10개의 클래스별로 하나씩 있습니다. 이를 더해주면 우리가 원하던 f(x, W)+b의 구조가 나옵니다.

 

 숫자가 커서 감이 잘 안 잡히시죠? 쉽게 생각해봅시다.

 

 우리의 함수 f는 W * x + b였습니다. 위 사진은 이를 도식화한 것입니다. 편의를 위해 10종류에서 3종류(Cat, Dog, Ship)로 간소화했습니다. 이 식을 한번 쉽게 풀어써보겠습니다.

  •  우선 W를 볼까요? train 셋의 고양이의 이미지를 쭉 학습해보니 (일반화된)가중치는 [0.2, -0.5, 0.1, 2.0]으로 도출됐습니다. 개, 배 역시 일반화된 가중치값이 나왔군요. 이것이 W입니다.
  •  제일 왼쪽 고양이 사진에 픽셀 값들이 나타나 있습니다. 계산을 위해서 1자로 쭉 늘려보죠. 이것이 x입니다. 
  •  여기 bias값이 빠지면 섭섭하니까 그것까지 더해서 완벽한 f(x, W)+b의 구조가 완성되었습니다. 이를 종류별로 쭉 계산해보면 -96.8(고양이), 437.9(개), 61.95(배)의 score가 도출됩니다. 해당 이미지는 개로 분류되었군요.

 

 이러한 관점에서 Linear classification은 템플릿 매칭과 거의 유사합니다. 가중치 행렬 W의 각 행은 각 이미지에 대한 템플릿으로 볼 수 있고 그 행 벡터와 이미지의 열 벡터 간의 내적을 계산하는데, 여기에서 내적이란 결국 클래스 간 탬플릿의 유사도를 측정하는 것과 유사함을 알 수 있습니다. 차이점이 있다면, 탬플릿 간 유사도 계산은 train 셋 이미지들과 test 셋 이미지의 픽셀 사이의 거리를 계산하는 것이었다면, Linear Classification은 일반화된 하나의 탬플릿의 가중치를 test 데이터에 곱한 값을 비교한다는 점입니다. 

 

 

 Linear Classification은 결국 템플릿 매칭과 유사한 모습을 보입니다. 특히 각 행들을 뜯어보면 다음과 같은 탬플릿을 사용한다는 것을 알 수 있습니다.

 

 이처럼 Linear Classification에선 하나의 평균화된 템플릿밖에 사용하지 못하지만, 다양한 방식으로 학습시킨 여러 Linear Classifier가 층층이 쌓여있다면 보다 정확한 결과물을 볼 수 있을 것입니다. 이것이 NN(Neural Network)의 개념입니다. 

 

 Linear Classifier를 다른 관점에서 바라볼 수도 있습니다. 이미지를 고차원의 한 점으로 바라볼 수 있겠죠?(좌표평면 위에 데이터를 점으로 나타낼 수 있으니까요!) Linear Classifier는 각 클래스를 구분시켜 주는 선형 결정 경계를 그어주는 역할을 합니다. 이를 도식화하면, 다음 그림과 같이 자동차, 사슴, 비행기 분류기가 작동하는 모습을 볼 수 있습니다.

 

 

 그러나 이러한 직선으로 구분한다는 관점에서 보자면, Linear Classification은 해결할 수 없는 문제가 있습니다. 파란색, 빨간색 두 개의 클래스를 가진 데이터를 가정해 보겠습니다.

 

1. 데이터가 반대 사분면에 존재할 경우(혹은 홀, 짝의 문제일 경우)

 1). 픽셀의 개수 > 0가 홀수개일 때 파란색 ex) [3, 0]인 경우, 0보다 큰 수는 3 한개로 파란색)

 2). 픽셀의 개수 > 0가 짝수개일 때 빨간색 ex) [4, 1]인 경우, 0보다 큰 수는 4, 1 두 개로 빨간색)

이와 같은 규칙(반전성, 대칭성 문제)인 경우, 데이터 A = [(1, 1), (1, -1), (-1, -1), (-1, 1)]이면 직선 하나로는 구분이 불가능합니다.

 

2. 범위 문제의 경우

 1). 1 <= L2 norm <= 2

 2). 나머지 전부

 데이터가 원점을 중심으로 도넛 모양으로 분포하고 있다면, 직선으로 분리할 수 없습니다. 내부의 공간과 외부의 공간이 분리되어 있으니까요.

 

3. Multimodal problem

 학습할 특징이 여러 개일 때 생기는 문제(한 클래스가 여러 영역에 분포할 수도 있음)

 

 위와 같은 세 가지 경우엔 단순 Linear Classification으론 분리가 어렵습니다. 이처럼 문제점도 명확하지만, 별다른 수학적 지식이나 높은 지능을 요구하지 않는 직관적인 알고리즘이며 다양한 적용이 가능하다는 등의 장점 역시 명확한 알고리즘입니다. 가중치 행렬을 어떻게 결정하고 어떤 알고리즘이 있는지는 다음 포스팅에서 다루겠습니다.

 

 

 

 

요약하자면


 

Linear Classifier는 다양한 딥러닝 알고리즘의 기본이 되는 구성요소입니다.

 

Linear Classifier는 행렬과 벡터 곱의 형태로 템플릿 매칭과 유사성을 보입니다.

 

카테고리별 하나의 템플릿만 학습합니다.

 

이를 바탕으로 행렬 W를 학습시키고 나면 새로운 데이터를 분류할 수 있습니다.


 

 

 

 


해당 글은 스탠퍼드 대학의 CS231n(Convolutional Neural Networks for Visual Recognition)을 정리한 글임을 밝힙니다.