본문 바로가기

Study doc./Deep Learning

[cs231n] 컴퓨터는 고양이 사진을 보고 고양이인지 알까?

순서

  1. 컴퓨터는 이미지를 어떻게 인식할까?
  2. 컴퓨터에게 이미지를 어떻게 학습시킬까?
    1. NN (Nearest Neighbor)
    2. k-NN (k-Nearest Neighbor)
  3. 결론

1. 컴퓨터는 이미지를 어떻게 인식할까?

 

위 사진은 강아지와 고양이 중에 어떤 사진인가요?

네!! 바로 고양이 사진입니다.

 

어떻게 고양이 사진이라고 생각하게 되었나요?

아마 어렸을때부터 수많은 고양이들을 봤고, 그 동물이 고양이라는 것을 학습했기 때문일 것입니다.

 

그렇다면 컴퓨터가 이 사진이 고양이 사진이라는 것을 알 수 있게 하려면 어떻게 해야할까요?

우리가 고양이를 학습한 것과 마찬가지로, 컴퓨터에게 수억만장의 고양이 사진을 보여주면서 고양이라고 학습시키면 될 것 같습니다.

이렇게 학습시키는 방법을 '데이터 기반 접근법(Data-Driven Approach)' 이라고 합니다.

 

 

2. 컴퓨터에게 이미지를 어떻게 학습시킬까?

자!! 이제 컴퓨터에게 고양이 사진을 학습시키려고 하는데, 어떻게 학습을 시켜야 하나요?

그래서 나온 개념이 NN과 k-NN입니다.

 

2-1. NN (Nearest Neighbor)

컴퓨터는 이미지를 숫자로 인식(이미지를 작은 픽셀단위로 쪼개고, 픽셀당 RGB 값을 숫자로 나타냄)하기 때문에 그 숫자들이 비슷하면 같은 카테고리의 이미지로 인식하는 원리입니다.

따라서 테스트할 이미지의 숫자들을 학습된 이미지의 숫자들과 비교하며 판단하는 것이죠!!

 

그럼 숫자가 비슷한지는 어떻게 알 수 있을까요?

강의에서는 두 가지 방법을 소개했습니다.

 

1) 첫 번째로 'L1(Manhattan) Distance' 입니다.

테스트할 이미지의 픽셀값들과 학습된 이미지의 픽셀값들과의 차이에 절댓값을 취하여 모두 더해준 값을 반환합니다.

직관적으로 생각하면 반환된 값은 학습된 고양이 사진과 얼마나 멀리 떨어져 있는지를 표현한다고 할 수 있습니다.

즉 작을수록 그 카테고리에 해당하는 이미지라고 판단할 수 있겠죠!!

 

2) 두 번째로 'L2(Euclidean) Distance' 입니다.

테스트할 이미지의 픽셀값들과 학습된 이미지의 픽셀값들과의 차이를 제곱해주고 모두 더한 후 루트를 씌운 값을 반환합니다.

L1 Distance와 뭐가 다르냐구요?

 

L1 Distance의 경우에는 두 숫자간 거리를 두 숫자를 뺀 값으로 표현했고, L2 Distance의 경우에는 뺀 값을 제곱하여 모두 더했기 때문에 후자의 경우가 좌표계의 변화에 더 민감하다고 할 수 있습니다.

따라서 L2 Distance는 좌표계에 영향을 잘 받지 않는 일반 벡터데이터에서 주로 사용되고,

L1 Distance는 데이터에 대한 세부적인 디테일이 있거나 좌표계에 영향을 받는 데이터(ex. 키, 몸무게 등)에 주로 사용된다고 합니다.

 

 

2-2. k-NN (k-Nearest Neighbor)

NN 방법으로 비슷한 이미지를 분류하려니 잘못 분류하는 경우가 종종 있습니다.

아래 그림에서 보이는 것처럼 초록색으로 둘러쌓인 노란색 점 하나가 그 예가 되겠네요.

이 문제를 해결하기 위해 k-NN 방법이 나왔습니다.

 

단순히 1개의 이웃과 비교하는 것이 아니라, 주변 k개의 이웃 모두와 비교하여 판단하는 것입니다.

k 값이 커질수록 더 깔끔하게 분류되는것을 확인할 수 있겠죠?

 

 

3. 결론

자!! 그럼 k를 얼마로 하고, L1 distance와 L2 distance 중 어떤 방법을 선택할까요?

정답은 '상황에 따라 다르다' 입니다.

 

강아지인지 고양이인지 분류하는 문제와 웃는 사진인지 우는 사진인지 분류하는 문제에서 최적의 k값과 distance 방법은 다르다는 말입니다. 

따라서 그때그때 값을 변경하면서 성능을 비교하면 됩니다.

 

하지만 NN과 k-NN 기법은 실무에서 사용하지 않는다고 합니다.

테스트할 사진을 수억만장의 사진의 행렬값과 빼고 절댓값을 취하고 더한 값을 비교하려면 시간이 너무 오래 걸리기 때문입니다.

또한 성능이 좋지 못하고, 차원을 늘림에 따라(열의 수 증가) 필요한 데이터 갯수가 기하급수적으로 증가하는 '차원의 저주' 문제가 있기 때문에 실제로는 사용하지 않는 기법이라고 합니다.

 

따라서 다음 포스팅에서는 실제로 사용하는 Linear Classification(선형분류) 기법에 대해 공부해보겠습니다.