ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cs231n] 9강 CNN 아키텍처 (architecture) (3/4, ResNet)
    AI 2021. 4. 1. 11:40

    이제 2015년 우승자를 보죠. 레즈넷 망 (ResNet network)입니다. 여기 이 아이디어는 실제로 혁명적인 깊이입니다. 우리는 2014년에 깊이를 늘리기 시작했고, 이 152 계층의 엄청나게 더 깊은 모델을 얻었습니다. 그게 레즈넷 아키텍처죠.

    이제 좀 더 세부사항을 보죠. 레즈넷 아키텍처는, 극도로 깊은 망이고 이전의 어떤 망보다 훨씬 깊죠. 그건 이 중복 커넥션 (residual connection)이라는 아이디어를 사용하는데, 이따가 얘기할 겁니다. 그래서 그들은 이미지넷에 대해 152계층 모델을 얻었죠. 그들은 이걸로 3.57%의  상위 5개 (top 5) 오류율을 얻었고 정말 특별한 점은 이미지넷 벤치마크 (ImageNet benchmark)에서 모든 분류와 탐지 대회를 다 쓸었다는 겁니다. COCO라고 불리는 다른 벤치마크에서도요. 사실상 다 이겼죠. 명확하게 다른 것들보다 더 좋았습니다.

    이제 레즈넷과 중복 커넥션 뒤에 있는 동기에 대해서 들여다 보고 얘기해 보죠. 그들이 시작할때 대답하려고 했던 질문은 우리가 점점 더 깊고 깊은 계층을 평범한 합성곱 신경망 위에 쌓는다면 무슨 일이 벌어질까?였습니다. 그래서 VGG나 콘브 (conv)와 풀 (pool)을 서로 쌓은 다른 일반적인 망을 가지고, 그냥 계속해서 이런 것들을 확장하고 더 깊게 만들면 더 나아질까?였죠.

    답은 아니라는 겁니다. 여기서 더 깊어질 수록 무슨일이 일어나는지 보면, 여기서 20 계층 망과 56 계층 망을 비교하고 있는데, 이건 평범한 종류의 망이죠. 보다시피, 테스트 오류에서 오른쪽의 56 계층 망이 28 계층 망보다 더 안 좋습니다. 더 깊은 망이 더 잘 할 수 있는 것은 아니었죠. 그러나 정말 이상한것은, 훈련 에러를 보면 20 계층 망과 56 계층 망이 있는데, 56계층 망에서 명백한 문제중 하나는, 정말 깊은 망을 가지고 있어서 엄청나게 많은 파라미터들이 있고, 아마도 그것이 어떤 지점에서 과적합되기 시작하게 될 거라는 거죠. 그러나 실제로는 과적합 될 때, 매우 좋고, 매우 낮은 훈련 오류율을 얻을 거라고 기대하겠지만, 나쁜 테스트 오류율을 얻습니다. 훈련 에러에서도 56 계층 망이 역시 20계층 망보다 더 안좋은 거죠.

    더 깊은 모델이 더 나쁘게 동작한다고 해도, 이건 과적합 때문이 아닌 겁니다.

    그래서 레즈넷을 만든 사람들의 가설은 최적화가 문제라는 것이었습니다. 더 깊은 모델은 단지 얕은 망보다 최적화하기 어렵다는 거죠.

    그리고 더 깊은 모델은 적어도 얕은 모델 만큼은 잘 동작해야 한다는 추론을 얻었죠. 여러분은 컨스트럭션 (construction)으로 해결책을 얻을 수 있는데, 더 낮은 모델에서 학습된 계층을 가지고, 이걸 남은 추가적인 더 깊은 계층에 대해 복사한 다음, 항등 사상 (identity mapping) 을 추가하는 겁니다. 컨스트럭션으로 이건 얕은 계층 만큼 잘 동작할 겁니다. 제대로 학습하지 못했던 망이 적어도 이만큼은 학습할 수 있게 된거죠.

    이것에 동기부여가 되서, 그들은 솔루션을 냈는데요. 어떻게 우리의 아키텍처, 모델이 이런 솔루션을 혹은 적어도 이런 것들을 쉽게 배울 수 있게 할 수 있을까요?그래서 그들의 아이디어는, 이 모든 것들을 서로 서로 쌓고 각 계층이 원하지 않는 함수의 기저 사상 (underlying mapping)을 학습하도록 하는 대신, 그대신 이런 블록 (block)을 가지자는 거죠. 우리는 직접적인 사상 보다는 중복 사상 (residual mapping)에 맞춰 볼 수 있습니다.

    이 오른쪽을 보면, 이 블록으로의 입력은 단지 들어오는 입력이고 여기서 우리는 이 옆에서, 계층을 사용해서 약간의 우리가 바라는 H(x) -x의 어떤 중복 (residual)에 맞춰보려고 하는 거죠. 직접적으로 원하는 함수인 H(x)에 하기 보다는요. 이 블록의 끝에서 우리는 이 오른쪽에서 스킵 연결 (skip connection)을 가지고, 이 루프 (loop)에서 입력을 받고, 항등 (identity)을 통과해서 전달합니다. 만약 그 사이에 가중치 계층이 없다면, 그건 항등이 될거고, 그건 출력과 같은 것이 되겠죠. 그러나 우리는 추가적인 가중치 계층을 사용해서 어떤 델타 (delta)를 학습합니다. X로부터의 어떤 중복 (residual)에 대해서죠. 그래서 이것의 출력은 초기의 R(x) 더하기 어떤 중복이죠. 우리는 그걸 그렇게 부를 겁니다. 그건 사실상 델타죠. 이제 예를 들어, 항등이 이상적인 경우라면, 가중치 계층으로부터의 이 모든 F(x)의 가중치가를 한쪽으로 몰아 놓는 (squash) 것이 쉬워야죠. 예를 들면, 모두 0으로 설정하는 거죠. 그다음 우리는 항등을 출력으로 얻어서 예를 들면, 앞서 봤던 컨스트럭션으로 이와 비슷한 어떤 것을 얻을 수 있는거죠. 그래서 이건 망 아키텍처로서, 좋아, 여기에 맞춰보고, 우리의 가중치 계층이 중복이 되고 가까운 것이 되게 하자!고 얘기하는 거죠. 그런 식으로, 그건 X와 가까운 것이 될 거고, X를 고치고 있는 거죠. 정확히 원래 되어야 하는 것인 이 전체 사상을 학습하기보다는요.

    사실상 우리는 서로 서로 쌓여진 이 모든 중복 블록 (residual block)이 있죠. 우리는 전체 레즈넷 아키텍처를 볼 수 있습니다. 이 중복 블록의 각각은 2개의 3 x 3 콘브 계층을 이 블록의 일부로 가지고 있고 이것은 우연히 만든 구성인데 잘 동작했다고 얘기하는 연구도 있었습니다. 이 모든 블록들을 다같이 매우 깊게 쌓았죠. 이 매우 깊은 아키텍처에 대한 또 한가지는, 그것으로 150 계층 깊이까지 가능하게 한다는 것입니다.

    그리고 우리는 이 모든 것들을 쌓고 주기적으로 필터의 숫자를 두배로 늘리고 공간적으로 다운샘플링 (downsampling)하죠. 그걸 할 때는 스트라이드 2를 사용합니다.

    그리고 이 추가적인 콘브 계층을 망의 제일 앞쪽에 넣고,

    끝에는 완전 연결 계층이 없죠. 단지 글로벌 평균 풀링 계층 (global average pooling layer)만 있어서 공간적으로 모든 것에 대해 평균을 냅니다. 그리고 그것이 최종 1000가지 분류에 대한 입력이 되죠. 그래서 이것이 전체 레즈넷 아키텍처이고 매우 간단하고 우아하죠. 그냥 이 모든 레즈넷 블록을 서로 쌓은 겁니다.

    그리고 그들은 34, 50, 100까지 깊이를 만들었고, 이미지넷을 위해서는 152도 시도했죠.

    한가지 더 알아야 할 게 있는데요. 매우 깊은 망에 대해서는 즉, 50계층 깊이 이상인 것에 대해서는 효율성을 개선하기 위해 구글넷이 했던 것과 비슷한 병목 (bottleneck) 계층을 사용합니다.

    그리고 각각의 블록내에, 이 1 x1 콘브 필터가 있고, 그걸 더 작은 깊이로 사영 (project)하죠. 만약 28 x 28 x 256 입력을 본다면, 우리는 이 1 x 1 콘브를 하고 그건 깊이 (depth)를 낮게 사영합니다. 우리는 28 x 28 x 64를 얻죠. 이제 여러분의 3 x3 콘브는 여기서 1개만 있어서 이 줄어든 단계에 대해서 연산을 할거고, 그건 덜 비싸게 됩니다. 그리고 그다음 다른 1 x 1 콘브가 있어서 깊이를 다시 256으로 사영하죠. 그래서 이것이 여러분이 더 깊은 망에서 보게 될 실제 블록입니다.

    실제에서 레즈넷은 또한 각 콘브 계층 이후에 배치 정규화를 사용합니다. 그들은 추가적인 배율 인수와 함께 자비에 (Xavier) 초기화를 사용해서 SGD + 모멘텀으로 훈련된 초기화를 개선하려고 하죠. 그들이 사용하는 학습률 (learning rate)은 비슷한 학습률을 사용하죠. 스케쥴 타입인데, 검증 오류가 평평해 지면, 학습률을 줄이는 겁니다. 미니배치 크기는 256이고, 약간의 가중치 감소가 있고 드랍아웃 (dropout)은 없습니다.

    실험적으로 그들은 성능 저하 (degrading) 없이 이런 매우 깊은 망을 훈련시킬 수 있다는 것을 보여줬죠. 사실상 망을 통해서 좋은 경사 흐름이 돌아오게 만들 수 있었습니다. 그들은 이미지넷에서는 152 계층까지 시도했고, CIFAR에서는 1200까지 했죠. 여러분이 이미 가지고 이렇게 저렇게 해봤던 거죠. 그러나 더 작은 데이타 셋이었습니다. 그들은 더 깊은 망에서 기대했던 것보다 더 낮은 훈련 에러를 달성할 수 있다는 것을 보았습니다. 앞에서 봤던 것과 같은 이상한 플롯 (plot)을 얻지는 않을 겁니다. 거기서는 동작이 잘못된 방향으로 갔었죠. 여기서부터 그들은 모든 ILSVRC 대회에서 1등을 휩쓸어 버릴 수 있었고, 2015년에는 큰 차이로 모든 COCO 대회를 우승했죠.

    그들은 상위 5개 (top 5) 오류는 분류에서는 3.6%였는데, 논문에서 보면 이건 사실 사람보다 더 좋은 성능이죠. Fei-Fei 교수님의 우리 랩에서 나온 사람에 대한 메트릭 (metric)이 있는데, 안드레 카파씨 (Andrej Karparthy)가 1주일 동안 자신을 훈련시켜서 이 작업을 스스로 한거죠. 5%정도였던 것 같고 저는 사실 적어요. 그 사람 보다는 더 잘 할 수 있었을 것 같습니다.

    이것들이 최근에 사용된 주요 망들이죠. 시작할 땐 처음에 알렉스넷이 있엇고, VGG와 구글넷도 여전히 매우 많이 쓰이죠. 그러나 레즈넷이 가장 최신의 것이고 가장 잘 동작하는 모델이므로 만약 훈련시킬 새로운 모델을 찾는다면, 레즈넷을 사용할 수 있으니 그걸로 작업해 보세요.

    댓글

Designed by Tistory.