테마 선택

📚 지식 노트

AI·하드웨어·주변기기·게임·컴퓨터 시스템·이론 컴퓨터 과학·수학·개발과 운영·보안·응용 분야에 대해 알아 두면 좋은 내용을 정리한 노트다. 위에서 분야를 고르고 아래에서 노트를 고른다.

딥러닝의 원리

뉴런을 여러 층 쌓은 신경망이 어떻게 계산하고, 역전파로 어떻게 배우며, CNN·RNN·트랜스포머가 데이터의 구조를 어떻게 이용하는지 작은 예를 직접 계산한 그림으로 따라간다.

목차 (12)
  1. 뉴런과 활성화 함수
  2. 여러 층과 보편 근사
  3. 출력층과 손실: 소프트맥스와 교차 엔트로피
  4. 역전파: 기울기를 거꾸로 전하기
  5. 최적화기: SGD, 모멘텀, Adam
  6. 학습을 안정시키는 장치: 초기화, 정규화, 드롭아웃, 잔차 연결
  7. 합성곱 신경망(CNN)
  8. RNN · LSTM과 기울기 소실
  9. 어텐션과 트랜스포머
  10. 임베딩: 뜻을 벡터로
  11. 흔한 오해
  12. 핵심 논문

뉴런과 활성화 함수

딥러닝은 머신러닝 가운데 여러 층의 신경망을 쓰는 갈래다. 그 단위인 인공 뉴런은 단순하다. 입력마다 가중치를 곱해 더하고 편향을 더한 뒤, 활성화 함수에 통과시킨다. 1958년 로젠블랫의 퍼셉트론이 이 꼴의 시초다(그때는 문턱을 넘으면 1, 아니면 0인 계단 함수를 썼다).

입력 x₁, x₂, x₃에 가중치를 곱해 더하고 편향 b를 더한 합이 활성화 함수를 지나 출력 y가 된다x₁× w₁x₂× w₂x₃× w₃+ 편향 bΣ활성화 φ (ReLU)yy = φ(w₁x₁ + w₂x₂ + w₃x₃ + b)
인공 뉴런 하나. 가중합에 편향을 더하고 활성화 함수를 거친다. 학습되는 것은 가중치 w와 편향 b다.

활성화 함수가 없으면 층을 아무리 쌓아도 선형 변환을 여러 번 한 것이라 결국 선형 함수 하나와 같다. 꺾이거나 휘는 함수를 끼워야 층을 쌓는 의미가 생긴다.

  • 시그모이드·tanh: 예전의 기본값. 입력이 크면 양 끝이 평평해져 기울기가 0에 가까워지므로, 깊은 망에서 학습이 멈추기 쉽다(아래 기울기 소실).
  • ReLU max(0, x): 양수 쪽 기울기가 늘 1이라 깊은 망도 잘 배우고 계산도 싸다. AlexNet 이후 표준이 됐다.
  • GELU: 0 근처를 부드럽게 만든 ReLU. BERT·GPT 계열 트랜스포머가 쓴다.
시그모이드, tanh, ReLU, GELU 네 활성화 함수의 모양시그모이드0~1, 양 끝이 평평tanh−1~1, 0이 가운데ReLU음수는 0, 계산이 쌈GELU0 근처가 부드러운 ReLU
활성화 함수 네 가지(가로 −4~4). 시그모이드와 tanh는 양 끝이 평평하고, ReLU와 GELU는 양수 쪽으로 계속 올라간다.

여러 층과 보편 근사

뉴런을 나란히 놓으면 층, 층을 이어 붙이면 다층 퍼셉트론(MLP)이 된다. 입력과 출력 사이의 층을 은닉층이라 하고, 은닉층이 많으면 "깊다(deep)"고 한다.

보편 근사 정리는 은닉층 하나라도 뉴런이 충분하면 (구간 위의) 연속 함수를 원하는 만큼 가깝게 흉내 낼 수 있다고 말한다. ReLU로 보면 직관이 쉽다. ReLU 하나는 한 자리에서 꺾이는 직선이므로, 여럿을 더하면 원하는 자리마다 꺾이는 꺾은선이 된다. 꺾는 자리를 늘리면 곡선에 얼마든지 가까워진다. 다만 정리는 "그런 가중치가 존재한다"는 말일 뿐, 그 가중치를 학습으로 찾을 수 있다거나 뉴런이 몇 개면 된다는 보장은 아니다. 실제로는 넓은 한 층보다 깊은 여러 층이 같은 함수를 훨씬 적은 뉴런으로 표현하는 경우가 많아, 앞 층은 단순한 무늬를, 뒤 층은 그 조합을 배우는 식으로 쌓는다.

sin 곡선을 ReLU 3개와 ReLU 7개의 합으로 근사한 두 그림. 개수가 많을수록 오차가 작다ReLU 3개 + 직선 (4조각)최대 오차 0.21ReLU 7개 + 직선 (8조각)최대 오차 0.07
sin 곡선(점선)을 ReLU 합(파란 선)으로 근사했다. 각 ReLU가 꺾는 점 하나를 맡는다. 조각을 4개에서 8개로 늘리면 최대 오차가 3분의 1로 준다.

출력층과 손실: 소프트맥스와 교차 엔트로피

망의 마지막 층이 내는 것은 부류마다 점수 하나씩인 로짓이다. 분류에서는 이것을 소프트맥스(각 점수의 지수를 지수의 합으로 나누기)로 합이 1인 확률로 바꾸고, 손실은 정답 부류에 준 확률의 음의 로그, 곧 교차 엔트로피를 쓴다. 정답 확률이 0.9면 손실은 약 0.1, 0.1이면 약 2.3이라 틀린 채 자신만만할수록 크게 벌받는다. 두 부류만 가르면 시그모이드 하나와 이진 교차 엔트로피, 연속값을 맞히는 회귀면 출력층에 활성화 함수 없이 평균 제곱 오차(MSE)가 기본이다.

분류에 MSE를 쓰지 않는 이유는 기울기다. 소프트맥스와 교차 엔트로피를 함께 미분하면 로짓의 기울기가 (예측 확률 − 정답) 꼴로 깔끔하게 떨어져, 많이 틀릴수록 크게 고친다. 시그모이드에 MSE를 붙이면 출력이 0이나 1 근처에 붙은 채 틀렸을 때 시그모이드의 평평한 끝 때문에 기울기가 거의 0이 되어 학습이 멈칫한다.

  • 미니배치·이터레이션·에포크: 기울기를 한 번 구하는 예제 묶음이 미니배치, 미니배치 하나로 가중치를 한 번 고치는 것이 이터레이션(스텝), 학습 데이터 전체를 한 바퀴 도는 것이 에포크다. 데이터 1만 개를 배치 100으로 학습하면 1에포크가 100스텝이다.
  • 배치 크기: 크면 기울기 어림이 정확하고 GPU를 꽉 채우지만 메모리가 많이 든다. 배치를 키우면 학습률도 함께 조정하는 것이 보통이다.

역전파: 기울기를 거꾸로 전하기

신경망도 머신러닝 노트의 경사 하강으로 배운다. 문제는 가중치가 수백만~수천억 개라 각 가중치의 기울기를 따로 구하면 너무 느리다는 것이다. 역전파(backpropagation)는 미분의 연쇄 법칙을 써서, 출력 쪽에서 구한 기울기를 한 층씩 거꾸로 곱해 전하며 모든 가중치의 기울기를 순전파 한 번과 비슷한 비용으로 구한다.

  • 어떤 가중치의 기울기 = (그 가중치가 이어 주는 뒤쪽 뉴런의 기울기) × (그 가중치에 들어온 입력).
  • 어떤 뉴런의 기울기 = 뒤쪽으로 나간 모든 연결의 (기울기 × 가중치)의 합에, 자기 활성화 함수의 기울기를 곱한 것. ReLU라면 꺼져 있을 때 0, 켜져 있을 때 1이다.

PyTorch·JAX 같은 프레임워크는 순전파 계산을 기록해 두었다가 이 과정을 자동으로 해 준다(자동 미분). 아래 작은 망에서 숫자를 직접 따라가 보면, 기울기가 수치 미분과 정확히 같고 한 걸음 뒤 손실이 줄어드는 것을 볼 수 있다.

역전파 단계 그림: 입력 두 개, 은닉 뉴런 두 개, 출력 하나인 망에서 값이 앞으로, 기울기가 뒤로 전해진다x₁= 1.0x₂= 0.5h₁= 0.45∂L/∂h = −0.48h₂= 0.50∂L/∂h = 0.27y= 0.315∂L/∂y = −0.685목표 t = 1.0L = ?L = 0.235L = 0.117W₁ = [0.5 −0.3; 0.2 0.8] · b₁ = (0.1, −0.1) · v = (0.7, −0.4) · c = 0.2∂L/∂v = (−0.31, −0.34) · ∂L/∂c = −0.69∂L/∂W₁ = [−0.48 −0.24; 0.27 0.14]w ← w − 0.1 × ∂L/∂w → 새 손실 0.117
1 / 8

입력 x = (1.0, 0.5), 목표 t = 1. 가중치는 아래 줄에 적었다. 먼저 앞으로(순전파) 계산한다.

역전파. 순전파로 손실을 구한 뒤, 출력 쪽에서 입력 쪽으로 '이 값을 조금 바꾸면 손실이 얼마나 바뀌나'(기울기)를 연쇄 법칙으로 곱해 전한다. 위 숫자는 순전파 값, 빨간 숫자는 기울기다.

최적화기: SGD, 모멘텀, Adam

손실 지형은 방향마다 가파른 정도가 크게 다른 길쭉한 골짜기인 경우가 많다. 이때 보통의 SGD는 가파른 방향으로 넘치지 않을 만큼 학습률을 작게 잡아야 해서, 완만한 방향으로는 느리게 가고 가파른 방향으로는 좌우로 지그재그한다.

  • 모멘텀: 지난 기울기를 속도처럼 쌓아 둔다. 꾸준히 같은 쪽을 가리키는 완만한 방향으로는 가속하고, 부호가 번갈아 바뀌는 방향은 서로 상쇄된다. 대신 관성 때문에 바닥을 지나쳤다 돌아오기도 한다.
  • Adam: 기울기의 이동 평균(방향)을 기울기 제곱의 이동 평균(크기)의 제곱근으로 나눠, 가중치마다 걸음 크기를 따로 맞춘다. 기울기가 큰 축은 덜, 작은 축은 더 움직여 두 방향을 비슷한 보폭으로 간다. 학습률을 대충 정해도 잘 돌아가 기본값처럼 쓰이고, 가중치 감쇠를 분리한 AdamW가 LLM 학습의 표준이다.
  • 실제 학습에서는 학습률을 처음에 천천히 올렸다가(warm-up) 점점 줄이는 스케줄을 함께 쓴다. 그림의 Adam이 바닥을 지나쳐 가는 것도 학습률을 줄이지 않았기 때문이다.
길쭉한 골짜기 손실에서 SGD, 모멘텀, Adam이 같은 출발점에서 15걸음 간 경로. SGD는 가파른 방향으로 지그재그한다SGD학습률 0.0915걸음 뒤 손실 0.63모멘텀학습률 0.03 · β 0.815걸음 뒤 손실 0.92Adam학습률 0.415걸음 뒤 손실 0.17
y 방향이 20배 가파른 골짜기 손실 ½(x² + 20y²)에서 같은 점(회색)에서 15걸음 간 경로. 빨간 점이 15걸음 뒤 자리다. SGD는 y 방향으로 지그재그하며 x 방향으로 느리게 간다.

학습을 안정시키는 장치: 초기화, 정규화, 드롭아웃, 잔차 연결

층이 깊어질수록 신호와 기울기가 층마다 조금씩 커지거나 작아지는 것이 곱해져, 폭발하거나 사라진다. 2010년대 초중반에 나온 몇 가지 장치가 이를 다스려 수십~수백 층 망을 학습할 수 있게 됐다.

  • 초기화: 가중치를 모두 0으로 두면 뉴런들이 똑같이 움직여 하나처럼 된다. 무작위로 두되, 층을 지나도 값의 분산이 유지되도록 입력 개수에 맞춰 크기를 정한다(시그모이드·tanh에는 Xavier, ReLU에는 He 초기화).
  • 정규화: 층 입력을 평균 0, 분산 1로 맞춘 뒤 학습되는 배율·이동을 곱한다. BatchNorm은 미니배치 안에서 특징마다, LayerNorm은 샘플 하나 안에서 특징 전체로 평균·분산을 구한다. BatchNorm은 배치가 작으면 통계가 흔들리고 학습과 추론의 동작이 달라, 문장 길이가 제각각인 트랜스포머는 LayerNorm(또는 더 단순한 RMSNorm)을 쓴다.
  • 드롭아웃: 학습 중 뉴런을 일정 확률로 꺼서 특정 뉴런에 기대지 못하게 한다. 여러 작은 망을 함께 학습해 평균하는 것과 비슷한 규제 효과가 있다. 추론 때는 끈다.
  • 잔차 연결: 층 몇 개를 건너뛰는 지름길로 입력을 출력에 그대로 더한다. 층은 입력과의 차이만 배우면 되고, 기울기는 지름길로 곧장 흘러 깊은 곳까지 줄지 않고 닿는다. ResNet 이후 거의 모든 깊은 망, 트랜스포머까지 이 구조를 쓴다.
  • 기울기 클리핑: 기울기 벡터의 길이가 정한 값을 넘으면 그 길이로 줄여서 쓴다. 가끔 튀는 큰 기울기 한 번에 가중치가 망가지는 기울기 폭발을 막는 값싼 보험이라, RNN과 LLM 학습에서 기본처럼 켠다.
배치 정규화는 한 특징 열을 배치 전체에서, 층 정규화는 한 샘플 줄을 특징 전체에서 평균과 분산으로 맞춘다BatchNorm특징 1 … 6 →샘플 1샘플 2샘플 3샘플 4특징마다, 배치 전체로 평균·분산CNN에서 흔함 · 배치 크기에 민감LayerNorm특징 1 … 6 →샘플 1샘플 2샘플 3샘플 4샘플마다, 특징 전체로 평균·분산트랜스포머 · RNN의 표준
같은 (샘플 × 특징) 표에서 평균·분산을 구하는 방향. BatchNorm은 열(특징 하나)을, LayerNorm은 줄(샘플 하나)을 맞춘다.
입력 x가 층 두 개를 지나 F(x)가 되고, 지름길로 건너온 x와 더해져 F(x) + x가 된다x층 + ReLU층F(x)+지름길: x를 그대로 더한다F(x) + x층은 입력과의 차이(잔차) F(x)만 배우면 된다기울기도 지름길로 곧장 흘러 100층이 넘는 망도 학습된다
잔차 연결. 층 두 개의 출력 F(x)에 지름길로 건너온 입력 x를 더한다.

합성곱 신경망(CNN)

사진을 MLP에 그대로 넣으면 픽셀마다 가중치가 따로 붙어 수가 폭발하고, 고양이가 왼쪽에 있을 때 배운 것을 오른쪽에서 다시 배워야 한다. 합성곱은 작은 필터(예: 3×3, 가중치 9개)를 이미지 전체에 밀며 같은 가중치를 되풀이해 쓴다. 가까운 픽셀끼리만 보고(국소성), 어디서나 같은 무늬를 찾는다(가중치 공유).

  • 필터 하나가 무늬 하나(세로 경계, 특정 색 얼룩)를 찾고, 한 층에 필터를 수십~수백 개 둔다. 필터 값은 사람이 정하지 않고 학습된다.
  • 풀링은 2×2 칸마다 최댓값(또는 평균)만 남겨 크기를 줄인다. 계산량이 줄고, 무늬 위치가 조금 어긋나도 결과가 덜 바뀐다. 요즘은 보폭(stride) 2짜리 합성곱으로 대신하기도 한다.
  • 층을 쌓을수록 한 칸이 보는 범위(수용 영역)가 넓어져, 앞 층은 경계·질감을, 뒤 층은 눈·바퀴 같은 부분과 물체 전체를 알아본다. LeNet(1998)에서 AlexNet(2012), ResNet(2015)으로 이어졌고, 지금은 이미지를 조각으로 잘라 트랜스포머에 넣는 ViT도 널리 쓰인다.
합성곱 단계 그림: 6×6 입력 위를 3×3 필터가 한 칸씩 움직이며 4×4 출력을 채우고, 마지막에 2×2 최대 풀링으로 2×2가 된다입력 6×6필터 3×3출력 4×4최대 풀링981000898100189810018981001898000189−101−101−1010−16−17−9160−16−1717160−1691716016−91716밝은 칸(5 이상)에 색을 칠했다 · 빨간 수는 음수
1 / 18

입력은 왼쪽 위에서 오른쪽 아래로 내려가는 밝은 띠다. 필터는 오른쪽 열에서 왼쪽 열을 빼므로, 오른쪽이 더 밝은 곳(세로 경계)에서 크게 반응한다.

합성곱. 같은 3×3 필터(가중치 9개)를 입력 전체에 밀며 써서, 어디에 있든 같은 무늬를 찾는다. 양수(밝은 쪽이 오른쪽)와 음수(밝은 쪽이 왼쪽)가 띠의 두 가장자리를 따라 나뉜다.

사진이 몇천 장뿐이라면 처음부터 학습하지 않는다. ImageNet 같은 큰 데이터로 미리 학습한 망을 가져와 마지막 분류 층만 내 부류 수에 맞게 바꾸고, 그 층만(또는 뒤쪽 몇 층까지) 작은 학습률로 다시 학습한다. 이것이 전이 학습이다. 앞쪽 층이 배운 경계·질감 검출기는 어느 사진에나 쓸모 있기 때문이다. 함께 쓰는 것이 데이터 늘리기(augmentation)다. 학습할 때마다 사진을 무작위로 자르고 뒤집고 색을 조금 바꿔 넣으면, 같은 사진도 매번 다르게 보여 외우기 어려워지고 "조금 옮기거나 밝기가 달라도 같은 물체"라는 성질을 배운다. 다만 숫자 6과 9처럼 뒤집으면 뜻이 바뀌는 데이터에는 그 변형을 쓰지 않는다.

RNN · LSTM과 기울기 소실

문장·음성처럼 순서가 있는 데이터를 위해 순환 신경망(RNN)은 같은 층을 시간마다 되풀이해 쓰며, 앞 단계의 은닉 상태를 다음 단계 입력에 함께 넣는다. 학습할 때는 시간 방향으로 펼친 아주 깊은 망이 되어, 기울기가 시간을 거슬러 갈 때마다 같은 가중치와 활성화 기울기가 거듭 곱해진다. 그 곱이 1보다 작으면 기울기가 지수적으로 사라지고(기울기 소실), 크면 폭발한다. 그래서 보통 RNN은 몇 낱말 앞의 정보만 겨우 쓴다.

LSTM은 덧셈으로 이어지는 셀 상태를 따로 두고, 무엇을 잊고(잊기 게이트) 무엇을 쓰고 내보낼지를 0~1 사이 게이트로 학습한다. 잊기 게이트가 1에 가까우면 셀 상태를 따라 기울기가 거의 줄지 않고 흐른다. 잔차 연결과 같은 발상이다. GRU는 게이트를 줄인 간단한 변형이다. 다만 RNN은 앞 단계가 끝나야 다음을 계산할 수 있어 GPU로 병렬화하기 어렵다는 한계가 남았고, 이것이 트랜스포머로 넘어간 큰 이유다.

보통 RNN은 한 칸에 0.6배씩 곱해져 10칸 뒤 기울기가 0.006이 되고, LSTM 셀 상태는 0.95배라 0.6이 남는다기울기가 시간을 거슬러 가는 방향보통 RNN한 칸에 ×0.60.006LSTM 셀 상태한 칸에 ×0.950.60tt−5t−10
기울기가 시간을 한 칸 거슬러 갈 때마다 곱해지는 값이 0.6이면 10칸 뒤 0.006만 남고, 0.95(잊기 게이트가 열린 LSTM 셀 상태)면 0.6이 남는다. 실제 값은 가중치와 입력에 따라 달라지며, 여기서는 곱해지는 값을 일정하다고 단순화했다.

어텐션과 트랜스포머

RNN 인코더–디코더(Seq2Seq)는 입력 문장 전체를 벡터 하나에 눌러 담아야 해서 긴 문장에 약했다. 어텐션은 출력 낱말을 만들 때마다 입력의 모든 자리를 보고 "지금 어디가 중요한지" 가중치를 매겨 섞는다. 트랜스포머는 여기서 한 걸음 더 나가 순환을 아예 없애고, 문장 안의 토큰끼리 서로를 보는 셀프 어텐션만으로 문맥을 만든다.

  • 토큰마다 질의(Q, 내가 찾는 것)·키(K, 내가 가진 것)·값(V, 내가 줄 내용) 벡터를 학습된 행렬로 만든다.
  • 질의와 모든 키의 내적을 √(차원)으로 나눈 것이 점수다. 나누지 않으면 차원이 클 때 점수가 커져 소프트맥스가 한 곳에 쏠리고 기울기가 작아진다.
  • 점수를 소프트맥스로 합이 1인 가중치로 바꾸고, 그 가중치로 값 벡터를 섞은 것이 그 토큰의 출력이다.
셀프 어텐션 단계 그림: 토큰 네 개 중 하나를 질의로 골라 점수, 소프트맥스 가중치 막대, 출력 벡터를 보인다토큰 · 임베딩점수 q·k/√2가중치(softmax)배고픈배고픈 (질의)배고픈배고픈배고픈(1.00, 0.20)고양이가고양이가고양이가 (질의)고양이가고양이가(0.60, 1.00)생선을생선을생선을생선을 (질의)생선을(−0.40, 0.80)먹었다먹었다먹었다먹었다먹었다 (질의)(0.80, −0.60)Q = X · W_QK = X · W_KV = X · W_V학습되는 값: W_Q · W_K · W_V1.0230%1.3642%0.3415%0.1713%출력(0.59, 0.52)출력 = Σ 가중치 × 값 = 0.30·v₁ + 0.42·v₂ + 0.15·v₃ + 0.13·v₄0.8020%1.7551%0.9523%−0.466%출력(0.46, 0.70)출력 = Σ 가중치 × 값 = 0.20·v₁ + 0.51·v₂ + 0.23·v₃ + 0.06·v₄−0.2217%0.3932%0.6140%−0.6311%출력(0.30, 0.60)출력 = Σ 가중치 × 값 = 0.17·v₁ + 0.32·v₂ + 0.40·v₃ + 0.11·v₄0.6533%0.2823%−0.3712%0.6232%출력(0.68, 0.20)출력 = Σ 가중치 × 값 = 0.33·v₁ + 0.23·v₂ + 0.12·v₃ + 0.32·v₄
1 / 5

토큰마다 2차원 임베딩(장난감 값)이 있다. 질의 Q = XW_Q, 키 K = XW_K, 값 V = XW_V로 같은 벡터를 세 역할로 바꾼다(여기서 W_V는 단위 행렬).

스케일드 닷프로덕트 셀프 어텐션. 각 토큰이 질의가 되어 모든 토큰의 키와 내적을 구하고, 그 점수를 소프트맥스로 가중치로 바꿔 값 벡터를 섞는다. 토큰 하나의 출력에 문장 전체의 정보가 들어간다.

트랜스포머 블록은 이 셀프 어텐션과 토큰마다 따로 적용하는 피드포워드 층을, 각각 잔차 연결과 LayerNorm으로 감싸 N번 쌓은 것이다.

  • 멀티헤드: Q·K·V를 작은 차원 여러 벌(헤드)로 나눠 따로 어텐션한 뒤 이어 붙인다. 헤드마다 다른 관계(문법적 짝, 가리키는 대상 등)를 볼 수 있다.
  • 위치 인코딩: 셀프 어텐션은 순서를 모른다(토큰을 섞어도 결과가 같이 섞일 뿐이다). 그래서 자리마다 다른 벡터를 임베딩에 더한다. 원 논문은 주기가 다른 sin·cos 값을 썼고, 요즘 LLM은 Q·K를 위치만큼 회전시키는 RoPE를 많이 쓴다.
  • 모든 토큰을 한꺼번에 계산하니 GPU로 병렬화가 잘 되어 아주 큰 모델과 데이터로 키울 수 있었다. 대가로 어텐션 계산이 문장 길이의 제곱으로 늘어난다. GPT 같은 LLM은 앞 토큰만 보도록 가린 디코더 블록을 쌓은 것이며, 이어지는 이야기는 LLM 노트와 연산 측면은 GPU 노트에 있다.

원 논문의 트랜스포머는 입력을 읽는 인코더와 출력을 쓰는 디코더를 둘 다 가진 번역기였다. 이후 어느 쪽을 쓰느냐로 세 갈래가 갈렸다.

구조어텐션이 보는 범위사전 학습 과제대표잘하는 일
인코더 전용앞뒤 모든 토큰가린 낱말 맞히기BERT(2018)분류, 문장 임베딩, 검색
디코더 전용앞 토큰만(인과 마스크)다음 토큰 맞히기GPT 계열, 오늘날 대부분의 LLM글 생성, 대화, 범용
인코더–디코더인코더는 양방향, 디코더는 앞쪽 + 인코더 출력가린 구간 되살리기 등T5(2019)번역, 요약처럼 입력과 출력이 뚜렷한 일
트랜스포머 블록: 임베딩에 위치 인코딩을 더해 넣고, 멀티헤드 셀프 어텐션과 피드포워드 층을 각각 잔차 연결과 LayerNorm으로 감싼 블록을 N번 쌓은 뒤 다음 토큰 확률을 낸다× N층잔차다음 토큰 확률 (softmax)더하기 · LayerNorm피드포워드 (MLP)더하기 · LayerNorm멀티헤드 셀프 어텐션토큰 임베딩 + 위치 인코딩토큰끼리 서로 참고헤드 여럿이 나란히토큰마다 따로 변환순서 정보를 더한다
트랜스포머 블록. 어텐션(토큰끼리 섞기)과 피드포워드(토큰마다 변환)를 잔차 연결과 LayerNorm으로 감싸 N층 쌓는다. 그림은 원 논문의 '뒤에 정규화' 배치이고, 요즘 LLM은 각 부분 앞에 정규화를 두는 배치가 많다.

임베딩: 뜻을 벡터로

신경망은 수만 다룰 수 있으니 낱말·토큰·상품 같은 범주는 먼저 임베딩, 곧 학습되는 실수 벡터로 바꾼다. 낱말마다 번호를 매겨 원-핫 벡터로 쓰면 모든 낱말 사이 거리가 같아 "사과"와 "바나나"가 비슷하다는 정보가 없다. 임베딩은 학습 중에 비슷하게 쓰이는 것끼리 가까워진다.

word2vec(2013)은 "주변 낱말로 가운데 낱말 맞히기"(또는 그 반대)라는 단순한 과제로 낱말 벡터를 학습했다. 같은 문맥에 나오는 낱말은 비슷한 벡터가 되고, "왕 − 남자 + 여자 ≈ 여왕" 같은 관계가 벡터 뺄셈으로 드러났다. 비슷한 정도는 보통 코사인 유사도(두 벡터 사이 각도의 코사인, 길이는 무시)로 잰다. 지금 LLM 안의 토큰 임베딩, 검색에 쓰는 문장 임베딩도 같은 생각이며, 문장 임베딩을 모아 빠르게 찾는 벡터 검색은 데이터베이스 노트에서 다룬다.

낱말 여섯 개를 2차원 점으로 둔 그림. 사과와 바나나는 같은 방향에 모이고, 남자에서 왕으로 가는 화살표와 여자에서 여왕으로 가는 화살표가 나란하다왕여왕남자여자사과바나나코사인 유사도 (−1 ~ 1)사과 · 바나나0.97왕 · 여왕0.39왕 · 사과−0.67왕 − 남자 + 여자 = (0.85, −0.50)→ 가장 가까운 낱말: 여왕설명용 장난감 값이다.실제 임베딩은 수백~수천 차원이다.
낱말 여섯 개를 2차원 장난감 벡터로 둔 그림. 과일끼리는 같은 방향이라 코사인 유사도가 높고, 남자→왕과 여자→여왕 화살표는 나란하다. 오른쪽 수는 이 값들로 계산했다.

흔한 오해

  • "신경망은 뇌를 본뜬 것이라 뇌처럼 생각한다" — 이름과 첫 발상만 빌렸다. 인공 뉴런은 가중합과 활성화 함수일 뿐이고, 역전파 같은 학습 방식이 뇌에서 그대로 일어난다는 근거는 없다.
  • "층을 깊게 쌓을수록 무조건 좋아진다" — 잔차 연결·정규화 없이 깊게만 쌓으면 기울기가 잘 흐르지 않아 학습 자체가 어려워진다(위의 학습을 안정시키는 장치 절). 데이터와 계산이 받쳐 주지 않으면 과적합한다.
  • "학습 손실이 계속 줄면 잘 배우고 있다" — 검증 손실이 함께 줄어야 한다. 학습 손실만 줄고 검증 손실이 오르면 외우기 시작한 것이라 그 앞에서 멈춘다(early stopping).
  • "어텐션 가중치가 곧 모델이 판단한 이유다" — 어텐션은 층과 헤드마다 많고 피드포워드 층도 계산에 끼어들어, 가중치 지도 한 장으로 판단 근거를 설명하기는 어렵다. 내부를 들여다보는 연구는 AI 안전 노트의 해석 가능성 절에 있다.

핵심 논문

트리 앙상블 같은 고전 머신러닝 논문은 머신러닝 노트, 분야 전체의 흐름은 논문 노트에 있다.

논문연도요지원문
The Perceptron (Rosenblatt)1958입력에 가중치를 곱해 더하고 문턱을 넘으면 켜지는 인공 뉴런과, 틀릴 때마다 가중치를 고치는 학습 규칙을 내놓았다.APA
Learning representations by back-propagating errors (Rumelhart · Hinton · Williams)1986연쇄 법칙으로 오차를 거꾸로 전해 은닉층까지 학습시키면 은닉 뉴런이 쓸모 있는 표현을 스스로 만든다는 것을 보였다.Nature
Approximation by superpositions of a sigmoidal function (Cybenko)1989은닉층 하나짜리 망도 뉴런만 충분하면 연속 함수를 원하는 만큼 가깝게 흉내 낼 수 있다는 보편 근사 정리를 증명했다.Springer
Long Short-Term Memory (Hochreiter · Schmidhuber)1997게이트로 여닫는 셀 상태를 두어 기울기가 오래 보존되게 해, RNN이 수백 단계 떨어진 관계를 배우게 했다.저자 소속 기관 PDF
Gradient-based learning applied to document recognition (LeCun 외, LeNet)1998합성곱과 풀링을 쌓은 망을 역전파로 학습해 손글씨 숫자를 읽고, 실제 수표 판독에 썼다.저자 공개 PDF
Understanding the difficulty of training deep feedforward neural networks (Glorot · Bengio)2010층을 지날 때 신호와 기울기의 분산이 유지되도록 가중치 초기값의 크기를 정하는 방법(Xavier 초기화)을 제안했다.PMLR
ImageNet Classification with Deep Convolutional Neural Networks (Krizhevsky · Sutskever · Hinton, AlexNet)2012GPU 두 장, ReLU, 드롭아웃, 데이터 늘리기로 큰 CNN을 학습해 ImageNet 대회에서 2위와 큰 차이로 우승, 딥러닝 붐을 열었다.NeurIPS
Efficient Estimation of Word Representations in Vector Space (Mikolov 외, word2vec)2013주변 낱말을 맞히는 얕은 망으로 낱말 벡터를 빠르게 학습하고, 벡터 덧셈·뺄셈으로 유추가 된다는 것을 보였다.arXiv
Distributed Representations of Words and Phrases and their Compositionality (Mikolov 외)2013네거티브 샘플링과 잦은 낱말 줄이기로 word2vec을 더 빠르고 정확하게 만들고, 구(phrase) 벡터로 넓혔다.arXiv
Dropout: A Simple Way to Prevent Neural Networks from Overfitting (Srivastava 외)2014학습 중 뉴런을 무작위로 꺼서, 여러 작은 망을 함께 학습하고 평균하는 것과 비슷한 규제 효과를 얻었다.JMLR
Adam: A Method for Stochastic Optimization (Kingma · Ba)2014기울기의 이동 평균(방향)과 제곱의 이동 평균(크기)으로 가중치마다 걸음 크기를 자동 조절하는 최적화기. 지금도 기본값처럼 쓰인다.arXiv
Sequence to Sequence Learning with Neural Networks (Sutskever · Vinyals · Le)2014한 LSTM이 입력 문장을 벡터 하나로 읽고 다른 LSTM이 그 벡터에서 출력 문장을 쓰는 인코더–디코더로 기계 번역을 했다.arXiv
Neural Machine Translation by Jointly Learning to Align and Translate (Bahdanau · Cho · Bengio)2014출력 낱말마다 입력의 어느 자리를 볼지 가중치를 학습하는 어텐션으로, 긴 문장을 벡터 하나에 욱여넣는 병목을 풀었다.arXiv
Batch Normalization (Ioffe · Szegedy)2015층 입력을 미니배치 평균·분산으로 맞춰 큰 학습률로도 안정적으로, 훨씬 빨리 학습되게 했다.arXiv
Delving Deep into Rectifiers (He 외)2015ReLU 망에 맞춘 초기화(He 초기화)를 유도해, 아주 깊은 망도 처음부터 학습되게 했다.arXiv
Deep Residual Learning for Image Recognition (He 외, ResNet)2015입력을 그대로 더하는 지름길로 층이 잔차만 배우게 해, 152층 망을 학습시키고 ImageNet 대회에서 우승했다.arXiv
Layer Normalization (Ba · Kiros · Hinton)2016배치 대신 샘플 하나의 특징 전체로 정규화해, 배치 크기와 상관없고 RNN에도 쓸 수 있게 했다. 트랜스포머의 표준 부품이 됐다.arXiv
Attention Is All You Need (Vaswani 외, Transformer)2017순환을 없애고 셀프 어텐션과 피드포워드 층만 쌓아 번역 품질과 학습 병렬성을 함께 잡았다. 오늘날 LLM의 뼈대다.arXiv
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (Devlin 외)2018인코더만 쌓은 트랜스포머에 문장 중간 낱말을 가리고 맞히게 하는 사전 학습을 해, 양쪽 문맥을 함께 보는 표현을 얻고 여러 이해 과제에 미세 조정으로 옮겼다.arXiv
Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer (Raffel 외, T5)2019번역·요약·분류를 모두 "글을 받아 글을 내는" 문제로 바꿔 인코더–디코더 하나로 풀고, 사전 학습 목표·구조·데이터를 체계적으로 비교했다.arXiv
더 읽을거리