pbj0812의 코딩 일기

[CS231N] 2강 Image Classification 본문

Machine Learning Lecture/cs231n 정리

[CS231N] 2강 Image Classification

pbj0812 2018. 9. 6. 00:23

컴퓨터는 고양이를 어떻게 고양이라고 인식할까...??


컴퓨터는 아래 사진과 같이 숫자로 고양이를 인식한다.




0부터 255의 숫자로 색을 인식하고 색은 RGB 이므로... 사진 크기가 800*600이라고 하면 전체 배열의 크기는 800*600*3이다.


이렇게 고양이를 인식하게 되면 문제가 발생하게 되는데, 먼저 고양이가 조금만 움직여도 고양이가 아니게 된다. 


그리고 명암에 따라서도 숫자가 바뀌기 때문에 안되고..


고양이의 포즈에 따라서도 바뀌고...


다른 배경에 있다던지, 고양이의 일부만 나왔을 때에도 인식을 하지 못한다.


물론, 고양이 털색깔이 바뀌어도 마찬가지이다.


그래서 또 사람들이 여러 실험을 진행하였다.



먼저 강한 선만 따서 고양이를 인식시켜 보려 했으나, 다른 노이즈도 포함이 되고 인식이 힘들다..



그래서 이번에는 test image와 training image의 각 위치별 픽셀 값을 빼서 더해 버렸다. 


이 숫자가 0에 가까워 질수록 두 그림은 비슷하다는 뜻이 될 것이고 그 말은 같은 종류의 그림이라고 할 수도 있을 것이다.


이렇게 그냥 빼는 것을 L1 distance라고 한다.



추가적으로 제곱 루트를 구한 것은 L2 거리라고 한다.


L1, L2는 각각 맨하탄, 유클리디언 거리라고 하는데 맨하탄의 도시처럼 직선으로 끊어졌기 때문에 그런 이름이 붙였다고 한다.



이 그림은 K에 따라 각 점들의 영역을 표시한 그림이라고 할 수 있는데, 차이점을 들자면 가운데를 보면 된다. 


K=1 일 때 노란 부분이 제법 있고, K=5 일 때 가운데의 노란 영역이 사라졌다.


K가 커질수록 예외(가운데 노란색 1)를 무시하는 경향이 크다고 할 수 있다.(쓰다보니 뭔가 좀 설명이 애매한데 이 부분은 다시 들어야겠다.)


그러면 K 등은 어떻게 구할 수 있을까..??


먼저 데이터를 다 넣어서 구할수가 있을 것이다. 하지만 이렇게 되면 트레이닝 데이터에 지나치게 과적합(오버피팅) 될 것이다.


다음 방법으로는 데이터를 잘라서 트레이닝 데이터와 테스트 데이터를 분류하여 넣을수 있을 것이다.


하지만, 이 방법도 새로운 데이터에 있어서 잘 돌아갈거라고 확신할 수는 없다.


좀 더 좋은 방법으로는 검증 데이터도 새로 만들어 트레이닝을 한 다음에 검증 데이터로 파라미터를 재조정하고 테스트 하는 방법이 있다.


또 다른 방법으로는 학습 데이터를 여러 번으로 나누어 여러번 돌리면서 확인할 수도 있다.



하지만, k-nearest neighbor는 이미지에는 쓰이지 않는다.


먼저 아래 그림과 같이 distance가 같으면 같은 그림이라고 치부해 버릴수도 있고,



차원의 저주에 걸리기 때문이다.


아래 그림을 보면 1차원에서는 4개 중에 1개만 찾으면 되었지만,


2차원에서는 제곱은 16개, 3차원에서는 64개 등...


찾을 특징과 그림의 크기가 커질수록 계산량이 폭발하게 된다.



그래서 뉴럴 넷을 사용 한다.


간단히 적으면 어떤 직선의 방정식을 찾는다고 할 수 있다.


10개의 분류 중에 하나를 찾는다고 할 때 아래 그림을 보면


먼저 계산량을 구하면 픽셀 총 개수는 3072개 이므로 분류 10을 곱하여 3072*10 을 하고 거기에 분류별 bias를 더하여 3072*10 +10을 한다.


그렇기에 뉴럴 넷에서는 w 와 b를 구하는 것이 목적이다.



이 w와 b를 구하게 되면 아래 그림과 같이 분류할 수가 있겠지만 마지막 그림과 같은 상황에서는 분류하기 힘들게 된다...


1차원이기 때문이다...


다음 시간에는 이것을 해결 한다.












'Machine Learning Lecture > cs231n 정리' 카테고리의 다른 글

[CS231N] 1강 course introduction  (0) 2018.09.05
Comments