1. 도정찬
컴퓨터 비전을 위한 합성곱 신경망 설계
Convolution Networks Arcitectures 5
- Others
Michigan Online, Justin Johnson, Computer Vision, 2021. 02. 15
2. ▪ 이번에는 오늘날 다양한 신경망들의 계산 복잡도를 비교해 봅시다. 오른쪽에 보면 아주 잘그려진 그래프가 있는데 x축은 소수점 연
산량이고, y축은 이미지넷 대회에서의 정확도를 그리고 원의 크기는 학습할 파라미터의 수로 우리가 학습한 내용을 한번에 볼수 있게
정말 잘 만들었습니다.
복잡도 비교
3. ▪ 이제 왼쪽을 보면 구글에서 인셉션 v2, v3,v4를 만들었는데 인셉션 v4는 ResNet을 추가시킨거구 여기에 대해서 자세하게는 얘기하진
않을게요.
복잡도 비교
4. ▪ 이번에 오른쪽 그래프에서 VGG를 보면 메모리 사용량도 많고 연산량도 아주 많죠. 그래서 이건 매우 비효율적인 신경망 설계법이라
고 볼수 있겠습니다.
복잡도 비교
5. ▪ 이번에 GoogLeNet은 매우 작고 효율적인 모델이에요 하지만 이후에 나온 신경망들 만큼 성능이 좋지는 않죠.
복잡도 비교
6. ▪ AlexNet은 여기 구석에 있는데, 계산량이 다른 방법들에 비해 많고, 여러 완전 연결 계층들 때문에 많은 파라미터가 필요해요.
복잡도 비교
7. 복잡도 비교
▪ ResNet은 간단하면서도 꽤 효율적인데, 거기다 이 잔류 신경망을 더 깊게 만들수록 정확도가 더 높아지게 되요.
10. 이미지넷 2016 우승자 : 모델 앙상블
▪ 2016년 우승자는 모델 앙상블을 사용했어요. 여러분들이 캐글 대회에 참여 해본지는 모르겠지만 최근 몇년간 우승한 아키텍처들은
약간씩 성능이 좋아지기는 했지만 크게 중요한 일은 없었습니다.
11. 향상된 ResNets: ResNeXt
▪ 하지만 최근 몇년간 잔류 신경망을 개선하기위한 노력들이 있어왔는데, 이 병목 잔류 블록이 152 계층의 잔류 신경망을 만드는데 사
용됬었었죠.
12. 향상된 ResNets: ResNeXt
▪ 그럼 하나의 병목 가지만으로도 좋았는데 이걸 병렬로 한다면 어떨까요? 이 아이디어가 잔류 신경망의 다음세대인 ResNeXt에서 사
용됩니다. ResNeXt는 각각의 병목블록이 평행하게 G개 만큼 있어요.
13. 향상된 ResNets: ResNeXt
▪ 한번 각 병렬 병목 블록의 안의 채널 차원을 상수 c라고 합시다. 그러면 이 병렬 병목 블록 전체 FLOP을 계산할 수가 있는데, 모든 평
행 병목 블록의 출력을 계산한 후에 이 출력들을 모두 더 할 거에요.(출력에 관한 내용 : 각 통로의 출력을 계산하여 합치겠다.)
▪이제 이 특이한 다중 통로 디자인의 전체 연산량 비용을 계산할수 있는데, 각각의 병목 블록/가지들의 연산비용은 (8Cc + 9c^2)HW가
되겠죠.
▪ * FLOP 연산 횟수 : 전체 출력 원소의 개수 * 출력 원소 하나당 연산 횟수 = (출력 채널 x H' x W') x (입력 채널 x 커널 크기 x 커널 크기 )
14. 향상된 ResNets: ResNeXt
▪ 여기서 신기한 점은 우린 위의 이차식을 세울수 있는데, 채널의 차원 C와 평행 통로의 개수 G를 지정하여 이차식을 풀면 c의 값을 구
할 수 있고, 이런 G개의 평행 가지 G parallel branches를 가진 다중 통로 multi path 아키텍처를 원래의 병목 구조와 동일한 계산 비용으
로 연산을 할 수 있어요.
15. 향상된 ResNets: ResNeXt
▪ 위 계산 과정을 정리하자면 입력 채널의 개수 C와 평행 통로의 개수 G가 있으면, 원래의 병목 블록에서 하던 만큼 연산량을 각 평행
병목 블록 G개로 병렬로 처리하는 대신 각 통로당 채널의 크기를 원래의 방법(4C -> C)보다 훨씬 줄여 (4C -> c) 실제 소수점 연산은 동일
하다.
▪ 다시 말하면 한줄이 여러 채널을 처리하던걸 여러 줄로 나눠서 처리하는대신 각 줄이 처리할 채널 수를 줄였다.
(원래의 병목 블록) (평행 평목 블록)
17HWC^2 (8Cc + 9c^2)HWG
17C^2 = (8Cc + 9c^2)G
0 = 9Gc^2 + 8GCc - 17C^2
(C=64, G=32의 경우) 위 식은 c = 4로 정리된다
16. 향상된 ResNets: ResNeXt
▪ 이걸 통해서 신경망을 설계할때 채널의 갯수를 조정할 뿐만이 아니라 평행 통로의 개수를 설정할수도 있는걸 배울수 있었습니다. 위
방정식을 풀어서 평행 통로의 개수를 설정하고 계산량을 그대로 유지시킬수도 있었죠.
(원래의 병목 블록) (평행 평목 블록)
17HWC^2 (8Cc + 9c^2)HWG
17C^2 = (8Cc + 9c^2)G
0 = 9Gc^2 + 8GCc - 17C^2
(C=64, G=32의 경우) 위 식은 c = 4로 정리된다
17. 그룹 합성곱
▪ 그리고 이 평행 통로의 개념을 활용한 기법인 그룹 컨볼루션이 있습니다.
22. 향상된 ResNets: ResNeXt
▪ 제가 여기에 대해서 자세히 이야기할 시간이 없긴 하지만 ResNeXt의 디자인을 그룹에 대한 축을 추가하는것으로 바꿔서 효율적으로
다중 평행 통로를 처리할수 있도록 만들었습니다.
23. ResNeXt : 계산량은 그대로 더 많은 그룹!
▪ 이렇게 ResNeXt의 구조가 바뀌었음에도 계산량이 증가하지는 않았지만, 각 블록에서 평행 통로의 개수를 증가 시킬수록 더 좋은 성
능이 나왔습니다. 50 계층 ResNet을 베이스라인모델로 사용했을때 평행 통로의 개수를 증가시켰을때 실제로 정확도가 증가하였으며,
101 계층 ResNet의 평행통로를 증가시켰을떄도 똑같이 성능이 향상되는 추세를 보입니다. 신경망의 계산복잡도가 같음에두요.
26. ▪ 2017년 이후에는 이 대회가 종료되어 현재는 캐글에서 관련된 대회가 이뤄지고 있습니다.
이미지넷 대회
27. ▪ 이미지넷 대회가 끝나긴 했지만 사람들은 여전히 더 크고 효과적인 신경망 아키텍처를 설계하려고 시도하고 있습니다. 여러분은 앞
으로 신경망 아키텍처에 대해 강의 들으면서 계산량을 조절하기 위한 방법인 집중적 다운 샘플링 aggressive downsapling을 신경망을
효율적으로 만들고 동작시킬수 있도록 계속 사용할 거에요.
이미지넷 대회
28. 이미지넷 대회
▪ 계산량을 그대로 유지하거나 줄이기 위한 방법으로 신경망 전체에 반복 블록 구조를 만드는 경우도 있는데, 이렇게 하면 모든 계층
의 파라미터를 튜닝할 필요 없이 신경망을 설계 할 수 있겠습니다. 이런 다양한 설계 방법들이 이후 신경망 설계 과정에서 사용되고 있
어요.
29. 밀집 연결 신경망
▪ 이후에 나온 신경망들중 하나로 밀집 연결 신경망(완전 연결 fully connected 신경망과 구분하기 위해 밀집 연결 densely connecte라
함)이 있는데, 이 신경망은 스킵 커낵션, 연결 지름길을 조금 다르게 사용하고 있어요. 잔류 신경망에서는 잔류 블록의 지름길 덕분에
그라디언트가 잘 역전파 될수 있었는데 연결이 많다보니 더 잘 역전파를 할 수 있고,
30. 밀집 연결 신경망
▪ 밀집 연결 신경망에서는 잔류 블록처럼 이전 특징/입력을 더하여 이전 값이 이후 값을 바꾸는게 아니라, 이 지름길로 온 특징을 나
중에 재사용할수 있도록 순차 연결 concatenation 시켜요. 이 밀집 블록을 신경망 전체에 여러 단계에서 반복하구요.
▪ 정리하자면 밀집 연결 신경망의 장점은 1. 그라디언트 소멸을 완화, 2. 특징 전파를 강화, 3. 특징 재사용
31. 모바일넷 : 가벼운 신경망(모바일 기기용)
▪ 최근에 있었던 중요한 추세는 지금까지 우리는 이미지넷 데이터를 가지고 더 높은 정확도를 얻기 위해 아주 많은 파라미터를 가지고
연산을 했었고, FLOP도 줄이려고 했었어요. 하지만 좋은 모델일 수록 매우 정확하고 무거웠죠.
▪ 그래서 정확도는 조금 떨어지더라도, 최소한의 연산으로 모바일 기기나 임베디드 제품에서 동작할 수 있는 가능한 작은 신경망이 필
요하다고 합시다. 매우 효율적으로 동작하는 합성곱 신경망이있기는 한데, 이런 모델들은 정확도는 떨어져 ResNet를 이길수는 없고
대신 계산비용은 매우 적어요. 대표적인 예시로 모바일 넷이 있습니다.
32. 모바일넷 : 가벼운 신경망(모바일 기기용)
▪ 모바일넷도 블록을 반복시켜 만드는데, 왼쪽의 기본적인 3 x 3 합성곱 블록을 보면 합성곱-배치정규화-ReLU순으로 되어있어요. 이
블록의 계산 비용을 구하면 9C^2HW가 되겠죠. 이번에는 이 합성곱 연산을 2개의 합성곱 연산으로 바꿀건데, 하나는 깊이 단위 합성곱
depthwise convolution이에요. 지금 시간이 없다보니 넘어가고,
33. 모바일넷 : 가벼운 신경망(모바일 기기용)
▪ 모바일넷도 블록을 반복시켜 만드는데, 왼쪽의 기본적인 3 x 3 합성곱 블록을 보면 합성곱-배치정규화-ReLU순으로 되어있어요. 이
블록의 계산 비용을 구하면 9C^2HW가 되겠죠. 이번에는 이 합성곱 연산을 2개의 합성곱 연산으로 바꿀건데, 하나는 깊이 단위 합성곱
depthwise convolution이에요. 지금 시간이 없다보니 넘어가고,
34. ▪ 그리고 모바일 기기에서도 돌릴수 있는 효율적인 신경망을 어떻게 설계하기 위한 노력들로 이런 논문들도 있어요. 이런걸 보면 다양
한 신경망 아키텍처를 만든다고 아주 많은 활동들이 있어왔고, 여전히 필요 많은 노력을 필요로 하고 있어요.
모바일넷 : 가벼운 신경망(모바일 기기용)
35. 신경망 아키텍처 탐색
▪ 최근 몇년간 많이 사용되어지고 있는 일이 있는데, 신경망 설계와 신경망 학습 과정이 자동화되고 있어요. 이 내용에 대해서도 시간
이 없다보니 넘어가고 차후 강의에서 자세히 살펴보겠습니다. 기본 개념은 우리가 컨트롤러라고 부르는 한 신경망을 가지고 있다고
할께요. 그리고 이 컨트롤러는 다른 신경망 구조를 출력합니다.
36. 신경망 아키텍처 탐색
▪ 훈련 과정에서는 컨트롤러로부터 만들어낸 여러 아키텍처들을 데이터셋으로 하여, 이 자식 신경망들을 학습 시킵니다. 그리고 이
신경망들이 얼마나 잘 동작하는지를 보고, 컨트롤러 신경망의 그라디언트를 계산하는데 사용해요. 그라디언트를 계산하는데 필요한
매커니즘은 그라디언트 계산 정책은 조금 있다가 얘기하겠습니다.
37. 신경망 아키텍처 탐색
▪ 아무튼 자식 신경망들의 배치를 학습한 후에는 경사를 내려갈수 있도록 컨트롤러에 대해 하나하나 그라디언트를 계산할수 있겠습
니다. 하지만 계산 비용이 엄청 엄청 클거에요. 하지만 시간이 지나면 이 컨트롤러는 좋은 신경망 구조를 찾아넬거에요. 이 신경망 아
키텍처 탐색 방법의 초기 버전은 아이디어는 좋았으나 계산 비용이 정말 크다는 문제가 있었습니다. 컨트롤러의 그라디언트를 계산
하는 한 단계가 이 방법의 초기 버전에서 학습하는데 800GPU를 사용해서 28일이나 걸렸거든요.
38. 신경망 아키텍처 탐색
▪ 그래서 여러분한태 숙제를 줄수 없어 아쉽지만, 여러분이 구글에 있고 GPU를 마음대로 쓸수 있다면 한번 해볼수 있겠죠. 하지만 다
음 연구 덕분에 이 논문은 그냥 농담거리가 되었습니다. 이 논문에서는 필요한 자원량이 매우 많았었지만 다음 논문에서 사용한 아키
텍처 탐색 방법은 이 탐색 시간을 크게 줄였기도 하고, 이후 연구에서 수천배 이상 빨라지다보니 사람들이 자주 이 논문이랑 비교하곤
합니다. 논문 통과하는데 좋은거든요.
39. ▪ 신경망 탐색에 사용할 자원이 충분하다면, 신경망 아키텍처를 효율적으로 찾아낼수 있어요. 이 그래프는 이번 강의에서 지금까지본
다양한 아키텍처들을 정리한건데 x축에는 우리가 봤던 계산비용과 y축에는 이미지넷 데이터셋에서의 정확도가 있습니다. 그리고 서
로 다른 신경망 아키텍처들을 나타내는 점들이 있는데, 빨간 선은 신경망 탐색 방법을 통해 찾은 다음 아키텍처들을 보여주고 있어요.
▪ 정리하면 신경망 아키텍처 탐색 방법으로 다양한 신경망 아키텍처를 학습을 해서 더 정확하고 계신 비용이 적은 모델을 찾아 낼 수
있겠습니다.
신경망 아키텍처 탐색
40. CNN 아키텍처 정리
▪ 이제 오늘 본 내용들을 정리하자면 초기 합성곱 신경망에 대해서 살펴보았습니다. AlexNet부터 ZFNet, VGG를 보면서 사람들이 정확
도를 높이기 위해 신경망을 더 크게 만들었었고, GoogLeNet은 가장 먼저 효율성을 위주로 한 신경망 모델 중 하나로 계산 비용을 고려
하면서도 높은 정확도도 가질수 있었습니다.
41. CNN 아키텍처 정리
▪ 잔류 신경망을 보면서 신경망의 크기를 조절하는 방법을 알수 있었는데 덕분에 엄청 큰 신경망을 만들 수 있었고, 배치 정규화를 사
용하여 100층이 넘어가는 신경망을 학습할수 있게 되었습니다. ResNet 이후에는 사람들이 효율성에 더 집중하기 시작하였고, 이 신경
망 모델이 다른 수많은 아키텍처 설계의 기반이 되었습니다.
42. CNN 아키텍처 정리
▪ ResNet 이후에 나온 다양한 신경망 아키텍처들을 보았고, 더 적은 계산비용으로 정확도가 그대로이거나 더 높도록 하는 가벼운 신
경망인 모바일넷이나 셔플넷같은 모델도 나왔습니다. 그리고 신경망 아키텍처 탐색을 통해서 신경망 설계도 자동화 되는걸 볼수 있
었어요.
43. 어떤 아키텍처를 사용해야할까요?
▪ 마지막 질문은 어떤 아키텍처를 실제로 써야할까요? 제가 조언을 하자면 영웅이 되려고 하지 마세요. 자신 만의 신경망 아키텍처를
만들고자 한다면 아주 힘들거고, 한달 동안 800개의 GPU를 돌리기도 어려울거에요. 여러분들은 이미 나온 신경망 아키텍처를 가지고
여러분의 문제에 적합하게 고치는걸 추천해요.
44. 어떤 아키텍처를 사용해야할까요?
▪ 지금까지 다양한 모델들을 봤지만 ResNet-50이나 ResNet-101이 정말 좋은 베이스라인 모델로 사용할 수 있을거에요. 여러분이 계산
비용 문제를 고려하고 있다면 모바일 넷이나 셔플넷을 사용할수 있을 겁니다. 하지만 되도록이면 스스로 신경망 모델을 설계하려고
하지는 마세요. 다음 시간에는 이런 신경망들을 학습하는데 사용하는 소프트웨어와 하드웨어에 대해서 이야기해봅시다.