ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개발자가 이해하는 Large Language Model
    소프트웨어 엔지니어링 2023. 10. 23. 07:21

    LLM(Large Language Model) 이란?

    Free Stock photos by Vecteezy (https://www.vecteezy.com/free-photos)

    주의!

    나는 인공지능 전문가가 아니다. 그냥 여기저기서 주워듣고 배운 것을 정리해서 쓰는 것일 뿐이다.

     

    세상이 LLM으로 핫하다. LLM을 기반으로 한 스타트업도 우후죽순으로 생겨나고 있다. 우리 같은 보통 사람들에게는 생소한 단어일 수도 있다. LLM. Large Language Model. 우리에게는 ChatGPT 또는 Generative AI와 같은 단어가 더 익숙하다. 맥킨지에서는 매일 Generative AI에 대한 뉴스레터를 보낸다. 책도 많이 나온다, AI 어쩌고, 챗GPT 저쩌고, 앞으로 글 쓰는 직업은 없어질 것이다, 그림을 그리는 직업도 사라질 것이다, 이러쿵저러쿵 말이 많다. Large Language Model, 그래서 뭘까? LLM은 이름 그대로, 커다란 사이즈의 언어를 처리할 수 있는 자연어 처리 모델이다. 

     

    그런데… 자연어 처리, 우리에게 이미 익숙한 것이다. Hey Siri? Hey Google? 말이다. 그러면 LLM, 대체 그들과 뭐가 다를까? 그냥… 또 다른 인공지능 아닌가? 조금 더 빠른 트레이닝, 그런건가? 이게 궁금해서, 어느 날 나는 ChatGPT에게 물어봤다.

     

    “Large Language Model이 뭔지 설명해줘.”

    Large Language Model은 대량의 텍스트 데이터를 학습하여 인간과 유사한 언어 이해와 생성 능력을 갖춘 인공지능 모델을 말합니다. 이 모델들은 수억 개에서 수조 개의 텍스트 문장을 학습하여 문장의 패턴, 어휘, 문맥 등을 이해하고 이를 활용하여 질문에 답하거나 문장을 생성할 수 있습니다.
    이러한 모델은 주로 딥러닝 기술 중 하나인 순환 신경망 (Recurrent Neural Networks, RNNs) 또는 트랜스포머 (Transformer) 아키텍처를 기반으로 합니다. 트랜스포머 아키텍처는 특히 언어 모델링에 뛰어난 성능을 보이며 최근 대부분의 대형 언어 모델은 이 아키텍처를 기반으로 합니다.
    이러한 Large Language Model은 자연어 이해, 기계 번역, 질의응답 시스템, 문서 요약, 텍스트 생성, 대화형 시스템 등 다양한 응용 분야에서 사용됩니다. 그중에서도 GPT (Generative Pre-trained Transformer) 시리즈와 BERT (Bidirectional Encoder Representations from Transformers) 모델은 널리 알려져 있습니다. 이러한 모델들은 많은 양의 텍스트 데이터를 학습하여 일반적인 자연어 처리 과제에서 높은 성능을 보이며, 지속적으로 연구와 발전이 이루어지고 있습니다.

     

    ChatGPT는 이렇게 답했다. 그런데 나처럼 평범한 개발자가 이해하기에는 모르는 단어가 너무 많았다. 딥러닝? 순환 신경망? 트랜스포머? 모델?🙂 내가 자주 헷갈리는 용어들이 많았다. 머신러닝을 얕고 넓게 공부한 게 N 년 전이라, 기억나는 것도 없었다. 모델은 무엇인가? 머신러닝 알고리즘은 무엇인가? 딥러닝은 무엇인가? 기초부터 차근차근, 다시 읽어보기로 했다. 

    모델(Model)

    일단, LLM이 인공지능 모델이라는 것은 ChatGPT의 대답으로 유추할 수 있다. 그런데, 모델이라는 게 정확히 뭘까? 인공지능에서 모델이란 공식(Formula)을 뜻한다. 예를 들어, y=ax+b라는 것이 모델이 될 수 있다.

    내가 이해하는 머신 러닝이란 많은 양의 데이터에서 귀납적으로 공식을 추출해 내는 것이다. 예를 들어

     

    변수 데이터1 데이터2 데이터3 데이터4
    x 1 2 3 4
    y 3 5 7 9

     

    이런 데이터가 있다면 우리는 a=2 b=1 이란걸 쉽게 유추할 수 있다. 또는! 고등수학이나 선형대수에서는

    3 = a+b

    5 = 2a + b

    처럼 연립방정식을 만들어, 소거법 (또는 가우스-조르단 소거법)을 사용해 해결한다. 이렇게, ‘법’이라고 부르는 것, a와 b를 구하기 위해 하는 행위, 그 행위를 ‘머신 러닝 알고리즘’이라고 한다(한다-기 보다는 나는 이렇게 이해하고 있다).

     

    정리를 하면 이렇다.

    • 머신 러닝 알고리즘은 데이터를 이용해 연역적으로 a와 b를 찾아낸다.
    • 모델은 y=2x + 1과 같은 머신 러닝 알고리즘의 결과물이다.

    일반적으로 머신러닝에서는 이런 a와 b를 모델 파라미터 또는 가중치(weight)라고 부른다.

    위의 y=ax+b 또는 조금 일반적으로 말해 위처럼 일차항의 다항식으로 된 형태의 모델을 선형 모델이라고 한다. 마찬가지로 ax^2…처럼 이차항이 나오기 시작하면 Polymonial 모델이 된다. 선형모델을 쓸 수 있는 경우가 뭐가 있을까? 예를 들면, 어떤 사람의 연봉과 빚을 인풋으로, 신용카드의 승인여부를 결정하는 경우가 있을 수 있다. y = a*(연봉) + b*(빚) 이렇게 말이다.

     

    이런 모델을 만들어 주는, 즉 데이터를 인풋으로 받아서 모델의 가중치, 또는 파라미터를 결정해 주는 알고리즘에는 여러 가지가 있다. 예; Linear Regression, Logistic Regression등, 인공지능에 관심이 있었다면 한 번쯤 들어봤을 수도 있다. 이런 알고리즘 중 하나가 바로 딥러닝이다.

    딥러닝(Deep Learning)

    그렇다면 딥러닝이 Linear Regression이나 Logistic Regression와 같은 모델들과 다른 점은 무엇일까? 딥러닝은 인공신경망(Artificial Neural Network)을 이용해 모델을 만든 것이다. 다시 말해 인간의 신경을 본떠 만든 프로그램인 것이다.

    인간의 신경은 뉴런과 시냅스로 연결되어 있다. 그리고 이렇게 연결된 뉴런과 시냅스들이 신경망(Neural Network)을 이룬다.

    이렇게 연결된 신경망의 뉴런으로 들어온 자극은 전기신호(활동 전위)가 되어 시냅스를 통해 다른 뉴런으로 전달된다.

    인간의 뇌는 어떤 행동을 반복할수록, 그 부분을 관장하는 뉴런 사이의 결속이 강해진다고 한다. 그리고 이런 결속이 반복되어 강해지면 기억이 된다. 나는 이, ‘기억’이라는 것, 또는 반복되어 강해진 결속을 인공신경망의 가중치로 이해하고 있다. 인공 신경망도 이런 인간의 신경망과 비슷하게 작동한다.

    (image by @ShadeDesign)

     

     

     

     

     

     

    딥러닝이라고 부르는 인공신경망은 Artificial Neural Netowork 그림(image by @ShadeDesign)처럼 생겼다. 그리고 각 노드가 하나의 작은 모델 또는 함수가 된다. 그리고 이 작은 모델들이 네트워크를 만들고, 노드의 개수를 줄여가다, 마지막 아웃풋 레이어에서 결과 값이 나온다. 동그란 부분은 신경세포의 핵(Cell Nucleus) 부분과 화살표는 Axon/Synapse와 닮아있다. 선형모델이나 다른 모델과 비교했을 때, 작은 모델의 집합으로 구성되어있으니 리소스가 많이 필요하겠네, 라는 생각이 먼저 든다.

    딥러닝에서 ‘러닝’이란 이 각각의 노드의 함수의 파라미터 또는 가중치들을 찾는 것을 의미한다. 그리고 Large Language Model이란 방대한 양의 언어 데이터를 처리할 수 있는 인공신경망과 이런 방대한 양의 데이터를 효율적으로 처리해 가중치를 찾아낼 수 있는 알고리즘(예; 트랜스포머 아키텍처)의 결과물이다. LLM의 예로 PaLM, BERT, XLNet, GPT 등이 있다.

     

     

     

     

    트랜스포머 아키텍처(Transformer Architecture)

    그렇다면 최근 LLM에 사용된다는 트랜스포머 아키텍처 무엇인가? 일단 ChatGPT에게 트랜스포머 아키텍처에 대해 물어봤다.

     

    "트랜스포머 아키텍쳐에 대해 설명해 줘."

    트랜스포머 (Transformer)는 딥 러닝 모델 중 하나로, 자연어 처리 작업에 사용되는 아키텍처입니다. 이 아키텍처는 2017년에 발표된 논문 "Attention Is All You Need"에서 처음 제안되었습니다. 기존의 순환 신경망(RNN)이나 장단기 메모리(LSTM)와 달리, 트랜스포머는 어텐션 메커니즘(Attention Mechanism)을 기반으로 하고 있어 긴 시퀀스를 처리하는데 뛰어난 성능을 보입니다.

    트랜스포머 아키텍처의 핵심 아이디어는 **셀프 어텐션 메커니즘(self-attention mechanism)**입니다. 이 메커니즘을 사용하면 입력 시퀀스의 각 단어가 서로 다른 가중치를 가지게 되어, 문맥을 더 잘 파악할 수 있습니다. 아래는 트랜스포머 아키텍처의 주요 구성 요소에 대한 설명입니다:

    1. 어텐션 메커니즘 (Attention Mechanism): 트랜스포머의 핵심입니다. 어텐션은 입력 시퀀스의 각 위치에 대한 가중치를 계산하여 중요한 정보에 집중할 수 있게 해줍니다. 즉, 입력 시퀀스의 모든 단어가 서로 다른 정도로 각 단어에 영향을 주게 됩니다.
    2. 멀티헤드 어텐션 (Multi-Head Attention): 여러 개의 어텐션 헤드를 사용하여 병렬로 어텐션 연산을 수행하고, 그 결과를 합침으로써 모델이 여러 종류의 정보에 동시에 집중할 수 있게 합니다. 이는 모델이 여러 종류의 문맥을 파악할 수 있게 해줍니다.
    3. 포지션 인코딩 (Positional Encoding): 트랜스포머는 단어의 위치 정보를 고려하지 않기 때문에 단어의 상대적인 위치 정보를 모델에 제공하기 위해 포지션 인코딩을 사용합니다. 이를 통해 모델은 단어의 순서를 학습할 수 있습니다.
    4. 피드포워드 신경망 (Feed-Forward Neural Network): 트랜스포머 블록 내에는 각 위치마다 독립적으로 적용되는 피드포워드 신경망이 있습니다. 이 신경망은 각 위치마다 동일하게 적용되며, 입력을 출력으로 변환하는 데 사용됩니다.

    트랜스포머의 이러한 구조는 긴 시퀀스를 처리하고, 병렬 계산을 효율적으로 수행하여 학습 속도를 향상시키며, 자연어 처리 작업에서 높은 성능을 보이게 합니다. 이 아키텍처는 기계 번역, 텍스트 생성, 질의 응답, 문서 분류 등 다양한 자연어 처리 작업에서 사용됩니다.

     

    이해가 안 돼 다시 물어봤다.

    "무슨 소리인지 전혀 모르겠어. 쉽게 설명해 줘."

    물론입니다! 트랜스포머는 자연어 처리를 위한 특별한 유형의 컴퓨터 프로그램이라고 생각하시면 됩니다. 이 프로그램은 문장을 이해하고 새로운 문장을 만들 수 있는 능력을 가지고 있어요.
    트랜스포머가 이를 가능하게 하는 핵심 아이디어는 단어 사이의 관계를 이해하는 것입니다. 예를 들어, "고양이는 신발을 신고 걷지 않는다"와 "신발을 신은 고양이가 걷지 않는다"는 비슷한 뜻을 가진 두 문장이 있을 때, 트랜스포머는 단어 사이의 중요한 연결을 찾아내어 제대로 된 이해를 할 수 있습니다.
    이를 가능하게 하는 주요 기술 중 하나는 **어텐션(Attention)**입니다. 이것은 어떤 단어가 다른 단어에게 얼마나 더 중요한지를 알려주는 메커니즘이에요. 예를 들어, "나는 학교에 갔다"라는 문장에서 "학교"라는 단어가 중요하다면, 트랜스포머는 이를 어텐션을 통해 파악합니다.
    또한, 트랜스포머는 문장 속 단어의 순서도 이해할 수 있어요. 예를 들어, "나는 밥을 먹었다"와 "밥을 나는 먹었다"는 뜻이 다르지요. 트랜스포머는 단어의 순서를 알기 위한 정보도 학습하게 됩니다.
    이런 방식으로, 트랜스포머는 복잡한 언어 구조를 이해하고 새로운 문장을 생성할 수 있게 됩니다. 이러한 능력은 번역, 질문에 답하기, 글을 쓰기 등 다양한 자연어 처리 작업에서 사용됩니다. 기본적으로, 트랜스포머는 컴퓨터가 언어를 이해하고 사용할 수 있도록 도와주는 특별한 프로그램이라고 생각하시면 됩니다.

     

    전자는 너무 어려웠고, 후자는 너무 쉬웠다. 특히 어텐션 메커니즘이나 멀티헤드 어텐션이 잘 이해되지 않았다. 게다가 과거의 모델들을 설명해 주지 않으니 더 이해가 안 됐다. 결국 나는 여러 가지 다른 페이퍼들을 읽고, 아래와 같이 이해했다.

     

    트랜스포머 아키텍처는 Sequence to Sequence(Seq2Seq) 아키텍쳐 중 하나이다. Seq2Seq 아키텍쳐는 한 시퀀스, 예를 들면 문장, 을 다른 시퀀스로 변환해 주는 아키텍처이다. 대표적인 예로 한글 → 영문 번역 따위가 있다.

    다른 모델과 비교 해보면 이 모델이 더 복잡할 수밖에 없다는 걸 알 수 있다. 아까 본 신용카드 모델은 파라미터가 두 개 밖에 없었다. 근데 Seq2Seq에서는 인풋의 길이가 얼마나 길지 모른다. ‘안녕하세요, 반갑습니다.’ 같은 짧은 문장일 수도 있고, 논문이나 기사 같은 장문의 글이 될 수도 있다.

    이렇게, 시퀀스 베이스의 머신러닝이 어려운 이유는, 각 단어뿐만 아니라, 단어가 배열된 위치나 순서가 중요하기 때문이다. 각 단어 하나하나를 인풋이라고 가정했을 때, 이제 인풋뿐만 아니라 인풋의 배열까지 ‘학습’ 해야 하는 것이다. 따라서 적절한 가중치를 찾아내기 위해 알고리즘은 이전의 인풋들을 기억해야 하고, 그러므로 학습에 필요한 데이터와 그 데이터를 저장하고 처리하기 위한 리소스가 더 많이 필요하다. 이를 위해 보통 인풋의 시퀀스들을 전부 인코딩하는 방식으로 단기 기억이나 장기 기억을 지원하는 모델들(Recurrent/Convolutional Neural Network;시리나 알렉사도 이 모델 기반이라고 한다)을 사용했다고 한다. 그러나 이 모델은 중간에 기억을 잃거나[1] 트레이닝을 하는데 시간이 오래걸린다[2]고 한다.

     

    트랜스포머 아키텍처의 핵심은 셀프-어텐션 메커니즘과 멀티헤드 어텐션인데, 이는 이전 모델처럼 시퀀스의 인풋 전부를 고려하기보다는 중요한 정보에 집중하는 것이라고 한다. 그래서 중간에 기억을 잃지 않는다. 또, 트랜스포머 아키텍처는 구조적으로 병렬 처리가 가능하여 자연어 처리에서 높은 성능을 보인다고 한다. 어떻게 중요한 정보인지 알아낼까? 아쉽게도 거기까지는 이해하지 못했다. 

     

    [1] Vanishing Gradient라고 Back Propagation을 하면 할수록 앞쪽으로 전파되는 값이 작아지다 결국 사라진다고 한다.

    [2] LSTM 이 그렇다고 한다. 병렬처리가 되지 않는 점이 성능에 큰 영향을 미치는 것 같다.  

     

    마치며

    내게 딥러닝은 고도의 기술이라 완전히 이해하는 것이 쉽지 않고, AI전문가가 아니기에 그럴 동기와 배경지식(!!)도 부족하다. 그러나 요새 트렌드가 트렌드인지라 LLM과 Generative AI에 대해서는 수박 겉핥기 식이라도 이해해 보고 싶었다. 예상했던 대로, 쉽지 않았다. 선형모델부터 다시 읽고, 딥러닝까지 오느라 고생을 했고, 어쩐지 LLM보다는 딥러닝만 열심히 복습한 느낌이지만 🥲, 어쨌든 기초가 중요하고! 누가 물어보면 겉핥기로는 대답할 수 있게 되었으니 목표 달성이다!

     


     

    참고자료

    What’s the Difference Between Self-Attention and Attention in Transformer Architecture?

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

    https://medium.com/@eraiitk/brain-and-artificial-neural-networks-differences-and-similarities-1d337fe50168

    https://medium.com/inside-machine-learning/what-is-a-transformer-d07dd1fbec04

    https://colah.github.io/posts/2015-08-Understanding-LSTMs/

    Attention is all you need - https://arxiv.org/abs/1706.03762

    https://www.ibm.com/topics/deep-learning

    https://www.techopedia.com/definition/34948/large-language-model-llm

    https://www.techopedia.com/definition/34474/self-supervised-learning-ssl

    https://towardsdatascience.com/the-fall-of-rnn-lstm-2d1594c74ce0

    https://dennybritz.com/posts/wildml/recurrent-neural-networks-tutorial-part-3/

    https://www.knowledgehut.com/blog/web-development/long-short-term-memory

    https://medium.com/@amanatulla1606/vanishing-gradient-problem-in-deep-learning-understanding-intuition-and-solutions-da90ef4ecb54

    Deep Learning - John D. Kelleher

     

     

    댓글

f.software engineer @ All Right Reserved