EECS 498-007

[EECS 498-007] Lecture 13-2. Attention

y_unique 2024. 2. 12. 19:09
728x90

안뇽 어텐션 투얌

오늘도 언제나처럼 공ㅈ부하러 왓어

그런데 오늘 시오니 생일이야

인생의 절반이상을

같이 축하해주는 중.

올해도 어김업시 생일추카한다 ㅋㅋ

빨리쓰고 나갈게..... 


요번 포스팅에선 transformer에 대해 다룰 예정이랍니다. 

 

이전 글에서 Attention is all you need 논문을 언급했었다. 해당 논문에서는 self-attention만을 사용한 새로운 primitive block type인 transformer block을 제시하였는데, 

Transformer

동작하는 과정을 보면,

먼저 Input sequence vector로 x1, x2, x3, x4 까지 받는다. 

 

전체 vector에 대해 mulity head self-attention을 동작시키고, 셀프 어텐션 연산 후에 각 output은 각 Input sequence의 다른 원소들 사이의 상호작용으로 구해진다. 

그 후에는 residual connection을 통해 output과 input을 더해주는 과정을 거친다. 

 

다음은 layer normarlization 과정을 거친다. 

이 방법은 평균과 표준편차를 구해 정규화를 하는 방법인데, batch norm과 비슷한 목적을 가지고 있지만 몇가지 차이점이 존재한다. 

 

Batch Normalization 

  • 미니배치 전체에 대해 평균과 표준편차를 계산하고, 각 뉴런의 입력을 정규화 
  • 미니배치 크기에 의존적 -> 더 큰 크기의 미니배치에서 잘 동작
  • train : 미니배치의 평균과 표준편차 사용 test : 이동평균과 이동 표준편차를 사용 
  • 미니배치 크기가 작다면 gradient 소실 문제에서 불안정 할 수 있음. 

Layer Normalization 

  • 한 레이어 내에서 각 샘플에 대해 정규화 -> 데이터의 각 차원에 대한 정규화 
  • 배치 크기에 의존하지 않아 작은 배치 크기에서도 안정적 
  • train, test에서도 일관된 동작 -> 미니배치 크기가 달라져도 영향 x
  • 각 layer에 대해 정규화하므로 gradient 소실 문제 완화 

Layer Normalization 과정

  1. 각 뉴런의 입력에 대해 평균과 표준편차 계산 
  2. 평균과 표준편차를 사용하여 입력을 정규화 
  3. 정규화된 값에 대해 scale과 shift를 수행

정규화 후 mulity layer perceptron 연산을 진행한다. layer norm의 출력은 벡터들의 집합으로 이들을 완전 연결 신경망에 전달하고, 

이들을 각 sequence별로 독립적으로 연산한다. 

 

그 결과값 또한 residual connection을 추가하고, 

 

또 다른 layer normalization을 추가한 후 output을 내게된다.

 

이렇게 얻어낸 이 블록을 우리는 

Transformer Block이라고 한다. 이 block은 vector sequence를 처리하는 큰 규모의 모델들을 만드는데 사용한다. 

 

input으로는 벡터 x의 집합, 출력으로는 벡터 y의 집합이 되고 입력과 출력 벡터의 개수는 동일하다. 하지만 그 output vector의 차원 수는 다를 것이고, 그러한 벡터의 차원은 모델 내부에서 바꿀 수 있다고 한다. 

 

또한 self-attention 부분에서만 벡터들의 상호작용이 일어나는데, layer norm 또는 MLP에서는 각 벡터들이 독립적으로 연산되기 때문이다. 이러한 장점 덕에 transformer block은 매우 병렬화하기 좋고! GPU 하드웨어 부분에서 다루기가 용이하여 학습하기에 매우 좋다고 한다! 

 

트랜스 포머는 transformer block의 sequence로 이루어져 있는데, 우리는 hyperparameter를 설정하여야 한다. 

  * "Attention is all you need" 논문에 따르면 

  • block의 개수 : 12개 
  • 각 block의 query 차원 : 512 차원 
  • head의 개수 : 6개 -> 셀프 어텐션 연산에서 수행됨 

이러한 트랜스포머 아키텍처를 

"Imagenet moment for natural language processing"이라고 부르며, 자연어 처리에서 매우 유용하게 사용되고 있다고 한다. 

 

컴퓨터비전 분야에서도 imageNet으로 pretraining을 시키고, 특정 작업 용도로 미세하게 조정해나가듯이, 트랜스포머 모델도 수많은 sequence 예측이나 자연어 작업에서도 비슷하게 동작한다고 한다. 

 

따라서 인터넷에서 많은 양의 text를 다운 받아 다음에 올 단어들을 예측하거나, 다른 자연어 처리 모델을 동작할 수 있도록 pretraining을 시켰고, 기계 번역이나 언어 모델링, 언어 생성 등 다양한 자연어 처리와 관련된 작업에서 Finetuning이 가능하다고 한다.

 

각 연구 그룹이 서로 경쟁하며 점점 더 큰 transformer 모델을 만드려고 노력했는데, 

초기에는 transformer-base 모델과 transformer-large 모델이라 불리는 것이 있었다. 이는 2017논문 "Attention is All you Need"에서 소개되었는데, 이 large모델은 2억 1300만 개의 학습 가능한 매개변수를 가졌으며 8개의 GPU에서 3.5일동안 학습되었다. 이는 상당한 양의 훈련, GPU 및 매개변수인 것 같지만 많은 연구 그룹에게 합리적인 범위였다고 한다. 

그 후에 미친 듯한 규모로 발전했다. 이어서 구글에서는 "BERT"라는 논문이 나왔는데, 이는 pre-training, fine-tuning의 개념을 도입했다. 이 모델은 최대 3억 4000만 개의 매개변수를 가지고 있었으며 13GB의 text data를 인터넷에서 다운로드하여 training되었다. text data는 작은 data라 13GB text는 상당한 양의 데이터라고 볼 수 있다. 

이후 구글과 페이스북에서 각각 "XLNet Large"와 "RoBERTa"라는 두 새로운 모델을 소개했다. 이들은 각각 100GB 이상의 데이터로 훈련되었으며, 상당한 기간동안 train되었다고 한다. 구글 모델은 512개의 TPU장치에서 2.5일 동안 훈련되었고, 페이스북 모델은 1024개의 GPU에서 1일동안 train되었다. 하루 동안 160GB의 text를 처리한 것이다. 

 

 

여기서 OpenAl가 한 발 더 나아가려고 했다. 40GB의 텍스트로 자체 데이터 셋을 생성하고 최대 15억개의 학습 가능한 매개변수를 가진 transformer 모델을 훈련했다. Transformer 모델을 사용하되 레이어를 늘리고 각 self-attention 레이어 내부의 쿼리 차원을 더 크게하여 더 많은 self-attention head를 사용한 것이 전부라고 한다. 이러한 모델들은 기본적으로 동일하지만 크기가 크면 클수록 더 나은 성능을 보이는 특징이 있다. 

최근 결과로 NVIDIA에서 Megatron이라는 이름의 Transformer 모델을 소개했는데, 이 모델은 80억 개 이상의 학습 가능한 매개변수를 가지고 있으며 512개의 GPU에서 9일 동안 train되었다고 한다. 이 모델을 train하는 데 드는 비용을 계산해 본 결과, Amazon Web Services에서 약 43만 달러 정도가 소요된 것으로 예상된다. 

 

이러한 여러 기관과 회사에서 서로 경쟁하며 더 크고 더 성능이 우수한 Transformer 모델을 만드려고 노력하고 있다. 

 

 

트랜스 포머에 위와 같은 작은 두 줄 정도를 Input으로 넣으면, 

 

위와 같이 아주 긴 글을 생성해준다고 한다. 

https://talktotransformer.com/ 요 링크에서 직접 해볼 수 있답니다.

 

오늘의 썸머리!  

 

  • RNN에다가 attention을 적용하면 각 time step에서 input의 다른 영역들을 볼 수 있도록 조정할 수 있다! 
  • Self-Attention을 일반화시켜 사용한다면 아주 강력한 네트워크가 될 것! 
  • 그러한 Self-Attention을 포함한 transformer block을 깊게 쌓아 transformer라는 새로운 네트워크를 만들 수 있다! 

 


매우 짧은 포스팅 역대급

하지만 덜 썻어 .. 

논문 하나하나 보아야 하는데 

그것은 서울가는 버스 안에서 해볼게 

프리미엄으로 예매한 이유

반성하겠습니다. 

설 연휴니까 살짝 봐주쇼 (내자신아)