본문 바로가기

강의/cs231n

CS231n - Lecture2

안녕하세요. 오랜만에 글을 씁니다! 1월 한달 동안 일이 있어서 마무리 짓고 다시 돌아왔습니다.

이번에는 CS231n의 강의를 정리하게 되었습니다. 추천시스템 쪽으로 논문을 읽다보니 딥러닝 지식이 많이 요구되네요.

지난번에 AutoEncoder를 한 번 정리하긴 했는데 기초적인 부분이 좀 부족한 것 같아서 CS231n을 보면서 다시 한 번 딥러닝 기초를 정리하려 합니다. 일단 계획은 AutoEncoder전까지를 들으려 하며 이후는 상황에 따라 더 들을지 말지 결정할 것 같습니다.

이번에 정리하는 글은 강의 위주로 하되 저한테 필요하다 싶은 것을 위주로 정리합니다.

그렇기 때문에 강의 전체 내용을 원하시는 분은 이 글을 읽는 것을 추천드리지 않습니다.

 

참고 자료는 다음과 같습니다.

 

CS231n Lecture2 slide

cs231n.stanford.edu/slides/2020/lecture_2.pdf

CS231n Lecture2 강의

www.youtube.com/watch?v=OoUX-nOEjG0&t=1s

 

이번 시간에는 CS231n의 Lecture2입니다. (Lecture1은 Computer Vision의 역사 등에 대한 부분이라 따로 정리하지 않았습니다.)

 

  위의 슬라이드를 보면 이미지 분류는 computer vision의 핵심이라고 합니다. 기계(컴퓨터라고도 쓸 것임)가 보고 이 사진이 고양이인지, 트럭인지 등을 맞추는 작업이 하나의 예로 될 수 있습니다. 그렇다면 어떻게 기계는 이를 구분할 수 있을까요?

 

  우선 기계가 어떻게 사진을 인식하는지 보아야 합니다. 위의 슬라이드를 보면 기계는 사진을 숫자로 인식하고 있습니다. 즉, 특정 위치에 대해 픽셀 단위의 숫자로 인식합니다. 위 고양이 사진은 각 픽셀 값이 0~255 값을 가지며 800 x 600 x 3의 size를 가집니다. 여기서 3은 RGB 색상을 위해 쓰인 값으로, 위의 숫자는 RGB 중 1개의 값들입니다.

 

  두 사진을 보면 사람은 둘 다 고양이라고 인식할 수 있습니다. 하지만 기계에게는 쉽지 않습니다. 왜냐하면 오니쪽 사진과 오른쪽 사진의 경우 위의 숫자 matrix 값이 많이 달라지기 때문이죠. 이외에도 고양이의 자세라든지, 조명이라든지 등 여러 요인이 있습니다.

 

  기존의 머신러닝에서는 이를 구분하기 위한 모델로 Nearest Neighbor Classifier가 있었습니다. Nearest Neighbor Classfier는 train의 사진과 가장 유사한 K개의 사진으로 해당 사진을 구분하는 방법입니다. 가장 가깝다는 것을 표현하는 지표는 L2(Euclidean) 거리, L1 거리 기법 등이 있습니다.

 

  위의 슬라이드는 L1 거리방식을 기준으로 한 것입니다. 보면 test와 train image의 각 픽셀값의 거리 값을 구하기 이를 전부 합쳐 총 거리 값을 구했습니다. 이 거리값이 가장 작은 train image가 test image와 제일 가까운 image가 됩니다.

 

  그렇다면 L1과 L2 거리 방식의 차이는 무엇일까요? 이는 위의 그림으로 볼 수 있습니다. L1의 경우 좌표체계가 바뀌면 점과 점 사이의 거리 값이 바뀌는 반면 L2는 좌표체계에 영향을 받지 않습니다.

 

※ (이 설명의 경우 저도 조금 헤깔리는데) feature에 대해 어느 정도 알고 있다면 L1을 쓰는 것이 더 좋은 성능을 낼 수도 있지만 그게 아니라면 L2를 쓰는 것이 좋다고 합니다.

ex) 사람의 직급을 예측할 때 feaure 1이 봉급, feature 2가 연차 등이면 이는 L1을 쓰는 것이 더 좋은 성능을 발휘할 수 있음

 

  다음은 HyperParameter입니다. 우리가 위의 Nearest Neighbor Classifier을 쓸 때 이웃 개수 몇 개를 기준으로 하느냐에 대해 특정 K값을 구해야 합니다. (그래서 해당 모델 이름을 줄여서 KNN이라고도 합니다.) 여기서 K 값은 Hyperparameter로 이는 data로 학습되는 것이 아닌 알고리즘에서 선택하는 값입니다. 즉, data에 따라 다르기 때문에 data 안에서 찾아내야 합니다. 위의 슬라이드는 3가지 방법을 제시했는데 아래의 Idea #3이 좋은 방법이라고 합니다. 즉, train, valid, test로 나눠서 test는 최종 결과값으로만 사용하는 것이죠. valid는 hyperparameter tuning에 사용됩니다.

 

  또 다른 방법은 Cross-Validation을 이용하는 것입니다. small data set에 주로 사용되며 각 fold에서의 결과값의 평균값이 제일 좋은 Hyperparameter가 최종 Hyperparameter로 됩니다. 딥러닝에서는 비용 부문 때문에 사용이 많지 않다고 합니다.

 

  이러한 KNN 방법은 사실 image 분류에서는 거의 사용되지 않는다고 합니다. 이는

1. test가 너무 오래 걸림

2. L1, L2로는 image 간 거리 측정이 불가능 한 점 (예 : 사람 image에서 눈을 가린 것이나, 엷은 색상 넣은 것이 각각 original image와 같은 거리 값을 가짐)

3. 차원의 저주

 

때문입니다.

 

여기까지가 Lecture2에 대한 설명이었습니다.(Linear Classfier가 나오긴 하는데 어차피 Lecture3에서 다시 하기 때문에 넣지 않았습니다) 궁금하신 부분이나 잘못된 부분 있으면 말씀해주세요!

'강의 > cs231n' 카테고리의 다른 글

CS231n - Lecture4  (0) 2021.02.21
CS231n - Lecture3  (0) 2021.02.20