![article thumbnail image](https://blog.kakaocdn.net/dn/H6fUa/btrH2h0tYqg/YFKDmBVav9cJRELXplTim1/img.png)
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에서 하는 것: $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 있어서 (위처럼) 차원 맞춰주는 과정 필요함
'인공지능 > DLS' 카테고리의 다른 글
[4.2.] Practical Advice for Using ConvNets (0) | 2022.07.27 |
---|---|
[4.2.] Case Studies(2) (0) | 2022.07.26 |
[4.1.] Convolutional Neural Networks(3) (0) | 2022.07.24 |
[4.1.] Convolutional Neural Networks(2) (0) | 2022.07.24 |
[4.1.] Convolutional Neural Networks(1) (0) | 2022.07.23 |