Machine Learning

Bert

뚜둔뚜둔 2020. 7. 13. 18:24

https://hugrypiggykim.com/2018/12/09/bert-pre-training-of-deep-bidirectional-transformers-for-language-understanding/

 

https://colab.research.google.com/drive/133UHPLf5M5m1qyex3k7PTTRN7vNQQYDp

 

 

==========================

https://horajjan.blog.me/221423797872

 

  •  Transformer : 셀프 어텐션으로 구성된 인코더 (RNN, CNN을 사용하지 않고 기존 RNN 으로 구성된  seq2seq의 한계를 넘어서는 성능을 보임

  • Self-Attention : 단어 간의 연관 관계를 얻을 수 있음. 딥마인드에서 이를 이용하여 RMC(릴레이션 메모리 코어)로 순차적 정보를 통한 관계형 추론 모델을 만듦

  • self-Attention구조 : 입력을 각 가중치로 연산하여, Q,K,V를 구함. 이때, 각 가중치는 멀티 헤드의 크기만큼 세트로 구성됨

스케일 닷 어텐션에서 Q와 K의 트랜스포즈한 정보를 연산하고 스케일링하여 어텐션 스코어를 구함.

어텐션 스코어를 V에 적용하여 Z를 구함. 이 과정을 헤드 수만큼 피처를 나누어 스케일 닷 어텐션한 후 모두 합쳐 통합 z를 구함.

  • 피드 포워드 : 트랜스포머는 셀프 어텐션을 통해 나온 정보를 피드 포워드 네트워크를 통과시켜 정보를 정리함

첫번째 층은 비선형성을 추가해주고 두번째는 선형으로 연산함. 신경망 2레이어 이상으로 히든 유닛이 충분히 사용되면 어떠한 연속 함수도 표현(근사) 가능. 

이런 성질을 이용하여 학습하면서 W와 b들을 통해 셀프 어텐션에서 나온 정보를 통과 시켜 정리하는 효과를 얻음

버트 이전의 구글 QANet에서 쓰인 트랜스포머의 피드 포워드는 포인트 와이즈 컨볼루션 형태로 구성함.

 

Normalization : 값이 원하는 범위를 벗어나지 않도록 제안함 -> 값 범위를 제한하므로 가중치 초깃값 선택의 의존성이 적어짐 -> 과적합(overfitting) 방지

스킵 커넥션(Skip-Connection) : vanishing Gradient를 해결하기 위한 방법 (Residual Network / Highway Network / Dense Network)

ReLU, ELU, GELU(확률론적 개념을 도입하여 ReLU보다 계산 비용이 저렴하고 빠르게 수령함)

 

구글버트BERT의 접근법

  • 피처 기반 접근법 : Word2Vec, Glove, FastText, CoVe, ELMo

  • 파인 튜닝 접근법 : ULMFit, GLoMo, GPT, BERT

버트 구조

  • 버트 base : 트랜스포머 레이어 수: 12개, 특징을 담는 피처 사이즈: 768, 멀티 헤드 어텐션의 헤드수 :12개

  • 버트  Large : 트랜스 포머 레이어 수: 24개, 특징을 담은 피처 사이즈 : 1024, 멀티 헤드 어텐션의 헤드 수 : 16개

 버트의 학습방법

  • Masked 언어모델 : 앙방향 맥락을 고려하여 언어모델링 되도록 문장에서 정해진 비율(15%)의 무작위 단어 마스크  마스킹된 단어를 맞추도록 모델을 구성함. 미세조정시 올바른 예측을 돕도록 마스킹에 노이즈를 섞음(10%는 랜덤 단어, 10% 정상단어 그대로 둠)

  • 다음 문장 예측 : 두 문장간 관련이 고려되어야 하는 NLI와 QA의 파인 튜닝을 위해 마스크 된 단어를 맞추는 Task와 동시에 두개의 문장이 연관이 있는지 맞추도록 학습함. 50% 연관문장, 50% 연관 되지 않은 문장을 무작위 추출하여 학습.

입력 데이터

  • 버트를 프리트레이닝 할때는 두개의 문장 구분자와 함께 합쳐 넣음

  • 문장을 넣을 때 트랜스 포머의 의존성 길이를 고려하여 두문장 합쳐 약 512 단어 이하로 넣음

  • 입력 데이터는 워드 피스 토크나이져로 토큰 된 단어 기반 정보를 아래와 같은 3가지 형식으로 입력하여 임베딩함.

  1. 토큰 임베딩 : 입력 단어가 단어장에 몇 번째 단어인지 나타냄

  2. 세그먼트 임베딩 : 두 문장 중 앞 문장인지 뒷문장인지 구분함

  3. 포지션 임베딩 : 문장 내의 단어의 순번을 나타냄

 

 

파인튜닝(Fine-tuning)을 이용하는 방법

  1. 프리트레인된 가중치를 모델에 불러옴

  2. 입력 문장이 두 개인 Task는 마스크 없이 문장 구분자(SEP)를 넣어 아래와 같이 입력함

  3. 입력 문장이 한 개인 Task는 마스크와 문장 구분자(SEP) 없이 아래와 같이 입력함

  4. 분류 문제는 클래스 라벨을, 정답 구간을 예측하는 문제는 시작 지점과 끝점을, 개체명 태깅 문제는 태깅 문장을 정답으로 넣음

  5. 입력 형태는 바뀌지 않고 마지막 단에 있는 분류자 부분만 다양한 자연어 처리 Task에 맞게 바꿔 버트 가중치를 여러 분야에 활용할 수 있음

반응형

'Machine Learning' 카테고리의 다른 글

[Book][doit_2]분산 학습  (0) 2022.02.06
NLP 를 위한 CNN  (0) 2020.07.14
Word2Vec  (0) 2020.07.13
Confusion Matrix _ PYCM  (0) 2019.07.18
t-sne  (0) 2019.07.18