기존 언어 모델 방식 중 하나인 N-gram은 이전 데이터를 기반으로 다음 단어를 예측하는 방식입니다. 하지만 N의 크기가 너무 낮다면 문맥을 충분히 이해하지 못해 의도를 알 수 없는 문장을 생성할 수 있습니다. 반대로 N의 크기가 너무 높아진다면 문맥 자체는 자연스러워지지만, 희소성 문제가 심해져 새로운 문장을 생성할 가능성이 낮아지게 됩니다. 이러한 한계를 해결하기 위해 다양한 연구가 진행되었고, 2003년 조수아 벤지오 교수의 신경망 기반 언어 모델 연구가 큰 전환점이 되었습니다. 특히 단어를 벡터로 표현하고 신경망을 통해 다음 단어를 예측하는 방식은 이후 현대 LLM의 기반이 되는 흐름으로 이어지게 됩니다. 이번 글에서는 이러한 흐름 속에서 등장한 뉴럴 네트워크가 무엇인지에 대해 알아보겠습니다.
뉴럴 네트워크란?
뉴럴 네트워크는 인간의 뇌 신경망 구조에서 아이디어를 얻어 만들어진 모델입니다. 인간은 뉴런(neuron)들이 서로 연결되어 정보를 처리합니다. 이러한 구조를 컴퓨터에서도 비슷하게 표현하여 데이터를 학습하고 패턴을 분석할 수 있도록 만든 것이 뉴럴 네트워크입니다.

그렇다면 뉴럴 네트워크는 실제로 어떤 방식으로 데이터를 학습하게 될까요?
단순한 이론보다는 흐름을 보는 것이 이해가 더 쉽다고 생각하여 간단한 영상을 준비해보았습니다.
초반에는 어떤 단어가 정답인지 제대로 학습되지 않았기 때문에 여러 글자들이 비슷한 확률로 출력되고 있으며, loss 값 역시 높게 측정됩니다. 하지만 학습이 반복될수록 데이터의 패턴을 점차 학습하게 되고, 최종적으로는 "다"라는 글자가 가장 높은 확률로 예측되는 것을 확인할 수 있습니다.
여기서 한 가지 의문이 생깁니다.
"사, 랑, 하"라는 문자와 "다, 는, 늙, 기"라는 문자 사이의 관계를 컴퓨터는 어떻게 이해할 수 있을까요?
중요한 점은 컴퓨터는 인간처럼 문자 자체의 의미를 이해하지 못한다는 것입니다. 컴퓨터 입장에서는 단순한 데이터에 불과하기 때문입니다.
이를 해결하기 위해 문자를 숫자로 변환하여 표현하기 시작하였고, 숫자를 기반으로 특정 위치(좌표)에 배치하여 문자 간의 관계를 학습할 수 있도록 하였습니다.
좌표를 만드는건 알겠는데 어떤 기준으로 좌표를 만드는가?
"사"라는 문자가 정확히 어떤 숫자나 의미를 가지는지는 초반에는 알 수 없습니다. 실제로 뉴럴 네트워크는 처음부터 의미를 이해하고 있는 것이 아니라, 랜덤한 값에서 시작하여 점차 학습을 통해 관계를 찾아가게 됩니다.
그렇기 때문에 초기에는 예측 결과가 불안정하며 여러 단어들이 비슷한 확률로 출력될 수 있습니다. 이후 학습이 반복되면서 특정 패턴의 확률이 점점 높아지게 됩니다.
흔히 LLM이 "주사위를 굴려서 답변한다"라고 표현하는 이유 역시, 내부적으로 확률 기반 예측을 수행하기 때문입니다.
컴퓨터가 문자 간의 관계를 이해할 수 있도록 숫자 형태의 좌표로 변환하는 과정을 임베딩(Embedding)이라고 합니다.
즉, 임베딩은 글자들을 숫자 좌표로 변환하는 과정을 의미합니다. 보통 이러한 숫자 변환은 벡터(Vector) 형태의 좌표로 표현됩니다.
하지만 임베딩만 했다고 해서 학습이 끝난 것은 아닙니다. 첫 번째 영상을 다시 보면, 앞 글자를 확인하고 숫자로 변환한 뒤 은닉층(Hidden Layer)과 출력층(Output Layer)으로 이동하는 것을 알 수 있습니다.
벡터(Vector)란 여러 숫자를 하나의 좌표처럼 묶어서 표현한 값을 의미

즉, 실제 학습은 그 이후부터 시작된다고 볼 수 있습니다.

그렇다면 뉴럴 네트워크는 숫자로 변환된 데이터를 어떤 방식으로 학습하게 될까요?
임베딩까지 마쳤습니다. 위 이미지를 다시 확인해보면, 실제 학습은 은닉층(Hidden Layer)에서 진행되는 것을 알 수 있습니다.
그렇다면 은닉층에서는 어떤 일이 발생하게 될까요?
쉽게 말하면 은닉층은 임베딩을 통해 구한 좌표값에 가중치(Weight)를 부여하여 데이터의 중요도를 학습하는 과정이라고 볼 수 있습니다. 은닉층에서 말하는 가중치는 어떤 데이터를 얼마나 중요하게 볼 것인가에 있습니다.
예를 들어 "사, 랑, 하"라는 입력이 들어왔다고 가정해보겠습니다. 컴퓨터는 어떤 글자가 중요한지, 어떤 패턴이 자주 등장하는지, 어떤 연결이 강한지를 숫자로 조정하며 학습하게 됩니다.
그렇다면, 어떤 기준으로 가중치를 부여하는 걸까요?
뉴럴 네트워크는 예측한 값과 실제 정답을 비교하여 가중치를 조정하게 됩니다. 예를 들어 "사, 랑, 하" 다음에 "다"가 정답이라고 가정하였는데 다른 글자를 높은 확률로 예측하였다면, 오차(loss)가 크게 발생하게 됩니다.
이후 뉴럴 네트워크는 이 오차를 줄이기 위해 가중치를 반복적으로 수정하게 됩니다. 즉, 학습이란 결국 정답에 가까워지도록 가중치를 계속 조정하는 과정이라고 볼 수 있습니다.
뉴럴 네트워크는 입력된 데이터를 가중치와 활성화 함수(Activation Function)를 통해 계산한 뒤 결과를 출력하게 됩니다. 이후 예측값과 실제 정답을 비교하여 오차(loss)를 계산하고, 역전파(Backpropagation)를 통해 가중치를 수정하며 학습하게 됩니다.
활성화 함수
활성화 함수(Activation Function)는 신경망에 비선형성을 추가해주는 역할을 합니다. 만약 활성화 함수가 존재하지 않는다면 단순한 선형 계산만 반복되기 때문에 복잡한 패턴을 학습하기 어려워집니다.
대표적으로 sigmoid, relu, tanh와 같은 활성화 함수들이 존재합니다.

그렇다면 왜 단순한 선형 계산만으로는 복잡한 패턴을 학습하기 어려운 것일까요?
가장 큰 이유는 선형 계산은 결국 직선 형태의 결과만 표현할 수 있기 때문입니다. 예를 들어 활성화 함수가 다음과 같다고 가정해보겠습니다.

여기서 의문은 어째서 단순한 선형 계산만 반복이 되는게 왜 복잡한 패턴을 학습하기 어려울까요?
가장 큰 이유는 선형 계산은 결국 직선 형태의 결과만 표현할 수 있기 때문입니다. 예를 들어 활성화 함수가 다음과 같다고 가정해보겠습니다. 그리고 입력값이 -1, 2, 3이라고 가정해보겠습니다. 이렇게 되면 모든 데이터는 결국 하나의 직선 위에 존재하게 됩니다.
하지만 실제 데이터는 단순한 직선 형태로만 존재하지 않습니다. 이미지, 언어, 음성 데이터처럼 복잡한 데이터들은 곡선 형태의 관계나 비선형적인 패턴을 가지는 경우가 많습니다.
따라서 뉴럴 네트워크는 활성화 함수를 통해 비선형성을 추가하여 복잡한 패턴 역시 학습할 수 있도록 구성됩니다.

역전파
뉴럴 네트워크는 예측값과 실제 정답을 비교하여 오차(loss)를 계산한다고 하였습니다. 이러한 과정을 통해 어떤 부분이 잘못 예측되었는지를 확인하고, 이를 기반으로 학습을 진행하게 됩니다.
오차를 보고 수정한다는 개념까지는 이해할 수 있습니다. 하지만 여기서 몇 가지 문제가 발생합니다.
신경망에는 수많은 가중치(Weight)가 존재합니다. 그렇다면 어떤 가중치가 잘못된 것일까요?
또한 어느 정도 수정해야 하는지 역시 알 수 없습니다. 이러한 문제를 해결하기 위해 등장한 개념이 역전파(Backpropagation)입니다.
쉽게 말하면 역전파는 "책임 분배" 과정이라고 볼 수 있습니다. 출력된 오차를 기반으로 원인을 출력층(Output Layer)에서 입력층(Input Layer) 방향으로 거꾸로 추적하면서, 각 가중치에게 얼마나 책임이 있는지를 계산하게 됩니다.
역전파라는 이름 역시 여기서 등장합니다. 계산은 입력 → 출력 방향으로 진행되지만, 오차의 책임은 출력 → 입력 방향으로 전달되기 때문입니다.

설명을 위해 다음과 같이 가정해보겠습니다.
- 입력값: x = 2
- 가중치: w1 = 0.5, w2 = 3
은닉값(h)은 다음과 같이 계산됩니다.
h=w1*x=0.5×2=1출력값(y)은 다음과 같습니다.
y=w2*h=3×1=3하지만 실제 정답이 9라고 가정해보겠습니다.
그렇다면 오차(loss)는 다음과 같이 계산됩니다.
(9−3)^2=36즉, 현재 예측값과 실제 정답의 차이가 크기 때문에 loss 역시 크게 측정된다는 뜻입니다.
이제 역전파는 이 오차를 줄이기 위해 어떤 가중치가 얼마나 잘못되었는지를 계산하기 시작합니다.
마지막으로 softmax와 cross-entropy를 간단하게 알아보고 마치겠습니다.
softmax
출력층(Output Layer)에서는 여러 값들이 계산되어 출력됩니다. 하지만 이 값들은 아직 확률이라고 보기 어렵습니다.
예를 들어 다음과 같은 값이 출력되었다고 가정해보겠습니다.
- 다 → 3.2
- 기 → 1.1
- 늙 → 0.3
이 상태에서는 어떤 값이 얼마나 높은 확률을 가지는지 직관적으로 이해하기 어렵습니다.
이러한 값을 확률 형태로 변환해주는 함수가 Softmax입니다.
Softmax는 출력값들을 0~1 사이의 값으로 변환하며, 전체 합이 1이 되도록 만들어줍니다.
예를 들어, 다음과 같이 변환될 수 있습니다.
- 다 → 0.83
- 기 → 0.12
- 늙 → 0.05
즉, 뉴럴 네트워크는 "다"가 가장 높은 확률을 가진다고 판단하게 됩니다.
cross-entropy
Cross Entropy(교차 엔트로피)는 뉴럴 네트워크가 예측한 확률과 실제 정답이 얼마나 차이가 나는지를 계산하는 Loss 함수입니다.
예를 들어 다음과 같은 결과가 나왔다고 가정해보겠습니다.
- 다 → 0.83
- 기 → 0.12
- 늙 → 0.05
그리고 실제 정답이 "다"라고 해보겠습니다.
이 경우 뉴럴 네트워크는 정답인 "다"를 높은 확률로 예측하였기 때문에 Loss 값은 낮게 측정됩니다.
반대로 다음과 같은 결과가 나왔다고 가정해보겠습니다.
- 다 → 0.10
- 기 → 0.80
- 늙 → 0.10
이 경우 실제 정답인 "다"를 낮은 확률로 예측하였기 때문에 Loss 값은 크게 증가하게 됩니다.
즉, Cross Entropy는 정답에 가까운 확률을 예측할수록 Loss를 낮게 만들고, 정답과 멀어질수록 Loss를 크게 증가시키는 역할을 합니다.
보통 Softmax와 함께 사용되며, 뉴럴 네트워크는 Cross Entropy를 최소화하는 방향으로 가중치를 수정하며 학습을 진행하게 됩니다.
마지막으로 전체 흐름을 한번에 확인해보겠습니다.
입력 문장: "나는 강아지를 ___"
↓ ① 토큰화
[나는=42, 강아지를=1057, ___]
↓ ② 임베딩 조회
[0.2, 0.5, ...] [0.1, 0.9, ...] ← 각 토큰의 벡터
↓ ③ 합치기 (concatenate)
[0.2, 0.5, ..., 0.1, 0.9, ...] ← 하나의 큰 벡터
↓ ④ 은닉층 (행렬곱 + 활성화)
[0.7, -0.3, 0.2, ...] ← 압축된 의미
↓ ⑤ 출력층 (어휘수만큼 점수)
[3.2, -1.5, 0.8, 7.1, ..., 0.4] ← 각 단어의 점수
↓ ⑥ Softmax
[1%, 0.1%, 5%, 70%, ..., 2%] ← 확률
↓ ⑦ 정답과 비교 (Cross-Entropy)
Loss = 1.99
↓ ⑧ 역전파
모든 가중치 + 임베딩까지 살짝 조정
마무리
간단하게 뉴럴 네트워크에 대해 알아보았습니다. 이번 글에서는 뉴럴 네트워크가 어떤 방식으로 동작하는지에 초점을 맞춰 설명하였습니다.
그러다 보니 뉴럴 네트워크가 새로운 문장을 어떻게 만들어내는지에 대한 설명은 다소 부족하다고 느껴졌습니다. 물론, 확률을 기반으로 loss를 계산하고, 이를 통해 어떤 값이 더 정답에 가까운지를 학습한다는 흐름까지는 이해할 수 있었습니다.
그래서 다음 글에서는 뉴럴 네트워크가 어떤 방식으로 새로운 문장을 생성하는지에 대해 조금 더 자세히 알아보려고 합니다.
또한 이번 글에서 설명하지 못한 부분이 하나 있습니다. 앞에서 임베딩은 단어를 좌표 형태로 변환한다고 설명하였습니다. 하지만 실제로는 각 단어를 표현하기 위한 좌표값이 하나만 존재하는 것이 아닙니다. 상황에 따라 수십 개, 수백 개 이상의 좌표값을 가질 수도 있습니다. 이러한 좌표의 개수를 임베딩 차원(Dimension)이라고 부릅니다.
일반적으로 차원이 커질수록 더 많은 정보를 표현할 수 있기 때문에 정확도는 높아질 수 있습니다. 하지만 반대로 계산량 증가, 과적합, 희소성 문제와 같은 부작용 역시 함께 발생할 수 있다는 점도 고려해야 합니다.
'개발 > LLM' 카테고리의 다른 글
| 한국어 형태소 분석 vs BPE (0) | 2026.06.08 |
|---|---|
| N-gram을 이용해서 새로운 데이터 만들기 (0) | 2026.05.17 |
| N-gram 이해해보기 (0) | 2026.05.14 |
| LLM이란 무엇일까? (1) | 2026.04.01 |