etc/구글 머신러닝 부트캠프

[DSL] Sequence Models Week3 : Sequence Models & Attention Mechanism

uyt8989 2022. 7. 23. 17:00

1주 차에서는 RNN 모델에 대해서, 2주 차에서는 워드 임베딩에 대해서 배웠다. 1주 차에 잠깐 소개했는데, RNN 중에서는 Sequence 데이터를 입력받아서 sequence 데이터로 뱉는 RNN도 있다. 가장 대표적인 예시로는 파파고나 구글 번역기 같은 자동번역기가 있다. 강의에서는 이미지를 입력받아서 이미지에 캡션을 다는 예시도 있었다. 이미지 분류 문제에서 마지막 레이어에 사용하던 소프트맥스층을 떼 버리고 sequence 모델에 입력으로 넣어주면 된다. 

 

1. Basic Models

이전에 배운 language 모델과 sequence to seqeunce 모델은 꽤나 비슷하다. 하지만 가장 큰 차이점으로는 입력이 어떻게 들어가는지 일 것 같다. 전자는 그냥 영 벡터를 입력으로 받아서 sequence를 출력하는 반면에 후자는 sequence 데이터를 인코딩하는 부분이 붙어있다. 따라서 전자는 그냥 문장의 확률을 계산하지만, 후자는 주어진 문장에 대해서 문장의 확률을 계산한다. 그래서 후자를 조건부 language 모델이라고 할 수도 있다. 당연히 둘 다 가장 확률이 높은 문장을 뱉어주겠지.

2. Beam Search

번역기에서 가장 확률이 높은 문장을 찾는 건 좋은데, 그냥 무지 성으로 찾으면 가능한 순열의 조합이 너무 많다. 그래서 이 문제를 해결하기 위해 그냥 매 단어를 고르는 순간마다 가장 확률이 높은 단어를 그리디 하게 고르면 전체적으로는 최적이 아닌 문장을 출력하게 될 수도 있다. 그래서 완전 탐색과 탐욕 탐색 사이의 beam search라는 게 있다.  Beam search는 beam width B라는 것을 정의해 매 step마다 top 몇까지 정할 건지 정한다. 이걸 1로 하게 되는 경우엔 매번 확률이 가장 높은 1개만 고르게 되므로 greedy search랑 같아진다. 그래서 B가 작을 때는 빠르긴 하지만 최적임을 보장하기가 애매하다. 반대로 B가 커지면 완전 탐색에 가까워지게 되므로 결과 자체는 최적일 확률이 더 높지만 계산 과정에서 비용이 많이 들게 된다.

과정 중에 최종 조건부 확률을 구하기 위해서 계속 1보다 작은 값을 곱하게 된다. 이걸 여러 번 반복하다 보면 점점 0에 가까워질 수밖에 없다. 그래서 로그를 사용해서 underflow를 방지한다. 그리고 문장의 길이를 normalize 하기 위해 하이퍼 파라미터 alpha를 사용한다. 

Beam search를 하는 것 까지는 좋은데 B에 영향을 많이 받다 보니 너무 작게 설정한 경우엔 최적을 찾아내지 못할 수도 있다. 그래서 이 오류를 감지해내기 위해서 사람이 직접 번역한 문장을 RNN에 넣었을 때의 확률과 최적이라고 내놓은 문장의 확률을 비교하는 게 필요하다. 전자가 더 크다면 수많은 순열 중에서 최적을 찾지 못한 것이므로 B를 더 키울 필요가 있고 후자가 더 크다면 RNN 자체가 잘못됐다고 생각할 수 있다.

 

3. Attention Model

지금까지는 배운 모델들은 짧은 문장에서는 잘 작동한다고 한다. 하지만 문장의 길이가 점점 길어질수록 번역기의 성능을 측정하는 blue score가 감소된다. 왜냐하면 사람 말이라는 게 문장이 길어지면서 어디서 어떤 단어끼리 연관 있을지가 무궁무진해지면서 앞에서 영향이 올 수도 있고 뒤에서 영향이 올 수도 있기 때문이다. 그래서 attention 모델이라는 게 개발됐다. 원래는 자연어 처리 분야에서 사용하려고 만든 건데 다른 분야에서도 잘 적용된다고 한다. 

 

우선 이 모델은 BRRN 모델과 RNN 모델 두 개가 필요하다. BRNN으로 맥락을 학습한 다음에 RNN으로 문장을 만들어나간다고 이해했다. 그리고 BRRN과 RNN을 이어주는 attention(alpha)이라는게 존재하는데, 이건 어떤 한 단어를 만들어내기 위해서 어떤 단어를 살펴봐야 하는지에 대한 매개변수다. 간단하게 모델을 표현하면 아래와 같다. 

밑처럼 alpha를 구하기 때문에 context c 하나를 구하기 위한 attention alpha의 값은 총합이 1이다. 

 

4. Speech Recognition

여기서는 아주 간단하게 설명하고 넘어간다. 음성 감지 시스템을 만들기 위해서 attention 모델을 사용할 수도 있고, CTC 모델을 사용할 수도 있다. CTC는 Connectionist Temporal Classfication이다. 오디오 입력은 상당히 연속적이기 때문에 자연어보다 입력이 출력보다 훨씬 많을 수 있다. 그래서 출력을 뻥튀기하는 기법이라고 보면 될 것 같다. 공백이나 연속적인 문자로 출력을 입력만큼 늘려준다. 그리고 trigger word detection에 관해서도 잠깐 지나갔는데 너무 잠깐 지나가서 딱히 내용은 없었던 것 같다.

 

* Courera의 Deep Learning Sepcialization 강의를 수강하는데 도움이 되고자 작성한 요약문입니다. 틀린 내용 있다면 정정해주시면 감사하겠습니다.