elevne's Study Note

BERT 모델에 대해서~ 본문

Machine Learning/NLP

BERT 모델에 대해서~

elevne 2022. 11. 1. 15:54

 

 

 

사전학습 모델 BERT에 대해 공부해보았다. 사전학습 모델을 사용하게 되면 He, Xavier 등의 Initializer로 Weight를 초기화 하는 것이 아니라, 사전에 학습 모델의 가중치로 초기화를 진행하게 된다. 이를 전이학습이라고 말할 수 있는데, 사전학습 모델의 가중치를 가져올 때, 모델의 최종 출력 Layer은 제외하고 가중치를 가져온다. 이는 최종 출력값의 경우에는 각 문제마다 뽑아내는 형태가 다르기 때문이다. (최종 출력 Layer외에도 추가로 다른 Layer들도 변경할 수 있다.) 

 

 

 

Transfer Learning

 

 

사전학습한 가중치를 활용하여 하위 문제를 학습하는 방법은 크게 두 가지로 나뉜다. 첫 번째는 Feature Based Method인데, 이는 사전 학습된 특징을 하위 문제 모델의 부가적인 특징으로 활용하는 방법이다. 예를 들어, Word2Vec으로 학습한 임베딩 특징을 하위 문제 모델의 임베딩 특징으로 활용할 수 있다. 두 번째는 Fine Tuning이다. 이는 사전 학습 모델의 가중치를 활용한 Layer에 더해 최소한의 Layer들을 추가해서 모델을 추가로 학습시키는 방식이다. 위 사진이 Fine Tuning에 해당하는 사진이라고 볼 수 있는 것이다.

 

BERT는 2018년 Google에서 제안한 모델로, 사전학습 모델이 양방향성을 지니고 있다고 한다. BERT는 두 가지의 문제를 사전학습한다고 한다. 마스크 언어모델, 그리고 다음 문장예측이다. 

 

마스크드 언어 모델(Masked Language Model, MLM)

마스크 언어모델이란 양방향성을 가지고 언어 모델을 학습하기 위한 방법이다. 입력 문장에서 일부 단어를 마스킹 하여 모델이 그 단어가 뭔지 알지 못하게 한 후, 그 빈 칸에 들어가야할 단어가 무엇인지 예측하게 하는 것이다. 입력값으로 들어간 문장 안의 다른 단어들을 통해 마스킹된 단어를 예측하도록 학습을 시키는 것이다. 이 과정에서 이전에 다른 모델들과 다르게 양방향성을 지니고 학습을 하게 되는데, 단어의 순서와 상관 없이 마스킹된 단어 앞 뒤의 모든 단어들을 참조하여 마스킹된 단어를 예측한다는 뜻이다.

BERT에서는 Input Data의 15%를 Masking하여 학습을 진행한다고 하는데, 이 때 그 15%의 단어들 중 80%는 Masking Token으로 대체되는 것이고 10%는 임의의 다른 단어로 대체, 마지막 10%는 마스킹하지 않고 단어 그대로 모델에 넣어진다고 한다. 

 

다음 문장 예측(Next Sentence Prediction, NSP)

다음으로는 다음 문장 예측 부분이다. 이는 Input Data 두 문장이 이어진 문장인지 아닌지, 그 여부를 예측한다. Input data로 절반은 이어진 두 문장을, 나머지 절반은 이어지지 않는 두 개의 임의의 문장을 넣어준다. 이와 함께 예측 모델을 학습시키기 위해 CLS, SEP 토큰을 사용하는데 CLS는 두 문장이 이어진 문자열 맨 앞에 한 번, SEP은 문장의 종료시마다 넣어준다. 이는 버트의 하위 문제 중 두 문장 간의 관계를 예측하는데 도움이 된다고 한다. 

 

BERT 학습의 Input Data는 다음과 같이 가공될 것이다.

 

<CLS> 오늘 <MASK> BERT를 공부 중이다 <SEP> 나는 오늘 저녁에는 약속이 있다 <SEP>

 

 

BERT는 Transformer 모델 중 Encoder 부분을 활용하며, Transformer가 ReLU를 사용하는 것과는 다르게 활성화함수로 GELU 함수를 사용한다고 한다. BERT에서 활용하는 GELU의 식은 다음과 같다. 이는 ReLU보다 0 주위에서 부드럽게 변화를 줄 수 있어서 일반적으로 학습 성능을 높이기 좋다고 한다.

 

 

## Google Bert
def gelu(x):
    """Gaussian Error Linear Unit.
    This is a smoother version of the RELU.
    Original paper: https://arxiv.org/abs/1606.08415
    Args:
        x: float Tensor to perform activation.
    Returns:
        `x` with the GELU activation applied.
    """
    cdf = 0.5 * (1.0 + tf.tanh(
        (np.sqrt(2 / np.pi) * (x + 0.044715 * tf.pow(x, 3)))))
    return x * cdf

 

GELU

 

 

BERT의 전체적인 구조에 대해 알아보았으니 다음 시간에는 직접 코드로 실습해보는 시간을 가져보려고 한다.

 

 

 

출처:

https://velog.io/@tajan_boy/Computer-Vision-GELU

https://wikidocs.net/115055

https://ebbnflow.tistory.com/151

https://hiwony7933.github.io/document/4.%EB%94%A5%EB%9F%AC%EB%8B%9D/5.%EC%A0%84%EC%9D%B4%ED%95%99%EC%8A%B5.html

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

BERT 감성분석 (2)  (0) 2022.11.08
BERT 감성분석 (1)  (0) 2022.11.06
NLP 공부 (5-3: Transformer)  (0) 2022.10.28
NLP 공부 (5-2: Transformer)  (0) 2022.10.25
NLP 공부 (5-1: Transformer)  (0) 2022.10.23