2 - 2 교차검증 ( cross - validati o n ) , NN 의 장 , 단점 [ Vision ] CS231n
지난번 포스팅에 이어 교차 검증에 대해 적습니다.
Cross validation training set이 적을 때 사용하는 좋은 방법 training data의 사이즈가 작을 경우에는 교차검증이라 불리는 더 정교한 튜닝기술을 사용할 수 있다.복수의 fold를 각각 검사하여 평균적인 성능을 낸다. 그 후에 어떤 k가 더 좋고 noise가 적은 결과를 낼지 예측하는 것이다.
n-fold cross-validation이 있는데, 여기에서 fold는 하나의 그룹이라고 보면 된다. 5-fold cross-validation ᄋ일반ᆯ 예시로.
Training Data를 n개의 fold로 나누고 1개는 validation set, n-1개는 training으로 사용한다.5개를 예로 들면, 1.fold5가 validation set이라고 하자.A, B, C, D는 training set로서 쓰고, E를 test set처럼 사용한다.그러면(A,B,C,D),E에서 성능을 낸다. 다음에 정밀도 A1을 요구한다.2.fold4가 validation set이라고 하자.(A, B, C, E), D로 성능을 다시 낸다. 다음으로 정밀도 A2를 구하는 3.fold 3에 대해 같은 작업수행 4.fold 2에 대해 같은 작업수행 5.fold 1에 대해 같은 작업수행 그렇게 되면 5개의 정밀도가 나오고 그것의 평균을 구한다.그렇게 하면 최종 분류 정도가 나오게 된다.
이하의 결과를 보고 이해해 보는 것이 좋다.
5-fold 이므로 각 k별로 5가지 결과가 나올 것이다.각 점(dot)은 결과이며, 봉은 표준편차를 나타낸다. 선은 평균을 나타낸다.k마다 점이 5개이고, k=7정도에 가장 평균도 높고 accuracy가 0.31정도 되는걸 볼수있다.따라서, kNN에 대해 최적인 k라고 생각하고 사용하면 된다.
그렇게 하면 k-fold cross validation만 쓰면 되지 않을까?라고 생각할 수 있다.Cross validation만 쓰면 되는 거 아니야?안 된다. 왜 그럴까?60%는 test하고 20%로 미리 평가한 뒤 마지막 실전 test, 이렇게 한 번만 하면 되는데 이래서는 교차검증처럼 더 정확하고 안전한 값을 얻을 수 없다.
그러나, 교차 검증은 계산량이 너무 많다.위의 5-fold를 보더라도 데이터가 10만 개였다면 1-fold당 2만 개씩 나뉘었을 것이다.8만 개 학습 *2만 개 test→8만 개 학습 *2만 개 test라는 프로세스를 여러 차례 반복하게 된다.폴드 수가 늘어날수록 시간이 몇 배가 된다.
따라서 validation이 적으면 (수백 개) 교차검증을 하는 것이 안전하다고 한다.실제로 볼 수 있는 fold의 개수는 3, 5, 10 정도이다.
k가 너무 높으면 noise는 줄어들지만 class 간의 경계가 불분명해진다. -- 이것은 내 생각이지만, k가 너무 높으면 vote해야 하는 img도 늘어나기 때문에 시간이 걸리지 않을까 생각했다.
Nearest Neighbor classifier의 장, 단점, kNN의 장단점: 구현으로 이해하기 쉽다. 훈련에 시간이 걸리지 않는다. O(1)->배열에 넣어 index화함
디메리트: test time에 드는 연산 cost가 있다.testimg 하나를 training data 전체와 비교하기 때문이다.
실제 사용에서는 training time에 걸리는 시간은 별로 신경쓰지 않는다.test time으로 걸리는 시간이 줄어드는 게 중요하다고 한다. 따라서 실제 사용으로는 다소 부적합하다.deep neural network는 NN과는 정반대이다. training이 길고 test가 짧다.이런 방식이 더 현실에서 바람직한 방법이다.
NN 분류기의 연산량은 아직 연구되는 테마라고 한다. (2017년 투고인데) 지금도 하고 있을까…) ANN(Approximate NN) 근사근사근사근사근사근사근처 알고리즘이나 라이브러리가 있어, 이것들이 dataset 안에서 NN을 찾는 것을 웃게 해준다.
이들 알고리즘은 정확도를 조금 포기하고, 시공간 복잡도로부터 이득을 보는(NN을 찾을 때) kdtree를 만들거나, k-means 알고리즘을 실행할 때 사용하는 전처리 stage에 의존하는 편이다.나는 상기의 2개의 알고리즘을 모른다. 다음에 또 만날 때 찾아봐야겠어요.
어디에 쓰는 게 좋을까?NN은 「차원이 낮은 데이터」에서는 좋은 선택이 될 수 있다고 한다.그러나 실생활 이미지 분류에서는 거의 쓰이지 않는다.
Why? 실제로는 고차원 물체이므로 pixel의 수도 많고, 고차원의 distance는 직관적이지 않기 때문이다.
from-cs231 n상의 사진은, 제일 왼쪽의 original을 기준으로 모두 조금씩 변형시킨 것이다.분명히 3개는 다 다른 이미지인데 L2 distance에서 계산해보니 sum이 다 같다고 한다. (2번 3, 4번이) 첫 번째 사진에서 다 같은 거리만큼 떨어져 있다는데.. 딱 봐도 2, 3, 4는 다 다른 사진이다따라서 이 예를 통해 pixel에서 구한 distance는 의미적으로도 지각적으로도 맞지 않는다고 볼 수 있다.이 사진은 픽셀 기반의 디스턴스가 맞지 않는 또 다른 예이다. t-SNE 시각화 디법을 사용하여 보여주는 예라고 한다. *t-SNE https://lvdmaaten.github.io/tsne/아래 사이트를 참조하면 된다.왠지 모르지만, 고차원 데이터의 차원을 축소해 주는 기술과 같다.CIFAR-10의 예를 2차원으로 넣어 제시한 예인데 주변 이미지일수록 L2distance가 매우 가깝다는 뜻이다.근데 동그라미 친 거 보니까 뭔가 이상하다 새와 자동차가 비슷한 것으로 분류된다. 뭐야 이거...
근처에있는이미지는보편적인색의분포나배경색의영향을많이받는다고한다.이미지의진짜의미(class)와는상관없이,
그럼 이러한 배경이나 다른 종류에 관계없이 적절하게 clustering을 구현하기 위해서는 어떻게 해야 할까?하는 의문을 남겨 더 이상 내용이 없다.pixel을 넘어선 다른 것이 필요하다고 말하고 끝나는...
-마지막으로
단점을 명확히 보여주는 예이다. 차원이 하나 늘어날 때마다 지수가 하나씩 늘어나니까.. 연산량이 아주 많아진다고 생각하면 된다.=== END =====
1시간짜리 강의인데 왜 이렇게 배우는 게 많은지… 다만 교수님이 알고 있는 정보를 다 말하고 우리는 다시 공부하면서 이해하는 것 같다.후.. 그럼..




