MLP에 단지 은닉층을 여러 개 추가하면 DMLP(Deep MLP)이 된다.
DMLP을 학습시키는 알고리즘을 딥러닝(Deep Learning)
이라고 한다.
DMLP는 제대로 학습되지 않는 문제가 있다.
➡️ 이를 극복하기 위해
Running Rate에 따른 성능 변화, 모멘텀의 영향 분석, 은닉 노드 수에 따른 성능 변화,
데이터 전처리의 영향, 활성함수의 영향, 규제 기법 등 다양한 연구가 진행되었다.
이러한 연구들이 딥러닝에 대한 긍정적인 영향을 미쳤다.
사실 딥러닝은 신경망에서부터 창안된 새로운 이론이나 원리는 없다.
그런데도 딥러닝이 기술 혁신을 주도하게 된 데에는 몇 가지 중요한 요인이 존재한다.
CNN
: CNN은 작은 크기의 Convolution Mask를 사용하기 때문에GPU
: 학습 시간을 크게 단출시킬 수 있도록 병렬 처리를 하는 값싼 GPU가 등장하였다.Train data
: 인터넷 발달로 인해 Train Data가 크게 늘어났다.Activation Function
: 현재 사실상 표준으로 자리 잡은 ReLU function은Layerwise Pretraing
: 층별 예비학습 기법.MLP를 공부할 때,
은닉층
은 원래의 특징 공간을 변환하는 Feature Extractor
로 볼 수 있었다.
새로운 특징 공간은 신경망이 주어진 목적을 달성하는 데에 더욱 유리하다.
하지만 은닉층 1~2개만 가진 Shallow 신경망은
특징 공간의 변환이 충분히 이루어지지 않아 낮은 성능에 머무른다.
따라서 과거
에는 사람이 시행착오를 거쳐 고안한 Feature Extraction Algorithm으로
특징 벡터를 추출하여 신경망에 입력하는 접근 방법인 Hand-crafted Feature
를 사용했다.
현대
기계 학습의 주류인 DMLP에서는 Feature Extraction이라는 작업 자체도
수작업인 아닌 기계 학습으로 설계한다.
이와 같이 전체 과정을 한꺼번에 학습하는 방식을 end-to-end learning(통째 학습)
이라 부른다.
앞 단계의 은닉층은 주로 엣지나 코너와 같은 Low-level Feature를 추출하고
뒤로 갈수록 더 추상적인 형태의 High-level Feature를 추출한다.
현대 기계 학습에서는 이처럼 특징을 학습으로 자동 설계하는 일을 무척 중요하게 취급한다.
이를 Feature Learning
또는 Representation Learning
이라 한다.
표현 학습이 발점함에 따라 분류, 회귀 문제를 버서안 생성 모델이나 영상을 화소 수준으로 분할하는 모델 등이 등장했다.
➡️ ex) CNN이 자연영상에서 중요한 feature 추출 + LSTM은 feature를 의미적으로 분석하여 문장을 생성하는 협력 모델.
(Chap 6.5 ~ 6.8, Chap 7.1 ~ 7.2에서 공부 ...)
DMLP(Deep Multi Layer Perceptron, 깊은 다층 퍼셉트론)
은DMLP는 단지 MLP에 은닉층을 추가한 것 뿐이라서
MLP의 동작을 단순히 확장하면 된다.
구체적인 수식으로 써 보자.
행렬 표기를 이용하여 번째 층에 있는 모든 node의 연산을 한꺼번에 표현하면 다음과 같다.
은닉층
에 해당하는 층의Activation Function
:
주로 ReLU 사용
출력층
에 해당하는 층의Activation Function
:
주로 Sigmoid or Tanh or Softmax 사용
DMLP 학습 알고리즘은 MLP의 error back propagation 알고리즘과 크게 다르지 않다.
단지 gradient 계산과 weight update를 더 많은 단계에 걸쳐 수행한다는 점만 다르다.
다음과 같은 구조의 DMLP가 있다.
error back propagation
을 사용하여
층의 정보를 이용하여 층,
층의 정보를 이용하여 층,
층의 정보를 이용하여 층,
...
층의 gradient를 계산하는 공식이다.
MLP의 역사적 발전 양상은 다음과 같다.
DMLP가 MLP를 능가하게 되었지만, 그렇다고 딥러닝의 대세를 점하지는 못한다.
왜냐하면 CNN에 비하면 성능이 떨어지기 때문이다.
CNN이 DMLP보다 우수하다는 어떠한 과학적 증거는 없지만,
숫자보다 훨씬 복잡한 자연영상의 분류 문제를 다루는 ILSVRC 대회를 살펴보면,
CNN이 확연히 우세하기 때문에 CNN이 우월하다고 해도 무방하다.
또한 CNN의 매개변수가 훨씬 적어 현재 기술로 CNN의 학습이 더 쉽다.
만약 학습 알고리즘이 개선되고 컴퓨터 성능과 데이터양 측면에서
획기적인 발전이 이루어진다면 DMLP가 CNN을 능가할지도 모른다.
현재 딥러닝에서 가장 널리 쓰이며,
우월한 성능으로 기술 발전을 주도하고 있는 CNN에 대해 공부해본다.
DMLP
:
완전연결 구조(fully-connected)여서 weight가 너무 많아 복잡도가 높다.
따라서 학습이 매우 더디고 Overfitting에 빠질 가능성도 크다.
CNN(Convolution Neural Network)
:
부분연결 구조(partially-connected)여서 모델의 복잡도를 획기적으로 낮춘다.
그런데 낮은 복잡도에서도 모든 층은 좋은 feature를 추출해야 한다는 본연의 임무에 충실한다.
➡️ CNN은 영상처리나 신호처리 분야에서
일반적으로 사용하는 Convolution 연산을 적용함으로써
모델 복잡도를 낮추고 좋은 feature를 추출하는 두 가지 목적을 충실히 달성한다.
➡️ Convolution 연산을 적용하여 얻은 Feature Map을 Down sampling하기 위해
Pooling 연산을 수행한다.
결국 Convolution층과 Pooling층이 반복되는 구조를 가진다.
DMLP
:CNN
:DMLP
의 input data는 vector 구조에 불과한데,
CNN
의 input data는 3차원 이상의 Tensor까지도 가능하다.
DMLP
는 input Sample이 항상 같은 크기를 가져야 한다.
즉, 입력으로 들어오는 feature vector의 차원이 항상 같아야 한다.
CNN
은 가변 크기의 입력까지 처리할 수 있다.
즉, 크기가 다른 영상이 입력되어도 처리할 수 있다는 장점이 있다. (Chap 4.3.3)
1차원 입력 Convolution
h는 kernel의 크기로, 만약 1*3 kernel을 사용한다며 h=3이다.
kernel이 대칭을 이루도록 보통 h를 홀수로 사용한다.
kernel 크기 h가 한쪽 가장자리에서
node 1개가 줄어 총 node 2개가 되어 연산이 불가능한 표시로 -
라고 되어 있다.
이러한 현상을 방지하기 위해 Padding을 수행한다.
0 Padding
: 0을 덧대는 방식
Copy Padding
: 인접한 노드값을 복사하는 방식
bias
: CNN도 DMLP처럼 bias가 있다. Convolution 결과에 bias값만큼 더하는 효과.
bias
다음은 1차원 Convolution 연산을 신경망 형태로 바꿔 그린 것이다.
weight sharing == tied weight
라고 한다.Kernel이 어떤 값을 가지느냐에 따라 추출하는 feature가 달라진다.
(0.3, 0.4, 0.3)
인 kernel은 0.3, 0.4, 0.3을 weight로 사용하여smoothing하는 효과
를 준다.(-0.5, 0, 0.5)
인 kernel은 -0.5, 0, 0.5을 weight로 사용하여edge feature를 추출하는 효과
가 있다.따라서 CNN이 하나의 kernel만 사용하여 하나의 feature map을 생성한다면
feature가 너무 빈약하여 좋은 feature를 추출하지 못할 것이다.
따라서 학습을 통해 최적의 kernel값을 찾아내야 한다.
hand-crafted feature 방식을 벗어나,
CNN은 기계 학습으로 Train Set에 최적인 kernel을 자동으로 찾아주기 때문에
CNN에 성공을 안겨 준 가장 중요한 요인이다.
kernel은 어떤 feature map을 추출할지 규정하므로
이러한 학습 과정을 feature learning == representation learning이라고 부를 수 있다.
CNN도 DMLP과 마찬가지로 Error Back Porpagation 알고리즘을 이용하여 kernel을 학습한다.
Translation Equivariant(동변)
:, (t:이동 연산, c : convolution 연산)
즉,
이동 후 convolution한 결과 = convolution 후 이동 결과
➡️ 영상 인식에서 물체 이동이나 음성 인식에서 발음 지연에 효과적으로 대처할 수 있는 성질.
병렬 분산 구조
stride
: Convolution연산의 kernel이 입력 데이터를 sliding할 때 이동하는 간격.CNN에서는 보통 Convolution Layer 바로 다음에 Pooling Layer가 따른다
.
(실제로는 Convolution 연산 결과에 Activation Function을 적용하여 그 결과에 Pooling 연산을 수행한다.)
Pooling
은 상세한 정보를 포함한 Feature Map에서 Summary Statistics(요약통계)를 추출함으로써 성능 향상에 기여.
Pooling
은 최대 풀링
, 평균 풀링
, 가중치 평균 풀링
, L2 norm 풀링
등이 있다.
다음은 최대 풀링(max pooling)의 예시다.
Pooling
은 작은 이동에 둔감해지게 하는 특성이 있다.
kernel size를 키우면 더 둔감해진다.
이 특성은 Computer Vision이 풀어야 하는 물체 인식이나 영상 검색 등의
응용문제에 매우 효과적이다.
(다음은 기존 입력 데이터를 아래로 한 칸씩 이동하여 모든 노드값을 바꿨지만,
Max Pooling을 적용한 결과 node값은 5개가 변경되었지만 나머지 3개는 그대로 유지되었다.
이를 통해 Pooling은 작은 이동에 둔감하다는 것을 확인할 수 있다.)
Convolution Layer
와 Pooling Layer
를 살펴봤는데,LeNet-5
는 초창기 CNN
이다.LeNet5
은 C - P - C - P - C 의 다섯 층을 가진다.LeNet5
의 구조이다.C-P-C-P-C
부부은 Feature 추출만 할 뿐 분류하는 기능이 없다.MLP(Fully-Connected)
를 사용한다.softmax
는 Chap 5.1.3 참고ILSVRC
는 ImageNet에서 1,000 부류를 뽑아Classification
, Detection
, Localization
문제를 푸는 대회이다.AlexNet
이라고 불린다.GoogleNet
으로 1위.VGGNet
으로 2위.ResNet
이 1위.
Alexnet
,VGGNet
,GoogleNet
,ResNet
은 혁신적인 구조를 제안하였고
프로그램과 가중치를 모두 공개하여 딥러닝 연구자들이 널리 활용하고 있으므로
구체적으로 살펴볼 필요가 있다.
Convolution Layer 5개
, Fully-Connected Layer 3개
로 구성.AlexNet이 성공한 외부적 요인
:
ImageNet이라는 대용량 DB와 학습 시간을 획기적으로 단축해 준 GPU.
GTX 580이라는 GPU 모델 2대를 사용하였다.
GPU 2대가 독립적으로 데이터를 처리하다가
두 번째 convolution layer와 세 번째 convolution layer 사이에서
정보 교환이 일어난다.
현재는 GPU의 memory가 커져 이러한 복잡한 구조가 필요 없어졌다.
AlexNet이 성공한 내부적 요인
: 알고리즘 개선이다.
VGGNet
의 핵심 아이디어는 작은 kernel을 사용하여 신경망을 깊게 만드는 것
GoogleNet
은 3가지 중요한 idea를 사용한다.[120 x 5 x 5] kernel
을 사용하여 Feature Extraction 수행한다면?
[120 x 1 x 1] kernel
을 사용하여 Feature Extraction 수행.
[1 * 1] kernel을 사용하여 연산횟수를 많이 줄일 수 있다.
NIN은 Global Average Pooling
이라는 idea를 제공한다.
우선 앞서 VGGNet
에서 network의 뒷부분에 분류 목적을 위한
FC Layer 3개를 두었고,
완전연결 구조이므로 weight parameter가 매우 많아진다.
모두 더하면 1억2천2백만 개이다. ➡️ 이는 Overfitting의 원인이 된다.
MLPcov
는 위의 FC의 한계를 극복하기 위해서 Global Average Pooling
을 사용한다.
부류 수만큼의 feature map을 생성한다.
이 예에서 부류 수가 1000이어서 1000장의 Feature map을 생성.
Global Average Pooling은
단순히 번째 feature map의 평균을 구하여 번째 출력 노드에 입력한다.
[1024 x 7 x 7] Tensor 각각을 Global Average Pooling해서 1024개의 node로 만든다.
그리고나서 [1024 * 1000] FC로 분류하고 softmax를 통해서 decision하게 된다.
parameter 개수는 1024 * 1000 = 약 100만 개.
➡️ VGGNet의 parameter는 약 1억 2천만 개이고,
GoogleNet의 parameter는 약 100만 개이다.
GoogleNet에 필요한 parameter 개수는 VGGNet에 비해 1%도 안된다.
NIN의 구조는 다음과 같다.
MLPconv을 사용하는 NIN과 달리,
GoogleNet의 micro network는 Convolution 연산만으로 구성
된다.
이를 inception module
이라고 한다.
GoogleNet은 이러한 Inception module 9개를 결합한 구조이다.
ResNet
도 VGGNet처럼 깊은 구조를 추구한다.
층이 깊어지면 특징이 더 많은 단계를 거치면서 더 좋은 표현으로 발전하기 때문이다.
하지만 무턱대고 층을 더 쌓는다고 성능이 향상되는 것은 아니다.
층수와 성능 사이의 관계를 분석한 실험에 따르면,
층수가 늘어나면 처음에는 성능이 향상하다가 포화 상태에 이르고,
어느 지점을 지나면 급격히 저하하는 현상이 나타난다.
ResNet
은 residual learning(잔류 학습)
이라는 아이디어를 활용하여
성능 저하를 피하면서 층수를 최대 1,202까지 늘렸다.
ResNet
은 왜 shortcut connection(지름길 연결)
을 사용할까?
가 -1이 될 가능성이 없어 gradient가 0이 되지 않는다.
즉, Gradient Vanishing 문제가 발생하지 않는다.
입력값을 그대로 출력값에 더해줌으로써 기본적인 identity mapping을 수행한다.
이를 통해 학습 난이도를 낮추고, 기울기 소멸을 막는다.
이렇게 identity mapping을 이용해서
residual function이 잔여한 정보를 학습하게 만드는 것이 더 좋은 성능을 나오게 한다.
따라서 shortcut connection을 통해
Layer를 깊게 만들 때의 gradient vanishing 문제를 해결할 수 있고,
성능을 높일 수 있다.
이를Residual Learning(잔차학습) 이라고 한다
.
다음은 34 Layer ResNet 예시이다.
ResNet
과 VGGNet
의 다른점
:
ResNet
과 VGGNet
의 같은점
:
2010년부커 개최한
ILSVRC
의 1000부류 Classification 문제의 성능은 이제 포화 상태에 도달했다고 판단하여 Classification 문제는 더 제시하지 않는다.
이제 Classification보다 어려운 Object Detection 문제에 도전
한다.
Discriminative model
:Generative model
:Generative Model은 , , 을 추정하도록 학습할 수 있다.
지금까지는 를 학습하였는데, 를 학습하도록 확장하면
label이 있는 sample을 얻을 수 있다.
이러한 이유로 Generative model은 Semi-Supervised Learning에 활용하기도 한다.
(Chap 7.3.2)
Generative model
은 , , 중에서 상황에 따라 하나를 사용한다.
Generative model
이 추정하는 , , 는 다음과 같다.
Discriminative model
은 , , 를 통해
학습을 마치고 다음과 같이 추정할 수 있다.
위의 예제는 매우 단순한 경우이므로, 명시적으로 확률분포를 추정할 수 있고
확률분포를 이용해 예측까지 할 수 있지만, Real world에서는 훨씬 복잡
하다.
➡️ Real World에서는 이웃 화소는 비슷한 값을 가질 가능성이 높고,
수평 또는 수직 edge가 나타나고, 배경은 texture를 구성하는 등
일정한 규칙이 존재한다.
이러한 규칙을 확률분포 로 표기.
는 real world에 내재한 data generating distribution(data 발생 분포)이다.
아래의 사진에서는
확률이 높은 곳에서 발생한 자연 영상 3개와
확률이 아주 낮은 곳에서 발생한 잡은 영상 1개를 보여준다.
예전 기계학습은 주로 Chap 10의 probabilistic graphical model에 속하는
HMM(Hidden Markov Model)을 Generative Model로 사용했었는데,
현대 기계학습은 주로 딥러닝을 사용
한다.
최근 두각을 나타내는 Generative Model
로는
- GAN(Generative Adversarial Model),
- VAE(Variational AutoEncoder),
- RNN(Chap 8)
- RBM(Chap 10)
등이 있다.
GAN(Generative Adversarial Network)
이 생성한 가짜 Sample을 보여준다.그렇다면 GAN은 label 정보 없이 만 사용하는 Unsupervised Learning인데
어떻게 영상을 생성할 수 있을까?
➡️ Goodfellow는Generator G와 Discriminator D를 서로 대립시켜 학습
시키는 아이디어를 고안해냈다.
Generator G
는 가짜 Sample을 생성한다.Discriminator D
는 Train Set의 진짜 Sample과 G가 만든 가짜 Sample을 구별한다.GAN은 Loss Function으로 MSE 대신 log likelihood
를 사용한다.
(Chap 5)
log likelihood
는 다음과 같다.
Discriminator의 Loss Function
:
Generator의 Loss Function
:
최초로 GAN이 발표된 이후 여러 개선 방법이 등장하였다.
[Salimans2016]은 특징 매칭, 가상 배치 정규화, 미니배치 분별과 같은
여러 기법을 적용하여 진짜에 보다 가까운 sample을 생성하였다.
아래에 있는 그림이 그 sample이다.
[Radford2016]은 DMLP 대신 CNN을 사용한 DCGAN(Deep Convolutional GAN)
을 제안하였다.
다음은 DCGAN의 구조이다.
실선
: node 20개, hidden layer 1개인 MLP점선
: node 10개, hidden layer 2개의 DMLP