LeNet-5의 이해

박재한·2022년 2월 21일
2

Deep Learning

목록 보기
6/22
post-custom-banner

참고

1. LeNet-5란 무엇인가?

LeNet는 이미지 분류용 CNN 중에 조상격으로 CNN초기에 CNN의 기본 구조를 잘 정립하였다. LeNet의 다양한 버전들(LeNet-1, LeNet-2,...)이 있으나 최종 버전은 LeNet-5이다.
LeNet은 CNN을 처음으로 개발한 얀 르쿤(Yann Lecun) 연구팀이 1998년에 개발한 CNN 알고리즘의 이름이다. original 논문 제목은 "Gradient-based learning applied to document recognition"이다. 우선 LeNet-5의 구조를 살펴보자.
Imgur
그림에서 볼 수 있듯이 LeNet-5는 인풋(Input) 레이어, 3개의 컨볼루션 레이어(C1, C3, C5), 2개의 서브샘플링 레이어(Subsampling layer or Pooling layer)(S2, S4), 1층의 full-connected 레이어(F6), 아웃풋(Output) 레이어로 구성되어 있다. 참고로 C1부터 F6까지 활성화 함수로 tanh(hypobolic tangent)을 사용한다.

2. LeNet-5의 각 계층 설명

2.1 C1 Layer(Convolution)

입력 영상(여기서는 32 x 32 사이즈의 이미지)을 6개(6채널)의 5 x 5 필터와 컨볼루션 연산을 해준다. 그 결과 6장의 28 x 28 특성 맵(Feature map)을 얻게 된다.

훈련해야할 파라미터 개수: (가중치 * 입력맵 개수 + 바이어스) * 특성맵 개수 = (5*5 *1 + 1)*6 = 156
(가중치가 커널(필터) 사이즈 5X5를 말한다.)

2.2 S2 Layer(Subsampling)

6장의 28 x 28 특성 맵에 대해 서브샘플링(subsampling, pooling)을 진행한다. 결과적으로 28 x 28 사이즈의 특성 맵이 6장의 14 x 14 사이즈의 특성맵으로 축소된다. 2 x 2 필터를 stride 2로 설정해서 서브샘플링해주기 때문이다. 사용하는 서브샘플링 방법은 평균 풀링(average pooling)이다.

훈련해야할 파라미터 개수: (가중치 + 바이어스) * 특성맵개수 = (1+1)*6 = 12

평균풀링인데 왜 훈련해야할 파라미터가 필요한지 의아할 수 있는데, original 논문에 의하면 평균을 낸 후에 한 개의 훈련가능한 가중치(trainable weight)를 곱해주고 또 한 개의 훈련가능한 바이어스(trainable bias)를 더해준다고 한다. 그 값이 시그모이드 함수를 통해 활성화된다. 참고로 그 가중치와 바이어스는 시그모이드의 비활성도를 조절해준다고 한다.
(단순 풀링만 하는 것이 아니라 여기에 뭔가 더 추가해서 학습을 하는 거 같다.)

2.3 C3 Layer(Convolution)

6장의 14x14 특성맵에 5X5 커널의 컨볼루션 연산을 수행해서 16장의 10x10 특성맵을 산출해낸다. 이것 이해하는데 한참 걸렸다. 6장 -> 16장이 나오게 되는 과정을 맨 위의 그림만 봐서는 알 수가 없다.
다음 그림을 보자.
Imgur
1) 6장의 14 x 14 특성맵에서 연속된 3장씩을 모아서 5 x 5 x 3 사이즈의 필터와 컨볼루션 해준다(그림에서 열0-5). 6장의 10 x 10 특성맵이 산출된다.
2) 6장의 14 x 14 특성맵에서 연속된 4장씩을 모아서 5 x 5 x 4 사이즈의 필터와 컨볼루션 해준다(그림에서 열6-11). 6장의 10 x 10 특성맵이 산출된다.
3) 6장의 14 x 14 특성맵에서 불연속한 4장씩을 모아서 5 x 5 x 4 사이즈의 필터와 컨볼루션 해준다(그림에서 열12-14). 3장의 10 x 10 특성맵이 산출된다.
4) 마지막으로 6장의 14 x 14 특성맵 모두를 가지고 5 x 5 x 6 사이즈의 필터와 컨볼루션 해준다(그림2에서 열15). 1장의 10 x 10 특성맵이 산출된다.
결과적으로 16장(6 + 6 + 3 + 1)의 10 x 10 특성맵을 얻게 되었다.
(입력에서 연속된 3장, 4장이나 불연속된 4장의 hyper parameter값은 논문에서 작성자가 임의로 선택한 값이라고 하였다.)

훈련해야할 파라미터 개수:
첫번째그룹=> (가중치*입력맵개수+바이어스)*특성맵 개수 = (5*5*3 + 1)*6 = 456
두번째그룹=> (가중치*입력맵개수+바이어스)*특성맵 개수 = (5*5*4 + 1)*6 = 606
세번째그룹=> (가중치*입력맵개수+바이어스)*특성맵 개수 = (5*5*4 + 1)*3 = 303
네번째그룹=> (가중치*입력맵개수+바이어스)*특성맵 개수 = (5*5*6 + 1)*1 = 151
456 + 606 + 303 + 151 = 1516

2.4 S4 Layer(Subsampling)

16장의 10 x 10 특성 맵에 대해서 서브샘플링을 진행해 16장의 5 x 5 특성 맵으로 축소시킨다.(2 x 2 필터, stride 2)

훈련해야할 파라미터 개수: (가중치 + 바이어스)*특성맵개수 = (1 + 1)*16 = 32

2.5 C5 Layer(Convolution)

16장의 5 x 5 특성맵을 120개의 5 x 5 x 16 사이즈의 필터와 컨볼루션 해준다. 결과적으로 120개의 1 x 1 특성맵이 산출된다.

훈련해야할 파라미터 개수: (가중치*입력맵개수 + 바이어스)*특성맵 개수 = (5*5*16 + 1)*120 = 48120

2.6 F6 Layer(Fully-Connected)

84개의 유닛을 가진 피드포워드 신경망이다. C5의 결과를 84개의 유닛에 연결시킨다.
LeNet에서는 아직 Backpropagation을 사용하지 않는다.

훈련해야할 파라미터 개수: 연결개수 = (입력개수 + 바이어스)*출력개수 = (120 + 1)*84 = 10164

2.7 Output Layer

10개의 Euclidean radial basis function(RBF) 유닛들로 구성되어있다. 각각 F6의 84개 유닛으로부터 인풋을 받는다. 최종적으로 이미지가 속한 클래스를 알려준다. 10개의 출력에서 각각이 특정 이미지일 확률을 나타낸다.
RBF에서는 학습할 때 역전파(Backpropagation)를 사용한다.

LeNet-5를 제대로 가동하기 위해 훈련해야할 파라미터는 총 156 + 12 + 1516 + 32 + 48120 + 10164 = 60000개다.

profile
바쁘게 부지런하게 논리적으로 살자!!!
post-custom-banner

0개의 댓글