현재 직장 생활을 하며, 한 가지 분야의 AI만 지속적으로 개발하고 공부하고 있다.
주로 비전과 관련된 모델 개발을 하는게 업무인지라, 비전 쪽만 계속 하다보니, 가끔 언어 모델이나 다른 분야들을 시도해보려고 할 때 이전에 공부했던 내용이 기억이 안나는 경우가 많다.
이럴때 가볍게 리마인드할만한 자료나 책을 한 권 구비해둬야지... 하던 찰나, 마침 즐겨보던 유튜버 혁펜하임님의 책을 얻을 기회가 생겼다.

근 1년간 회사에서 OCR 모델을 개발하고 서비스하는 일을 하고 있다.
OCR은 이미지에서 Text를 추출하는 일로, Vision에 대한 이해와 Language에 대한 이해가 모두 필요한 모델을 개발해야하는 것이 challenge이다.
지금껏 주로 Vision을 공부해왔고, 졸업 작품이나 다른 각종 프로젝트들도 Vision 위주로 해왔기 때문에 언어 모델에 대한 이해가 필요했는데, 급하게 논문을 읽으며 개발을 해오다 보니 머릿속으로는 알고 있지만 누군가에게 말로 정리해서 설명하기 어려운 정도의 지식만을 가지게 되었다.
그 유명한 트랜스포머가 무엇이며, 왜 Self-Attention을 하는지, 왜 최근의 언어모델의 대다수가 Transformer를 채택하고 있는지를 개념을 잡기 좋은 챕터가 "8) 왜 RNN 보다 트랜스포머가 좋다는 걸까?" 였다. 읽어보니, 적어도 딥러닝에 대해 잘 모르는 사람에게 트랜스포머가 무엇인지 설명할 수 있을 것 같다.
그래서 이번 리뷰는, 정말 딥러닝에 대해 잘 모르는 사람에게 트랜스포머를 설명한다고 생각하고 리뷰해보려고 한다.

먼저, chatGPT, Gemini, perplexity, Deepseek 등 LLM 춘추전국시대인 현 시점에서 LLM이 뭔지 한 번도 안 들어본 사람은 없을 것이라고 생각된다.
Large Language Model. 즉 언어를 이해할 수 있는 큰 사이즈의 모델이다. 요즘 개발자가 아닌 일반 사람들에게 AI하면 가장 대표적으로 떠오르는 개념일 것이다.
물론 모델별 서비스별 차이는 있지만, 현존하는 대다수의 LLM 모델들은 transformer를 기반으로 구현되어 있다. 오죽하면 트랜스포머 모델들을 모아놓고 편하게 학습/추론할 수 있도록 만든 transformers라는 라이브러리도 존재할 정도다.
트랜스포머의 동작 원리를 한 문장으로 설명하자면,
Self-Attention을 통해 입력 시퀀스 내 모든 위치가 자기 자신의 모든 요소와 상호 작용하여 중요한 정보를 파악하고 처리하는 신경망
정도로 표현할 수 있을 것 같은데, 당연히 지금 당장은 이해가 힘들 것이고, 책의 챕터 내 내용을 천천히 따라오면 어느 정도 이해할 수 있을 것이라 생각된다.
트랜스포머 이전에 시퀀스 데이터를 다룰때 주로 쓰이던 구조는, RNN(Recurrent Neural Network)이다. RNN은, 이전 시점의 상태와 현재 입력을 결합해 출력을 생성해내가는 것을 반복하는 구조이다.
아래는 책에 제시된 예시인데,
'Hello'라는 단어를 예측해야할 경우,
1. 'H'라는 글자를 입력.
2. 잘 학습된 RNN이라면 'e'를 출력.
3. 출력된 'e'를 다음 입력으로 사용.
4. 'e'와 이전 시점의 정보 'H'를 바탕으로 'l'을 예측.
5. 예측된 'l'을 다시 입력으로 사용하여 다음 'l'을 예측.
6. 마지막으로, 'l'을 입력으로 사용하여 'o'를 예측.
이와 같이 '출력을 다시 입력으로'를 반복해가는 구조라고 할 수 있다.
다만, 현재 안 쓰이는데는 이유가 있는데, 다음과 같은 큰 문제가 있기 때문이다.

단어가 길어지면 길어질수록, 점점 멀리있는 글자들에 대한 정보는 옅어지고, 결국 소실된다.(Gradient Vanishing)
이에 따른 대안으로 RNN의 발전된 형태인 LSTM(Long Short Term Memory)를 사용하여 구성한 Seq2Seq라는 구조도 존재한다. 인코더와 디코더 두 부분으로 구성되어 있는데, 각각은 서로 다른 RNN으로 이루어져 있다. Many-to-Many라는 구조적 특성 때문에 주로 번역에 많이 쓰였다. 물론 Seq2Seq 또한 RNN 두 개를 연결한 구조이기 때문에, RNN의 단점을 계승한다.
그 외에도 몇가지 문제가 있는데, 상세하게 다루진 않겠다.

드디어 트랜스포머를 보자.
트랜스포머를 살펴보면, 책에서 설명한 대로 RNN에서 발생하는 ‘시점’ 문제를 해결한다. 트랜스포머는 각각의 토큰 임베딩을 다른 토큰에 의존하지 않고 독립적으로 생성하며, 이때 위치 정보가 사라지지 않도록 Positional Encoding을 추가한다.(이러한 구조는 이후 비전 트랜스포머(ViT)의 기반이 되기도 한다.)
또한 핵심적인 매커니즘이 바로 self-attention인데, 이는 문장 안의 각 단어(혹은 토큰)가 서로를 참조하여 각 단어가 어떤 의미적 연관성을 가지는지, 얼마나 중요한지를 동적으로 측정해내는 기법이다. 예를 들어, 문장에서 특정 단어가 멀리 떨어져 있더라도 의미적으로 중요한 연결고리가 있다면, self-attention을 통해 해당 단어들 간의 상호작용을 높이 평가해 모델이 그 문맥을 놓치지 않도록 만들어 준다.
이를 통해 트랜스포머는 RNN의 주요 한계점들을 해결했다.
물론 트랜스포머에가 탁월한 성능을 보여주지만, 대규모 모델 학습 과정에서 요구되는 엄청난 연산 자원과 메모리 사용량이 한계로 꼽힌다. 또한 매우 긴 시퀀스를 처리할 때 어텐션 연산 비용이 급격히 늘어나며, 충분한 데이터가 확보되지 않으면 통계적 패턴에 대한 학습에 치중해 실제 인과관계나 문맥적 이해가 미흡해질 수 있다. 마지막으로, 모델 규모가 커질수록 미세 조정(fine-tuning) 비용이 증가해, 자원이 제한된 환경이나 소규모 데이터셋을 다룰 때 최적의 성능을 보장하기 어려운 면이 존재한다.
계산 비용과 메모리 사용량을 제외한 점들은 충분한 데이터와 충분히 큰 모델이라면 어느정도 해결 가능하기 때문에, 그래서 LLM이라는 말이 나왔고, 점점 모델의 크기를 키우는 것이 트렌드가 되었다.
여기까지가 <혁펜하임의 Easy! 딥러닝> 책 8챕터에 대한 내용과 내 사견을 섞은 리뷰이다. 최대한 이해를 쉽게하기 위한 설명을 위해 조금 틀린 내용이 있더라도 너그러히 양해바란다.
책에는 딥러닝의 아주 기초인 MLP, 경사하강법부터 시작해서 활성함수, 역전파 등 핵심적인 내용들에 대한 설명이 잘 되어있고, BCE나 MSE, CE 등 로스 함수와 정규화, 데이터 등에 대한 내용과 CNN,트랜스포머에 대한 내용까지 설명이 잘 되어있다.
딥러닝에 대해 본격적으로 공부해보고 싶은데 어떻게 시작해야할지 모르겠는 분들이나, 가볍게 한 번쯤 revisit할 쉬운 책이 필요한 현업 분들에게 이 책을 추천한다.
본 게시글은 혁펜하임의 <Easy! 딥러닝> 책의 리뷰어 활동으로 작성되었습니다.
도서 구매 링크 1 (교보문고): https://product.kyobobook.co.kr/detail/S000214848175
도서 구매 링크 2 (출판사 자사몰): https://shorturl.at/yqZpW