본문 바로가기
딥러닝(Machine Deep learning)

What is different between concat & element sum

by Park Hyun Kook 2020. 2. 12.

Element Add

layer A (2, 1, 4, 2)   layer B (0, 1, 0, 1)

layer A + layer B = (2, 2, 4, 3)

 

 

Concat

layer A (64, 128, 128)   layer B (32, 128, 128)

layer A (concat) layer B = (96, 128, 128)

 

 

각각 언제 사용해야할까?

concat과 add를 각각 언제 사용해야 하나의 궁금증으로 찾아보고 네트워크에도 여러번 실험해봤지만, 결과적으로 Element wise sum과 concat은 각각 자신의 네트워크에 맞게 사용해야 한다고 생각한다. 물론 메모리 관점에서는 Add가 concat보다 더 성능이 좋다.  이 둘의 차이는 평소 우리의 생활의 예를 들어보면 된다.

 

A가 3000원 

B가 2000원

C가 5000원 

이렇게 돈을 가지고 있다면 Add는 단순하게 이들의 금액 총합이 10000원인 것을 기록한다.

Concat은 각각 A가 3000원, B가 2000원, C가 5000원인 것을 기록한다.

 

만일 7000원 짜리 치킨을 사야할때 Add는 금액의 총합이 10000원인 것을 알기 때문에 빠르게 구매가 가능한지 불가능 한지를 확인할 수 있다.

Concat은 7000원짜리 치킨을 사기위해 A, B, C가 각각 얼마씩 내야하는 지를 확인 할 수 있다.

즉 Concat은 추출한 feature의 본래의 위치를 그대로 보존하려고 한다.

 

그 외에도 찾아본 결과 Add는 A+B일때 더해지는 값 한가지를 잔차로 인식한다. (ex: residual learning)

concat은 두 입력이 밀접하게 관련되어 있지 않을때 add 보다 concat을 사용하는게 더 자연스럽다고 한다.

 

본인은 multi-scale에서 image feature를 추출할때 

level0 (64, 128, 128)

level1 (128, 64, 64)

level2 (256, 32, 32)

level3 (512, 16, 16) 

 

level3의 output을 level2에 fusion시킬때 concat을 이용한다. 그리고 1X1 convolution을 통해서 filter의 개수를 줄이고 fusion시킨다. 실제로 1X1 convolution은 단순히 channel의 개수를 줄이며 연산의 효율을 높이지만, 서로 다른 multi-scale feature를 fuse하는데 많이 사용된다고 들었다.

level2의 input을 level2의 output과 합할때는 concat이 아닌 add를 사용했다. 이 둘의 feature는 어느정도 연관이 있다고 생각하기 때문이다.

 

모두 본인의 주관적인 생각이므로 본인 네트워크 아키텍쳐에 맞게 사용하는게 제일 좋은 듯하다.

 

Element wise sum 이미지 출처 : https://www.mdpi.com/2072-4292/10/1/52/htm

Concat 이미지 출처: https://www.kdnuggets.com/2017/08/intuitive-guide-deep-network-architectures.html

댓글