Transformer_사전지식

Kim Jin Seong·2022년 1월 12일
0

Transformer

목록 보기
1/4

한빛미디어 출판 "구글 BERT의 정석 " 책을 참고해서 작성하는 개인 공부 자료입니다.
혹시 내용에 저작권 등 문제가 있다면 알려주시면 감사하겠습니다.

! 내용에 신뢰도가 떨어지거나 상당부분 요약 되어 있을 가능성이 있음 !
! 제가 수식 보는 것을 싫어하기 때문에 꼭 필요하지 않다면 생략되있을 가능성이 높습니다 !


사전 지식( Simple )

1. 임베딩

인간과 기계의 이해방식은 서로 상이하다. 그렇기 때문에 인간의 언어. 즉, 자연어를 기계가 이해할 수 있도록 변환해주는 작업이 필요한데 이 작업을 바로 임베딩이라고 한다.

기본적으로 기계는 데이터를 수치 데이터를 통해 입력받기 때문에 자연어를 숫자의 나열 형태인 벡터로 변환해주는 과정을 진행한다.

I am happy
-> {'i', 'am', 'happy'}
-> { 20, 30, 80 }

임베딩을 통해 얻을 수 있는 정보를 간단히 요약하면 다음과 같다.

  • 단어 / 문장 간 관련도
  • 함축된 정보

수치화된 벡터이기 때문에 일련의 사칙연산이 가능하게 되는데, 이를 통해 다양한 정보를 얻을 수 있다.
실제로는 더 복잡한 프로세스지만 임베딩이 핵심 주제가 아니기 때문에 이정도만 하고 넘어가겠다.


2. Softmax

클래스 분류 문제를 크게 두 가지로 나누자면 이진 분류( Binary Classification ) 문제와 다중 클래스 분류( Multi-class Classification )로 나눌 수 있을 것 같은데 여기서 Softmax는 다중 클래스 분류에서 각 클래스에 대한 확률분포를 얻기 위한 마지막 활성함수( Activation Function )로 주로 사용되는 함수이다.

일단 시그모이드( Sigmoid ) 함수를 알아야 하는데 간단히 말하면 어떤 입력 값이 들어왔을 때 입력 값을 0과 1사이의 확률 값을 기준으로 True / False를 판단하는 함수라고 생각하면 된다.

  • (sigmoid(x)>0.5)=True(sigmoid(x) > 0.5)=True
  • (sigmoid(x)<0.5)=False(sigmoid(x) < 0.5)=False

하지만 분류 해야하는 선택지( 클래스 )가 3가지인 데이터를 시그모이드 함수를 통해 도출된 예측 값이 다음과 같다고 가정해보자.

  • P(Class1=True)=0.6P(Class_1=True) = 0.6
  • P(Class2=True)=0.3P(Class_2 =True) = 0.3
  • P(Class3=True)=0.9P(Class_3 =True) = 0.9

예시와 같이 다소 비교가 불편한 값이 나오게 되는데, 여기서 전체 확률 합을 1로하는 각 클래스로 분류될 확률을 얻고, 가장 높은 확률을 가진 클래스를 결과값으로 예측하고자 하는 아이디어로 만들어진 함수가 Softmax이다.

결국 클래스로분류될확률확률전체합클래스로 분류될 확률 \over 확률 전체 합 으로 계산할 수 있는데 위의 값을 예로 들어

  • 0.60.6+0.3+0.80.6 \over {0.6+0.3+0.8}=0.33=0.33
  • 0.30.6+0.3+0.80.3 \over {0.6+0.3+0.8}=0.16=0.16
  • 0.90.6+0.3+0.80.9 \over {0.6+0.3+0.8}=0.5=0.5

과 같이 나올 것으로 예상되지만, Softmax에서는 선형함수가 아니라 지수함수 exp(x)exp(x)를 사용하기 때문에 더 명확한 값이 나오게 되고 One-Hot Encoding을 통해 예측을 완료하게 된다.

  • 미분을 가능하게 하기 위함
  • 큰값은 더 크고 작은 값은 더 작게 하기 위함( 명확성 )

Cost Function은 Cross-Entropy를 사용하게 되는데, 자세하게 설명할 자신이 없기 때문에 예측 결과로 나온 One-Hot 벡터의 값과 실제 값의 One-Hot 벡터와 비교해 값이 같다면( 정답이라면 ) 0을 반환하고, 다르다면 일정 Loss 값을 증가시키는, 다중 클래스 분류에서 Loss 값을 최소화하기 위한 가장 적절한 함수 정도로 설명하고 넘어가겠다.

  • 정답! -> Loss에 영향 x
  • 오답! -> Loss값 증가

추가) One-Hot Encoding을 사용하는 이유는 자연어를 수치화 시키기 위한 목적도 있지만, 이전 모델을 통과한 결과로 나온 값이나 수치화된 값( 1, 2, 3, ... )을 그대로 사용할 경우 실제로 서로 관련 없는 값임에도 값의 차이가 생겨 잘못된 관계를 학습할 수 있기 때문이다.


3. FC Layer; Dense Layer

Fully Connected Layer 즉, 완전연결층이라고 해석되는 한 층( Layer )의 모든 뉴런이 다음 층( Layer )의 모든 뉴런과 연결된 상태를 말한다.

보통 신경망이라고 말할 때 연상되는 구조. 차원 축소( 평탄화 ), 활성함수 활성화, 분류 등의 복잡한 문제 해결을 위해 사용되는 계층으로 더 크고 복잡한 문제일 수록 더 크고 많은 레이어를 필요로 한다.


4. RNN

앞서 말한 FC 레이어를 통한 모델의 문제 중 하나가 각 Input들이 독립적이라고 가정하기 때문에 자연어, 주가 등과 같은 순서에 의미가 부여되는 시계열 데이터를 Input으로 넣게 되면 성능 향상에 한계가 있다는 단점이 있다.

이 단점을 보완하고자 이전 단계에서 나온 결과값을 참조해 Sequence Data를 처리하기 위해 고안된 아이디어 중 하나가 RNN( Recurrent Neural Network )이다.

단어에서 느껴지듯이 이 모델은 순환구조를 채택하고 있는데, RNN의 은닉층의 노드는 이전 시점 은닉층의 노드에서 나온 값을 자신의 입력으로 사용하는 재귀적인 활동을 하고 있기 때문에 붙여진 이름이며 이 노드는 이전의 값을 기억하려고 하는 일종의 메모리 역할을 하기 때문에 메모리 셀 또는 RNN 셀이라고 표현한다.

RNN(t)=word(t)+RNN(t1)RNN(t) = word(t) +RNN(t-1)

내가 보기에도 아주 형편 없는 수식이고 나사하나 빠진 느낌이지만 더 자세히 알고싶다면 복잡한 수식도 간단하게 설명해놓은 대단한 블로그들이 많으니 구글링을 하거나 논문을 참고하시면 좋을것 같다(..)


5. LSTM

어찌됐던 RNN의 기본 개념만 간단히 설명했는데 RNN은 문장이 길어질수록 앞의 정보가 뒤로 충분히 전달되지 못하는 현상이 발생해 긴 Sequence에 대한 정확도가 떨어지는 단점이 있다.

좀더 자세히 다루자면 가중치 업데이트( Back-Propagation ) 과정에서 기울기가 점차 0에 수렴하며 Vanishing Gradient라는 현상이 발생하고 그에 따라 가중치 업데이트에 문제가 생기게 되는데..
수학적 개념이 등장하기 때문에, 이 부분이 궁금하다면 마찬가지로 다른 자료를 참고하면 좋을 것 같다.

그래서 문장이 길어지며 심하면 거의 의미 없는 수준의 정보를 전달받게 되고, 모델이 충분한 기억력을 갖지 못해 원하는 결과를 얻지 못하게 되는 현상이 발생하는데 이를 장기 의존성 문제라고 한다.

이런 단점을 보완하고자 고안된 아이디어가 LSTM( Long Short-Term Memory ) 이다.

이름처럼 최근 단어는 물론이고 오래된 정보도 기억할 수 있는 장기 의존성( Long-term Dependency )를 가지고 있는 모델인데 하나의 은닉 상태를 갖는 RNN과 다르게 LSTM에서는 은닉 상태와 셀 상태라는 두 개의 State를 가지게 된다.

  • 은닉 상태( Hidden State )
  • 셀 상태( Cell State )

또 이들을 구하기 위해서 삭제 게이트, 입력 게이트, 출력 게이트라고 부르는 게이트가 추가되는데, 이 게이트에는 공통적으로 시그모이드 함수가 존재해 0과 1 사이의 값이 출력되고 이 값들을 가지고 게이트를 조절하게 된다.

  • 입력 게이트
  • 삭제 게이트
  • 출력 게이트

입력 게이트

현재 정보를 기억하기 위한 게이트

현재 시점의 입력 값과 입력 게이트로 이어지는 가중치를 곱한 값, 이전 시점의 은닉 상태가 입력 게이트로 이어지는 가중치를 곱한 값을 더해 시그모이드 함수를 거친다.

또 같은 방식으로 하이퍼볼릭 탄젠트를 함수를 거친 값을 구한다.

it=sigmoid(xtWxi+ht1Whi+gi)i_t = sigmoid(x_t*W_{xi} + h_{t-1}*W_{hi}+g_i)
gt=tanh(xtWxg+ht1Whg+bg)g_t = tanh(x_t*W_{xg}+h_{t-1}*W_{hg}+b_g)

이 두개의 값을 가지고 이번에 선택된 기억할 정보의 양을 정한다.

삭제 게이트

기억을 삭제하기 위한 게이트

삭제 게이트를 지난 값은 삭제 과정을 거친 정보의 양을 표현하는데, 0에 가까울수록 정보가 많이 삭제 된 것이고 1에 가까울수록 정보를 온전히 기억한 것이다. ( 뒤에서 이해 가능 )

ft=sigmoid(Wxfxt+Whfht1+bf)f_t=sigmoid(W_{xf}*x_t + W_{hf}*h_{t-1} + b_f)

셀 상태

셀 상태는 입력 게이트와 삭제 게이트의 영향을 받게 되는데, 삭제 게이트의 출력 값이 0이 된다면 이전 시점의 셀 상태 값의 반영 비율인 영향력이 0이 되며 오직 입력 게이트의 결과만 현재 시점의 셀 상태의 값을 결정하게 된다.

반대로 입력 게이트의 시그모이드 함수를 거친 출력 값이 0이 된다면 오직 이전 단계의 셀 상태의 값에만 의존하게 되는 결과 값으로 반영하게 된다.

Ct=ftCt1+itgtC_t = f_t*C_{t-1} + i_t*g_t

결론적으로 입력 게이트는 현재 상태를 얼마나 반영할 것인지, 삭제 게이트틑 이전 시점의 값을 얼마나 반영할 것인지 결정한다.

출력 게이트

출력 게이트도 마찬가지로 현재시점의 입력 값과 이전 시점의 은닉 상태가 시그모이드 함수를 거쳐 나온 값과 하이퍼볼릭탄젠트 함수를 지난 셀 상태의 값과 연산되며 출력층으로 향하게 된다.

ot=sigmoid(Wxoxt+Whoht+bp)o_t = sigmoid(W_{xo}*x_t + W_{ho}h_t + b_p)
ht=ottanh(ct)h_t=o_t *tanh(c_t)

결론적으로 RNN에 비해 LSTM은 게이트를 통해 Cell State가 점진적으로 추가되면서 변화하는 부분으로 기울기 소실 문제가 해결되게 된다.

결론

뭔가 상당부분 생략되어 있다고 생각 하지만 각 파트의 부분을 자세하게 다루기 위한 글이라기 보다는 트랜스포머를 하기에 앞서 알면 좋은 내용들을 적어둔 것이기에 흐름정도만 정리됐다고 해도 성공했다고 봅니다..

두서 없이 작성된 글이지만 누군가에게는 도움이 되기를 바라며 글 마치겠습니다.

profile
Data Study

0개의 댓글