일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- but how?
- 알고리즘
- 뤼이드
- 2003 error
- 장영준
- git password
- 리멤버나우
- flask
- flaks
- 웹 독학
- cs231
- 2003 에러
- C++
- pytorch-tutorial
- 경제 요약
- aws rds
- Convolutional Neural Networks
- 프로그래머스 여행경로
- 스무고개 Metric
- multi-task learning
- 백준 2193
- 미국 이란 전쟁
- 딥러닝
- 리멤버나우 요약
- 오픈소스
- 110 옮기기
- 이베이 매각
- git-lfs
- 코딩테스트
- 프로그래머스
- Today
- Total
Nam's
[딥러닝] CS231n-02 이미지 인식의 어려움, kNN, Linear Classfier 본문
*본문 내용은 스탠포드 대학교 CS231n 강의를 개인적인 학습 목적으로 요약한 내용입니다.
1강은 딥러닝의 역사에 관한 내용이라서 따로 요약하지 않고 넘어갑니다.
Lecture: Image Classification
Slide: http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture2.pdf
1. 고양이 분류하기
어떻게 하면 컴퓨터가 고양이 사진을 보고 '고양이'라고 분류해낼 수 있을까?
더 나아가서 1000개, 10000개 이상의 다양한 물체를 컴퓨터가 분류하려면 어떤 알고리즘이 필요할까?
이미지, 영상 인식이 어려운 이유
Semantic Gap: 컴퓨터에게 이미지는 거대한 숫자집합에 불과하다.
Viewpoint variation: 촬영의 각도에 따라 숫자집합은 완전히 달라진다.
Illumination: 조명, 밝기 차이에 따라 크게 달라진다.
Deformaion: 물체의 형태가 바뀔 수 있다.
Occlusion: 물체가 가려져 있을 수 있다.
Background cluter: 배경과 물체를 구분짓기 어려울 수 있다.
Intraclass variation: 같인 물체여도 생김새, 나이, 크기, 색이 각양각색일 것이다.
Data-Driven Approach
막연히 고양이를, 개를, 다양한 사물들을 어떻게 인식할 것인가 생각해보면 너무 어렵다.
고양이는 무엇이고 물고기는 무엇이다 라고 직접 특징을 써내려가도 되겠지만
수 많은 정보에서 그 특징을 뽑아내는 접근법이 더 효율적이고 효과적이다.
이제 두 가지 함수가 필요하다.
Train 함수 (입력: 이미지와 레이블 | 출력: 모델) 그리고
Predict 함수 (입력: 이미지와 모델 | 출력: 이미지의 예측값)
-> Machine Learning 의 Key insight.
Example: Nearest Neighbor
인풋 이미지와 트레이닝 셋을 비교해서 "가장 가까운 샘플"을 찾는다.
자, 그러면 어떻게 "비교"할 것인가?
다양한 방법이 있는데, 예제에서는 L1 distance가 사용됐다.
Manhattan distance라고도 불리는 아주 간단한 방법인데,
input 이미지와 train된 모델 이미지의 픽셀 값 차이 총합을 계산하는 방식이다.
Q: With N examples, how fast are training and prediction?
A: Train O(1): 사물 개수 만큼
Predict O(N): 들어오는 input 이미지 마다 모든 사물과 일일이 비교해야된다. (사물이 만개라면? 엄청 느려진다.)
BAD. 우리는 Train은 좀 느리더라도 Prediction이 빠른 Classifier 가 필요하다.
모바일, 웹이나 low power device에서 작동하기 위해서는 빠른 성능이 보장돼야한다.
2. k-Nearest Neighbor
Nearest Neighbor의 융통성이 없다는 단점을 보완한다.
좋은 분류기를 만들기 위해서는 융통성이 필요하다.
가장 가까운 k개의 점들의 label 값이 output을 결정한다.
K값 외에도 지정해 줘야 하는 값이 있다. 거리를 비교하는 방법이다.
위에 나온 L1 distance 외에도 요소간의 거리를 비교하는 방법이 더 있다.
k-NN은 거리를 어떻게 비교할지 척도만 정해주면 어떤 정보가 들어와도 분류할 수 있는 Classifier 이다.
아주 단순하지만 새로운 문제를 접했을 때 시도해볼 만한 알고리즘이다.
K-Nearest Neighbor Demo Time : http://vision.stanford.edu/teaching/cs231n-demos/knn/
Setting Hyperparameters
K 값과 거리척도 같은 요소를 Hyperparameter라고 부른다.
이 요소들은 문제의존적이다. 적당선이 존재하지 않고 문제 마다 적절한 값을 찾아야한다.
최적의 Hyperparameter를 찾는 간단한 방법은 여러 경우를 시도해보는 것이다.
이 때, 내가 가진 Dataset을 모두 활용해서 가장 높은 정확성을 갖는 hyperparameter를 찾는 방법은 옳지 않다.
train set 과 test set 을 구분한 후 hyperparameter를 찾을 수도 있겠지만,
새로운 data가 들어왔을 때 어떻게 perform 할지 알 수 없다.
때문에, test set은 hyperparameter를 찾는 과정에서 사용하지 않고,
최종적으로 이 algorythm의 정확성을 기술하기 위해 단 한번 사용하는 것이 좋다.
그 마지막 숫자가 우리의 논문과 보고서에 올라가야 한다.
Cross-Validation
최적의 hyperparameter를 찾기 위한 검증 set 을 다양하게 적용하는 방법
이 방법은 거의 표준이지만 딥러닝 같이 큰 모델을 학습시킬 때는 학습 계산량이 너무 많아 잘 쓰지 않는다.
이미지 인식으로 시작했지만, k-Nearest Neighbor 는 이미지 인식에 거의 사용되지 않는다.
1. 느리다. prediction 과정에서 O(N) 이 필요하다.
2. L1 / L2 Distance가 이미지간의 거리 척도로 적합하지 않다. (지각적 유사도 측정에서 형편없다.)
3. 차원이 높아질 수록 처리해야하는 양이 기하급수적으로 늘어난다.
3. Linear Classification
Neural Network 의 기반이 되는 알고리즘이다.
Parametric Approach
f(x,W) = Wx => Output 은 n개의 score가 나오고 각 label에 가까운 정도를 의미한다.
W에 train 과정에서 필요한 정보들이 들어가고.
Predict 과정에서는 곱하기만 하면 된다.
'개발 > Machine Learning' 카테고리의 다른 글
[딥러닝] cs231n-05 Convolutional Neural Networks (0) | 2020.03.03 |
---|---|
[딥러닝] cs231n-04 Backpropagation & Neural Networks Intro (0) | 2020.03.02 |
[딥러닝] cs231n-03 Loss Function & Optimization (0) | 2020.02.28 |