Machine Learning의 한계
세상에 존재하는 데이터셋들을 모두 총괄하는 Learning algorithm은 존재하지 않음 (No free lunch for supervised learning)
그러나, 문제에 알맞는 특성을 통해 알고리즘을 개발하면 성능을 극적으로 끌어올릴 수 있음.
Curse of Dimensionality
n개의 binary variable -> 시간복잡도 O(2^d)
차원이 높아질수록 위치의 가능성이 기하급수적으로 증가하게 됨
Q. 이를 어떻게 해결하는가?
A. End-to-End learning을 통해 이미지를 전처리하고, Feature extraction을 하고... classifying을 하고...
Neural Network
Perceptron
perceptron은 wx + b의 형태로 이루어져 있음. 여기서 w는 weight, b는 bias를 뜻함.
예시) 28x28사이즈의 input image가 들어오는 경우, x는 1 x 784로 표현될 수 있음 (Binary 형태의 1차원 배열)
이 때, w는 vector의 weight이 되므로 784 x 1로 표현될 수 있음.
wx + b의 결과로 1*784 + 784*1 + b = 1 * 1 + b
How about Multiclass?
multiclass의 경우에는 perceptron을 추가하여 구현할 수 있음.
예시) 10개의 perceptron이라면, wx + b의 w는 Matrix of weights for each pixel로 취급됨
그러므로 W = 10 * 784 (10개의 perceptron, 10-class classification)
Result of wx + b = 1*784 + 10*784 + b
Bias를 perceptron에 변수로써 추가(fake feature)해서 bias convenience를 구성할 수 있음
Composition
이렇게 구성된 perceptron들은 Matrix를 구성하는 일부가 되며, 이를 Layer라고 부름.
Activation Function
해당 neural network를 Activation시킬 지 정하는 함수(perceptron). Sigmoid, ReLU등이 있음.
예시) Linear classifier에 활용
Multi-Layer Perceptron (MLP)
non-linear한 activation function들이 서로 연결된 형태
Feed-forward network라고 부르기도 함
SVM(Support vector machine)과 Perceptron의 관계
SVM은 Class별의 margin을 극대화시키는 support vector를 알아내는 것
근데 Perceptron은 아님, perceptron과 SVM이 classifying한다는 점은 동일함.
Activation Function: ReLU (Rectified Linear Unit)
f(x) = max(0, x)의 형태, ReLU를 거친 데이터는 음의 값을 가질 수 없음 (음의 데이터를 가진 NN을 deactivation함)
많은 Layer가 필요한 이유
Low level parts에서 바퀴를 검출하고, mid-level part에서는 바퀴를 포함한 프레임을 검출하는 등
High level part에서는 이 물체가 무엇인지 prediction하도록 하려면 Multiple layer가 필요하게 됨
Q. 그럼 대체 몇개가 필요한가?
A. 그것을 정하는 것이 바로 hyperparameter이다. (NN의 넓고 깊음의 최적화 필요)
Convolution Neural Network (CNN)
CNN의 간단한 비유
여러 가지의 경우의 수를 고려하고, 최종적으로 Decision making에 반영하는 형태.
여러 가지 경우의 수 내에도 또 다른 여러가지의 경우의 수가 존재함.
NN에 이미지를 넣으면...
매우 많은 수의 parameter가 생성됨으로써 공간의 낭비가 심함.
Q. 이를 해결하기 위해서는 어떻게 해야하는가?
A. 1. Receptive field를 이용하기 (local neighborhood만을 찾기, Local에서 global로 expansion하는 layer가 필요함)
2. Parameter sharing을 통해서 NN내에 존재하는 perceptron들이 사용할 weight을 동일하게 함
Convolution (합성곱)
여러개의 필터(local perceptron = kernel)를 배우고, 합성곱을 통해 필요한 데이터만을 NN에서 취급하게 함.
hyperparameter로는 stride(얼마나 shift할 것인지), kernel size(NxN kernel)등이 있음
Convolution layer output size
(N - F) / stride + 1
Pooling Layer
Pooling은 downscaling과 비슷한 개념으로 이해하면 됨.
Pooling에는 대표적으로 Max pooling과 average pooling이 있음
Average pooling
stride수 만큼 shift하면서 Convolution filter(kernel)크기 내에 있는 값을 평균내어 receptive field 생성
Max pooling
stride수 만큼 shift하면서 Convlution filter(kernel)크기 내에 있는 값 중 가장 큰 값을 통해 receptive field 생성
Receptive field의 크기
filter size (K x K), Stride (S), Pool size (K)
patch size: (P+K-S) * (P+K-S)
Overfitting problem
dropout(Layer에 포함된 일부 weight중 일부만 참여시키는 것)으로 해결
Architecture for Classification
1. Convolution -> Local contract normalization -> Max pooling
2. Convolution + Max pooling
3. Fully connected layers
'Research & Development > Machine Learning' 카테고리의 다른 글
[컴퓨터비전] Backpropagation (0) | 2019.06.21 |
---|---|
[컴퓨터비전] Loss Function And Optimization (0) | 2019.06.21 |
[컴퓨터비전] Recognition and Bag of words (0) | 2019.05.19 |
[컴퓨터비전] Supervised Learning (0) | 2019.05.16 |
[컴퓨터비전] Unsupervised Learning (2) (0) | 2019.05.12 |