본문 바로가기

개발/딥러닝

[논문 리뷰] NEfficientNet: Rethinking Model Scaling for Convolutional Neural Networks (EfficientNet)

 

ConvNet을 사용하는 네트워크들은 네트워크의 폭, 깊이, 해상도를 잘 바꾸면 모델의 성능이 향상된다고 합니다. 그럼 가장 성능이 좋은 값을 인공지능이 찾도록 하면 되지 않을까요? 이 논문은 여러 파라미터들을 잘 찾아주는 인공지능에 대한 것입니다.

 

 

접근법

우선 문제에 대한 정의를 해 봅시다. i번째 Conv레이어는 다음과 같이 정의됩니다.

 

$Y_i=F_i(X_i)$

 

$Y_i$는 출력 텐서, $F_i$는 연산, $X_i$는 입력 텐서입니다.

입력 텐서는 (H_i, W_i, C_i)로 표현되는데 $H_i$는 너비, $W_i$는 높이, $C_i$는 채널 수입니다. 

ConvNet $N$은 $F_k\odot F_{k-1}\odot... F_1(X_1) = \bigodot_{j=1... k} F_j(X_1)$로 표현됩니다.

 

관찰

여기서 어려운 점은 네트워크의 최적의 깊이, 너비, 해상도가 서로 의존하며, 자원 제약 조건에 따라 값이 달라진다는 점입니다. 이러한 어려움 때문에 기존 방법들은 주로 ConvNet을 이러한 차원 중 하나만 확장합니다. 기존의 많은 네트워크들을 관찰해 왔고 여기서 다음 결론을 얻습니다.

네트워크의 너비, 깊이 또는 해상도 중 어떤 차원이든 확장하면 정확도가 향상되지만, 모델이 커질수록 정확도 향상 효과는 줄어듭니다.

 

경험적으로 봤을 때  각 차원을 늘리는 것이 독립적이지 않다는 것을 알 수 있습니다. 직관적으로, 해상도가 높은 이미지의 경우 네트워크 깊이를 늘려야 합니다. 따라서 해상도가 높을 때는 네트워크의 너비도 늘려야 하며, 그래야 고해상도 이미지에서 더 많은 픽셀로 더 세밀한 패턴을 캡처할 수 있습니다. 그럼 그냥 한 차원을 확장하는 것이 아니라 다양한 확장 차원을 조정하고 균형을 맞출 필요가 있다는 뜻입니다.

더 나은 정확도와 효율성을 얻기 위해서는 ConvNet의 확장 시 네트워크의 너비, 깊이, 해상도의 모든 차원을 균형 있게 조절하는 것이 중요합니다.

 

결론

다음과 같은 방식으로 깊이, 너비, 해상도를 정합니다.

$d=\alpha ^ \phi$

$w=\beta ^ \phi$

$r=\gamma ^ \phi$

$\alpha * \beta^2 * \gamma^2 \approx 2$

$\alpha, \beta, \gamma \ge 1$

 

방법

먼저 $\phi = 1$로 두고 $\alpha, \beta, \gamma$를 구합니다. EfficientNet-B0 경우 $\alpha = 1.2, \beta = 1.1, \gamma = 1.15$를 합니다.

그런 다음, $\alpha, \beta, \gamma$를 상수로 고정하고 위 식을 사용하여 $\phi$ 를 바꿉니다. EfficientNet-B0 에서 $\phi$를 바꿔가며 EfficientNet-B7까지 만들었을 때 성능이 쭉 향상합니다.