작성
·
374
0
안녕하세요 좋은 강의 늘 감사드립니다!
멀티헤드 어텐션 관련 궁금한 사항이 있는데요
헤드별로 개별 계산을 하면 어텐션 스코어 행렬 자체가 헤드 수만큼 나오는데
reshpape하여 한번에 진행 하는 거면 헤드를 나누지 않고 어텐션을 적용한 결과와 동일하지 않나요?
목적이 훈련 간 가중치 행렬들의 업데이트 되는 공간과 값들이 헤드 수만큼 분리되서 업데이트 되니
그 부분에 대하 정보의 차이를 기대하는게 맞다고 보면 될까요?
이것도 아니라면 단순히 병렬처리 속도 차이를 위함일까요~
(추가)
검색 해보니 softmax 함수로 인해서 Attention을 나눠서하면 값이 다르다는 글이 있는데
이게 맞다면 결과론적으로 최종 결과치가 일괄로 진행하는 것과 멀티헤드로 진행하는 것의 차이가
있는게 맞겠죠?^^
답변 1
0
안녕하세요. 쿨백스님!
너무 좋은 질문입니다.
헤드를 합친 부분은 코드 간소화가 목적이라고 보시면 될 것 같아요. 헤드를 나누지 않으면 행렬 계산이 4차원으로 진행되어야 할 부분이 3차원으로 진행이 되서 결과는 동일하지 않을 것 같아요. 마지막으로 Attention을 계산하는 부분에서 말씀하신 내용처럼 차이는 있습니다. 다만 엄밀히 따지면 헤드 별로 softmax를 해주는 것이 맞습니다!
추가적으로 실제 제가 여러 가지 방법으로 어텐션을 해봤는데 성능 차이가 거의 없었습니다. 아마 어텐션의 메카니즘이 유사하고 동일한 전체 구조와 동일한 손실함수를 기준으로 업데이트가 되기 때문에 큰 성능 차이가 나지는 않는 것 같아요.
감사합니다 :)