티스토리 뷰
[논문 요약 3] Gradient-Based Learning Applied to Document Recognition
Arc Lab. 2018. 1. 12. 13:23[업데이트 2018.03.21 17:16]
세번째 요약할 논문은 "Gradient-Based Learning Applied to Document Recognition" (yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf) 입니다.
이 논문을 기점으로 Convolutional Neural Network의 발전 계기가 된 LeNet 아키텍쳐에 대해 설명하고 있습니다.
Abstract를 보면 역전파 알고리즘으로 훈련된 다층 신경망의 경우 Gradient 기반 학습 기술에 있어서 좋은 성공 사례임을 보여줍니다. 특히 손글씨와 같이 고차원의 패턴을 가진 데이터를 분류함에 있어서 적은 전처리만으로 좋은 성능을 보여줍니다. 이 논문에서는 손글씨를 인식함에 있어서 기존의 인식 방법과 비교한 결과를 리뷰합니다. Convolutional Neural Network는 특히 2차원 형태의 데이터를 다루도록 고안되었는데, 다른 방법들보다 월등한 성능을 보여준다고 말하고 있습니다.
실제 문서 인식 시스템에서는 여러가지 모듈들로 구성되어 있는데, 새로운 학습 페러다임인 GTN(Graph Transformer Networks)에 대해 이야기 하고 있습니다. 해당 GTN은 전체적인 성능 향상을 위해 여러 모듈들에 대해 Gradient 기반 학습을 하도록 합니다. 본 논문에서는 손글씨 인식과 은행 수표 읽는 것에 대한 두가지 시스템에 대해 설명합니다. 특히, 은행 수표 인식의 경우 CNN을 사용하며, 비즈니스/개인 수표를 읽는데 기록 정확도를 높이며, 실제 상업적으로 적용이 되어 하루에 몇백만의 수표를 인식하고 있다고 합니다.
GTN에 대해 대략적으로 읽어본 결과, 수표 인식을 위해 캐릭터 하나 하나를 분할하기 위한 방법에 대해 설명하는 내용이었습니다.
따라서 해당 논문에서 LeNet-5 아키텍쳐에 초점을 맞추어 분석 및 정리를 하고자 합니다. 논문 페이지수가 많아 먼저 Abstract를 읽은 후, 결론 부분을 읽어보았습니다.
- CNN을 통해 직접 특징 추출하는 것을 할 필요 없게 되었음.
- GTN을 통해 파라메터 튜닝, 레이블링, 경험에 의존한 방법들의 사용을 줄일 수 있었음.
- 또한 데이터가 많아지고, 컴퓨팅 파워 향상, 학습 알고리즘의 향상은 인식 시스템에서 보다 더 좋은 성능 향상을 가능하도록 함.
전통적인 패턴인식의 모델의 경우 수작업된 특징 추출기를 통해 입력 데이터로부터 연관된 정보를 수집하고, 연관이 없는 정보를 제거하는 방향으로 진행하였습니다. 일반적인 fully-connected network에서 문자 인식에 대해 일부 성공하는 경우는 있었으나, 문제가 존재했습니다.
입력 데이터로 사용되는 일반적인 이미지의 경우 사이즈가 크기 때문에 neural network에서 필요한 weight 파라메터의 개수가 커질 수 밖에 없고, 이는 메모리 사용량의 증대로 이어집니다. 또한 입력 데이터의 경우 이미지 사이즈를 줄이거나 문자가 이미지 센터에 오도록 전처리를 하지만, translation(문자 위치 이동/회전 등), distortion(문자 형태 변형)에 대해 모든 경우를 고려하기 어렵습니다. 한마디로 기존 fully-connected network의 경우 입력 데이터의 topology를 무시하고 학습함을 의미합니다. 따라서 기존 네트워크 모델의 경우는 원하는 성능을 내기 위해서는 더 많은 학습 데이터를 필요로 합니다. (translation, distortion 전처리된 데이터들이 추가적으로 더 포함되어야 해서)
2D 이미지의 경우 구성된 픽셀을 보면 edge나 corner와 같이 특정 부분(local feature)에 대한 서로 연관성이 높은 특징을 추출 할 수 있는데, CNN에서는 이러한 local feature에 대한 특징 추출을 통해 topology 문제를 해결합니다.
CNN에서는 크게 3가지 아이디어로 아키텍쳐가 구성됩니다.
- Local receptive fields
- Shared weights
- Sub-sampling
Receptive fields(수용영역)의 경우 visual cortex(시각피질)의 매커니즘에서 아이디어를 착안한 것으로 고양이에게 어떤 그림을 보여주었을 때, 특정 그림에서만 뉴런이 반응 하는 것을 모티브로 삼아, 입력된 이미지의 특정 영역(local)의 특징을 추출하도록 하였습니다. 보통 kernel 또는 filter를 적용한다고 이야기하며, 특정 사이즈로 적용합니다. 이때 이런 과정을 convolution한다고 하며, 여기서 filter는 하나의 weight가 됩니다. 보통 이미지 프로세싱에서는 원하는 효과를 위해 특정한 값으로 이루어진 filter를 사용하지만, CNN에서는 해당 weight값을 학습을 통해 계속하여 업데이트 하게 됩니다. convolution이 끝나면 feature map이라는 것을 얻게 됩니다.(filter가 적용되어 입력데이터로부터 detect된 receptive field들의 집합) 이렇게 filter을 통해 network의 다음 layer를 입력데이터로부터 fully-connected가 아닌 local하게 구성함으로써 사용되는 weight 파라메터의 수도 줄어들게 됩니다.
여기서 Shared weights 특성이란 convolution을 위해 filter를 적용할 때, filter가 적용된 결과(local receptive field)는 계속 변경되지만, 적용하는 filter(weight) 값은 변하지 않는 것을 의미합니다. 한마디로 동일한 weight가 convolution할 때, 동일하게 적용(shared)되는 것을 의미합니다.
마지막으로 sub-sampling의 경우 추출한 local feature로 부터 입력된 데이터의 translation, distortion에 관계없이 topology에 영향을 받지 않는 global feature를 추출하기 위함입니다. 해당 과정을 거치고 classification을 진행하게 됩니다.
위 3가지 아이디어를 가지고 본 논문에서는 CNN 아키텍쳐를 구성하였습니다.
아래 아키텍쳐 그림은 LeNet-5 CNN을 보여주고 있습니다.
LeNet-5는 입력부분을 제외하고 총 7개의 레이어로 구성되며, 입력은 32x32로 입력 받습니다. 기존 LeNet-1의 경우 28x28 이미지를 사용했는데, 해당 이미지를 센터에 위치하게 하고 최종 사이즈를 32x32로 만든 입력 데이터를 사용하였습니다. 이렇게 만든 이유는 식별 할 수 있는 edge나 corner 등이 이미지의 센터의 receptive field에 위치 할 수도 있기 때문에 사이즈를 늘렸다고 합니다.
위의 그림에서 Cx는 convolutional layer를 의미하고, Sx는 sub-sampling layer를 마지막으로 Fx는 fully-connected layer를 말합니다. 그리고 x는 각 layer의 index를 의미합니다.
- Layer C1
입력 데이터(32x32 1개)로부터 5x5 filter 6개를 통해 feature map 28x28 사이즈로 6개를 생성합니다. 여기서 filter 즉, 학습 가능한 파라메터의 개수는 156개이며, 계산은 다음과 같습니다.
5x5 filter = 25(weight) x 6개 filter + 1(bias) x 6개 filter = 150 + 6 = 156개
- Layer S2
입력 데이터(C1 feature map, 28x28 6개)로부터 2x2 filter 6개를 통해 14x14 feature map 6개를 생성합니다. 여기서 filter가 적용될때, 2x2 receptive field가 overlapping이 되지 않도록 적용됩니다. average pooling을 수행함으로 weight 1개, bias 1개의 파라메터를 가지며, weight/bias가 추가된 결과에 최종적으로 sigmoid 함수가 적용됩니다. 학습 가능한 파라메터의 개수는 총 12개입니다.
2x2 filter = 1(weight, average pooling) x 6개 filter + 1(bias) x 6개 filter = 6 + 6 = 12개
- Layer C3
입력 데이터(S2 feature map, 14x14 6개)로부터 5x5 filter 16개를 통해 10x10 feature map 16개를 생성합니다. 학습 가능한 파라메터의 개수는 총 1,516개입니다. 6개의 데이터로부터 16개를 만드는데, 아래와 테이블과 같이 선택적으로 연결을 시키며 network의 symmetry한 성질을 없애기 위함입니다. convolution한 결과의 low-level feature가 각기 다른 부분과 섞여서 최종적으로 global feature를 얻어내기 위함이라고 합니다.
5x5 filter = 25(weight) x 60(S2 feature map과 C3 feature map간 connection수, 아래 테이블 X 표시 개수) + 1(bias) x 16개 filter = 1,516개
- Layer S4
입력 데이터(C3 feature map, 10x10 16개)로부터 2x2 filter 16개를 통해 5x5 feature map 16개를 생성합니다. 여기서 filter가 적용될때, 2x2 receptive field가 overlapping이 되지 않도록 적용됩니다. average pooling을 수행함으로 weight 1개, bias 1개의 파라메터를 가지며, weight/bias가 추가된 결과에 최종적으로 sigmoid 함수가 적용됩니다. 학습 가능한 파라메터의 개수는 총 32개입니다.
2x2 filter = 1(weight, average pooling) x 16개 filter + 1(bias) x 16개 filter = 16 + 16 = 32개
- Layer C5
입력 데이터(S4 feature map, 5x5 16개)로부터 5x5 filter 120개를 통해 1x1 feature map 120개를 생성합니다.(fully-connected)
따라서 이전 단계에서 얻은 16개의 feature map이 서로 섞여서 1x1 feature map 120개로 만들어지게 됩니다. 학습 가능한 파라메터의 개수는 총 48,120개입니다.
5x5 filter = 25(weight) x 1,920(S4 feature map과 C5 feature map간 connection수) + 1(bias) x 120개 filter = 48,120개
- Layer F6
입력 데이터(S5 feature map, 1x1 120개)로부터 1x1 feature map 84개를 생성합니다.(fully-connected)
따라서 이전 단계에서 얻은 120개의 feature map이 서로 섞여서 1x1 feature map 84개로 만들어지게 됩니다. 학습 가능한 파라메터의 개수는 총 10,164개입니다.
120(weight) x 84개 filter + 1(bias) x 84개 = 10,164개
- Layer Output
최종적으로는 10개의 class로 구분하게 됩니다. 학습 가능한 파라메터의 개수는 총 850개입니다. 최종적으로 Output Layer에는 Euclidean Radial Basis Function units(RBF)가 적용됩니다.
84(weight) x 10개 + 1(bias) x 10개 = 850개
아래의 그림에서 알수 있듯이 CNN이 적용됨으로써 입력 데이터의 translation, distortion과 같은 topology변화에 영향을 덜 받음을 알 수 있었습니다.
* GitHub : https://github.com/asyncbridge/deep-learning/tree/master/LeNet5
* 참고
[1] yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf
[2] https://www.slideshare.net/leeseungeun/cnn-vgg-72164295/
[3] https://www.slideshare.net/zukun/p03-neural-networks-cvpr2012-deep-learning-methods-for-vision
[4] https://laonple.blog.me/220608018546
[5] http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/
[6] https://github.com/sujaybabruwad/LeNet-in-Tensorflow
- Total
- Today
- Yesterday
- #ApacheSpark
- some time ago
- SSM
- Meow
- 도커
- #ApacheZeppelin
- Mask R-CNN
- English
- GOD
- Game Engine
- Badge
- 2D Game
- Ragdoll
- docker
- project
- Physical Simulation
- aws #cloudfront
- Library
- Jekyll and Hyde
- Sea Bottom
- #REST API
- #TensorFlow
- OST
- belief
- Worry
- Memorize
- #ELK Stack
- sentence test
- ILoop Engine
- ate
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |