Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BahdanauAttention 에 대해 질문이 있습니다. #36

Open
taeheonkwon opened this issue Nov 2, 2022 · 1 comment
Open

BahdanauAttention 에 대해 질문이 있습니다. #36

taeheonkwon opened this issue Nov 2, 2022 · 1 comment

Comments

@taeheonkwon
Copy link

책의 309~310 페이지에서 BahdanauAttention 클래스를 구현할때, values를 인코더 순환 신경망의 결괏값으로 하고 있습니다. 이것과 관련하여, 309페이지의 주석 논문(https://arxiv.org/pdf/1409.0473.pdf)에는 h_j 를 입력 문장의 annotation 이라고 하고 있습니다. 논문의 annotation 을 인코더 순환 신경망의 결괏값으로 하신 것인지 알고 싶습니다.

(다른 논문에서는 attention score 를 계산할때 모두 은닉값만 사용하는 것으로 알고 있습니다. 예를 들면 https://www.tensorflow.org/text/tutorials/nmt_with_attention 에서 사용한 논문 https://arxiv.org/pdf/1508.04025v5.pdf 에서 그렇습니다. 그래서 위와 같은 질문을 드립니다...)

@Taekyoon
Copy link
Contributor

Taekyoon commented Nov 8, 2022

안녕하세요 :)

말씀 주신 질문은 attention에 벡터 c 를 구성하는 h_j가 인코더 출력 벡터가 맞는지에 대한 질문인 것으로 이해했는데요.
책에 구현은 논문과 동일하게 구현이 되어있습니다.
class seq2seq에서 call() 메서드를 보시면 self.decoder를 호출하는 구분이 보일겁니다.

predictions, dec_hidden, _ = self.decoder(dec_input, dec_hidden, enc_output)

여기서 enc_output이 인코더 전체 시퀀스에 대한 출력이고요.
이 입력값이 decoder에서 다시 call() 함수를 통해 self.attention을 호출합니다.

context_vector, attention_weights = self.attention(hidden, enc_output)

이때 입력되는 두번째 파라메터가 enc_output이기 때문에 순환신경망인 인코더의 출력 값이 입력으로 들어간다 보시면 됩니다.
코드를 보시면 아시겠지만 attention 모듈 call()함수에 두번째 파라메터가 values 입니다.

혹시 더 궁금한점 있으시면 아래 스레드에 질문 남겨주세요 :)

cc: @changwookjun

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants