본문 바로가기
Programming/Python

Recurrent Neural Networks(RNN), Transformer

출처: AI 엔지니어 기초 다지기 : 네이버 부스트캠프 AI Tech 준비과정

 

 

 

 

RNN은 주어진 입력 자체가 Sequential이라는 특징이 있다.

 

Sequential Model: 입력이 들어왔을 때 다음 입력에 대한 예측을 하는 것

Naive sequence model

고려해야하는 과거에 기록된 데이터들의 양이 점점 늘어난다. -

 

Autoregressive model

Fix the past timespan: 특정 과거나 구간을 설정하여 데이터를 제한한다.

Markov model (First-order autoregressive model)

Markov property: 내가 가정하기에 나의 현재는 바로 전 과거에만 dependent한다.

장점: joint distribution 표현이 용이해짐 ~> generative model 연관

단점: 버리는 과거 정보가 너무 많음( 내일 수능인데 그 결과는 어제 하루에만 dependent한다... 라고 할 수 있나? )

Latent autoregressive model   ;   Latent(잠재한, 잠복한)

과거의 정보를 sumamrize한 hidden state를 설정하여 Markov property를 적용.

 

 

 

 

 

 

Recurrent Neural Network(RNN): 현재 input이 들어오고, 이전의 input이 recurrent하게 들어옴  

RNN을 시간 순으로 푼 구조 그림

시간 순으로 풀고보니 입력이 굉장히 많은 FCN같이 표현됨 

 

 

 

문제점: Short-term dependencies

 

가까운 과거의 정보는 잘 취합하지만

먼 과거의 정보(Long-term dependencies)는 취합하기 어려운 문제!

 

 

 

RNN 학습의 어려움

pi: activation function (sigmoid사용시 과거정보 vanishing. ReLU사용시 네트워크 폭발 exploding gradient로 학습불가)

-> RNN에서 ReLU 잘 안씀

 

 

 

 

Long Short Term Memory(LSTM): 과거학습 제한 문제 및 활성함수 문제를 해결하기위해 나온 네트워크(모델)

기존 RNN의 구조
LSTM의 구조

핵심 아이디어

계속 올라오는 컨베이어벨트 박스에서 유용한건 냅두고 아닌건 버리는 작업

 

 

 

 

 

 

 

 

Gated Recurrent Unit(GRU): LSTM gate를 reset gate와 update gate 2개로 단순화. cell state 없고 hidden state만 있음.

 

LSTM보다 GRU가 성능이 전반적으로 좋다. (적은 파라미터를 쓰니 Genralizae perfomance가 좋구나)그러나 요즘은 GRU도 안쓰고 Transformer 위주로 사용함 

 

 

이유:

기존 RNN이 다루기 힘들었던 squential dataㄷㄹ

자연어(문장)이 생략되거나 뒤에가 빠지거나, permuted(하나씩 밀리는) 경우가 많음

 

 

transformer가 대세임

 

 

 

 

 

 

 

 

 


Transformer

Sequential data를 다루는 방법론

Transformer: Attention is All You Need, NIPS, 2017

논문 정의: the first sequence transduction model based entirely on attentionhttps://jalammar.github.io/illustrated-transformer/

 

The Illustrated Transformer

Discussions: Hacker News (65 points, 4 comments), Reddit r/MachineLearning (29 points, 3 comments) Translations: Arabic, Chinese (Simplified) 1, Chinese (Simplified) 2, French 1, French 2, Italian, Japanese, Korean, Persian, Russian, Spanish 1, Spanish 2,

jalammar.github.io

 

 

대략적인 transfomer의 구조 및 역할. (간단예제: 불어를 영어로 번역하고싶어)

 

 

구체적인 구조

The Self-Attention in both encoder and decoder is the cornerstone of Transformer.

 

 

 

불어 -> 영어 번역 NLP 문제 예시로 알아보자

우선 각 단어를 some ebedding vectors로 지정한다.

 

 

Transformer의 Self-Attention은 각 단어들을 feature vectors로 encode한다.

이 과정에 dependencies 있음: n개 단어 만들 때 나머지 벡터 고려함

 

 

예를 들어 Thinking과 Machines를 encoding하는 상황을 생각해보자

우선 보통 처리방식은 해당 문장에 대해서 it이 가리키는 것이 무엇인지 찾는 것이다.

 

 

 

Thinking에 대해서 encoding한다고 할 때,

score = 단어(thinking) 계산시, encoding 하고자하는 queries vector와 나머지 n개의 단어에 대한 key vector를 구함.

그리고 그 두개 벡터를 내적(inner product)

 

score vector가 계산되면 normalize를 해준다. (key vector의 dimension으로 나눔. 여기선 8)

그리고 이 score의 sum이 1이되도록(sum to one) softmax를 취한다. -> attention weight가 나옴

 

 

 

 

 

 

 

Thinking이 자기 자신과 attention과 interaction값은 0.88. Machine에 대해선 0.12가 됨

 

Attention weight: 각각의 자기자신 단어와 얼마나 interaction해야하는지

 

 

 

주의점: queries, key vector의 차원은 항상 같아야 함  (value는 달라도 됨)

 

 

지금까지의 과정을 요약한 그림  (V차원은 Q나 K차원과 달라도 된다.)

 

왜 이게 작동이 잘될까?

 

기존의 모형들은 input이 정해지면 output도 정해짐

Transformer은 input이 주어져도 output은 달라질 수 있음 (ex> 자연어 번역 등..)

 -> 좀 더 유연한(flexible) 모형

 

단점: 더 유연한 모형이기에 더 많은 computatation 필요 (기존이 O(N)이면 이건 O(N^2))

 

 

 

 

Multi-headed attention(MHA): attention을 여러 번 하는 것

즉, 하나의 입력(encoding된 벡터)에 대해 Q K V를 여러개 만드는 것

-> transformer가 differnet positions에 집중 가능

 

N개의 MHA -> N개의 vector 결과 나옴

여기선 8 heads -> 8개의 encoded vectors(attention heads)가 나옴.

 

 

이를 additional (learnable) linear map을 통해 보냄

 

결론 요약

실제로 MHA하는건 좀 다를 수 있음.

 

 

 

 

Positional encoding: 입력에 특정 값을 더해주는 것(bias같은 것)

 

그러면 왜 Positional encoding이 필요할까?: 

-> n개의 단어를 sequential하게 넣었다해도 sequential한 정보가 포함되어있지 않음.

transformer는 input order에 independent하게 각 단어에 encoding됨

 

 

 

4-dimensional encoding
512-dimensional encoding

각 순서의 단어에 offset을 주는 느낌

 

 

2020.07에 업데이트된 positional encoding

 

 

 

 

 

 

Decoder에 어떤 정보가 보내질까?: Transfomer는 K와 V of the topmost encoder를 decoder로 전송

Decoder의 self-attention layer: 미래 정보에 영향받지 않고 이전 정보에만 영향받도록 casual masking

 

Encoder-Decoder Attention layer: Multi headed self-attention처럼 역할. (단, Q는 layer below에 있는 matrix로 만듦)
K와 V는 encoder stack에서 가져옴

 

 

 

The Final layer: the stack of decoder outputs을 the distribution over words(단어들의 분포)로 변환

 

 

 

움직이는 transfoemr 생성과정 그림

최종 출력(Output sequence)은 autoregressive manner로 생성된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

지금까지는 2017년 논문 내용이고 번역 문제에만 주로 다뤘다. 그렇다면 이미지는?


Vision Transformer

 

 

DALL-E(방법론 혹은 네트워크): 문장만 주고 이미지를 생성하는 openAI

transformer decoder, GPT-3 활용함

구체적인 방법은 공개안하고 블로그만 공개했다고 함

 

 

 

 

Transfomer구현시 가장 많이 사용하는 라이브러리: HuggingFace

 

HuggingFace는 매우 인기있는 Transformers 라이브러리를 구축하고 유지하는 회사입니다.
이 라이브러리를 통해 오늘날 사용 가능한 대부분의 크고 최첨단 transformer 모델을 사용하여 쉽게 시작할 수 있습니다.

728x90
반응형