프로젝트/2022 융합보안논문경진대회

[딥러닝 / 논문 리뷰 ] Attention is all you need (NIPS 2017)

pxatd 2021. 12. 27. 12:41
728x90

*211227 진행했던 미니 세미나에서 발표한 내용을 정리한 것임 

transfomer

transfomer는 구글에서 발표한 모델로 기존 인코더와 디코더를 발전시킨 모델이며 기존 딥러닝과 가장 큰 차이는 RNNCNN을 사용하지 않는데에 있다. 논문에서 발췌한 이 실험결과에서 transfomer는 영어를 독일어와 프랑스어로 번역한 문제에서 기존 모델보다 속도와 성능이 빨랏다는 표를 제시했다. transfomer가 이렇게 성능이 뛰어난 이유는 바로 RNN을 사용하지 않았다는데 있다. transfomer를 한 단어로 정의하면 병렬화 라고 할 수 있다. 즉 일을 한번에 처리한다는 것이다. RNN이 순차적으로 들어온 데이터를 인코딩 하는 반면 transfomer는 병렬적으로 일을 한번에 수행할 수 있다.

 

 

 

Positional Encoding

그림을 보면 벡터를 작은 네모로 표현해놓았는데 첫번째 단어부터 각각의 단어에 001, 010, 011, 100 을 더해주었다. 똑같은 방식으로 디코더에도 이렇게 positional encoding을 적용할 수 있다. 이 그림은 이해를 돕기위해 따로 찾은 그림이고 실제 논문에서는 싸인과 코사인 값을 이용하여 벡터를 정의하였다. 싸인과 코싸인으로 정의했을 때 장점은 값이 -1부터 1까지만 나온다는 점과 포지셔닝 인코딩의 전체적인 장점으로는 긴 문장값이 들어와도 포지셔닝 인코딩을 통해 에러없이 상대적인 위치값을 부여할 수 있다는 점이 있다.

 

 

 

Self Attention

인코딩에서 이루어지는 연산을 self attention이라고 한다. query, key, value 각각 wq wk wv 행렬에 의해 각각 생성되고 이 가중치는 딥러닝 메트릭스에 의해 최적화 된다. Input으로 들어간 문장 또한 행렬로 볼 수 있으므로 각각의 행렬 곱을 통해 한번에 계산할 수 있는 것이다. 즉, query, key, value 있으면 self attention 수행할 수 있다.

 

 

 

 

그림에서 처음 I를 예로 들어 설명하자면 현재 단어는 쿼리이고 단어의 상관관계를 구할 때 쿼리에 키값을 곱해준다. 쿼리와 키를 곱한 값을 어텐션 스코어라고 하는데 쿼리와 키 모두 벡터이므로 닷 프로덕트로 곱하게 될 경우 결과가 숫자로 나오게 된다. 이 결과물로 나온 스코어는 높으면 상관관계가 높고 낮으면 상관관게가 낮다고 이해할 수 있다. 이를 확률로 보이기 위해 소프트 맥스를 적용한다면 다음과 같은 결과가 나오게 된다. 소프트 맥스 값은 키값에 해당하는 단어가 현재 단어에 어느정도 연관성이 있는지를 나타낸다.

 

 

II92%, I는 스터디와 5%로 연관이 있다고 이해했다. 각 확률을 각 키에 해당하는 벨류값으로 곱해주면 연관성이 높은 벡터는 진한색, 연관성이 낮은 벡터는 희미한 색으로 바뀐 것을 볼 수 있다. 따라서 최종적으로 나온 이 벡터는 그냥 단어 I가 아닌 문장 속에서 단어 I가 전체적인 의미 벡터로 간주할 수 있다.

 

 

단어임베딩은 벡터이므로 입력 문장 전체를 행렬로 표시할 수 있으며 키 벨류 쿼리 모두 행렬이니까 행렬곱을 모두 동시에 어텐션 연산을 수행할 수 있게 된다. 만약, RNN이었다면 처음 단어부터 마지막 단어까지 순차적으로 계산했을 테니 이에 비교하면 트랜스포머의 병렬처리는 매우 빠른 속도를 낼 수 있다.

 

 

 

Multi Head Attention

앞에서는 하나로 예를들어 설명했지만 실제로 논문에 제시된 자료를 보면 여러 개를 한번에 병렬처리 한다고 되어있다. 이렇게 많은 어텐션 레이어를 병렬 처리하는 것을 multi head attention이라고 부른다. 그리고 multi head attention는 그림과 같은 기계번역에 큰 도움을 준다. 지금 더 로우 윌 네버퍼벡트 어플리케이션 슈드 비 저스트 ... 보면 뭐가 its인지 애매모호 한 상황이다. 이때 두 개에 다른 병렬화 된 어텐션이 서로 다르지만 its하고 연관성이 높은 단어에 포커스 하고 있는 모습을 볼 수 있다. 사람의 문장은 모호한 경우가 많고 하나의 인코딩으로는 이 모호한 문장을 번역하기 어려운 경우가 많기 때문에 multi head attention 사용한다면 여러 관점에서 수집하기 때문에 이 점을 보완할 수 있다.

 

 

 

Encoder layers

트랜스 포머 인코더는 레이어를 6이어붙인 구조이다. 논문에서 말하는 중요한 점은 각각의 레이어는 서로의 가중치를 공유하지 않고 따로 학습시킨다는 점이다.

 

 

 

Decoder layers

디코더는 인코더와 유사한 모습으로 진행된다. 인코더와 마찬가지로 6개의 레이어로 구성되어 있다.

 

 

 

디코더가 인코더와 다른점은 첫번째로 기존 인코더에서 multi head attention masked multi head attention으로 불린다. masked 라는 이름이 붙은건 지금까지 출력된 값들에 대해서만 어텐션 레이어를 적용하기 위해 붙여진 이름이다. 다음 단게는 multi head attention 이다. 키 벨류 쿼리로 연산을 하는데 인코더에 multi head attention 다른 점은 티코더의 multi head attention 현재 디코더의 입력값을 쿼리로 사용하고 인코더의 최종 출력값을 키와 벨류로 사용한다는 점이 있다. 그리고 다음엔 feed forward를 통해서 최종 값을 출력한다.

 

 

Lable Smoothing

인코딩과 디코딩 과정을 최종적으로 합친 transfomer의 구조이다. 리니어레이어와 softmax 레이어를 거쳐 다음에 올 단어를 출력하게 된다. transfomer에서 또하나의 중요한 기술이 레이블 스무딩이라는 기술인데 보통 딥러닝에서 softmax 학습할 경우에는 레이블을 원핫인코딩으로 전환해주는데 transfomer는 원핫 인코딩이 아닌 그림처럼 10이 아닌 그 사이 값으로 표현되어 있는 것을 볼 수 있다. 정답과 오답을 이분화하여 나타내는 것이 아니라 정답은 1에 가까운 값 오답은 0에 가까운 값으로 표현하여 표현하는 기술은 모델 학습시에 모델이 너무 학습 데이터에 치중하여 학습하지 못하도록 보완하는 기술이다.

이러한 방식으로 transfomer는 효율적인 기계번역을 기대할 수 있다.

 

 

 

references

Attention Is All You Need (NIPS 2017)

728x90