convolution neural network - data science & business...
TRANSCRIPT
Junhong Kim
School of Industrial Management Engineering
Korea University
Convolution Neural Network
http://deepart.io/
Challenges in Visual Recognition
기존의 이미지 인식 에서의 큰 이슈는 아래와 같음
Why Convolution Neural Network?
Fully-connected network에서는 Image Classification에서 한계점이 있음
Fully Connected Network 로 가정하고,1. Input이 256개2. Hidden Unit이 100개3. Output Node가 26개면….256*100(weights)+100(bias)+100*26(weights)+26(bias)
= 28326개의 parameter가.... 필요하다.
Input Pixel의 크기나, Multi-hidden Layer라면? :/overfitting 될 가능성이 높다.더 큰 문제는 앞서 이야기한 문제들이 그대로 남아 있다는 것임(크기, 이동에 취약)
이에 비해 Convolution neural network는Convolution layer와 pooling layer의 반복 조합으로
global feature를 얻을 수 있음 :)
따라서, Computation time도 절약하면서, 향상된 좋은 모델을 생성할 수 있다는 결론이 나옴
Convolution Neural Network
CNN의 구조는 변화하여 왔으나 큰 틀은 Convolution layer + Pooling layer + Fully-connected layer 임
[{(Convolution + Activation) * n + Pooling} * m] + Fully-connected network
CNN 에서는 사용자의 의한 Feature extraction이 필요 없으며 Lost function을 기반으로 Feature extraction이 됨
40*40(Pixel)*3(RGB)
40*40(Pixel)*3(RGB)
F
Feature Extraction
f(x)
f(x)
training
training
Calculate Multi-class scores
Calculate Multi-class scores
Why Convolution?
어떤 변수가 좋다 사용하자! 만들자!
Input image의 특성에 맞는 Feature extraction이Network의 weight 조합으로 자동화
Convolution Layer에 대하여 알아보자
Convolution Layer
7*7(Pixel) Image가 있다고 가정
전체 Pixel을 Input으로 사용하면 앞에서 말한 기존의 이미지 인식문제에서 벗어나지 못함
특징 추출을 위해 Filter을 이용하여 Filter는 3*3로 가정
Convolution Layer
7*7(Pixel) Image가 있다고 가정
전체 Pixel을 Input으로 사용하면 앞에서 말한 기존의 이미지 인식문제에서 벗어나지 못함
특징 추출을 위해 Filter을 이용하여 Filter는 3*3로 가정
Convolution Layer
7
7
3
3
Stride = 1
Stride = 1
Convolution Layer
7*7(Pixel) Image가 있다고 가정
전체 Pixel을 Input으로 사용하면 앞에서 말한 기존의 이미지 인식문제에서 벗어나지 못함
특징 추출을 위해 Filter을 이용하여 Filter는 3*3로 가정
7
7
3
3
Stride = 1
Convolution Layer
7*7(Pixel) Image가 있다고 가정
전체 Pixel을 Input으로 사용하면 앞에서 말한 기존의 이미지 인식문제에서 벗어나지 못함
특징 추출을 위해 Filter을 이용하여 Filter는 3*3로 가정
7
7
3
3
Stride = 1
Convolution Layer
7*7(Pixel) Image가 있다고 가정
전체 Pixel을 Input으로 사용하면 앞에서 말한 기존의 이미지 인식문제에서 벗어나지 못함
특징 추출을 위해 Filter을 이용하여 Filter는 3*3로 가정
7
7
3
3
Stride = 1
Convolution Layer
(1) 3*3 Filter를 이용(2) Stride = 1 설정
7*7 에서 5*5 Output이 산출됨
• {(W−F+2P)/S}+1• S=1, W=7, P=0, F=3• {(7-3)/1}+1=5
W Input size (x or y axis)F Filter size (x or y axis)P Number of zero pad S Stride
7*7(Pixel) Image가 있다고 가정
전체 Pixel을 Input으로 사용하면 앞에서 말한 기존의 이미지 인식문제에서 벗어나지 못함
특징 추출을 위해 Filter을 이용하여 Filter는 3*3로 가정
7
7
3
3
Stride = 1
7*7(Pixel) Image가 있다고 가정
특징 추출을 위해 Filter을 사용하며, 본 예제에서의 Filter(Kernel)는 3*3로 가정
Convolution Layer
(1) 3*3 Filter를 사용(2) Stride = {1,2,3}일 경우?
Stride 1 (7-3)/1+1 = 5Stride 2 (7-3)/2+1 = 3Stride 3 (7-3)/3+1 = 2.33
Stride 3의 경우 정수값이 아님
Stride = {1,2,3}
{(W−F+2P)/S}+1
하나의 방법으로 zero pad 사용
일반적으로 Convolution Layer에서 하나의 parameter로 Zero pad를 사용한다
Zero pad의 장점으로는 가장 자리에 있는 특징을 비교적 잘 잡아주는 효과가 있음
Convolution Layer 층을 통과시, Dimension reduction의 빠른 감소를 막아줌
Convolution Layer
정수값이 산출되지 않는 경우 하나의 대안방식으로 Zero pad를 사용한다.
이 경우 Zero Pad=1로 사용하면Output 값이 정수로 산출된다.
일반적으로 Zero pad의 개수는‘(F-1)/2’개를 사용한다.
0 0 0 0 0 0 0 0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0 0 0 0 0 0 0 0
Zero pad의 장점?
32*32(pixel)*3(RGB) 에서 5*5*3(Filter) 를 사용하면 75개의 내적값과 Bias term이 생성됨
Convolution Layer
http://cs231n.stanford.edu/
32*32(pixel)*3(RGB)를 Input으로 6가지의 5*5*3 filter(stride=1)를 사용하게 되면 28*28*6의 activation maps이 생성됨
Convolution Layer
http://cs231n.stanford.edu/
다시 한번 말하여, CNN의 Fully connected network전까지의 구조는
Locally connected neural network에서 weight가 공유되는 것을 의미함
Convolution Layer
https://pennlio.wordpress.com/2014/04/11/fully-connected-locally-connected-and-shared-weights-layer-in-neural-networks/
Parameter의 수 적어짐, 학습 속도 빨라짐
7*7(pixel)*3(RGB)를 Input으로 2가지의 3*3*3 filter(stride=2)를 사용하게 되면 3*3*2의 activation maps이 생성됨
Convolution Layer
5*5*3 Image+
1 Zero Pad
7*7*3
Output = Dot product results
http://cs231n.stanford.edu/
32*32*3 Image에서 5*5 Filter 하나당 75(weight) + 1(bias) = 76parameter가 생성되는 구조
10차원의 activation maps를 위해 10개의 filter를 사용한다고 하면 760개의 parameter가 생성되는 것임
Convolution Layer
http://cs231n.stanford.edu/
Pooling Layer에 대하여 알아보자
Pooling Layer
Convolution Layer의 주변 값들은 보통 correlation이 높은 성향을 지닐 확률이 있음
Pooling을 함으로써 물체의 크기가 크거나 작은 경우 발견할 확률을 높혀줌
Pooling으로 인해 정보 손실이 일어남 (trade off!)
보통 Max pooling을 사용함
예시의 경우 2*2 Filter의 Stride 2로 설정하면 겹치는 부분 없이 4개의 Pixel을 하나의 Max 값으로 대체 하게 됨
AlexNet의 첫 번째 Pooling Layer에서는 3*3 Filter의 Stride 2로 설정하여 중첩적으로 Polling Layer를 설정함(Krizheavsky et al. 2012)
Pooling Layer
http://www.cs.toronto.edu/~fritz/absps/imagenet.pdfhttp://cs231n.stanford.edu/
Shrinking 빠르면 모델이 잘 작동하지 않음, 따라서 정보를 보존할만한 Depth와 Filter를 설정하여야 함 (Andrej Karpathy, Q&A)
Example
http://cs231n.stanford.edu/
http://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html
CIFAR-10 을 이용한 예시
만약 특정 Image가 아닌 ImageNet으로 학습 한다고 한다면, 이미 학습되어 있는 모델로 사용하면 됨
CIFAR 10으로만 해도 어느정도 시간이 걸리는 것을 확인할 수 있음 (TensorFlow, GPU기준)
ImageNet으로 학습된 결과를 얻고싶다면.. (너무 오래걸리니..)
https://github.com/bvlc/caffe/wiki/model-zoo
뒤쪽의 Fully-connected network는 기존의 backpropagation과 같음
backpropagation
http://cs231n.stanford.edu/
Fully connected network에서는 기존 backpropagation과 같음
backpropagation
𝑥 ℎ 𝑦
b1 𝑏2
𝝏𝒇𝒄
𝝏𝒘𝟐
= ( 𝑦 − 𝑦)𝜕
𝜕𝑤2
𝑦 − 𝑦 (𝑦 ={0,1})
= ( 𝑦 − 𝑦)𝜕
𝜕𝑤2
( 𝑦)
= ( 𝑦 − 𝑦)𝜕
𝜕𝑤2
(g(ℎ𝑜𝑤2 + 𝑏2)) (ℎ𝑜𝑤2 + 𝑏2 = 𝐴)
= ( 𝑦 − 𝑦)𝜕
𝜕𝑤2
(g(𝐴))
= ( 𝑦 − 𝑦) (g(𝐴)(1 − g(𝐴))𝜕
𝜕𝑤2
(𝐴)
= ( 𝑦 − 𝑦) (g(𝐴)(1 − g(𝐴))𝜕
𝜕𝑤2
(ℎ𝑜𝑤2 + 𝑏2)
= ( 𝑦 − 𝑦) 𝑦 1 − 𝑦 ℎ𝑜
𝑤1 𝑤2
𝝏𝒇𝒄
𝝏𝒃𝟐
= ( 𝑦 − 𝑦)𝜕
𝜕𝑏2
𝑦 − 𝑦 (𝑦 ={0,1})
= ( 𝑦 − 𝑦)𝜕
𝜕𝑏2
( 𝑦)
= ( 𝑦 − 𝑦)𝜕
𝜕𝑏2
(g(ℎ𝑤2 + 𝑏2)) (ℎ𝑜𝑤2 + 𝑏2 = 𝐴)
= ( 𝑦 − 𝑦)𝜕
𝜕𝑏2
(g(𝐴))
= ( 𝑦 − 𝑦) (g(𝐴)(1 − g(𝐴))𝜕
𝜕𝑏2
(𝐴)
= ( 𝑦 − 𝑦) (g(𝐴)(1 − g(𝐴))
= ( 𝑦 − 𝑦) 𝑦 1 − 𝑦
𝛿𝑦
𝛼 ⇒ learning rate
𝛽 ⇒ 𝑚𝑜𝑚𝑒𝑛𝑡𝑢𝑚𝑓𝑐 =
1
2 𝑦 − 𝑦 2
𝛻𝑤2 𝑛 = 𝛼𝜕𝑓𝑐
𝜕𝑤2
+ 𝛽𝛻𝑤2 𝑛 − 1 𝑔(𝑥) = 𝑎𝑐𝑡𝑖𝑣𝑎𝑡𝑖𝑜𝑛 𝑓𝑢𝑛𝑐𝑡𝑖𝑜𝑛
𝛿𝑦
𝑓𝑐 = 𝐶𝑜𝑠𝑡 𝑓𝑢𝑛𝑐𝑡𝑖𝑜𝑛
ℎ𝑖 = 𝑥𝑤1 + 𝑏1
ℎ𝑜 = 𝑔(𝑥𝑤1 + 𝑏1)𝑦𝑖 = ℎ𝑜𝑤2 + 𝑏2
𝑦 = 𝑦𝑜 = 𝑔(ℎ𝑜𝑤2 + 𝑏2)
Fully connected network에서는 기존 backpropagation과 같음
backpropagation
𝑥 ℎ 𝑦
b1 𝑏2𝛼 ⇒ learning rate
𝛽 ⇒ 𝑚𝑜𝑚𝑒𝑛𝑡𝑢𝑚
𝑓𝑐 =1
2 𝑦 − 𝑦 2𝛻𝑤1 𝑛 = 𝛼
𝜕𝑓𝑐
𝜕𝑤1
+ 𝛽𝛻𝑤1 𝑛 − 1
𝑤1 𝑤2
𝝏𝒇𝒄
𝝏𝒘𝟏
= ( 𝑦 − 𝑦)𝜕
𝜕𝑤1
𝑦 − 𝑦 (𝑦 ={0,1})
= ( 𝑦 − 𝑦)𝜕
𝜕𝑤1
( 𝑦)
= ( 𝑦 − 𝑦)𝜕
𝜕𝑤1
(g(ℎ𝑤2 + 𝑏2)) (ℎ𝑜𝑤2 + 𝑏2 = 𝐴)
= ( 𝑦 − 𝑦)𝜕
𝜕𝑤1
(g(𝐴))
= ( 𝑦 − 𝑦) (g(𝐴)(1 − g(𝐴))𝜕
𝜕𝑤1
(𝐴)
= ( 𝑦 − 𝑦) (g(𝐴)(1 − g(𝐴))𝜕
𝜕𝑤1
(ℎ𝑜𝑤2 + 𝑏2)
= ( 𝑦 − 𝑦) 𝑦 1 − 𝑦 𝑤2𝜕
𝜕𝑤1
(ℎ𝑜) (ℎ𝑜 = 𝑔(𝑥𝑤1 + 𝑏1))
= ( 𝑦 − 𝑦) 𝑦 1 − 𝑦 𝑤2 (ℎ𝑜 1 − ℎ𝑜 )𝜕
𝜕𝑤1
(𝑥𝑤1 + 𝑏1)
= ( 𝑦 − 𝑦) 𝑦 1 − 𝑦 𝑤2 ℎ𝑜 1 − ℎ𝑜 𝑥
= ( 𝑦 − 𝑦) 𝑦 1 − 𝑦 ℎ𝑜 1 − ℎ𝑜 𝑥𝑤2
𝑔(𝑥) = 𝑎𝑐𝑡𝑖𝑣𝑎𝑡𝑖𝑜𝑛 𝑓𝑢𝑛𝑐𝑡𝑖𝑜𝑛
𝑓𝑐 = 𝐶𝑜𝑠𝑡 𝑓𝑢𝑛𝑐𝑡𝑖𝑜𝑛
𝝏𝒇𝒄
𝝏𝒃𝟏
= ( 𝑦 − 𝑦)𝜕
𝜕𝑏1
𝑦 − 𝑦 (𝑦 ={0,1})
= ( 𝑦 − 𝑦)𝜕
𝜕𝑏1
( 𝑦)
= ( 𝑦 − 𝑦)𝜕
𝜕𝑏1
(g(ℎ𝑤2 + 𝑏2)) (ℎ𝑜𝑤2 + 𝑏2 = 𝐴)
= ( 𝑦 − 𝑦)𝜕
𝜕𝑏1
(g(𝐴))
= ( 𝑦 − 𝑦) (g(𝐴)(1 − g(𝐴))𝜕
𝜕𝑏1
(𝐴)
= ( 𝑦 − 𝑦) (g(𝐴)(1 − g(𝐴))𝜕
𝜕𝑏1
(ℎ𝑜𝑤2 + 𝑏2)
= ( 𝑦 − 𝑦) 𝑦 1 − 𝑦 𝑤2𝜕
𝜕𝑏1
(ℎ𝑜) (ℎ𝑜 = 𝑔(𝑥𝑤1 + 𝑏1))
= ( 𝑦 − 𝑦) 𝑦 1 − 𝑦 𝑤2 (ℎ𝑜 1 − ℎ𝑜 )𝜕
𝜕𝑏1
(𝑥𝑤1 + 𝑏1)
= ( 𝑦 − 𝑦) 𝑦 1 − 𝑦 𝑤2 ℎ𝑜 1 − ℎ𝑜
= ( 𝑦 − 𝑦) 𝑦 1 − 𝑦 ℎ𝑜 1 − ℎ𝑜 𝑤2
( 𝑦 − 𝑦) 𝑦 1 − 𝑦 ℎ𝑜 1 − ℎ𝑜 𝑤2 𝑥
( 𝑦 − 𝑦) 𝑦 1 − 𝑦 ℎ𝑜 1 − ℎ𝑜 𝑤2
𝛿ℎ
𝛿ℎ
ℎ𝑖 = 𝑥𝑤1 + 𝑏1
ℎ𝑜 = 𝑔(𝑥𝑤1 + 𝑏1)𝑦𝑖 = ℎ𝑜𝑤2 + 𝑏2
𝑦 = 𝑦𝑜 = 𝑔(ℎ𝑜𝑤2 + 𝑏2)
Fully connected network에서는 기존 backpropagation과 같음
backpropagation
𝑥 ℎ1 ℎ2
𝛼 ⇒ learning rate
𝛽 ⇒ 𝑚𝑜𝑚𝑒𝑛𝑡𝑢𝑚
𝑓𝑐 =1
2 𝑦 − 𝑦 2
𝑤1 𝑤2
𝑔(𝑥) = 𝑎𝑐𝑡𝑖𝑣𝑎𝑡𝑖𝑜𝑛 𝑓𝑢𝑛𝑐𝑡𝑖𝑜𝑛
𝑓𝑐 = 𝐶𝑜𝑠𝑡 𝑓𝑢𝑛𝑐𝑡𝑖𝑜𝑛
ℎ3 𝑦𝑤3 𝑤4
𝛿𝑦𝛿3𝛿2𝛿1
𝛿3 = 𝛿𝑦𝑔 ℎ3′𝑤4
𝛿2 = 𝛿1𝑔 ℎ2′𝑤3
𝛿1 = 𝛿2𝑔 ℎ1′𝑤2
ℎ𝑖 = 𝑥𝑤1 + 𝑏1
ℎ𝑜 = 𝑔(𝑥𝑤1 + 𝑏1)𝑦𝑖 = ℎ𝑜𝑤2 + 𝑏2
𝑦 = 𝑦𝑜 = 𝑔(ℎ𝑤2 + 𝑏2)𝛻𝑤1 𝑛 = 𝛼
𝜕𝑓𝑐
𝜕𝑤1
+ 𝛽𝛻𝑤1 𝑛 − 1
𝛻𝑤2 𝑛 = 𝛼𝜕𝑓𝑐
𝜕𝑤2
+ 𝛽𝛻𝑤2 𝑛 − 1
convolution layer + activation layer + pooling layer의 backpropagation 과정은 fully connected와 비슷하나 조금 다름
backpropagation
http://cs231n.stanford.edu/
Convolution layer에서는 Weight가 filter에 대해서 고정되어 있고, Fully connected가 아님
backpropagation
Jake Bouvrie. “Notes on Convolutional Neural Networks”. Massachusetts Institute of Technology 2006
http://cogprints.org/5869/1/cnn_tutorial.pdf
http://deepcumen.com/2015/04/convolutional-neural-network/
𝑴𝒋 represents a selection of input maps
𝑏𝑖𝑎𝑠 는 별도로 있음
Kronecker product를 이용하여 pooling을 한 결과 차원축소가 된 부분을 보완함 (넓히지 않더라도 객체로 가져올 수 있음)
Max pooling의 결과를 사용하므로 Max값으로 gradient descent하는 결과임
backpropagation
Jake Bouvrie. “Notes on Convolutional Neural Networks”. Massachusetts Institute of Technology 2006
http://cogprints.org/5869/1/cnn_tutorial.pdf
http://deepcumen.com/2015/04/convolutional-neural-network/
Kronecker product
𝑎 𝑏𝑐 𝑑
1 11 1
=
𝑎 𝑎𝑎 𝑎
𝑏 𝑏𝑏 𝑏
𝑐 𝑐𝑐 𝑐
𝑑 𝑑𝑑 𝑑
𝒍 (𝑐𝑜𝑛𝑣𝑜𝑙𝑢𝑡𝑖𝑜𝑛 𝑙𝑎𝑦𝑒𝑟) 𝒍 + 𝟏 (𝑑𝑜𝑤𝑛𝑠𝑎𝑚𝑝𝑙𝑖𝑛𝑔 𝑙𝑎𝑦𝑒𝑟)
The backpropagation algorithm says that in order to compute the sensitivity for a unit at layer ′𝒍′
결국 사용하는 reference들은max pooling의 결과임
( 𝑦 − 𝑦) 𝑦 1 − 𝑦 ℎ𝑜 1 − ℎ𝑜 𝑤2 𝑥
𝛿3 = 𝛿𝑦𝑔 ℎ3′𝑤4
𝛿2 = 𝛿1𝑔 ℎ2′𝑤3
𝛿1 = 𝛿2𝑔 ℎ1′𝑤2
′𝒖′ is current layer’s pre-activation input
backpropagation
Jake Bouvrie. “Notes on Convolutional Neural Networks”. Massachusetts Institute of Technology 2006
http://cogprints.org/5869/1/cnn_tutorial.pdf
http://deepcumen.com/2015/04/convolutional-neural-network/
이때까지의 weight update 방법은 1:1대응이었으며, scalar에 대한 update였음
Constraint로 같은 weight, bias 들은 어떻게 업데이트 할까?
https://www.youtube.com/watch?v=uhiLkYJp1lQ&list=PLPWgVABcUWuXb-zQiKyqRD91nETdSE5fW&index=23
5 - 3 - Convolutional nets for digit recognition– Neural Networks for ML - Hinton
Backpropagation에서 update할때는 convolution이 아닌 kernel을 180도 회전한 cross correlation을 사용한다.
backpropagation
Jake Bouvrie. “Notes on Convolutional Neural Networks”. Massachusetts Institute of Technology 2006
http://cogprints.org/5869/1/cnn_tutorial.pdf
https://en.wikipedia.org/wiki/Cross-correlation
http://webtk.blogspot.kr/2012/08/convolution-cross-correlation-template.html
http://deepcumen.com/2015/04/convolutional-neural-network/
Cross-correlation 사용시양쪽이 비슷한 filter의 경우를
사용하고 신호가 비슷한 signal이온다면 결과값이 높게 나타남
Input data는 알파벳 32*32 짜리의 크기의 hand written character임
비교적 간단한 이미지로 Layer를 구성함
Example of CNN [LeNet-5]
http://cs231n.stanford.edu/
AlexNet은 처음으로 ReLU를 사용하였으며 Polling과정에서 중첩 Pixel을 사용함
7개의 CNN을 Ensemble하여 2.8% 포인트 Error를 감소시킴
Example of CNN [AlexNet]
http://cs231n.stanford.edu/
{(W−F+2P)/S}+1{(227−11)/4}+1=55
Alexnet에서 Filter의 크기와 Stride를 변경하였고, Activation Map의 깊이(개수)를 조정시킴
Example of CNN [ZFNet]
http://cs231n.stanford.edu/
VGGNet에서는 Filter의 사이즈, Pooling의 크기가 아닌 Convolution의 개수에 대해서 실험해 보았음
Example of CNN [VGGNet]
http://cs231n.stanford.edu/
직관적으로 알 수 있듯이, memory는 처음에 많이 사용되고 뒤쪽의 fully connected시, parameter를 많이 사용하게 됨
Example of CNN [VGGNet]
http://cs231n.stanford.edu/
GoogLeNet에서는 마지막에 fully-connected network의 Input(Input Node,variable)을 줄임
parameter의 수가 줄었고 그만큼 속도도 빠름
이때까지의 모양(Forward Network)과 다르게 직선으로 전파되는 형태가 아닌 특징을 가지고 있음
Example of CNN [GoogLeNet]
http://cs231n.stanford.edu/
ResNet의 경우 152개의 layer를 사용하여 ImageNet Classification에서 가장 좋은 성능을 나타냄
Example of CNN [ResNet]
http://arxiv.org/pdf/1512.03385v1.pdfKaiming He, Xiangyu Zhang, Shaoqing Ren, & Jian Sun. “Deep Residual Learning for Image Recognition”. arXiv 2015
http://research.microsoft.com/en-us/um/people/kahe/ilsvrc15/ilsvrc2015_deep_residual_learning_kaiminghe.pdf
더 많은 수용량을 가지는 대량의 Layer 경우에도 오히려 더 좋지않은 결과를 나타남을 알 수 있음
중간과정에서 나온 결과값을 Layer를 뛰어 넘어서 더하였을 경우 성능이 개선됨을 알 수 있으며, 큰
수용량에서도 잘 작동함을 실험적으로 알 수 있음
Example of CNN [ResNet]
http://arxiv.org/pdf/1512.03385v1.pdf
Layer가 많다고 과연 항상 좋을까?
Kaiming He, Xiangyu Zhang, Shaoqing Ren, & Jian Sun. “Deep Residual Learning for Image Recognition”. arXiv 2015
http://research.microsoft.com/en-us/um/people/kahe/ilsvrc15/ilsvrc2015_deep_residual_learning_kaiminghe.pdf
http://cs231n.stanford.edu/
Xavier/2 로 weight initialization을 하였음, 기존 Xavier initialization보다 좋은 성능을 산출함
왜 Xavier/2가 잘되는지에 대한, Residual net이 잘되는 원인은 정확히 알 수 없으나 실험적으로 증명
Example of CNN [ResNet]
http://arxiv.org/pdf/1512.03385v1.pdfKaiming He, Xiangyu Zhang, Shaoqing Ren, & Jian Sun. “Deep Residual Learning for Image Recognition”. arXiv 2015
http://research.microsoft.com/en-us/um/people/kahe/ilsvrc15/ilsvrc2015_deep_residual_learning_kaiminghe.pdf
http://cs231n.stanford.edu/
http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
간단한 실험으로 Ubuntu기반의 TensorFlow에서 간단한 예시인 MINIST data의 Classification model을 생성하고 평가해봄
문법구조가 상당히 간편하게 되어 있음을 알 수 있었으며, 간편하게 GPU를 이용할 수 있음
다양한 사용법들이 인터넷에서 제공되고 있음을 알 수 있음
TensorFlow – 1L NN vs 3L DNN vs 5L DNN vs CNN ( MNIST data )
Window에서도 Docker를 이용하여 사용할 수 있지만, GPU를 제공하지 않음, VM 환경이라 불편함
TensorFlow – 1L NN vs 3L DNN vs 5L DNN vs CNN ( MNIST data )
http://www.netinstructions.com/how-to-install-and-run-tensorflow-on-a-windows-pc/
1Layer neural network 약 91%
3Layer neural network 약 94% (Activation ReLU) (Adam optimization method, LR=0.001,batch_size=100,N_epoch=20)
3Layer neural network + Pre-train(Xavier) 약 97% (Activation ReLU)
5Layer neural network + Pre-train(Xavier) + dropout(0.7) 약 98% (Activation ReLU)
Convolution Neural Network + dropout 99% (Activation ReLU, max_Polling, 3ConvLayer + Fully connected Layer)
예상한 바와 같이 ConvNet이 가장 좋은 성능을 산출 함을 알 수 있었고, TensorFlow가 손쉽게 해결할 수 있는 도구임을 확인
TensorFlow – 1L NN vs 3L DNN vs 5L DNN vs CNN ( MNIST data )
sss
1. 굉장히 간편하게 구현되어 있어서 범용적인 방법론을 사용할 시 편함
2. 실험을 몇 번 하여보니, Optimization에 대한 시간차이가 확연히 들어나고
특히 SGD의 경우 수렴하는 속도도 느림
3. Convolution Neural Network가 기존 방식에 비해서,
기존 정설과 같이 MNIST에서는 좋은 성능을 가짐을 알 수 있음
4. TensorFlow에서도 구현되어 있는 함수 이외에 다른 함수로 사용가능함, 하지만
함수 자체에 대한 내부 Code는 아직까지 볼 수 없음 따라서 학술적으로 시행할때에는
다른 라이브러리를 사용하여야 할 것 같음
5. Learning rate와 Batch size, Momentum이 데이터에 따라, 잘되는 파라미터도
overshooting하는 경우 발생하는 것으로 보아, 경험적인 노하우가 어느정도는 필요할 것 같음
Thank you