1. 도정찬
컴퓨터 비전을 위한 합성곱 신경망 설계
Convolution Networks Arcitectures 2
- ZFNet, VGG 16
Michigan Online, Justin Johnson, Computer Vision, 2021. 02. 15
2. 이미지넷 분류 대회 ImageNet Classification Challenge
▪ 지금까지 알렉스넷에 대해 본게 2012년에 있었던 일이고, 2013년에는 어떤 일들이 있었을까요? 2013년부터 이 대회에 참여하는 모
든 사람들이 신경망을 사용하기 시작했고, 논문 저지인 Matt Zeiler와 Rob Fergus의 이름 뒤에서 따와서 ZF넷이라고 부르는 8계층 신경
망이 우승하였습니다.
3. ZFNET : 더 커진 AlexNet
▪ ZF넷은 기본적으로 더 커진 AlexNet이라고 할수 있습니다. 제가 AlexNet이 시행 착오를거쳐 만들어졌다고 했었는데, ZF넷도 더 많은
시행착오를 거쳐 만들어졌고, ZFNet과 알렉스넷의 기본적인 아이디어는 같아요. 다만 몇 계층들의 설정값들이 다른데, 특히 첫번쨰
알렉스넷의 합성곱 계층은 필터 크기가 11 x 11에다가 스트라이드가 2였지만, 7 x 7 필터에 스트라이드를 2로 주었을때 더 잘 동작하였
습니다.
4. ZFNET : 더 커진 AlexNet
▪ 그리고 뒤에 있는 합성곱 계층들 3, 4, 5층의 필터 갯수를 384, 384, 256개에서 더 늘려 512, 1024, 512개로 늘렸을때 더 잘 동작했다고
해요. 그래서 저는 ZFNet은 단지 알렉스 넷을 더 크게 만든거라고 봐요. 여러분들이 첫번째 합성곱 계층을 보면 스트라이드 4가 스트라
이드 2로 바뀌었는데, 입력을 더 자주 다운 샘플링을 한다고 볼수 있겠죠.
5. ZFNET : 더 커진 AlexNet
▪ 알렉스넷의 경우 11 x 11 스트라이드 4를 사용하여 다운 샘플링을 하는데, ZFNet의 경우 스트라이드를 2를 지정하여 다운 샘플을 하
고 있는데 이렇게 되면 ZFNet의 특징 지도들이 더 고해상도를 가지게 될거에요. 여기서 고해상도란 수용장이 더 넓다는 말이며, ZFNet
이 AlexNet보다 계산해야할 양이 더 많다고 볼수 있겠습니다.
6. ZFNET : 더 커진 AlexNet
▪ 그리고 뒤에 나오는 합성곱 계층들에서 필터의 개수를 늘려주고 있는데, 이렇게 하면 신경망이 더 커지고 학습해야할 파라미터들이
더 많아지죠. 그러면 더 많은 매모리 공간도 필요할거구요. 그래서 정리하자면 ZFNet은 alexnet을 더 크게 만든 신경망이라고 할수 있
겠습니다. 하지만 이 당시에도 신경망을 더 크거나 작게 만드는 원칙/방법같은건 없이, 신경망을 더 커지도록 파라미터를 조정시켜서
만든거에요.
7. 이미지넷 분류 대회 ImageNet Classification Challenge
▪ 그래도 이렇게 한 덕분에 기존의 alexnet보다 꽤 성능이 좋아져서 16.4에서 11.7까지 오류율이 떨어졌습니다.
8. 이미지넷 분류 대회 ImageNet Classification Challenge
▪ 이번에는 2014년도를 볼 차례인데 2014년도에는 karen simonian과 zisserman이 만든 엄청 VGG라고 부르는 아키텍처가 나왔는데, 이
VGG가 설계 방법론/원칙을 가지고 만든 최초의 구조라고 할수 있어요. Alexnet과 ZFNet이 파라미터들을 직접 조정하면서 시행착오를
겪어가며 만들다보니 신경망을 늘이거나 줄이기가 힘들었었지만, 2014년부터는 이런 직접 조정하는 방식이 아닌
9. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 이 VGG가 설계 방법론/원칙 design principle을 가지고 만든 최초의 아키텍처 신경망 구조라고 할수 있어요. Alexnet과 ZFNet이 파라
미터들을 직접 조정하면서 시행착오를 겪어가며 만들다 보니 신경망을 늘이거나 줄이기가 힘들었었지만, 2014년부터는 이런 직접 조
정하는 방식이 아닌 신경망 전반적인 구조를에 대한 설계 원칙을 가진 아키텍처를 사용하기 시작했습니다.
10. VGG : 더 깊어진 신경망, 일반화된 설계
▪ Vgg 신경망은 특히 간단하고, 깔끔하며 단순한 설계 원칙을 가지고 있는데, 이 설계 원칙으로 1) 모든 합성곱 계층은 3 x 3 커널에 (강
의와 슬라이드가 다른 부분은 슬라이드를 따라감) 스트라이드 1, 패딩 1로 지정해야하고, 2) 모든 최대 풀링 계층들은 2 x 2 커널에 스
트라이드를 2를 주며, 3) 맥스 풀링 계층 뒤에 채널 수를 3배로 한다. 로 이렇게 3가지 설계 규칙이 있습니다. 이런 단순한 설계 규칙 덕
분에 여러분들은 신경망에서 각 계층의 파라미터를 어떻게 지정할지 고민할 필요가 없게 되었죠.
11. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 이 신경망은 5개의 합성곱 단계가 있는데, 알렉스넷이 합성곱 계층이 5개가 있었던걸 떠올려보면, vgg는 더 많은 합성곱 계층들로 더
깊은 신경망을 만들었다고 할수 있겠습니다. vgg이 각 단계는 2개의 합성곱 계층과 1개의 풀링 계층으로 구성되다보니, vgg 아키텍처
는 합성곱-합성곱-풀링, 합성곱-합성곱-풀링, 합성곱-합성곱-풀링 같은 식으로 되어 있어요.
12. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 그리고 또 다른 vgg 구조 예시가 있고 검증 되었지만 가장 많이 사용되는건 16계층 짜리이고, 19계층 vgg 아키텍처는 앞에 있는 몇 단
계는 항상 두 합성곱 계층을, 뒤에서 두 단계에서는 3또는 4개의 합성곱 계층으로 이뤄져 있어요. 이게 여러분들이 vgg 신경망에 대해
알아야할 전부구요.
13. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 하지만 왜 사람들이 이런 설계 원칙을 가지고 신경망을 설계하기 시작하였는가를 고민해보면 좋을거 같아요. 우선 이 신경망에서는
3 x 3 크기의 합성곱 연산을 사용하는지 얘기하자면, alexnet와 zfnet에서는 각 합성곱 계층의 커널 크기는 하이퍼파라미터로 각 계층
마다 커널 사이즈를 지정해주었었죠.
14. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 한번 2가지 옵션의 경우를 생각해봅시다. 하나는 커널 크기가 5 x 5인 합성곱 계층인데, c 채널을 입력으로 받아 c채널을 출력으로 주
고, 입력 크기가 H x W이며 패딩을 2로 줘서 출력의 공간적 크기가 입력과 동일하도록 할게요. 그러면 이 합성곱 계층의 파라미터 개수
는 커널의 크기가 5 x 5이고, 입력 채널 c, 출력 채널 c다보니 편향항을 무시할때 25 C^2가 됩니다.
▪ 다음은 소수점 연산 횟수를 보면 출력 원소 개수는 채널 개수 C x 입력출력 크기 H x W로 C x H x W이고, 출력 원소 하나당 연산 회수
는 채널 개수 C x 커널 크기 5 x 5 이므로 25 C이니 총 소수점 연산 회수는 25C^2 H W가 됩니다.
15. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 이번에는 두 합성곱 계층을 쌓은 경우를 봅시다. 각 합성곱 계층은 커널 사이즈는 3 x 3으로 입력 채널이 C, 출력 채널도 C입니다. 이
전 장에서 수용장 receptive field에 대해 이야기했듯이 3 x 3 합성곱 계층을 2개 쌓은 경우와 5 x 5 크기의 합성곱 계층의 경우 입력에서
볼수 있는 수용장의 크기가 얼마나 되는가의 관점에서 본다면, 이 5 x 5 크기의 합성곱 계층과 3 x 3 크기의 합성곱 계층 두 개는 똑같이
입력에서 25개의 값을 볼수 있어요.
16. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 하지만 다른 점은 각 3 x 3 합성곱 계층에서 학습할 파라미터 개수는 9c^2이다보니 2개를 쌓았을때 총 학습 파라미터의 개수는 18c되
요. 그리고 비슷하게 두 합성곱 계층 스택의 소수점 연산 횟수를 구하면 18C^2HW가 됩니다. 여기서 신기한 점은 3 x 3 합성곱 계층의
스택의 수용장 크기는 같지만 학습 할 파라미터의 숫자가 훨씬 적고, 총 계산 비용도 줄어들었습니다.
17. VGG : 더 깊어진 신경망, 일반화된 설계
▪ Vgg 신경망을 통해서 알수 있는 건 굳이 큰 필터를 사용할 필요가 없으며 5 x 5 필터 대신 3 x 3 계층을 두개 쌓으면 되고, 7 x 7 크기의
필터를 사용하고 싶다면 3 x 3 합성곱 계층 3개를 쌓아서 대신할 수 있어요. 결국 우리가 신경써야 될 건 하이퍼파라미터로서 커널의
크기가 아니라 3 x 3 합성곱 계층을 각 단계마다 얼마나 많이 쌓을 것인가라고 할수 있겠습니다.
18. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 이번에는 두번째 설계 규칙에 대해 고민해보기전에 잠깐 얘기할게 있는데 3 x 3 합성곱 계층을 쌓으면서 이 사이에 ReLU함수를 넣을
수 있어요. 그러면 하나의 5 x 5 합성곱 연산을 했을때 보다 더 깊고 더 비선형적인 연산을 할수 있게 되겠죠.
▪ 그래서 3 x 3 합성곱 연산을 쌓는건 학습할 파라미터 개수를 줄이고, 소수점 연산의 수를 줄일 뿐만 아니라, 더 많은 비선형성을 고려
할수 있게 해주다보니 하나의 5 x 5 합성곱 계층보다 좋다고 할수 있겠습니다. 이 아이디어들이 첫번째 설계 규칙의 배경이에요.
19. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 이번에는 두번째 설계 규칙에 대해서 얘기하면 vgg에서 모든 풀링 계층들은 2 x 2의 최대 풀링이며 스트라이드는 2, 패딩은 0으로 입
력 특징 지도의 공간 해상도/데이터를 받아 처리해요. 마지막 설계 규칙은 풀링 처리 후에는 채널의 수를 2배로 해주는데, 두 단계 사
이에서 이 규칙들이 적용될때 어떤 일들이 벌어지는지 봅시다.
20. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 예를 들어 첫번째 단계의 계층에 C x 2H x 2W의 입력을 받고, 이 계층은 3 x 3 의 합성곱 연산과 C 채널을 입력으로받고 C 채널을 출력
으로 한다고 합시다. 이들을 곱해서 출력 텐서에 필요한 메모리 공간은 4HWC이고, 학습 가능한 파라미터의 수는 (편향을 제외한) 9
C^2개 이며, 소수점 연산 횟수는 39HWC^2가 됩니다. (강의 상에서는 슬라이드에 에러가 있다고하는데 위는 수정된걸 캡처)
21. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 이제 다음 단계로 넘어가면 채널의 수는 2배가 되고, 공간 해상도 크기는 절반이 되었습니다. 이때 사용하는 메모리 공간 크기가 1/2
배가 되었고, 학습할 파라미터의 수는 4배나 되었지만 소수점 연산의 수는 둘다 동일하다보니, 결국 두 단계에서 소수점 연산 비용은
같은걸 확인할수가 있습니다.
22. VGG : 더 깊어진 신경망, 일반화된 설계
▪ 위 VGG처럼 각 합성곱 계층의 소수점 연산 비용이 동일하도록 유지시키는 이 아이디어/설계 원칙들이 아주 많은 신경망 아키텍처
에서 사용되고 있고, 각 합성곱 단계의 끝에서 공간 크기를 그대로 두고 채널 수를 두배로 함으로서 사용할수가 있겠습니다.
23. ▪ 이번에 Alexnet과 Vgg16을 비교해보면, AlexNet은 5개의 합성곱 계층과 3개의 완전 연결 계층을 가지고 있었고, Vgg 신경망의 경우도
5개의 합성곱 단계와 3개의 완전 연결 단계를 가지고 있습니다. 이 두 신경망의 메모리, 파라미터 수, 소수점 연산 수를 비교하기 위해
그래프를 그려보면, 이 그래프를 보다시피 Vgg가 Alexnet보다 훨씬 큰 신경망인걸 알 수 있어요.
AlexNet vs VGG-16 : 훨씬 커진 신경망!
24. AlexNet vs VGG-16 : 훨씬 커진 신경망!
▪ 파란색 막대를 보기 힘들 정도로 Vgg의 계산량과 메모리 등이 훨씬 큰 탓에 alexnet의 수치가 잘 보이질 않아요. 총 메모리 사용량의
경우 vgg가 25배 크며, 학습 파라미터의 수는 alexnet이 61백만, vgg16은 138백만으로 2배 정도 더 많습니다. 가장 큰 문제는 두 모델의
계산 비용으로 총 소수점 연산을 더해서 비교해보면, alexnet의 순전파시 계산 비용과 vgg16의 순전파시 계산 비용이 19배 더 비싼걸
볼수가 있어요. 그래서 vgg16는 매우 큰 신경망이며, alexnet에서 ZFnet으로 봤던것 처럼 더 큰 신경망이 더 좋은 성능을 보였습니다.
25. 이미지넷 분류 대회 ImageNet Classification Challenge
▪ 하지만 vgg가 어떻게 설계 원칙을 정할지에 대해 참고가 되어 신경망을 쉽게 키우거나 줄일수 있게 되었고, 각 계층의 하이퍼파라미
터들을 튜닝시킬 필요도 없다보니 2014년은 특별한 해였던것 같습니다. 그 해에 두 합성곱 신경망 아키텍처가 나왔는데 하나가 vgg인
데, 제가 얘기드리고 싶은 건 vgg 아키텍처가 한 대학원생과 교수의 헌신적인 노력 덕분에 나온 모델이에요.