-
Group Conv 그룹 컨볼루션딥러닝/기본 연산들 2022. 6. 3. 19:28
그룹 컨볼루션의 정확한 정의를 알아보도록 하겠습니다. 각 그룹별 컨볼루션 커널은 공유되는 것일까요? 아닐까요? 정답은 아닙니다. 그럼 자세히 알아보도록 하겠습니다.
정의에 따르면 일반적인 컨볼루션 커널의 차원수는 (배치 수, X, Y, Depth) 인데 이 중 Depth 값이 현재 레이어의 Depth 전체입니다. 이렇게 무심코 컨볼루션을 써 왔다면 한 번쯤은 Depth의 값이 너무 길다는 사실에 의문을 가질 법 했습니다.
그래서 컨볼루션 커널의 Depth 값을 줄여보고 싶었습니다. 그래서 탄생한 것이 Group Conv입니다.
그림에서 보듯이 Group Conv는 Depth를 3분할하여 각각에 대해 서로 가중치 값이 다르면서 Depth 길이가 1/3로 줄어든 1/3 컨볼루션을 차용하고 있습니다. 각 분할마다 적용되는 컨볼루션은 Depth가 기존 Depth의 1/3 수준이고 각 분할마다 전혀 별개의 독립적인 컨볼루션 커널을 사용합니다. 따라서 기존 컨볼루션에 비해 커널의 수가 늘어날 것으로 예상할 수 있습니다.
그룹이란 단어를 분할 하나의 영역으로 정의하겠습니다. Group Conv에서는 각 그룹의 커널 수를 1/3로 제한할 수 있습니다. 그러면 어떻게 될까요?
3분할 하였으므로 커널 수가 3배 늘어날 것으로 예상되었으나 각 분할 마다의 커널 수가 1/3로 줄어들었으므로 전체 커널 수는 일반적으로 우리가 알고 있는 Plain Conv 커널의 수와 동일해집니다.
그런데 이러한 과정에서 (그룹 수, 각 그룹별 커널 수) 를 파라미터화 하여 자유자재로 커널의 개수를 늘렸다 줄였다 할 수 있습니다.
따라서 Group Conv은 커널 수를 거의 자유자재로 변경할 수 있습니다. 다만 지금까지 예시로 든 3분할 그룹에서는 3의 배수로 늘어날 수 있겠습니다.
'딥러닝 > 기본 연산들' 카테고리의 다른 글
CNN 파라미터 수 계산 방법 (0) 2022.06.04 컨볼루션의 패딩 적용 (0) 2022.06.03 셔플 연산과 Conv 1x1의 공통점 (0) 2022.06.03 딥러닝 컨볼루션 conv 이란? (0) 2022.06.03 딥러닝 셔플 Shuffle 연산으로 채널 차원을 섞어주세요. (0) 2022.06.03