ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cs231n] 9강 CNN 아키텍처 (architecture) (4/4, 다른 아키텍처들)
    AI 2021. 4. 1. 15:50

    빠르게 관련된 복잡도에 대해 좀 더 감을 잡아 보도록 이걸 보죠. 여기에 플롯 (plot)들이 있는데, 성능으로 정렬된 건데, 상위 1개 (top 1) 정확도로 정렬된거죠. 그래서 더 높은게 더 좋은 거죠. 우리가 얘기했던 이 모델 중 많은 것들을 보게 될거고 뿐만 아니라 그것들의 다른 버전도 보게 될 겁니다. 이 구글넷 인셉션은, v2, v3도 있었던 것 같은데요.

    가장 좋은 것은 v4인데, 이건 사실 레즈넷 더하기 인셉션의 조합이죠. 그래서 이것들은 그것들 위에 만든 일종의 점진적이고, 좀 더 작은 변화들입니다. 그래서 그게 여기서 가장 잘 동작하는 모델이죠.

    오른쪽을 보면, 이 계산 복잡도에 대한 플롯들은 정렬이 되어 있는데요. Y축은 상위 1개 정확도라서 더 높은 것이 더 좋은 거죠. X축은 연산이라서 더 많을수록 더 오른쪽이죠. 더 많은 연산을 할 수록, 계산적으로는 더 비싼거죠. 그리고 원이 더 클 수록, 메모리 사용이 많은거죠. 회색 원들은 참고용입니다. 그러나 원이 더 클수록 메모리 사용이 많은 거죠. 보다시피 VGG인 이 녹색인 것들이 효율이 가장 낮은 것이죠. 그것들은 가장 큰 매모리를 가지고, 가장 많은 연산을 하죠. 그러나 그것들은 잘 동작합니다.

    구글넷이 가장 효율적이죠. 여기서는요. 그건 연산쪽에서 제일 아래쪽에 있고 뿐만 아니라, 메모리 사용에 대해서도 작은 원이죠.

    알렉스넷은 초기 모델인데, 낮은 정확도를 가지고 있죠. 비교적 작은 계산이 필요하죠. 왜냐면 작은 망이니까요. 그러나 특별히 메모리를 적게 쓰는 것은 아닙니다.

    그리고 레즈넷은, 중간정도로 효율적이죠. 메모리와 연산측면에서 모두 중간정도에 있네요. 그리고 가장 높은 정확도죠.

    여기 추가적인 플롯들이 있는데요. 혼자 더 봐도 좋습니다만, 왼쪽의 이 플롯은 순방향 전달 (forward pass) 시간을 보여주죠. 이건 밀리세컨드 (milisecond) 단위입니다. 그리고 제일 위쪽에서 VGG가 순방향 전달을 200밀리세컨드에 하는 것을 볼수 있죠. 이걸로는 1초당 5개의 프레임을 얻는 거죠. 이건 순서대로 정렬되어 있습니다. 오른쪽에는 이 플롯은 전력 소모를 나타내는데요. 이 논문을 더 보면, 이런 종류의 계산적 비교에 대한 더 심화된 분석이 있습니다.

    이것들이 여러분들이 깊이 알아야하고 익숙해져야 하고 적극적으로 사용해야 하는 주요 아키텍처들이었습니다. 이제부터는 간략하게 다른 아키텍처들을 볼 텐데, 이것들은 알고 있으면 좋은 역사적인 영감을 주는 것이거나 혹은 더 최근의 연구 분야들입니다.

    첫번째 것은 Network in Network라는 것인데요. 2014년에 나왔습니다. 이것 뒤에 있는 아이디어는 우리가 이 바닐라 (vanilla) 합성곱 계층을 가지고 있지만, 이것은 Mlpconv 계층이라고 불리는 것을 도입했습니다. 그것들은 마이크로 망인데 사실상 네트워크 안의 네트워크 (Network in Network)죠. 논문의 이름입니다. 여기서는 각 콘브 (conv) 계층내애서 2개의 완전 연결 계층과 함께 Mlp를 쌓으려고 합니다. 표준적인 콘브위에 쌓는거죠. 그러면 이 지역적 패치 (local patches)에 대한 추상적인 피쳐 (feature)에 대해 더 많이 계산할 수가 있습니다. 콘브 필터를 그냥 슬라이딩 (sliding)하는 대신, 그건 약간 더 복잡한 계층구조의 필터 집합을 슬라이딩하는거고 그걸 사용해서 활성 지도를 얻는 거죠. 그건 이 완전 연결 계층 혹은 1 x 1 콘브 계층들을 사용합니다. 그건 아래 그림처럼 그것들 모두를 쌓을 거고, 각각의 계층에서 쌓여진 망 내의 망 (network in network)을 얻습니다. 이걸 알아야 하는 이유는 그게 2014년에 나온 구글넷, 레즈넷의 선도자였다는 거죠. 보았듯이 이 병목 계층 아이디어가 거기서 매우 많이 사용되었습니다. 그리고 그건 또한 구글넷에 대해 약간의 철학적 영감을 주었죠. 그건 이 지역 망 위상인 network in network 아이디어인데 다른 종류의 구조로 많이 사용되었죠.

    이제 일련의 연구들에 대해서 얘기할 건데, 레즈넷 (ResNet)이후의 연구들이죠. 대부분 레즈넷을 개선하는 방향으로 설계된 것들입니다. 그래서 이것은 그 이후 나온 더 최근의 연구죠. 이것들을 매우 빠르게 지나갈 거라서 매우 높은 차원에서 볼 겁니다. 만약 이중에 관심있는 것이 있다면, 논문을 보고 더 자세한 사항들을 얻기 바랍니다. 레즈넷의 저자들은 조금 뒤 2016년에 이 논문에서 레즈넷 블록 디자인을 개선했습니다. 그들은 사실상 레즈넷 블록 경로에 있던 계층들을 조정했고, 이 새로운 구조가 망을 통해 정보를 전달하기 위한 더 직접적인 경로를 가질 수 있다는 것을 보여줬죠. 그리고 여러분은 정보를 위로 끝까지 전달하고 다시 아래로 역전파할 좋은 경로를 가지고 싶을 겁니다. 그래서 그들은 이 새로운 블럭이 그것에 더 좋고 더 나은 성능을 낼 수 있다는 것을 보여줬죠.

    WideResidual Networks도 있습니다. 이 논문에서는 레즈넷이 망을 더 깊게 만들었을 뿐만 아니라 이 중복 연결 (residual connection)을 추가했다고 얘기합니다. 중복 (residual)이 정말 중요한 요소라고 주장하고 있죠. 이 중복 컨스트럭션 (construction)을 가지는 것이 중요하지 극도로 깊은 망을 가질 필요는 없다는 거죠. 그래서 그들은 더 넓은 중복 블록 (block)을 사용했습니다. 이게 의미하는 바는 모든 콘브 계층에 더 많은 필터가 있다는 겁니다. 이전에는 계층마다 F개의 필터를 가지고 있었고 이 k인수를 사용했죠. 그리고 모든 계층에서 F 곱하기 k 필터가 된다고 얘기합니다. 그래서 이 더 넓은 계층을 사용해서 그들은 50 계층의 넓은 레즈넷이 152계층의 원래의 레즈넷을 이길 수 있다는 것을 보여줬습니다. 그리고 그것은 또한 추가적인 장점이 있었는데, 같은 수의 파라미터라도 그것이 계산적으로 더 효율적이라는 겁니다. 왜냐면 이것들을 병렬화할 수 있어서 연산이 더 쉬워지는 거죠. 더 많은 뉴런이 있는 합성곱은 더 많은 커널 (kernel)에 걸쳐 퍼질 수 있죠. 깊이는 그 반대로 더 순서적이죠 (sequential). 그래서 넓이를 늘리는 것이 계산적으로 더 효율적입니다. 여기서 여러분은 이 연구가 넓이와 깊이와 중복 연결의 영향을 이해하려고 하길 시작했다는 것을 알 수 있죠. 그리고 각 방향을 다른 방향과 비교해서 몇가지 주장을 하고 있습니다.

    그리고 이 다른 논문은 비슷한 시기에 나왔는데, 약간 더 나중에 나온것 같네요. 이건 ResNext입니다. 이것도 또한 아키텍처를 계속해서 더 밀어 부치는 연구를 하는 레즈넷 사람들이 만든거죠. 여기서 그들은 또한 이 아이디어를 냅니다. 자, 정말 이걸 넓이로 더 해결하려고 해보자! 그러나 더 많은 필터를 통해 이 중복 블록 (residual block)의 넓이만 증가시키는 것 대신에, 그들은 구조를 만들었습니다. 그래서 각 중복 블록내에서, 여러 개의 병렬 경로가 있습니다. 그들은 이 경로 (pathway)의 총 춧자를 카디날리티 (cardinality)라고 부릅니다. 그래서 그건 사실상 병목이 있는 하나의 레즈넷을 취한 것이고, 그걸 비교적 더 날씬하게 해서, 병렬된 여러 개의 이것들을 갖는 것이죠. 그래서 여기서 여러분은 이 두개가 모두 넓은 망이라는 이 아이디어와 관련되어 있는 것을 볼 수 있습니다. 뿐만 아니라, 인셉션 모듈 (inception module)과도 약간 연결되어 있죠. 거기서도 이 계층들이 병렬로 연산을 하죠. 이 레즈넥스트 또한 그런 특징이 있습니다.

    레즈넷을 개선하려는 또 다른 접근 방법은 이 아이디어인데 확률적 깊이 (Stochastic Depth)라고 불립니다. 이 연구에서 동기는 자, 이 깊이 문제를 더 들여다 보자!는 것이었죠. 일단 더 깊이 더 깊이 들어가면, 만나게 될 전형적인 문제는 경사가 사라지는 것 (vanishing gradient)입니다. 경사를 긴 계층을 따라서, 즉 많은 수의 계층을 따라서 역전파하면 점점 더 작아질거고 결국 사라지죠. 그래서 그들의 동기는 그럼 훈련동안에는 망을 짧게 하자는 것이었고, 그들은 훈련동안 계층의 하위 집합을 없애는 (dropout) 이 아이디어를 사용했습니다. 그래서 계층의 하위집합 (subset)에 대해서 그들은 가중치를 드랍아웃 (dropout)하고 그것을 항등 연결 (identity connection)로 설정했습니다. 그래서 훈련동안 이 더 짧은 망들을 갖게 되고, 경사를 더 잘 역전파할 수 있습니다. 또한 좀 더 효율적이죠. 그건 일종의 드랍아웃입니다. 앞에서 보았던 이런 특징을 갖고 있는 것이죠. 그리고 테스트시에 훈련했던 전체 깊은 망을 사용하고자 할 겁니다. 이것들이 레즈넷 아키텍처를 보고 그것의 여러 측면을 이해하고 레즈넷 학습을 개선하려고 했던 연구들 중 몇가지입니다. 그리고 이제 또한 레즈넷을 넘어서려는 연구들이 좀 있습니다. 자, 어떤 레즈넷이 아닌 아키텍처가 레즈넷보다 더 잘 혹은 견줄만큼 잘 할 수 있을까요?

    하나의 아이디어는 프랙탈넷 (FractalNet)입니다. 꽤 최근에 나왔는데요. 프렉탈넷에서의 주장은 레지듀얼 표현 (residual representation)이 사실 필요하지 않을지도 모른다는 겁니다. 이건 앞에서 얘기한 것, 즉 레지듀얼 망의 동기가 무엇인지로 돌아 가는 거죠. 그건 맞는 말처럼 보입니다. 그리고 이것이 도움이 되는 좋은 이유들이 있지만 이 논문에서는 여기 소개하는 다른 아키텍처가 있는데, 레지듀얼 표현은 없는 거죠. 그들은 생각하기에 열쇄는 얕은 망에서 깊은 망으로 효율적으로 전이하는 것 (transitioning)이라고 생각한다고 하며, 이 프랙탈 아키텍처를 가지고 있습니다. 오른쪽을 보면, 이 계층들에서 그들은 그것을 이런 프랙탈 방식으로 만들었죠. 그래서 출력으로의 얕은 경로와 깊은 경로 모두 있습니다. 그들은 이런 여러 길이의 경로를 갖는 거죠. 그들은 그것들을 훈련 시킬때 하위 경로를 드랍아웃시켜면서 합니다. 여기서도 이런 드랍아웃 종류의 특징이 있네요. 테스트시에는 그들은 이 전체 프랙탈 망을 사용할 거고 그들은 이것이 매우 좋은 성능을 얻을 수 있다는 것을 보여줬습니다.

    다른 아이디어도 있는데 밀도 높게 연결된 합성곱 망 (Densely Connected Convolutional Network)입니다. DenseNet이라고 하죠. 이 아이디어에선 덴스 블록 (dense block)이라고 불리는 이 블록들이 있습니다. 각 블록에서 각 계층은 그 다음 각각의 다른 계층에 연결됩니다. 이런 피드포워드 (feedforward) 방식으로요. 이 각각의 블럭에서 이 블럭에 대한 입력은 또한 다른 각각의 콘브 계층의 입력이 되고 각각의 콘브 출력을 계산하면, 그 출력들은 이제 모든 계층으로 연결됩니다. 그후에, 이것들은 모두 콘브 계층의 입력으로 연결되고 그것들은 다른 과정을 거쳐서 차원을 줄이고 효율적이 됩니다. 이것으로부터 기억할 점은 그들이 주장하기에 이것은 경사가 사라지는 문제를 완화한다는 것입니다. 왜냐면 이런 모든 밀도 높은 연결을 가지고 있기 때문이죠. 그건 피쳐 전파 (propagation)를 강화하고 또한 피쳐 재사용을 권장하고 있죠. 왜냐면 매우 많은 이런 연결들이 있고 학습하고 있는 각 피쳐 지도들 (feature maps)은 나중에 여러 계층에서 입력이 되고 여러번 사용되니까요.

    이것들이 대체 모델로 볼 수 있는 몇 가지 아이디어들이었습니다. 즉 레즈넷이 아니지만 해볼 수 있는 것들이고 레즈넷과 비슷하게 성능이 나오거나 혹은 더 나은 것들이죠. 이것도 현재 매우 활발하게 연구되는 분야입니다. 이것의 많은 부분은 여러 계층이 서로 어떻게 연결되는가와 이런 망에서 어떻게 깊이가 관리되는지를 보고 있습니다. 마지막으로 빠르게 얘기하고 싶은 것은 효율적인 망입니다. 이 효율성 아이디어는 보았듯이 구글넷이 어떻게 효율적인 망을 가질 수 있는지, 이 방향으로 보았던 것이죠. 이건 훈련 뿐만 아니라 특히 배포 등 많은 실제적인 사용에서 있어서 중요합니다. 이건 또다른 최근 망인데 SqueezeNet이라고 불리고 매우 효율적인 망을 바라보고 있죠. 그들은 fire module이라고 불리는 것을 가지고 있는데, 그건 많은 1 x 1 필터로 하나의 스퀴즈 (squeeze) 계층을 구성하고 이후에 이것은 1 x 1과 3 x 3 필터가 있는 익스팬드 (expand) 계층으로 들어갑니다 (feed).  그리고 그들은 이런 종류의 아키텍처로 이미지넷에 대해 알렉스넷 수준의 정확도를 50배나 적은 파라미터로 얻을 수 있다는 것을 보여주고 있습니다. 그리고 이것에 대해 더 심화된 망 압축을 해서 알렉스넷보다 500배 더 작게 할 수 있고 전체 망을 0.5MB로 만들수 있죠. 이것은 우리가 어떻게 효율적인 망 모델 압축을 가질 수 있는지에 대한 방향이고 다음 강의에서 더 다룰 겁니다. 잠깐 힌트를 주고 있는 것뿐이죠.

    오늘 요약하자면 여러 종류의 CNN 아키텍처에 대해 얘기했죠. 4개의 주요 아키텍처에 대해서는 깊이 봤고 이것들은 널리 사용된다는 것을 알게 될겁니다. 알렉스넷은 초기에 매우 많이 쓰인 망 중 하나죠. VGG 와 구글넷은 여전이 널리 사용됩니다. 그러나 레즈넷이 가능하다면 대개의 경우 봐야할 것이 되어가고 있죠. 우리는 또한 이 다른 망들도 간략한 개요 수준으로 약간 더 깊이 봤습니다.

    기억해야 할 점들 (takeaways)은 이 모델들은 사용 가능하고 그것들은 많은 모델 주들 (model zoos)에 있습니다. 그러니까 필요할 때마다 사용하세요. 극도로 깊은 망으로의 트렌드 (trend)가 있지만, 그러나 또한 계층을 어떻게 연결할 것이지, 연결을 건너뛸 것인지, 그리고 무엇을 무엇과 연결할 것인지 등을 설계하는 데에 대한 상당한 연구가 있습니다. 이런 것들을 사용해서 아키텍처가 경사 흐름을 개선하도록 하는 연구도 있죠. 아주 더 최근의 경향은 깊이와 넓이 중 필요한 것이 무엇인지, 중복 연결 (residual connection), 트레이드오프 (trade-off), 무엇이 도움이 되는 지에 대한 것을 조사하는 방향으로 흘러가고 있습니다. 이런 방향으로 많은 최신 연구가 있으니 관심이 있다면 지적한 것들 중 몇 개를 봐도 좋습니다. 다음 시간에는 순환신경망 (Recurrent neural networks)에 대해서 얘기하겠습니다. 고맙습니다.

    댓글

Designed by Tistory.