작성
·
580
0
안녕하세요 ViT 모델 구현에서 질문이 있습니다
1. 강의 중 출력 값이 커짐에 따라서 Softmax 때 문제가 발생해서 사용한다는 Scale에서 선생님 코드가 아래와 같이 되어 있습니다
그런데 강의자료를 보면
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
강의 자료에 나와있는 수식은 Multi-Head가 아닌 Single-Head의 경우를 표현한 것으로 알면 될까요? 그런데 코드에서는 Multi-head 계산 후 permute으로 다시 num*heads, head_dim 4차원으로 나눠주는데 그러면 scale은 Dh로 적용해야되는 것이 아닌가요?