EfficientViT - [https://minyoungxi.tistory.com/94]
multi-head self attention은 본 논문의 연구에서 텐서의 재구성과 element wise 연산 때문에 메모리 사용이 비효율적이라고 언급되었습니다. 트랜스포머 모델은 일반적으로 메모리 바운드되며, 특히 MHSA에서의 메모리 바운드 연산은 GPU/CPUs의 컴퓨팅 파워를 충분히 활용하지 못하게 하여 모델의 실행 속도에 부정적인 영향을 줍니다. MHSA와 피드-포워드 네트워크(FFN) 층의 비율을 적절히 조정함으로써 메모리 접근 시간을 상당히 줄일 수 있으며, 각 어텐션 헤드에 다양한 특징을 제공함으로써 중복을 줄이고 계산 효율성을 향상시킬 수 있다고 합니다.
최근 연구에 따르면 메모리 비효율적인 연산은 주로 FFN 레이어가 아닌 MHSA에 위치합니다.
self-attention 레이어는 서브샘플링 중 정보 손실을 줄이기 위해 inverted residual block으로 대체된다. (Inverted residual block은 MobileNetV2에서 소개된 구조로, 입력에 직접적으로 연결되는 shortcut connection을 포함합니다. 이 구조는 입력을 바로 다음 레이어로 전달하고, 추가적인 처리를 거친 후에 입력과 합쳐지게 합니다. 이렇게 함으로써 네트워크가 학습해야 할 정보의 양을 줄이고, 기울기 소실 문제를 완화시키며, 서브샘플링 과정에서 중요한 정보를 보존하는 데 도움이 됩니다.) [[MobileNetV2 - Inverted Residuals and Linear Bottlenecks]]
본 논문이 실시간 애플리케이션에 적용할 수 있는 ViT를 위해 계산 복잡도를 줄이는 것에 초점이 맞춰져있어서 MobileNet에서 사용된 구조를 사용한듯. 계산 비용을 줄이고 정보 손실을 최소화하기 위해 inverted residual block을 사용할 수 있습니다.
셀프 어텐션(Self-Attention):
- 목적: 트랜스포머에서 볼 수 있는 셀프 어텐션 메커니즘의 주요 목적은 네트워크가 입력 데이터의 다른 부분들 간의 중요도를 가중치로 조절할 수 있게 하는 것입니다. 예를 들어 자연어 처리에서 셀프 어텐션은 모델이 예측을 할 때 문장 속 관련 단어에 더 집중하도록 도울 수 있습니다.
- 작동 방식: 입력 데이터 각각에 대해 세 가지 벡터를 생성합니다 — 키(key), 쿼리(query), 값(value). 셀프 어텐션 점수는 쿼리와 모든 키의 내적을 계산하여 가중치를 얻은 후 소프트맥스를 적용하고, 이 가중치를 사용하여 값 벡터의 가중합을 생성합니다.
- 장점: 입력 시퀀스 내의 거리에 관계없이 데이터의 장기 의존성과 관계를 포착할 수 있습니다.
- 단점: 긴 시퀀스의 경우, 입력 시퀀스의 각 위치 쌍에 대한 어텐션 점수를 계산해야 하기 때문에 계산 비용이 많이 들 수 있습니다.
잔차 블록(Residual Block):
- 목적: 잔차 블록은 주로 ResNet과 같은 합성곱 신경망에서 사용되며, 기울기 소실 문제를 해결하고 매우 깊은 네트워크의 훈련을 가능하게 하는 것을 목적으로 합니다. 이는 백프로파게이션 동안 기울기가 네트워크를 더 쉽게 흐를 수 있도록 경로 또는 "스킵 연결"을 제공함으로써 달성됩니다.
- 작동 방식: 잔차 블록에서는 블록의 입력이 블록의 출력(합성곱층과 활성화 함수를 거친 후)에 더해집니다. 즉, 블록은 전체 변환보다는 "잔차" 변경만을 학습하면 되므로 더 단순할 수 있습니다.
- 장점: 기울기 소실 문제를 완화하여 더 깊은 네트워크를 가능하게 하고, 훈련 과정을 개선하여 종종 성능을 향상시킵니다.
- 단점: 매우 깊은 네트워크에서 사용될 경우 모델의 복잡성과 매개변수의 수를 증가시킬 수 있습니다.
비교:
- 기능성: 셀프 어텐션은 입력 데이터의 다양한 특징들의 중요도를 동적으로 가중하는 것에 관한 반면, 잔차 블록은 기울기 흐름을 용이하게 하여 깊은 네트워크를 훈련하기 쉽게 만듭니다.