article thumbnail image
Published 2022. 7. 24. 21:50

Why look at case studies?

building blocks를 어떻게 쌓아야 효과적일까?

한 task에 잘 작동하는 아키텍쳐가 다른 task에도 효과적일 수 있다

 

[Classic networks]

- LeNet-5

- AlexNet

- VGG

 

[ResNet]

- 152개 레이어 (very deep)

 

[Inception]

 

 

Classic Networks

[LeNet-5]

- hand written digits

- 0~9 분류

- 약 60000개 파라미터 (오늘날 기준 비교적 적은 편)

- $n_{H}$, $n_{W}$는 감소하고, $n_{C}$는 증가

- conv - pool - conv - pool - fc - fc - output

 

(advanced comments)

당시에는 sigmoid/tanh 함수를 사용

한정된 computational power로 filter를 각 채널에 대해서 적용할 때 보다 복잡한 방식 채택했다고 함

non-linearity after pooing

"graph transfomer network" 언급

읽을 때 섹션2 집중

 

[AlexNet]

- LeNet과 유사하지면 훨씬 큰 모델 - 60000000개 파라미터

- ReLU 사용 

- 2개의 GPU를 복잡하게 사용하는 방식

- "Local response normalization" : 하나의 지점을 짚은 다음 채널별로 정규화 - 그렇게 큰 도움이 안 됨

 

[VGG-16]
- 단순화된 레이어 활용, filter 크기, same padding, max pool 고정 --> uniform한 구조

- 상대적으로 깊은 구조

- "16" : weight를 가진 16개의 레이어

- VGG-19 : 더 큰 버전

- channel 수의 증가가 일관됨 - 체계적

 

 

Residual Networks(ResNets)

[Residual block]

$a^{[l]}$에서 $a^{[l+2]}$로 이르기까지 이 플로우를 "main path"라고 부르기로 함

- $a^{[l]}$를 linear 식에 대입하여 $g(z)$(ReLU)에 통과시켜 $a^{[l+1]}$를 구하고, 한번 더 반복하여 $a^{[l+2]}$를 구하는 과정

 

residual block

Residual block에서 하는 것: $a^{[l]}$값을 복제하여 ReLU 전에 더함 --> 이 플로우를 "short cut" 혹은 "skip connection"이라 부르기로 함

$a^{[l]}$의 정보가 short cut을 따라 더 깊은(deeper) 레이어에 전달될 수 있음

 

이어지는 ReLU 식은 $a^{[l+2]} = g(z^{[l+2]})$가 아니라,

$$a^{[l+2]} = g(z^{[l+2]}+a^{[l]})$$

residual block

"plain network"를 5개의 residual block을 쌓은 네트워크로 만들기

 

레이어를 쌓을수록 어떻게 되는지 그래프로 확인

 

- vanishing/exploding gradient problem에 도움이 됨

- deep한 네트워크에서 효과적

 

 

Why ResNets Work?

- plain network에서는 네트워크가 너무 깊으면 학습셋에 fit되는 능력이 떨어질 수 있음 

두 개의 네트워크를 비교, 후자는 하나의 residual block을 덧붙였음

모든 활성화함수는 ReLU 를 쓴다고 봄 - 따라서 모든 $a$값은 0보다 크거나 같다

 

$$a^{[l+2]} = g(z^{[l+2]}+a^{[l]})$$

$$= g(w^{[l+1]}a^{[l+1]} + b^{[l+1]}+a^{[l]})$$

 

만약에 $w^{[l+1]}=0, b^{[l+1]}=0$라면 $g(a^{[l]})$이고, ReLU함수이기 때문에 그대로 $g(a^{[l]}) = a^{[l]}$가 된다

$$a^{[l+2]} =a^{[l]}$$

 

the identity function is easy for residual block to learn

 

두 레이어를 더 했지만 매우 쉬운 learning ($a^{[l+2]} =a^{[l]}$)이 되고, performance도 다치게 하지 않음

 

한편, $g(z^{[l+2]}+a^{[l]})$에서 $z^{[l+2]}$와 $a^{[l]}$의 차원이 같다고 본다

--> ResNet에서는 "Same Conv" 적극 활용한다는 의미

 

만약  input/output의 차원이 다른 경우에는, $W_{s}$ 벡터를 활용해 차원을 맞춰준다

예를 들어 $a^{[l+2]} = g(z^{[l+2]}+a^{[l]})$에서 $a^{[l+2]} $가 256 차원이고 $a^{[l]}$이 128차원이라면

$$a^{[l+2]} = g(z^{[l+2]}+W_{s}a^{[l]})$$

$$W_{s} \in R^{256\times 128}$$

- $W_{s}$ : 학습되는 파라미터일 수도 있고, 0으로 패딩해주는 벡터일 수도 있다

 

same conv 를 사용하기 때문에 차원은 맞으나, 중간 pooling layer 있어서 (위처럼) 차원 맞춰주는 과정 필요함

복사했습니다!