Inception
- 1*1 convolution
- Inception Network의 motivation
- Inception Network
Inception
- googLeNet에서 사용되었다
1. 1×1 convolution
- 비선형성 부여
- feature map의 channel을 줄이는 역할
- 1*1 convolution layer의 다른 이름은 network in network
- 6*6*32 feature map에 1*1*32 필터 K개를 통과시키면 -> 6*6*K feature map을 얻는다.
- 이것은 channel별로 fully connected layer 통과하는 것과 동일하다! (input node 32, output node는 필터의 개수인 FC)
- 1*1 convolution layer는 feature map의 channel 수를 줄이기 위해 사용된다.
- feature map의 width와 height를 줄이려면? pooling layer 통과!
- feature map의 channel을 줄이려면? 1*1 conv layer 통과! + 이 때 비선형성도 부여해줄 수 있다
2. Inception Network의 motivation
- 여러 사이즈의 필터 정보를 활용하여 하나의 feature map을 구성하고 싶다!
- 하지만 계산비용이 어마어마하다 (학습해야 하는 파라미터의 수가 매우 많다)
- 일례로 5*5 conv layer의 파라미터 수를 아래에서 알아보자.
- 28*28*192 feature map에 5*5 conv layer 통과한 뒤 28*28*32 feature map을 만드려면 필요한 파라미터는?
- (5*5*192+1)*32 = 153,632 (bias 포함)
- 너무 많은 parameter가 학습되어야 한다 🙁
- -> 1*1 convolution layer를 사용해서 파라미터의 수를 줄여보자
- (1) 28*28*192 feature map의 channel 수를 1*1 conv layer 사용해 28*28*16으로 변경
- 여기서의 parameter 수 = (1*1*192+1)*16 = 3,088
- (2) 28*28*16 feature map에 5*5 conv layer 통과한 뒤 28*28*32 feature map 얻는다.
- 여기서의 parameter 수 = (5*5*16+1)*32 = 12,832
- (1)+(2) 전체 parameter의 수 = 15,920 << 153,632 (약 1/10 수준)
- 여기서 중요한 것은 우리의 목적은 5*5 conv layer를 통과시키는 것이다.
하지만 그냥 통과시키기에는 파라미터의 개수가 너무 많다 🙁 - 따라서 1*1 conv layer 통과시켜 channel을 줄인 뒤 3*3 conv layer 통과시키자!
그러면 학습해야 하는 parameter의 수 줄어든다. 🙂 - 이렇게 1*1 conv layer 통과시켜 channel 줄인 뒤 filter 적용하는 구조를 bottle neck 구조라고 한다
3. Inception Network
- inception module에서 다양한 feature를 추출하기 위해 1*1, 3*3, 5*5, pooling을 각각 수행한다.
- 하지만 이렇게 naive하게 feature map을 concatenate하게 되면 연산량이 급격히 증가하는 문제가 있다.
- 이것을 해결한 것이 아래의 inception module이다.
- 3*3, 5*5 conv layer 통과하기 전, 1*1 conv layer통과하여 channel의 수를 줄여주어 연산량을 줄일 수 있다.
- pooling layer를 통과한 뒤 1*1 conv layer 통과하여 channel의 수를 줄여주어 다음 layer의 연산량을 줄여주었다.
- 이처럼 1*1 conv layer를 활용하여 연산량을 줄여주었다는 것이 핵심 아이디어이다.
- 이러한 inception module을 활용한 googLeNet의 전체적인 구조는 위와 같다.
- 여기서 주목해야 할 부분은 3가지가 있다.
- 1. 중간중간 inception module을 사용해주었다는 것
- 2. 네트워크의 얕은 부분에는 inception module을 적용해주지 않았다는 것
- 논문에 따르면 입력과 가까운 부분에서는 inception의 효과가 없었다고 한다.
- 논문에 따르면 입력과 가까운 부분에서는 inception의 효과가 없었다고 한다.
- 3. auxiliary classifier를 사용해주었다는 것
- 목적
- 앞에 위치한 layer까지 gradient가 잘 전달되지 않고 소멸되는 vanishing gradient 문제를 해결하기 위해
- 학습을 잘하도록 도와주는 보조 역할 수행
- 방법
- 중간중간 softmax를 통해 결과를 뽑아 loss를 구해주고, gradient를 전파해준다.
- 주의할 점
- auxiliary classifier에서 구한 loss가 weight matrix update에 너무 큰 영향을 주는 것을 막기 위해
여기서 구해진 loss에는 0.3을 곱해준다. - 학습할때만 auxiliary classifier를 사용하고, test time에서는 사용하지 않는다.
- auxiliary classifier에서 구한 loss가 weight matrix update에 너무 큰 영향을 주는 것을 막기 위해
- 목적
- 1. 중간중간 inception module을 사용해주었다는 것
'🙂 > Coursera_DL' 카테고리의 다른 글
WEEK6 : Object Detection (1) (0) | 2020.12.23 |
---|---|
WEEK6 : convNet 사용에 도움이 될 지식 (0) | 2020.12.23 |
WEEK6 : ResNet (0) | 2020.12.23 |
WEEK5 : CNN (convolutional neural network) (0) | 2020.12.21 |
WEEK5 : end to end DL (0) | 2020.12.21 |