바야흐로 대규모 언어모델의 시대이다. 이번에 리뷰할 논문은 2022년 4월에 구글에서 공개한 따끈따끈한 모델, PaLM(Pathways Language Model)이다.
GPT3가 공개된 이후, 많은 대규모 autoregressive 언어 모델들이 공개되었다. 가장 대표적인 post-GPT3 모델들은, GLaM (2021), Gopher (2021), Chinchilla ( 2022), Megatron–Turing NLG (2022), LaMDA (2022)인데, 이들은 다음 4개의 흐름을 가진다.
PaLM도 이 흐름에 편승한다. PaLM은 한 마디로 다음의 특징을 가지는 모델이다.
540B parameter, densely activated, autoregressive Transformer, 780 billion tokens, high-quality text
GPT3가 175B 파라미터였다는 것을 생각해보면, 구글이 얼마나 거대한 모델을 만든 것인지 비교 가능하다.
이 거대한 모델은 Pathways라고 명명한 새로운 ML system에 의해 학습 가능해졌는데, 이는 매우 큰 인공신경망을 두 대의 TPU v4 Pods(하나당 4096개 chip), 구체적으로는 6144 TPU v4 chips를 이용해 학습의 효율성을 올린다.
해당 논문의 주요 의의는 다음과 같다:
Efficient scaling
Continued improvements from scaling
Breakthrough capabilities
Discontinuous improvements
Multilingual understanding
Bias and toxicity
우리는 rough하게 다음의 세 가지를 이해하면 PaLM을 안다고 이야기할 수 있다.
이 모든 것들을 한 번에 이해하기는 조금 어려우므로, 이번 내용은 2번에 걸쳐서 진행하려고 한다. 오늘 이야기할 것은 모델 부분이다.
먼저, 학습된 모델들의 하이퍼 파라미터는 다음과 같다. 배치 사이즈를 학습을 진행시킴에 따라 점진적으로 증가시켰다.
이때, 이 모델은 standard dense Transformers이기 때문에, 토큰 당 FLOPs는 파라미터의 수와 같다.
학습 데이터로 social media conversations, webpages,books, Wikipedia, news, source code를 사용했다. 총 780 billion으로 구성되어 있으며, 모두 깔끔하게 클렌징되었다는 특징이 있다.
학습 데이터에서 특이한 점은 자연어 이외에 프로그래밍 코드를 학습시켰다는 것이다. 해당 코드들은 깃헙에서 긁어왔다.
PaLM은 gpt 시리즈와 동일하게 Transformer의 decoder의 변이이다. 변화된 부분은 다음과 같다:
논문에서는 가볍게 언급하고 넘어갔지만, 우리는 하나 하나 이것이 무엇인지 확인하고 넘어가보자. 하단의 세 가지는 안다고 생각해 넘어간다.
GLU Variants Improve Transformer
스탠다드한 트랜스포머의 FFN 레이어는 다음과 같이 생겼다:
즉, ReLU 함수를 activation으로 사용한다. T5에서는 여기서 bias 텀을 없애 사용한다.
그런데, 최근 ReLU가 아닌 더 좋은 activation function을 적용하여 트랜스포머의 성능을 높이기 위한 연구들이 진행되었다. 제안된 activation function들은 다음과 같다:
우리의 목표는 SwiGLU를 이해하는 것이므로, swish와 GLU에 대해 더 자세히 알아보자.
Swish 함수는 수식을 통해 확인할 수 있듯, 입력 x와 x에 시그모이드를 거친 값을 곱해준 형태이다. 이때 곱해지는 값 β는 학습 가능한 파라미터이다. 만약 β가 0이라면 Swish 함수는 identity function이 되고, β가 무한대라면 Swish 함수는 ReLU가 된다. 그래프를 통해 확인해보자.
Swish 함수는 unbounded above, bounded below 속성을 가진다는 점에서 ReLU의 장점을 그대로 가진다. 또한, 모든 점에서 미분 가능하며 ReLU와 다르게 단조 증가 함수가 아니라는 점에서 추가적인 장점을 가진다.
Gated Linear Units (GLU)는 입력에 대한 두개의 선형 변환의 결과를 component-wise product한 신경망 레이어인데, 이 중 하나는 시그모이드를 거친다.
여기서, 와 는 학습 가능한 가중치들이다.
GLU는 activation function을 거치는 단순 linear model 에 를 component별로 곱해준 형태이다. 즉, 후자는 filter로의 기능을 수행한다. 즉, filter내의 값이 어떻게 구성되었는지에 따라 어떤 엔트리들은 더욱 영향력이 강해지고, 어떤 것들은 미미해진다.
따라서, 우리가 최종적으로 알고자 하는 SwiGLU는 다음의 형태를 가진 비선형적 신경망이다.
저자들은 activations이 기존의 ReLU, GeLU, Swish activations보다 훨씬 성능이 좋다는 것을 강조한다.
SwiGLU 논문에서 비교한 FFN 레이어의 변형이다. 이때, original FFN에서는 두 개의 가중치 행렬을 사용하지만, 나머지에는 세 개의 행렬을 사용한다는 점이 특징이다. 학습해야하는 행렬의 수를 늘려도 computation은 일정하게 가져가기 위해, hidden units의 개수는 2/3으로 줄인다.
다음은 computation과 performance 측면을 평가해본 결과이다.
Computation
Performance
즉, SwiGLU를 사용한 MLP는 성능도 좋은데 속도까지 빠르다. 이 때문에 PaLM의 저자들은 SwiGLU를 이용해 비선형성을 추가한다.
GPT-J-6B: A 6 Billion Parameter Autoregressive Language Model
PaLM은 기존의 “serialized” formulation을 사용하지 않고, 각 트랜스포머 블락에 “parallel” formulation을 적용한다.
serialized formulation
parallel formulation
즉, 어텐션 블락을 거친 후 MLP를 거치는 방식이 아니라, MLP와 어텐션을 병렬적으로 처리하겠다는 것이다.
이러한 방식은 오로지 모델 병렬화를 통한 학습의 효율 증가를 목적으로 한다. 모델을 병렬화하기 때문에 forward/backward시 all-reduce가 필요하다. all-reducee란 심플하게 해당 블록의 결과물을 모든 프로세서가 Return하는 것을 의미한다.
Megatron-LM의 model parallelism을 확인해보면 대략적인 감이 잡힌다.
즉, 각자 forward/backward 시키고 결과물을 다른 프로세서들과 공유하여 모든 프로세서로 하여금 결과물을 반환시킨다고 생각하면 된다.
이 방식으로, 대략 15%의 throughput 향상이 이루어진다고 한다!
Fast Transformer Decoding: One Write-Head is All You Need
해당 논문의 저자들은 Transformer inference의 속도가 "keys"와 "values" 텐서들을 reload하는데 필요한 memory bandwidth, 즉 거대한 텐서를 전달하기 위한 메모리 전달 속도 때문에 제한된다고 주장한다. 이 때문에, 헤드별로 공유된 key와 value를 제안한다.
Multi-query attention은 각 어텐션 레드들이 단일 key, value 값을 가진다는 것 외에는 기본적인 Multi-head attention과 동일하다.
head 개수를 크기를 라고 했을 때, Multi-head attention의 key, value, query는 모두 의 크기를 가진다. 하지만 Multi-query attention에서는 key, value를 공유하기 때문에, key, value=, query=의 크기를 가지게 된다.
이러한 방식은 학습 속도와 모델 퀄리티에는 영향이 없었지만, autoregressive decoding을 할 때 굉장한 속도 개선이 있었다. 표를 확인해보자.
속도가 개선된 이유는, multi-headed attention에서는 key/value 텐서가 예제 간에 공유되지 않고 한 번에 하나의 토큰만 디코딩되어, auto-regressive decoding시 accelerator의 사용 효율성이 떨어지기 때문이다.
RoFormer: Enhanced Transformer with Rotary Position Embedding
RoPE embeddings (2021)은 absolute/relative position embeddings에 비해 긴 시퀀스에 대해 강건하다고 알려져있다. RoPE embeddings의 목표는 다음의 수식을 해결하는 것이다.
즉, 단어 과 둘의 relative position()이 input으로 들어가는 함수 와 동일해지는 함수 를 찾아보자는 것이 해당 임베딩의 목표이다.
저자들은 다음의 식들을 제안한다.
최종적인 공식은 다음과 같다:
즉, 해당 단어와 key 혹은 query와 R matrix의 선형결합으로 이루어진다. 이때, R은 다음과 같이 생겼다.
즉, 은 아핀 변환(Wx+b)된 워드 임베딩 벡터를 그것의 위치 인덱스의 배수 각도의 양만큼 회전한 것이다.
RoPE를 self-attention에 적용하면 다음과 같이 작성할 수 있다:
이때, 이 되게 되는데, 이 직교 행렬이기 때문에 위치 정보를 인코딩하는데의 안정성을 보장할 수 있다.
(2)편에서는 초대규모 언어모델의 효율적인 학습을 가능하게 한 Pathways와 그를 이해하기 위해 필요한 선행 지식들에 대해 공부할 것이다. 또한, 모델을 실험하기 위해 사용된 새로운 벤치마크 및 방법들과, few-shot의 성능을 크게 올린 chain-of-thought prompting 등에 대해 공부할 것이다.
component-wise product가 뭔가요? tensor product 나 outer product를 의미하는건가요??