배울 점이 많은 강의가 있어서 추천드리며, 시리즈로 글을 쓰고자 합니다.
비정형 데이터 분석 9/11 #Seq2Seq, #Attention
키워드 및 핵심 내용
Seq2Seq
- endcoder -> context -> decoder
- 텍스트, 음성, 영상 등 이러한 시계열 데이터들을 다른 시계열 데이터로 변환하는 문제에 적합
Attention
- Seq2seq의 구조를 살펴보면, Encoder에서 계산한 여러 Hidden State 중 마지막 Hidden State만을 Decoder에서 사용하게 된다.
어텐션 매커니즘은 바로 이 사용되지 않은 Hidden State를 이용하자는 아이디어이다.
- attention weights * context vector -> attention vector
[RNN과 비교]
https://blog.naver.com/kbsdr11/221586617910
오른쪽 모델을 보면 알겠지만 Seq 2 Seq모델은 시퀀스를 입력받고 출력한다.
그런데 RNN모델은 태어난 이유 자체가 시퀀스 데이터를 다루기 위함이었는데
Seq 2 Seq모델이 굳이 필요할까?
일반적인 RNN과 다른 점은 무엇일까?
Seq 2 Seq이 잘 작동하는 테스크는 대표적으로 번역이나 챗봇이 있다.
위의 사진을 보면
이별한지 얼마 안 된 사람이, '완벽한 날씨가 날 더 슬프게 해.'라고 말한다.
그런데 RNN모델로 챗봇작업을 수행하게 되면
완벽한 날씨니까 좋은 기분일것이라고 유추하면서 문장을 출력하다가
sad라는 단어를 마지막에 입력받고 굉장히 일이 꼬이게 될 것이다.
이 처럼 일반적인 RNN모델에서 문장을 다 듣기도 전에 답변을 하게 되면 제대로 답변할 수 없는 문제가 발생하는데
Seq2Seq는 말을 끝까지 듣고 출력하도록 만들어진 모델이라고 볼 수 있겠다.
[Seq2Seq 추가 자료]
https://blog.naver.com/sooftware/221784419691
세상에는 많은 시계열 데이터 (Sequence Data)가 존재한다.
텍스트, 음성, 영상 등 많은 종류의 시계열 데이터가 존재하고,
이러한 시계열 데이터들을 다른 시계열 데이터로 변환하는 문제들도 숱하게 생각할 수 있다.
Encoder는 어떤 시계열 데이터를 압축해서 표현해주고,
Decoder는 압축된 데이터를 다른 시계열 데이터로 변환해준다.
Encoder는 RNN (or LSTM, GRU)을 이용하여 데이터를
h라는 Hidden State Vector로 변환한다.
Encoder가 출력하는 벡터 h는 마지막 RNN 셀의 Hidden State이다.
즉, Encoder는 그냥 RNN을 이어놓은 것에 불과하다.
여기서 주목할 점은 Encoder가 내놓는 Context Vector는 결국 마지막 RNN 셀의
Hidden State므로, 고정 길이 벡터라는 사실이다.
그래서 인코딩한다라는 말은 결국 임의 길이의 시계열 데이터를 고정 길이 벡터로 변환하는 작업이 된다.
다음으로 Decoder를 살펴보자.
Decoder는 기본적으로 RNNLM (RNN Language Model)이다.
Decoder는 Encoder로부터 Context Vector (h)를 넘겨받는다.
그리고 첫 입력으로 문장의 시작을 의미하는 심벌인 <s>가 들어간다.
(<s>는 <sos>, <bos>, <Go> 등 많은 이름으로 불린다)
여기서 디코더와 RNNLM (RNN Language Model).
즉, RNN을 이용해서 문장을 생성하는 모델과의 유일한 차이점은
인코더에서 만든 Context Vector를 입력받는다는 점만이 다르다.
콘텍스트 벡터를 초기 입력으로 받는다는 사소한 차이점이 평범한 언어 모델도
기계 번역, 음성 인식과 같은 복잡한 문제도 풀 수 있는 Decoder로 탈바꿈시킬 수 있다.
Seq2seq 개선
이번에는 앞에서 본 기본적인 Seq2seq 구조를 조금 개선해보자.
효과적인 기법이 몇 가지 존재하는데 그중 2가지를 살펴보자.
입력 데이터 반전 (Reverse)
첫 번째 개선안은 아주 손쉬운 방법이다.
위 그림에서 보듯이 입력 데이터의 순서를 반전시키는 것이다.
위의 트릭은
「"Sequence to sequence learning with neural networks." Advances in neural information processing system. 2014.」
논문에서 제안했다.
이 트릭을 사용하면 많은 경우 학습이 빨라져서, 최종 정확도도 좋아진다고 한다.
그렇다면 왜 입력 데이터를 반전시키는 것만으로 학습이 빨라지고 정확도가 향상되는 걸까?
직관적으로는 Gradient의 전파가 원활해지기 때문이라고 볼 수 있다.
이어서 Seq2seq 두 번째 개선안(Peeky Seq2seq)이다.
앞서 배운 Seq2seq의 동작을 다시 한번 살펴보게 되면,
Encoder는 입력 데이터를 고정 길이의 콘텍스트 벡터로 변환한다.
Decoder 입장에서는 이 컨텍스트 벡터만이 예측을 하는데에 제공되는 유일한 정보인 셈이다.
그러나 이 중요한 정보를 기본 Seq2seq에서는 최초 RNN 셀에만 전달이 된다.
이러한 점을 수정해서 중요한 정보가 담긴 콘텍스트 벡터를 디코더의
다른 계층들에게도 전달해주는 것이다.
이러한 아이디어는
「”learning phrase representation using RNN encoder-decoder for statistical machine translation” Cho, Kyunhyun 2014.」
논문에서 제안되었다.
Peeky Seq2seq는 기본 Seq2seq에 비해 꽤나 더 좋은 성능을 보인다고 알려져 있다.
하지만 Peeky Seq2seq는 기본 Seq2seq에 비해 파라미터가 더 늘어나기 때문에
계산량 역시 늘어나게 된다.
그리고 Seq2seq의 정확도는 하이퍼파라미터에 영향을 크게 받으므로,
실제 문제에서는 어떤 성능을 낼지 미지수이다.
Seq2seq의 한계
하지만 이러한 기본적인 Seq2seq에는 한계점이 존재한다.
입력 데이터가 길어지게 되면 성능이 확연하게 떨어진다는 것이다.
이러한 Seq2seq의 한계를 극복하기 위해 제안된 Attention Mechanism이 있다.
실제로 엄청난 성능 향상을 일으킨 이 어텐션 기법에 대해서는 다음 글에서 알아보자.
[출처] [Sooftware 머신러닝] Seq2seq (Sequence to sequence)|작성자 Sooftware
[Attention 추가 자료]
https://blog.naver.com/sooftware/221784472231
Seq2seq의 한계
기본적인 Seq2seq 모델은 간단한 구조라는 장점이 있었지만, 크게 2가지의 문제점이 존재한다.
첫째, 하나의 고정된 크기의 벡터에 모든 정보를 압축하다 보니 정보 손실이 발생한다.
둘째, RNN의 고질적인 문제인 Vanishing Gradient Problem이 존재한다.
이러한 문제점들은 입력 데이터가 길어지면 성능이 크게 저하되는 현상으로 이어지게 된다.
이를 위한 기법으로 입력 데이터가 길어지더라도,
정확도가 떨어지는 것을 보정해주기 위해 등장한 방법이 어텐션(Attention) 기법이다.
Seq2seq의 문제점 Encoder의 Hidden State들을 활용하지 않는다
Seq2seq의 구조를 살펴보면, Encoder에서 계산한 여러 Hidden State 중
마지막 Hidden State만을 Decoder에서 사용하게 된다.
즉, 마지막 Encoder의 RNN 셀의 마지막 Hidden State를 제외하고는 사용되지 않는다.
어텐션 메커니즘은 바로 이 사용되지 않은 Hidden State를 이용한 아이디어이다.
어텐션의 기본 아이디어는 Decoder에서 출력 결과를 예측하는 매 시점(time step)마다,
Encoder의 Hidden State를 다시 한번 참고한다는 아이디어다.
그리고 이 참고하는 비율을, 해당 시점에서 예측해야 하는 결과와 연관이 있는 부분을 판단하여
좀 더 집중 (Attention) 하여 본다고 하여 Attention Mechanism이라고 부른다.
다양한 종류의 어텐션
다양한 종류의 어텐션 (출처 : https://wikidocs.net/22893)
어텐션은 그 효과가 검증된 만큼, 많은 종류의 기법이 존재한다.
하지만 다른 어텐션들과의 차이는 어텐션 스코어를 구하는 중간 수식의 차이일 뿐이지,
크게 개념을 벗어나지 않는다.
위의 표처럼 다양한 어텐션의 종류가 있으며, 어떤 어텐션을 적용하느냐도 모델의 성능을 좌우할 것이다.
[출처] [Sooftware 머신러닝] Attention Mechanism (어텐션 메커니즘)|작성자 Sooftware
[Attention 추가 자료]
https://blog.naver.com/teach3450/221900313366
지난 시간에 구현했던 모델과 이번 업그레이드 버전의 모델의 성능 비교
loss의 줄어드는 속도가 급격히 상승했다.
[출처] 텐서플로우(tensorflow) : seq-to-seq 구조의 RNN(순환신경망)을 이용하여 기계번역 문제 해결하기 *attention weight upgrade version*|작성자 용쓰
[이은아님 강의 모음]
https://www.youtube.com/playlist?list=PLGAnpwASolI0vViZItiP90nWI_s9m91Av
'머신러닝' 카테고리의 다른 글
[추천강의] 이은아님 머신러닝 비정형 데이터 분석 10/11 Transformer (0) | 2020.07.21 |
---|---|
머신러닝으로 투자에 성공할 수 있을까? (0) | 2020.07.16 |
[추천강의] 이은아님 머신러닝 비정형 데이터 분석 8/11 LDA Inference: Collapsed Gibbs Sampling (0) | 2020.07.13 |
[추천강의] 이은아님 머신러닝 비정형 데이터 분석 7/11 토픽모델링 LDA (0) | 2020.07.11 |
[추천강의] 이은아님 머신러닝 비정형 데이터 분석 6/11 Topic Modeling: pLSA (0) | 2020.07.10 |