자연어처리

생성형 AI 언어 모델(LLM: Large Language Model) 입문

coding art 2023. 3. 5. 16:57
728x90

출처: A tutorial on LLM: https://ejleep1.tistory.com/1566 

 

인간의 사고는 비선형적 과정으로 볼 수 있이지만, 우리의 의사소통 도구인 입은 선형적으로 즉 순차적으로만 말할 수 있기에, 언어는 단어의 선형적 시퀀스로 표현됩니다. 따라서 마코프 과정(Markov Process)으로 언어를 모델링하는 것은 합리적인 시작점이 될 수 있을 것이지만, 그렇다고 그런 방법이 인간의 사고 과정(또는 AGI)을 완벽하게 포착할 수 있다고 믿기는 어렵습니다. 반면에 사고와 언어는 상호 연관되어 있습니다.

 

최근에 출현한 언어모델 LLM(Large Language Model)들을 살펴보면 특히 충분히 강력한 언어 모델로 보이는 GPT4 의 경우 어떤 종류의 사고 능력을 보여 주기도 합니다. 즉 인간의 지능적 사고를 유사하게 처리할 수도 있는  LLM 을 대상으로 이루어진 과학적 혁신들에 관해 살펴 보도록 보겠습니다.

 

트랜스포머(Transformer) 알고리듬

언어의 마코프 과정에 따른 조건부 확률 분포에 해당하는

를 모델링은 여러가지 방법이 가능합니다.

아래의 그림은 "나는 고양이 입니다" 라는 인코더에서의 한국어 문장을 디코더에서 영어로 번역하는 Markov 과정 사례이다.

영문 "I am a cat" 의 각 단어는 "am a  cat ..." 과 같이 바로 다음에 높은 확률로 출현하게 될 단어를 대상으로 학습이 이루어지게 된다. 즉 예를 들어서 "am"은 "ㅑ" 에 이어서 아주 높은 확률로 출현하게 될 단어이다. 마찬가지 방법으로 "cat"은 "I", "am", 그리고 "a" 다음으로 출현하게 될 단어임을 의미한다.

이 구조는 디코더에서 전형적으로 사용됨에 유의하자.

최근의 LLM 에서는 Transformer 신경망 아키텍처에 기반한 알고리듬이 이 조건부 확률 분포를 추정할 수 있도록 주도적으로 사용되고 있습니다. Transformer 알고리듬은 2017년 구글의 개발자들에 의해 Nature지에  "Attention is all you need." 라는 제명의 논문으로  발표되었습니다.  그 이전에도, 특히 예를 들자면 단순한 RNN 부터 시작하여, LSTM, GRU 와 같은 다양한 종류의 순환 신경망(RNN)  들이  이미 어텐션 (attention) 메카니즘과 함께 오랫동안 언어 모델링에 사용되어 왔습니다. 이 어텐션 메카니즘은 2014년  Bahdanau 중심으로 Dzmitry; Cho, Kyunghyun; Bengio, Yoshua 와 공동으로 2016년에 번역 성능을 높이기 위한 연구 결과로 출현하였다. 한국계 교수로 보이는 Cho, Kyunghyun 교수는 이미 효율적인 음성인식을 지원하기 위한 GRU 알고리듬 구축에 Bengio, Yoshua 교수와 함께 크게 기여하였다. 물론  이 GRU 는 구글 번역 초창기에 컴퓨팅 부담을 줄이기 위한 효율적 수단으로서 LSTM 을 대체하여 적용되었습니다. GRU 는 구조상 LSTM 에서 기억셀을 포함하는 일부를 뜯어내어 간신히 작동할 정도의 요소만 남겨둠으로서 컴퓨팅 부담을 크게 경감시킬 수 있습니다.

 

언어 모델에서는 언어 학습을 위한 말뭉치를 사용하여 잘 정리된 단어장에 해당하는 Corpus 를 구성 후 어떤 문장이 주어지면 Corpus  정보를 사용하여 문법적으로 인덱싱된 문자열 생성과 아울러 Tokenizer를 사용하여 토큰(token)화 시킵니다. 토큰화는 해당 언어의 원형(root form)에 관한  문법적 고려가 이루어져야 합니다. 예로서 진행형 단어인  "running"의 root form 은 "run"으로 처리한다는 것입니다.

 

RNN 에서는 이 토큰들 을 순차적으로 처리하여 현재 토큰 이전에 본 데이터의 표현을 포함하는 상태 벡터를 유지합니다. 즉 n 번째 토큰을 처리하기 위해서 언어 모델은 상태 n-1 번째 토큰까지의 문장과 n 번째 새 토큰의 정보를 결합하여 새 토큰까지의 문장을 나타내는 새 상태를 만듭니다. 이론적으로 하나의 토큰 정보는 각 지점에서 토큰에 대한 맥락 정보를 계속 인코딩하는 상태의 경우 시퀀스를 따라 임의로 멀리까지 전파될 수 있습니다. 하지만 기울기 감소(vanishing gradient) 문제로 인하여 긴 문장의 끝에 위치한 모델의 상태가 이전 토큰들에 대한 정확하면서 추출 가능한 정보를 가질 수 있도록 하지 못합니다. 아울러 토큰 계산이 이전 토큰 계산 결과에 종속되어 있기 때문에 GPU 하드웨어를 사용한 병렬화 연산이 불가능합니다. 

 

이러한 문제는 Transformer 알고리듬의 셀프 어텐션 메커니즘을 사용하여 해결이 가능합니다. Transformer 에서는 sequence 의 각 토큰 요소별로 독립적으로 연산하되 RNN에서 처럼 전 후 sequence 토큰 요소들간의 종속 관계가 없기때문에 병렬 연산화가 가능해집니다. 하지만 종속적인 관계가 없어 토큰들의 위치 파악이 불가능하므로 임베딩 데이터에 위치 정보를 주입해 둘 필요가 있습니다.

 

Transformer는 반복을 피하고(?) 대신 입력과 출력 간의 전역 종속성을 도출하기 위해 어텐션 메커니즘에 전적으로 의존하는 모델 아키텍처입니다. 어텐션 계층은 모든 이전 상태에 액세스하여 학습된 관련성 측정에 따라 가중치를 부여하여 멀리 떨어진 토큰에 대한 관련 정보를 제공할 수 있습니다. 중요한 점은 Transformer가 RNN 없이 어텐션 메커니즘을 사용하여 모든 토큰을 동시에 처리하고 연속적인 계층에서 토큰 간의 어텐션 가중치를 계산한다는 것입니다. 어텐션 메커니즘은 하위 계층의 다른 토큰에 대한 정보만 사용하므로 모든 토큰에 대해 병렬로 계산할 수 있어 학습 속도의 향상이 가능합니다.

 

※ 참고로 GPU  사용에 의한 병렬화는 비단 생성형 AI 뿐만 아니라 암호화폐 블록체인 코딩 분야에서도 거래속도(transaction speed) 향상 문제와 관련하여 깊은 관심을 끌고 있습니다. 예를 들자면 암호화폐 구좌에서 어떤 액수 만큼 입금이나 출금을 하면 워낮ㅇ 기록과 함께 항상 그 잔액을 계산하게 됩니다.  그 내용은 결국 RNN 에서 처럼 거래가 일어나는 순서에 의해 좌우되게 됩니다. 이더리움의 경우 블록체인 데이터 생성 구조가 거래 데이터의 발생 시퀜스(sequence)  구조를 대상으로 하고 있기 때문입니다. 보다 빠르게 거래속도를 증가시키기 위해서는 여러거래 데이터를 대상으로 각각 time stamp 를 부여한 후 GPU 에 의해서 병렬 고속처리하고 난 후 time stamp 데이터를 사용 확인하여 순서를 맞춰 블록체인 데이터를 생성하는 알고리듬이 Solana 나 Sui 에 의해 도입되어 사용되고 있습니다.

 

아래는 Transformer  알고리듬의 구조입니다. 여기서 Nx 는 논문에서 6 으로 지정되어 있지만 약간의 변동이 가능합니다.이러한 구조는 ResNet 에서 CNN 구조가 여러번 되풀이 될수록 인식률이 좋아지는 사례를 참조할 필요가 있습니다.  인코더에서 입력 데이터 임베딩 후 위치 정보가 주입된 후 셀프 셀프어텐션(multi-head attention)을 계산할 필요가 있습니다.

                              

Positional Encoding

입략 임베딩 다음 단계는 임베딩에 위치 정보를 주입하는 것입니다. Trnasformer 인코더에는 순환 신경망처럼 펼치는 반복이 없어 전 후 관계를 인식하지 못하므로 인위적으로 위치 정보를 입력 임베딩에 추가해야 합니다. 다음의 참고 사이트에서 사인과 코사인 함수를 사용하는 기발한 트릭을 살펴보도록 합니다.

 

A Gentle Introduction to Positional Encoding in Transfomer Models, Part 1 : 기법 설명

https://machinelearningmastery.com/a-gentle-introduction-to-positional-encoding-in-transformer-models-part-1/

 

Master Positional Encoding

https://towardsdatascience.com/master-positional-encoding-part-i-63c05d90a0c3

 

위치정보가 추가된 입력 임베딩 데이터 즉 밀집벡터로부터 멀티헤드 어텐션을 계산하기 위해서 밀집벡터의 차원을 dimension= 4로 두겠습니다. 이 값은 3~4 정도면 적절합니다.

 

 

Under construction

 

Illustrated Guide to Transformers- Step by ...

https://towardsdatascience.com/illustrated-guide-to-transformers-step-by-step-explanation-f74876522bc0

 

 

The Transformer Architecture

https://machinelearningmastery.com/the-transformer-model/

 

The illustrated Transformer

https://towardsdatascience.com/transformers-141e32e69591

 

 

Understanding Positional Encoding

https://towardsdatascience.com/understanding-positional-encoding-in-transformers-dc6bafc021ab

 

https://builtin.com/artificial-intelligence/transformer-neural-network