• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

ViT 모델 구현 코드에서 질문이 있습니다

22.01.02 14:35 작성 조회수 427

0

안녕하세요 ViT 모델 구현에서 질문이 있습니다

1. 강의 중 출력 값이 커짐에 따라서 Softmax 때 문제가 발생해서 사용한다는 Scale에서 선생님 코드가 아래와 같이 되어 있습니다

self.scale = torch.sqrt(latent_vec_dim*torch.ones(1)).to(device)

그런데 강의자료를 보면 

head dimension으로 적용해야 하는 것이 아닌가 해서요

즉, self.scale = torch.sqrt(self.head_dim * torch.ones(1)).to(self.device)

확인해주시면 감사하겠습니다!

2. Transformer Encoder에서 MLP 구성할 때 FC층 2개와 GELU를 사용하는데, GELU는 왜 첫번째 FC에서만 Activation을 하고, 두번째 FC 출력 이후에는 생략하는 것인가요? 생략한다면 이유가 무엇이고, 훈련하는데 차이가 있을까요?

논문에서도 GELU 관련한 것은 "The MLP contains two layers with a GELU non-linearity" 문장만 있어서 조금 헷갈려서 질문을 드립니다

 

답변 2

·

답변을 작성해보세요.

1

안녕하세요. 유영재님!

좋은 질문입니다.

1. 맞습니다. 오타입니다 ㅠㅠ 지적 감사드립니다.

2. 활성화 함수 종류나 적용 위치는 경험 기반으로 세팅을 한 것으로 보입니다. 참고로 원래 트랜스포머는 ReLU를 사용하였습니다.

 

감사합니다.

0

유영재님의 프로필

유영재

질문자

2022.01.02

강의 자료에 나와있는 수식은 Multi-Head가 아닌 Single-Head의 경우를 표현한 것으로 알면 될까요? 그런데 코드에서는 Multi-head 계산 후 permute으로 다시 num*heads, head_dim 4차원으로 나눠주는데 그러면 scale은 Dh로 적용해야되는 것이 아닌가요?