그룹으로 비용을 줄이기
1×1 합성곱도 채널 수가 많으면 상당한 연산량을 차지한다. 입력과 출력을 여러 그룹으로 나누어 그룹 안에서만 연결하면 비용을 줄일 수 있다. 하지만 같은 분할을 계속 쓰면 서로 다른 그룹 사이의 정보 교환이 제한될 수 있어 추가 구조가 필요하다.
채널을 재배열하는 예제
채널이 (a,b,c,d)이고 이전 그룹이 (a,b), (c,d)라고 하자. 순서를 (a,c,b,d)로 바꾼 뒤 다시 앞뒤 둘씩 그룹을 만들면 다음 그룹은 (a,c), (b,d)가 된다. 각각 이전의 서로 다른 그룹에서 하나씩 받는다. 이 작은 예제에서 재배열은 값을 더하거나 새로운 값을 학습하지 않고 위치만 바꾼다.
결합 비용의 계산
입력과 출력 채널이 각각 16이고 공간 위치 하나에서 1×1 결합을 한다면 전체 연결은 16×16=256개의 곱셈 누산을 쓴다. 같은 크기의 네 그룹으로 나누면 4×4×4=64개다. 이 계산은 그룹 합성곱 부분만 다루며 셔플의 메모리 비용과 다른 층의 계산은 포함하지 않는다.
구조와 실행 성능
초기 ShuffleNet은 깊이별 합성곱과 잔차 연결 등도 조합한다. 각 버전의 블록 구성을 구별하고 한 버전의 설명을 다른 버전에 자동으로 적용하지 않는다. 실제 실행에서는 채널 재배열과 메모리 이동 비용이 중요할 수 있으므로 연산 수만으로 MobileNet 등과 속도의 우열을 정하지 않는다.