여정의 기록
Transformer와 BERT 본문
수업이 너무 어렵다.
너무 어려운 내용이기도 하고 잘 못알아듣겠다 ㅠ
자막이라도 있었으면 하는 맘이든다.
그래도 나름의 방법을 찾아보고 있다.
학습목표를 적어두고 확인하며 수업을 들어보려고 한다.
평소엔 강의를 듣고 정리하며 블로그에 기록했지만 오늘은 강의 내용을 최대한 그대로 적으며
복기라도 할 수 있도록 노력해보겠다 ^^ ... (그래서 오늘 기록은 줄글 형식이 대부분이다 )

- Transformer의 scaled-dot-product와 multi-head attention에 대해 이해한다.
- BERT 모형에 대해서 이해한다.
- BERT 이후 자연어 모형의 발전 흐름에 대해 이해한다.
결국 모두 이해한다로 끝나는 목표들이지만, 다른 사람에게 설명할 수 있도록 열심히 들어보자
최근 모형들은 BERT 모형에서 크게 벗어나지 않는다고 한다.
Transformer
자연어 처리에서 굉장히 중요하다
이전 단어가 주어졌을 때 그 다음 단어를 예측하는 것인데, 계산된 확률로 문장을 골라내는 방식을 알 수 있었다.
심층 신경망 모형이 RNN이었고, 느린 속도 정보의 병목 현상 ... 단점으로 LSTM, GRU로 경사소실 문제는 많이 해결했고,
병목현상은 Attention mechanism으로 많이 해결됐다.
하지만 여기서 Attention이 보조가 아닌, RNN을 빼고 Attention만 사용하는 아이디어가 제안되었다.
Scaled dot-product attention
실질적인 attention mechanism이 작동하는 곳
Q Query
K Key
V Value
Q, K, V는 encoder, decoder 최초 블럭에서는 embedding layer를 거쳐나온 문장의 길이 * embedding 차원의 크기를 가진 행렬에 runnable parameter Q, K, V(학습가능한 모수) 를 곱한 결과물이다.
핵심은, 동일한 embedding 출력이나 아웃풋이 각각 Q, K , V 가 각각의 역할을 하도록 나옴.
타겟 문장에서 어떤 토큰을 만들기 위해 source 문장을 참고하게 되는데 여기서 source 문장에서 토큰의 키, 위치, Value를 살펴보고 토큰을 생성해서 가장 중요하게 여겨지는 것을 대답해주는 과정이다.
Q 타겟문장에서 나오는 요소 . K, V는 Source sentence에서 나오는 요소 하지만, 명확하게 정해진것도 아닌게, self-attention에서는 Q, K, V가 모두 자기자신에서 나온다.
만약 최초가 아닌 그 이후라면 encoder block의 결과는 K,V 이고 decoder의 결과는 Q가 된다.
공식에 따라 구해진 softmax를 거치게 되는데 나오는 극단적인 값을 막기위해서다.
source의 어떤 부분을 참조한다는 부분의 식. 거기에 V를 곱해서 어떤 값으로 구해진다.
얻어진 값은 batch_size * 출력 문장의 길이 * embedding
Multi-head attention
하나의 큰 attention을 사용하기보다
여러개의 작은 attention을 사용해 합하는 방식이다.
transformer block을 통과하면서 데이터의 차원은 batch_size*문장의 길이*embedding크기 가 된다.
embedding방향으로 나눠서 scale dot-product attention 을 통과하게 된다.
Q, K, V 는 bacth_size*문장의 길이 * Embedding / head 가 된다.
self-attention 이냐 attention이냐에 따라 Q, K, V 값이 달라지는데
attention이면 K, V는 source embedding 이고 Q는 target embedding 일 수 있고
self-attention는 K, V, Q 모두 source 혹은 target에서 나올 수 있다.
공식에서 W의 경우 Q가 64라면 W도 64*64를 유지해줘야 Attention 구조가 유지된다.
마지막 W^o는 512*512와 같은 큰 차원이 될 것이다.
같은 형태의 매트릭스를 block을 거치며 정보를 축적해 나가는 과정이 transformer 과정이라고 한다.
NLP는 transformer를 중심으로 패러다임이 바뀌기 시작했다.
transformer block을 활용하는 사전학습 시대가 열리기 시작하는데 ...
BERT
사전학습 모형을 미세조정하는 방식으로 작업이 진행되고 있다.
문장 단위의 임베딩을 가져와서 학습하는 방식이다.
Bidirectional Encoding Representation from Transformer
기존은 단어 단위의 토큰을 추출했다면 BERT는 문장 단위의 embedding 도출
Transformer의 Encoder block을 활용
Encoder / Decoder Block 의 가장 큰차이점은 Masked 엔진이 적용되는지이다.
모든 단어들로 이루어진 확률은 그 전 단어가 주어졌을 때 그 다음 단어가 나올 확률을 계속 곱한 형태이다.
현재 시점의 토큰에 이후 시점의 토큰이 영향을 미치지는 말아야하고
masked는 lower 0, upper 1로 이루어져 과거 시점만 영향이 가도록 masking했다.
encoder로 구성했다는 말은 masking을 진행하지 않겠다는 말이고
순방향과 역방향 모두 활용하겠다는 말이다. BERT의 Bidirectional 이라는 의미이다.
BERT는 자연어 생성에는 이용하지 않는다.
RNN의 1:다 식의 순차적 토큰을 생성하는 것과 다르다.
GPT 모형은 전통적인 RNN 모형을 사용하므로 문장을 생성할 때는 GPT를 사용하게 된다.
BERT (autoencoder 계열)
n개의 토큰들의 임베딩이 input으로 들어가고, transformer block이 독립적으로 나타나있지만 한층에 토큰의 개수만큼 존재하며 BERT의 경우 마스킹을 하지않아 모든 은닉층과 모든 토큰이 attention값을 self-attention값을 진행한다. 다음 인코딩 블럭은 이전의 모든 인코딩 블럭의 아웃풋에 모든 토큰을 사용해서 현재 블럭에 특정 토큰을 생성한다는 의미이다.
Bidirectional or Undirectional
GPT (autodecoder 계열)
특정시점의 토큰은 그 이전의 토큰만 영향을 받게된다. 일정부분끼리만 영향을 미친다.
특정 토큰 끼리만 연결되어있다.
ELMo
기존의 양방향 언어모델을 구현하기위해 LSTM을 사용했다.
transformer block을 사용하지 않았다.
문장이 길어지면 성능이 떨어진다(LSTM을 사용했기에)
BERT의 입력 표현
데이터 측면에서 보면 두가지 형태로 이어 붙인것을 input으로 받는다.
sentence piece token에 문장을 나열하고 맨 앞에 [CLS]를 붙여 문장의 구조를 동일하게 만든 다음 [SEP] 라는 토큰을 중간에 집어 넣는다. 그 다음 token embedding 과정을 거치게 되는데 network와 같이 학습되는 부분이다. (token embeddings) , segment embedddings 에서 함수값을 해당 토큰에 더해준다. 모든 두 문장을 통채로 넣게 되는데 같은 token도 위치에 따라 값이 달라지게 되는데 이때문에 position embeddings를 사용하는데 transformers에서는 encoding이라고해서 주기가 다른 cos, sin 함수들을 임베딩 사이즈로 만들어서 더해줬지만, bert 에서는 position embedding이라고해서 학습에 관여하게 된다.
BERT 학습 과정
Pre-training 과 Fine-Tuning 이라는 2가지 과정으로 나뉜다.
Pre-training
CLS는 class를 의미하고 SEP는 seperate를 의미한다. 여기에도 인덱스가 부여되어있고 여기에 문장의 길이가 다르기 때문에 정해놓은 모형보다 짧은 경우 사용하는 pad라는 토큰도 embedding으로 구해놓는다.
sentence piece로 쪼갠 토큰 갯수만큼 숫자가 붙어있는 ... 그걸 단어마다 골라서 vectorize함. 이걸 학습하게 된다.
학습한 bert를 사용하고 싶으면 bert에 사용했던 데이터가 있어야한다.
unsupervised learning이다.
bert를 학습시킬 땐 정답지가 따로 필요없다.
학습측면에서 보면 지도학습이다. 우리가 얻은 데이터로 만들기 때문에
bert를 self-training이라고 부르기도 한다.
Pre-training 종류
Pretrain - Masked LM
양방향 방식
이전 단어들을 바탕으로 다음 단어를 예측
무엇을 예측할지 명확하다
순방향과 역방향 LSTM을 이용해서 양방향의 정보를 모으는데
순방향일 때 다음 단어, 역방향일땐 이전 단어를 예측한다
encoder block을 사용하는 방법은 무엇을 예측할지 어려운데, 문장에서 일정한 비율을 가리고 그것을 맞추는 학습을 하게된다. 이것이 Masked LM이다.
우리가 예측해야할 Mask로 표시되는게 아니라 80%에 해당되는 것을 Mask로 표시하고 10%는 실제 정답지인 Mask인 정답지 토큰을 넣어서 진행하기도 한다.
특정 비율만큼은 토큰을 집어넣는 이유는 실제 Fine-tuning에는 Mask라는 토큰이 없기 때문이다.
실제로 Fine-tuning과 환경을 최대한 비슷하게 만들어준다.
오랜 학습 시간에도 학습이 불충분하다는 평가를 받는 모형이라서 오래 학습을 진행하는 방법이 제안되기도 한다.
성능이 매우 뛰어나 학습 초기에도 높은 성능을 보여준다.
Pretrain - Next Sentence Prediction
두 개의 문장을 넣고 classifiaction 한다.
두 문장을 [SEP]로 구분해서 집어넣고 BERT에 입력을 넣고 출력의 첫번째에 나오는 벡터를 가지고 Dense, Softmax를 적용시켜 두 문장이 같으면 1, 다르면 0 으로 배출한다.
Fine tuning
4가지 task로 볼 수 있다.
Sentence Pair Classification Tasks
두개의 입력문장을 넣고 class label을 첫번째 결과값을 이용해 진행하는 방식. 자연어 추론이 여기에 해당된다.
Single Sentence
한개의 문장을 입력하고 분류 문제를 class Label 결과 벡터를 가지고 분류를 한다.
Question Answering Tasks
질문과 질문에 대한 대답을 넣고 SEP 토큰을 중심으로 왼 오에 패러 그래프를 넣고 질문에 대한 대답이 그 안에 있는데 질문의 시작과 끝을 예측하는 것
Single Sentence Tagging Tasks
하나의 문장을 주고 토큰마다 예측을 하게 된다. 객체명 인식에 활용된다. 토큰과 토큰이 개체명과 관련이 있는지 사람인지 확인하게 된다.
분류문제들은 class label을 이용하고 분류가 아닌 문제들은 각각 예측하는 방식으로 진행이 된다.
그래서 나온 BERT는 각각 tasks에 대해서 최고의 성능을 보이는 것을 알 수 있다.
최신 자연어 모형 트렌드
pre-train 기반으로 발전해 가고있다.
그 중심에는 BERT, GPT가 있다.
최신 발표된 자연어 모형들 확인해보자.
모형의 크기를 줄이는 방향 : ALBERT, Transformer.zip, ELECTRA
정확도를 높이는 방향 : RoBERTa, XLNet, T5
생성 모형 : Open GPT3, T5
끝!!!

'공부중 ... > 딥러닝의통계적이해' 카테고리의 다른 글
자연어를 수치화하는 작업 Embedding, Seq2Seq, Attention(Attention is all you need~) (2) | 2022.12.15 |
---|---|
인자 분석, GAN (0) | 2022.12.13 |
비지도 학습법, 주성분 분석, 오토 인코더 (0) | 2022.12.13 |
전이학습, 객체검출, 얼굴인식, 이미지 스타일 변환 (0) | 2022.12.13 |
합성곱 딥러닝 모델들 (0) | 2022.12.13 |