현대 MNEST는 28x28을 받지만, LeNet-5는 32x32를 input 받을. 당시에 convolution은 아직 발전하지 않았기 때문에 전통적인 Fully Connected의 영향을 받음. 전통적인 Fully connected는 위치에 민감하기 때문에, Object가 한 가운데 위치하는 것이 좋았음. 그래서 padding을 하여 Object를 가운데 위치하게 함
Input : 32x32
약간 더 크게 함. 당시 Convolution에 대한 이해가 크지 않았기 때문에, 전통적인 machine learning에 사용했던 이미지 전처리를 적용함
C1 : feature map 6@28x28
논문에는 설명이 없음. stride = 1, padding 없는 것을 기본 옵션으로 생각하면 됨.
S2 : f.maps 6@14x14
현대와 가장 많이 차이가 나는 부분. 현대의 pooling 방식이 아니라 학습을 통해 a를 곱하여 줄임.
학습을 통하여 줄이기 때문에 훨씬 더 특징을 그대로 가질 것이라는 이론적인 생각을 함.
결과적으로는 현대적인 방식인 학습을 통해 줄일 필요가 없음. 왜냐면 그대로 줄여도 C1에서 결국은 다른 형태로 학습이 되기 때문에 학습을 할 필요가 없음
나중에 비슷한 개념이 나옴. unpooling : 두개가 같은 결과인데, 각각 학습할 필요 없이 앞에만 잘 학습되면 산술연산에서 잘 나오면 값이 다름
줄이는 이유? 계산 복잡도 때문에. 크기를 줄여 계산 복잡도를 줄이고, 구해야 하는 weight를 작게해서 학습 데이터를 작아도 rhoscksgdma
C3 : f. map@10x10
S4 : f.maps 16@5x5
동일하게 pooling
activation function을 : tanh
왜 tanh? 당시 ReLU가 없었음
tanh는 문제점?
LeNet-5는 input 크기, pooling 방법, activation 빼고는 잘 만든 모델
명확한 한계점 : gradient vanishing 문제 해결하지 못함
-> 2000년대 후반까지 해결이 안 됨
gradient vanishing 때문에 학습이 안 되는 문제가 생김 -> under fitting
특징
HW 문제로 병렬로 학습함
ReLU의 등장으로 gradient vanishing 문제를 해결함
Overlapping Pooling : 큰 영향을 주지 못함. Overlapping을 안 해도 학습에 따라 잘 조절이 됨
Data Augumentation
Data를 늘린다고 성능이 좋아지는 것이 아니라 Overfitting을 막는 것. 보통은 224x224짜리가 학습 데이터라고 할 때, 256x256짜리로 랜덤하게 자르는 방법을 사용. data는 충분해야 하고 대표성을 띄어야 함. 성능이란 accuracy를 올리는 것이 아님.
https://www.tensorflow.org/tutorials/images/data_augmentation
Drop Out
Random하게 없앰으로서 data 수를 줄어들게 함
Drop out 자체는 ensemble technique. 요즘에는 drop out을 안 쓰는 추세. 2015년도 batch normalization이 나오고 나서, drop out을 안 쓰는 추세가 됨.
[참고]
5CNNs / 7CNNs : ensemble model을 사용했다는 것