출처: AI 엔지니어 기초 다지기 : 네이버 부스트캠프 AI Tech 준비과정
RNN은 주어진 입력 자체가 Sequential이라는 특징이 있다.
Sequential Model: 입력이 들어왔을 때 다음 입력에 대한 예측을 하는 것
고려해야하는 과거에 기록된 데이터들의 양이 점점 늘어난다. -
Fix the past timespan: 특정 과거나 구간을 설정하여 데이터를 제한한다.
Markov property: 내가 가정하기에 나의 현재는 바로 전 과거에만 dependent한다.
장점: joint distribution 표현이 용이해짐 ~> generative model 연관
단점: 버리는 과거 정보가 너무 많음( 내일 수능인데 그 결과는 어제 하루에만 dependent한다... 라고 할 수 있나? )
과거의 정보를 sumamrize한 hidden state를 설정하여 Markov property를 적용.
Recurrent Neural Network(RNN): 현재 input이 들어오고, 이전의 input이 recurrent하게 들어옴
시간 순으로 풀고보니 입력이 굉장히 많은 FCN같이 표현됨
문제점: Short-term dependencies
가까운 과거의 정보는 잘 취합하지만
먼 과거의 정보(Long-term dependencies)는 취합하기 어려운 문제!
pi: activation function (sigmoid사용시 과거정보 vanishing. ReLU사용시 네트워크 폭발 exploding gradient로 학습불가)
-> RNN에서 ReLU 잘 안씀
Long Short Term Memory(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를 다루는 방법론
논문 정의: the first sequence transduction model based entirely on attentionhttps://jalammar.github.io/illustrated-transformer/
대략적인 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하는 상황을 생각해보자
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는 달라도 됨)
왜 이게 작동이 잘될까?
기존의 모형들은 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됨
각 순서의 단어에 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(단어들의 분포)로 변환
최종 출력(Output sequence)은 autoregressive manner로 생성된다.
지금까지는 2017년 논문 내용이고 번역 문제에만 주로 다뤘다. 그렇다면 이미지는?
Vision Transformer
DALL-E(방법론 혹은 네트워크): 문장만 주고 이미지를 생성하는 openAI
transformer decoder, GPT-3 활용함
구체적인 방법은 공개안하고 블로그만 공개했다고 함
Transfomer구현시 가장 많이 사용하는 라이브러리: HuggingFace
HuggingFace는 매우 인기있는 Transformers 라이브러리를 구축하고 유지하는 회사입니다.
이 라이브러리를 통해 오늘날 사용 가능한 대부분의 크고 최첨단 transformer 모델을 사용하여 쉽게 시작할 수 있습니다.
'Programming > Python' 카테고리의 다른 글
240424강의자료 제안 (0) | 2024.04.24 |
---|---|
Generative Models(생성 모델), GAN (1) | 2024.02.27 |
[CNN] Computer Vision Applications (Semantic Segmentation and Detection) (1) | 2024.02.27 |
[CNN] Convolutional Neural Networks (1) | 2024.02.27 |
인공지능 기본 수학 (베이즈 통계학, 인과관계 추론) (2) | 2024.02.18 |