Transformer

0

AI(인공지능)

목록 보기
3/5

Tramsformer란?

  • Transformer는 기계 번역 등 sequence to sequence 과제를 수행하는 모델입니다.
  • sequence to sequence란 특정 속성을 지닌 sequence를 다른 속성의 sequence로 변환하는 작업입니다.
  • sequence to sequence 태스크는 소스 sequence와 타깃 sequence의 길이가 달라도 해당 과제를 수행함에 있어서 문제가 없어야 합니다.
  • Transformer는 Encoder와 Decoder의 입력이 주어졌을 때 정답에 해당하는 단어의 확률값을 높이는 방식으로 학습합니다.

Encoder / Decoder

  • Encoder는 source sequence의 정보를 압축해 Decoder로 보내는 역할을 합니다.
  • Encoding은 Encoder가 source sequence 정보를 압축하는 과정입니다.
  • Decoder는 Encoder가 보내 준 source sequence 정보를 받아서 Target sequence를 생성합니다.
  • Decoding은 Decoder가 Target sequence를 생성하는 과정입니다.

Self Attention

  • Self Attention : 말 그대로는 스스로에게 수행하는 Attention 기법으로, 입력 Sequence 가운데 태스크 수행에 의미 있는 요소들 위주로 정보를 추출한다는 뜻입니다.

  • Attention : sequence 입력에 수행하는 기계 학습 방법의 일종으로 sequence 요소 가운데 중요한 요소에 집중하여 성능을 끌어 올리는 기법입니다.

  • Self Attention은 Query, Key, Value가 서로 영향을 주고 받으면서 문장의 의미를 계산합니다.

  • Convolutional Neural Network(CNN, 합성곱 신경망) : Convolution filter(합성곱 필터)라는 특수한 장치를 이용해 sequence의 지역적인 특징을 잡아내는 모델입니다. 하지만 CNN은 Convolution filter 크기를 넘어서는 문맥을 읽어내기 어렵다는 단점이 있습니다.

  • Recurrent Neural Network(RNN, 순환 신경망) : Source Sequence를 차례대로 처리하는 Sequence 정보를 압축하는데 강점이 있습니다. 하지만 RNN은 Sequence 길이가 길어질수록 정보를 압축하는데 문제가 발생할 수 있습니다. 오래전에 입력된 단어는 잊어버리거나, 특정 단어의 정보를 과도하게 반영하여 전체 정보를 왜곡하는 경우가 자주 발생합니다.

  • Self Attention의 특징과 장점 : 개별 단어와 전체 입력 Sequence를 대상으로 Attention 계산을 수행해 문맥 전체를 고려하기 때문에 지역적인 문맥만 보는 CNN 대비 강점이 있고, 모든 경우의 수를 고려(단어들 서로가 서로를 1대 1로 바라보게 함)하기 때문에 Sequence 길이가 길어지더라도 정보를 잊거나 왜곡할 염려가 없습니다. 이는 RNN의 단점을 극복한 지점입니다.

  • Attention 과 Self Attention의 차이점

  1. Attention은 Source Sequence 전체 단어들과 Target Sequence 단어 하나 사이를 연결하는 데 쓰입니다. 반면 Self Attention은 입력 Sequence 전체 단어들 사이를 연결합니다.
  2. Attention은 RNN 구조 위에서 동작하지만 Self Attention은 RNN 없이 동작합니다.
  3. 타깃 언어의 단어를 1개 생성할 때 Attention은 1회 수행하지만 Self Attention은 Encoder, Decoder Block의 개수만큼 반복 수행합니다.

Multi-Head Attention

  • Self Attention을 동시에 여러번 수행하는 구조입니다. 즉 여러 헤드가 독자적으로 Self Attention을 계산한다는 뜻입니다.

Rectified linear unit(ReLU)

  • 양수 입력은 그대로 출력하되 음수 입력은 모두 0으로 치환하여 출력합니다.
profile
코드 작성 시에 한 글자, 한 글자에 '왜' 를 붙여가며 생각하는 개발자가 되도록 노력중!!

0개의 댓글