1. 도정찬
컴퓨터 비전을 위한 합성곱 신경망 설계
Convolution Networks Arcitectures 3
- GoogLeNet
Michigan Online, Justin Johnson, Computer Vision, 2021. 02. 15
2. 이미지넷 분류 대회 ImageNet Classification Challenge
▪ 이번에는 2014년 구글에서 만든 신경망에 대해서 이야기해봅시다. 구글 신경망 팀은 많은 컴퓨터 연산이 가능했는데, VGG 팀이 이
미지 분류 대회에서 우승하지는 못하였지만 구글 팀을 잘 쫓았었어요. 이제 Google Net에 대해 이야기해보면 잠깐 질문이 들어왔네요.
질문이 VGG도 다중 GPU로 분할해서 동작가능한지 여부인데, 이거에 대해서는 차후에 이야기 할게요.
3. 이미지넷 분류 대회 ImageNet Classification Challenge
▪ 물론 다중 GPU를 사용하는 방법이 있긴한데 데이터를 배치로 나누어 여러개의 서로 다른 GPU에서 배치를 처리하는 병렬 처리로 하
는 방식을 사용해요. 그래서 여러 GPU에서 쓸수 있도록 모델 자체를 나누기 보다는 데이터를 미니배치로 나누어 다중 GPU를 처리하
는 방식이 사용되고 있습니다. 이 방법은 모델 병렬화보다 구현하기 쉬워요.
4. 이미지넷 분류 대회 ImageNet Classification Challenge
▪ 또 질문이 들어왔는데, 네 VGG는 Visual Geometry Group의 약어로 연구실 이름이에요. 제 생각에 이 연구실 이름이 이 합성곱 신경망
구조를 나타내게 되었는데, 이게 좋은건지 나쁜건지는 잘 모르겠습니다. 이번에 이야기할 2014년도에 나온 다른 모델은 GoogLeNet으
로 귀여운 이름이죠. 이전에 얀 레쿤이 만든 가장 초창기의 합성곱 신경망 모델인 LeNet을 떠올려보면, 구글 팀이 얀 레쿤에게 경의를
표하고자 이 신경망 이름을 GoogLeNet으로 정하였습니다.
5. 구글넷 : 효율성에 집중한 신경망
▪ 구글넷에 대한 개념들은 효율성 위주을 목표로 하고 있는데, 이전에 AlexNet에서 ZFNet, VGG까지는 점점 큰 신경망을 만들어내는 추
세였으며 더 큰 신경망이 더 좋은 성능 내는걸 봣었죠. 하지만 GoogLeNet을 만든 팀은 실제 데이터를 사용하여, 휴대폰에서도 동작할
수있도록 메모리 공간도 절약하는 효율적인 합성곱 신경망을 설계하려고 노력했었어요. 비용이 적은 합성곱 신경망 설계법으로 같은
성능을 얻을수 있도록 이들은 정말 정말 정말 잘 동작하고, 전반적인 복잡도를 최소화 시킬수 있는 신경망을 만들고자 하였습니다.
6. 구글넷 : 효율성에 집중한 신경망
▪ 이들은 몇가지 혁신적인 기법들을 사용했는데, 이 기법들이 GoogLeNet 아키텍처에서 만들어져서 널리 사용하기 시작되었어요. 여
기에는 아주 많은 신경망 아키텍처, 구조들로 이루어져 있는데, 이 중 하나로 맨 앞에서 여러 합성곱 계층으로 이루어진 줄기 신경망
Stem Network이 사용되고 있어요.
7. 구글넷 : 효율성에 집중한 신경망
▪ 이 줄기 신경망은 입력 이미지의 공간적 해상도/크기를 급격히 줄일수 있도록 다운 샘플링을 자주하고 있는데, 왜냐면 VGG와
AlexNet에서는 특징맵을 많이 사용하고, 공간/이미지 크기가 큰 상태에서 컨볼루션을하다보니 비용이 매우 많았습니다. 그래서 큰 특
징 지도에 의한 합성곱 계층 비용을 줄이고자, 입력을 빠르게 다운 샘플링하는 가벼운 가중치 줄기 lightweight stem를 사용하였습니
다. 저는 이 줄기 설계 구조에 대해서 자세하게 보지는 않을거지만, 입력 해상도가 빠르게 다운 샘플되는걸 확인 할 수 있어요.
8. 구글넷 : 효율성에 집중한 신경망
▪ 저는 이 줄기 설계 구조에 대해서 자세하게 보지는 않을거지만, 입력 해상도가 224 x 224에서 여러 계층을 거쳐 28 x 28로 빠르게 다
운 샘플되는걸 확인 할 수 있어요. 이렇게 몇개의 계층만을 사용해서 작은 특징지도/공간 해상도를 가지고 연산을 할수 있다보니 고해
상도 이미지를 사용함에 의한 비싼 합성곱 연산을 할 필요가 없어졌습니다.
9. 구글넷 : 효율성에 집중한 신경망
▪ 한번 VGG 16과 비교해보자면 먼저 GoogLeNet을 보시면 224에서 28로 공간 해상도가 줄었고, 전체 신경망의 비용이 418 MFLOP이 되
었습니다. VGG-16의 경우 224에서 28로 다운 샘플링 될때, 공간적 크기는 같더라도 구글넷보다 MFLOP이 18배다 많습니다.
10. 구글넷 : 효율성에 집중한 신경망
▪ GoogLeNet에서 다른 혁신적인 기법으로 인셉션 모듈 Inception Module로 이 인셉션 모듈은 위와 같이 지역적인 구조를 가지고 있는
데, 신경망 전체에서 반복되어 나타나요. VGG에서 conv-conv-pool처럼 단순한 반복 구조를 GoogLeNet에서 사용하여 인셉션 모듈은
전체 아키텍처에 여러 차례 반복되도록 설계되었습니다.
11. 구글넷 : 효율성에 집중한 신경망
▪ 그리고 인셉션 모델은 패러랠 브랜치 연산/평행 가지 연산 parallel branches of computation이라고 하는 아이디어를 사용하고 있어요.
이전에 VGG를 떠올려보면 합성곱 커널의 크기가 이전에는 하이퍼파라미터였으나, VGG에서는 커널 크기 하이퍼파라미터 조정을 피
할수 있도록 여러개의 3 x 3 합성곱 계층을 쌓는 것으로 대체시켰었죠.
12. 구글넷 : 효율성에 집중한 신경망
▪ GoogLeNet은 약간 다른 접근 방법을 사용하고 있는데, 하이퍼파라미터인 커널 크기를 없애기 위해서 인셉션 모듈안의 커널 사이즈
를 위와 같이 지정해주었습니다. 여기에 4개의 평행 가지 parallel branches가 있는데, 하나는 1 x 1 합성곱 계층, 다른 하나는 3 x 3 합성
곱 계층, 다른 하나는 5 x 5 합성곱 계층을, 나머지 하나는 스트라이드 1인 풀링 계층으로 이 계층들이 각자의 위치에서 모든 커널 사이
즈를 받는 덕분에 하이퍼 파라미터인 커널 사이즈를 조정할 필요가 없어요.
13. 구글넷 : 효율성에 집중한 신경망
▪ 인셉션 모듈의 다른 혁신적인 점은 비용이 큰 합성곱 연산을 하기 전에 1 x 1 합성곱 연산으로 채널의 수를 줄인다는 점인데, 1 x 1 합
성곱 병목구간 bottlenect에 대해서 이따가 잔류 신경망 residual netowork에 대해 이야기할때 다시보겠습니다. 저는 이거에 대해서 깊
이 얘기하고싶지는 않아요.
14. 구글넷 : 전역적 평균 풀링
▪ GoogLeNet에서 다른 혁신적인 점은 전역적 풀링을 신경망 맨 끝에서 사용하는 점이에요. 잠깐 VGG와 AlexNet을 다시 떠올려보면
VGG에선 파라미터가 아주 많았고, AlexNet에서는 신경망 끝 완전 연결 계층에서 많았었죠. 우리는 효율성을 목표로 하므로 신경망에
서 이 파라미터 수를 줄여야 합니다.
15. 구글넷 : 전역적 평균 풀링
▪ GoogleNet은 이런 거대한 완전 연결 계층들을 제거하기 위해서, AlexNet과 VGG의 합성곱 계층 끝에서 공간 정보를 없애기 위해 펼침
연산을 하여 거대한 벡터로 만들었었죠. GoogleNet은 공간 정보를 없애기 위해 텐서들을 펼치는 대신 다른 방법인 커널 사이즈를 최종
합성곱 계층의 공간 크기와 동일하게 맞춰(입력 크기 7 = 커널 크기 7) 평균 풀링을 사용하였습니다.
16. 구글넷 : 전역적 평균 풀링
▪ GoogLeNet의 마지막 인셉션 모듈 끝에서 합성곱 연산 출력 텐서는공간 크기가 7 x 7이고, 1024개의 합성곱 특징 지도로 이루어져 있
는데, 요기에 커널 크기도 7 x 7로 지정하여 평균 풀링을 하면 (여기선 스트라이드는 상관없죠 커널 크기와 공간 크기가 같아 한번만 연
산하므로) 1024채널의 모든 공간 위치/특징 이미지들의 평균 값들을 구할수가 있어요. 이렇게 거대한 탠서로 펼치지 않고서 공간 정
보를 제거하였고, 그 결과 1024 크기의 벡터를 얻었습니다.
17. 구글넷 : 전역적 평균 풀링
▪ GoogLeNet은 완전 연결 계층이 한개 뿐인데, 전역 평균 풀링의 출력 길이가 1024 벡터를 이미지넷의 1000개 카테고리 점수로 바꿔주
기 위한거에요. 이렇게 GoogLeNet은 학습할 파라미터 개수를 완전 연결 계층 대신 전역적 평균 풀링을 사용하여 크개 줄일수가 있었
습니다. 이 점이 GoogLeNet과 다른 합성곱 신경망의 차이점이라 할수 있어요.
18. 구글넷 : 전역적 평균 풀링
▪ 이번에는 GoogLeNet과 VGG를 비교해보면 GoogLeNet의 마지막 끝에있는 계층이 얼마나 크게 파라미터의 개수에 영향을 주는지 볼
수 있어요. GoogLeNet의 다른 이상한 점은 부속 분류기들을 auxiliary classifiers 사용한다는 점이에요.
19. ▪ GoogLeNet의 다른 이상한 점은 부속 분류기들을 auxiliary classifiers 사용하는 점이에요. 제가 짚고 싶은 부분은 배치 정규화를 발견하
기 전에는 10층 이상의 신경망을 학습하기가 매우매우 힘들어서 배치 정규화 없이 10층 이상 깊은 신경망을 만들길 원하는 사람들은
GoogLeNet에서 사용한 거와 같이 부속 분류기 auxiliary classifier라고 하는 이상한 방법을 사용해야만 했어요.
구글넷 : 부속 분류기들
20. ▪ 여기에 이 부속 분류기들이 하는일을 보여주는데, 여러분들도 알다시피 GoogLeNet의 맨 끝에서 전역적 평균 풀링과 클래스별 스코
어를 만들기 위한 완전 연결 계층이 있었었죠. 부속 분류기들은 부속 전역 평균 풀링과 완전 연결 계층 가지고 있으며 신경망의 여러
중간 지점에 있어요. 그래서 신경망의 끝 뿐만이 아니라 부속 분류기로 한 두개의 중간 지점에서도 클래스별 스코어를 출력 시키다보
니 이 세 분류기로 비용과 역전파 그라디언트를 계산하게 되요.
구글넷 : 부속 분류기들
21. ▪ 이 덕분에 그라디언트 역전파가 신경망 전체에 더 쉽고 더 잘되었는데, 그라디언트가 신경망의 꼭대기 최종분류기에서만 나오는게
아니라 두 부속 분류기 지점에서도 그라디언트를 주입 받거든요. 이 방법은 이 당시에 수렴할수 있는 더 깊은 신경망을 만들기 위해 고
안되었었습니다.
구글넷 : 부속 분류기들
22. ▪ 네 또 질문이 들어왔네요. 10층 이상 신경망을 학습하는데 배치 정규화를 사용하기 전에는 이런 트릭 같은 방법을 사용해야만 했었
어요. 그리고 VGG의 경우도 그랬었는데, 11계층을 가진 얕은 VGG 신경망 버전을 학습 시킬때 사람들은 우선 한번 수렴하도록 학습 시
킨 다음에 11계층 VGG의 사이에다가 새로운 계층을 집어넣는 식으로 만들었습니다. 그리고 다시 학습을 시켰었죠.
구글넷 : 부속 분류기들
23. 구글넷 : 부속 분류기들
▪ 최적화 과정에서는 이미 학습하 신경망의 중간에 새로운 계층을 집어넣은 후에 이걸 수렴시킬수 있도록 만들어주는 트릭같은 방법
들이 필요해요. 이게 약간 지저분한 방법이지만 깊은 신경망인 VGG를 수렴할수 있게 만들었어요. 2014년도는 신경망 연구에서 힘든
시기였습니다. 수 많은 참여자들이 깊이 들어갈수록 이들을 수렴하기 위해서 지저분한 방법들을 사용해야만 했었거든요.
24. ▪ 하지만 다행이도 2015년에 들어서면서 바뀌게 되었는데, 2014년과 2015년 사이에 중요한 일은 배치 정규화 batch normalization기법
을 발견하여 사람들은 VGG와 GoogLeNet을 이런 트릭없이 배치 정규화를 사용해서 처음부터 학습할수 있게 되었습니다.
이미지넷 분류 대회 ImageNet Classification Challenge