본문 바로가기
Deep Learning/Convolutional Neural Networks

LeNet-5, 1998

by YJJo 2023. 1. 30.

1. LeNet-5 등장배경

LeNet은 CNN을 처음으로 개발한 Yann Lecun 연구팀이 1998년에 개발한 CNN알고리즘의 이름입니다. LeNet-5는 현대 CNN에서 성능이 좋은 모형은 아닙니다. 하지만 최초로 CNN을 제안했다는데 큰 의의가 있습니다. Lecun, Y. et al.은 LeNet 이전의 전통적인 이미지 분류 알고리즘의 세 가지 문제점을 설명합니다.

1) 전통적인 방법은 hand-crafted feature extraction을 하는데, 사람이 설계한 feature extractor 이다보니 제한된 학습이 이뤄질 수 밖에 없습니다. 따라서 Feature extractor 자체부터 학습이 이루어져야 합니다.

2) Fully-connected Layer (FC)의 경우 너무 많은 가중치를 갖습니다. 또한 이미지가 이동했을 경우 가중치의 의미를 잃게 됩니다. (예를 들어 10x10 모눈종이 안에 숫자 7을 쓰는 위치는 사람마다 다를 것입니다.) CNN을 적용하면 weight sharing을 통해 가중치의 수도 줄일 수도 있고, Shift Invariant 할 수 있습니다.

3) FC의 경우 Topology가 고려되지 않습니다. 이미지 데이터 특성상 공간적으로 큰 상관관계가 있는데, FC는 공간적인 관계를 반영하기 어렵습니다.

Lecun위 세 가지 문제점의 해결점으로 CNN을 제안합니다.

2. LeNet-5 구조

Fig. 1. Architecture of LeNet-5 (논문 발췌)

시작하기 앞서 위 그림에서 subsampling은 최근에 pooling layer로 자주 불립니다. 현대식 표현을 빌려, 위 구조를 요약하면 Input → Conv. (C1) Avg. Pooling (S2) Conv. (C3) Avg. Pooling (S4) Conv. (C5)   Fully Connected (F6)   Output 이며 각층을 상세히 살펴보겠습니다.

1) Input

32x32 흑백 이미지를 입력받습니다.

2) C1: Convolution Layer

5x5x1 filter, 6개, 1 stride로 convolution합니다. 따라서 28x28x6의 output을 얻습니다. Activation Function으로는 Sigmoid를 사용합니다.

3) S2: Average Pooling Layer

2x2 filter, 2 stride로 설정하여 average pooling을 진행합니다. 따라서 14x14x6의 output을 얻습니다. 

4) C3: Convolution Layer

Lecun, Y. et al.이 실제로 진행한 C3의 Convolution 방법은 다소 복잡합니다. 최근의 CNN은 해당방법을 적용하는 경우는 드뭅니다. 현대 CNN의 관점으로 해당 Layer를 설명하면, 5x5x6 filter, 16개, 1 stride로 Convolution하여 10x10x16의 output을 얻습니다. 원 논문에서는 아래와 같은 전략을 취했습니다.

Fig. 2. C3, Convolution Strategy

위 표에서 x는 이용됐음을 의미하며, 행은 S2의 Output을, 열은 C3의 각 필터를 의미합니다. (예를 들어, 1열은 0, 1, 2 번째 S2의 Output을 Convolution했다는 의미입니다.) 서로 다른 feature를 추출하기 위해서 위 전략을 사용했으며 각 feature가 hopefully complementary되도록 기대합니다. (논문 표현) 첫 여섯 번, 0~5의 convolution에서는 연속된 3장의 feature로 filter: 5x5x3, 1개, stride:1로 convolution, 그 다음 여섯 번(6~11)은 연속된 4장의 feature로 filter: 5x5x4 1개, stride:1로 convolution, 그 다음 세 번(12~14)에서는 불연속한 4장으로 filter: 5x5x4, stride:1로 convolution, 마지막(15)으로 모든 feature를 이용하여 filter: 5x5x6, 1개, stride: 1로 convolution하여 최종적으로 10x10x16의 output을 얻습니다. Activation Function으로는 Sigmoid를 사용합니다.

5) S4: Average Pooling Layer

2x2 filter, 2 stride로 설정하여 average pooling을 진행합니다. 5x5x16의 output을 얻습니다.

6) C5: Convolution Layer

Filter: 5x5x16, 120개, Stride: 1로 convolution하여 120의 output을 얻습니다. 이를 concatenate하면 fully-connected layer로 자연스럽게 연결됩니다. Activation Function으로는 Sigmoid를 사용합니다.

6) F6 & Output: Fully Connected Layer & Output

(F6) 1x120 벡터를 입력받아 1x84의 벡터를 출력하고, (Output) 다시 입력받아 1x10의 최종 Output을 얻습니다. F6는 Activation Function으로는 Sigmoid를 사용하고, Output은 Tanh를 적용합니다.

3. Pytorch Example

Activation Function은 상황에 맞게 바꾸어주면 될 것 같습니다.

class LeNet(nn.Module):
    def __init__(self, num_class):
    	self.cnn_level = nn.Sequential(            
            nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, stride=1),
            nn.Sigmoid(),
            nn.AvgPool2d(kernel_size=2),
            nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5, stride=1),
            nn.Sigmoid(),
            nn.AvgPool2d(kernel_size=2),
            nn.Conv2d(in_channels=16, out_channels=120, kernel_size=5, stride=1),
            nn.Sigmoid()
        )

    	self.fc_level = nn.Sequential(
            nn.Linear(in_features=120, out_features=84),
            nn.Sigmoid(),
            nn.Linear(in_features=84, out_features=n_classes)
        )
    def forward(self, x):
    	x = self.cnn_level(x)
        x = torch.flatten(x, 1)
        x = self.fc_level(x)
        probs = F.softmax(x, dim=1)
        return probs

References

LeCun, Yann, et al. "Gradient-based learning applied to document recognition." Proceedings of the IEEE 86.11 (1998): 2278-2324.

https://velog.io/@lighthouse97/LeNet-5%EC%9D%98-%EC%9D%B4%ED%95%B4

 

LeNet-5의 이해

참고 1. LeNet-5란 무엇인가? LeNet는 이미지 분류용 CNN 중에 조상격으로 CNN초기에 CNN의 기본 구조를 잘 정립하였다. LeNet의 다양한 버전들(LeNet-1, LeNet-2,...)이 있으나 최종 버전은 LeNet-5이다. LeNet은 CN

velog.io

https://deep-learning-study.tistory.com/368

 

[논문 리뷰] LeNet-5 (1998), 파이토치로 구현하기

가장 기본적인 CNN 구조인 LeNet-5 논문을 읽어보고 파이토치로 직접 구현해보면서 CNN에 대한 이해도를 높여보겠습니다. LeNet-5은 1998년 Yann LeCun의 논문 'Gradient-Based Learning Applied to Document Recognition'

deep-learning-study.tistory.com

 

'Deep Learning > Convolutional Neural Networks' 카테고리의 다른 글

VGG-16, VGG-19, 2014  (0) 2023.02.20
AlexNet, 2012  (0) 2023.02.10
CNN 역전파 (Backpropagation for CNN)  (4) 2019.07.02
Convolution Neural Networks (합성곱 신경망)  (38) 2019.06.23

댓글