Skip to main content
Summary

이 장에서 배울 것

앞 장에서는 이미지 데이터를 다루기 위해 CNN을 배웠다. CNN은 작은 필터를 움직이며 이미지 안의 지역 패턴을 찾는다. 이번 장에서는 방향을 바꾸어, 순서가 중요한 데이터를 다룬다.

이 장의 목표는 다음과 같다.

  • 시퀀스 데이터가 일반 표 데이터와 어떻게 다른지 설명한다.

  • RNN이 이전 정보를 다음 계산으로 넘기는 방식을 이해한다.

  • LSTM과 GRU가 왜 필요한지 직관적으로 설명한다.

  • Attention이 현재 판단에 중요한 위치를 더 크게 보는 방식임을 이해한다.

  • 한국어 감성 분류 문제에서 임베딩 평균 모델, RNN, Attention 기반 모델을 비교하는 실습 흐름을 잡는다.

여기서 핵심은 하나다. 문장, 주가, 센서 신호처럼 앞뒤 맥락이 중요한 데이터는 현재 입력 하나만 보아서는 충분하지 않다. 현재 입력이 이전 정보와 어떤 관계를 갖는지 함께 보아야 한다.

시퀀스 모델과 Attention

왜 이 주제가 중요한가

많은 현실 데이터는 순서를 가진다.

문장은 단어의 순서에 따라 뜻이 달라진다. "좋지 않다"와 "좋다, 나쁘지 않다"는 비슷한 단어를 포함하지만 의미가 다르다. 주가나 기온 데이터도 오늘 값만으로 판단하기 어렵다. 어제와 그제의 흐름, 갑작스러운 변화, 반복되는 패턴이 중요하다. 센서 신호도 마찬가지다. 진동, 심박, 음성처럼 시간에 따라 바뀌는 데이터는 흐름을 보아야 한다.

전통적인 표 데이터는 보통 한 행을 독립적인 샘플로 본다. 예를 들어 고객의 나이, 구매 횟수, 가입 기간이 들어 있는 표에서는 각 열이 고정되어 있고 순서의 의미가 약하다. 물론 시간 변수를 추가할 수는 있지만, 기본 구조는 고정 길이 벡터다.

반면 시퀀스 데이터는 다음 특징을 가진다.

  • 길이가 샘플마다 다를 수 있다.

  • 순서가 바뀌면 의미가 달라질 수 있다.

  • 앞의 정보가 뒤의 판단에 영향을 준다.

  • 가까운 위치뿐 아니라 멀리 떨어진 위치도 중요할 수 있다.

딥러닝에서 시퀀스 모델은 이런 데이터를 처리하기 위해 등장했다. 대표적인 모델이 RNN, LSTM, GRU이고, 이후 Attention과 Transformer로 이어진다.

시퀀스 데이터의 기본 형태

시퀀스는 여러 입력이 순서대로 나열된 형태다. 문장을 예로 들면 다음과 같다.

이 영화는 정말 재미있었다
x1   x2   x3   x4

각 단어를 하나의 입력 조각으로 볼 수 있다. 시계열 데이터라면 각 시점의 값이 입력 조각이 된다.

월요일 기온, 화요일 기온, 수요일 기온, 목요일 기온
x1        x2        x3        x4

이미지에서는 주변 픽셀의 공간 관계가 중요했다. 시퀀스에서는 앞뒤 입력의 시간적, 순서적 관계가 중요하다. 따라서 모델은 "지금 들어온 입력"뿐 아니라 "이전에 무엇을 보았는가"를 함께 기억해야 한다.

RNN: 이전 정보를 넘기는 신경망

RNN은 Recurrent Neural Network의 줄임말이다. 한국어로는 순환 신경망이라고 부른다. 이름에 '순환'이 들어가는 이유는 이전 단계의 정보를 다음 단계로 넘기기 때문이다.

일반 신경망은 입력을 한 번 넣고 출력을 만든다.

x -> 신경망 -> y

RNN은 입력을 순서대로 읽으면서 중간 상태를 계속 갱신한다.

x1 -> [RNN] -> h1
x2 -> [RNN] -> h2
x3 -> [RNN] -> h3
x4 -> [RNN] -> h4

여기서 h는 hidden state, 즉 은닉 상태다. 은닉 상태는 모델이 지금까지 읽은 정보를 압축해 담고 있는 벡터라고 생각하면 된다. 더 펼쳐서 보면 다음과 같다.

x1 + h0 -> h1
x2 + h1 -> h2
x3 + h2 -> h3
x4 + h3 -> h4

즉 RNN은 매 시점마다 두 가지를 함께 본다.

  • 현재 입력 x_t

  • 이전 은닉 상태 h_{t-1}

그리고 새로운 은닉 상태 h_t를 만든다.

h_t = f(x_t, h_{t-1})

이 식은 어렵게 볼 필요가 없다. 현재 단어와 지금까지의 기억을 합쳐 새로운 기억을 만든다는 뜻이다.

감성 분류를 예로 들어 보자.

이 영화는 초반은 지루했지만 마지막은 좋았다

모델은 단어를 차례대로 읽는다. "지루했지만"까지만 보면 부정적으로 보일 수 있다. 하지만 뒤에 "좋았다"가 나오면 최종 판단은 긍정에 가까워진다. RNN은 뒤쪽 단어를 읽으면서 이전 은닉 상태를 갱신하므로, 문장의 흐름을 어느 정도 반영할 수 있다.

RNN의 한계: 장기 의존성 문제

RNN은 순서를 다룰 수 있지만 한계가 있다. 문장이 길어지면 초반 정보가 뒤까지 잘 전달되지 않을 수 있다. 이를 장기 의존성 문제라고 한다.

예를 들어 다음 문장을 보자.

어제 친구가 추천해 준 영화는 예고편만 봤을 때는 별로였고,
중간에도 조금 늘어졌지만, 마지막 장면 때문에 결국 오래 기억에 남을 만큼 좋았다.

감성을 판단하려면 뒤쪽의 "좋았다"도 중요하지만, 앞쪽의 "별로였고", "늘어졌지만"도 함께 봐야 한다. 단어 사이의 거리가 길면 RNN은 앞의 정보를 잊기 쉽다.

기술적으로는 역전파가 긴 시간 단계로 이어지면서 기울기가 너무 작아지거나 커지는 문제가 생긴다. 기울기가 너무 작아지면 앞쪽 입력에 대한 학습 신호가 거의 전달되지 않는다. 초보자는 이 현상을 수식보다 직관으로 먼저 이해하면 된다. 긴 문장을 한 글자씩 듣고 마지막에 전체 뜻을 말하라고 하면, 앞부분을 잊기 쉬운 것과 비슷하다.

LSTM과 GRU: 무엇을 기억하고 버릴지 정하는 장치

RNN의 한계를 줄이기 위해 LSTM과 GRU가 많이 사용되었다.

LSTM은 Long Short-Term Memory의 줄임말이다. 이름 그대로 짧은 정보와 긴 정보를 함께 다루기 위한 구조다. LSTM의 핵심은 게이트다. 게이트는 정보를 통과시킬지 막을지 조절하는 문이라고 생각하면 된다.

LSTM은 대략 다음 질문을 매 시점마다 던진다.

  • 이전 정보 중 무엇을 잊을 것인가?

  • 현재 입력 중 무엇을 새로 기억할 것인가?

  • 지금 단계에서 어떤 정보를 밖으로 내보낼 것인가?

이 질문에 해당하는 장치가 forget gate, input gate, output gate다. 이름을 모두 외우는 것보다 중요한 것은 역할이다. LSTM은 모든 정보를 무조건 다음으로 넘기지 않는다. 필요한 정보는 오래 남기고, 덜 중요한 정보는 줄인다.

GRU는 Gated Recurrent Unit의 줄임말이다. GRU도 게이트를 사용하지만 LSTM보다 구조가 단순하다. 주로 update gate와 reset gate를 사용해 이전 정보를 얼마나 유지할지, 새 입력을 얼마나 반영할지 조절한다.

실무에서는 LSTM과 GRU 모두 자주 쓰였다. 일반적으로 GRU는 구조가 단순해 빠르게 학습되는 편이고, LSTM은 조금 더 복잡하지만 긴 의존성을 다루는 데 강한 경우가 있다. 어느 쪽이 항상 더 좋다고 말하기는 어렵다. 데이터 크기, 문장 길이, 문제 종류에 따라 결과가 달라진다.

Attention: 중요한 위치에 더 집중하기

RNN, LSTM, GRU는 시퀀스를 순서대로 읽으며 정보를 하나의 은닉 상태에 압축한다. 그런데 문장이 길어지면 모든 정보를 하나의 벡터에 담기가 어렵다. 중요한 단어가 문장 앞에 있을 수도 있고, 중간에 있을 수도 있고, 뒤에 있을 수도 있다.

Attention은 이 문제를 다른 방식으로 본다. 핵심은 간단하다.

모든 단어를 똑같이 보지 말고, 현재 판단에 중요한 위치에 더 큰 가중치를 주자.

감성 분류 문장을 보자.

배우들은 좋았지만 이야기는 전혀 몰입되지 않았다

이 문장에서 "좋았지만"은 긍정 신호다. 하지만 최종 감성에는 "전혀 몰입되지 않았다"가 더 강하게 작용한다. Attention 기반 모델은 각 단어가 최종 판단에 얼마나 중요한지 점수로 계산하고, 중요한 단어의 표현을 더 크게 반영한다.

간단히 말하면 다음 흐름이다.

  1. 각 단어를 벡터로 바꾼다.

  2. RNN이나 다른 인코더로 각 위치의 표현을 만든다.

  3. 각 위치가 현재 판단에 얼마나 중요한지 점수를 계산한다.

  4. 점수를 확률처럼 바꾸어 가중치로 사용한다.

  5. 가중합으로 문장 전체 표현을 만든다.

  6. 그 표현으로 긍정/부정을 분류한다.

Attention은 "어디를 볼 것인가"를 학습한다. 사람이 규칙으로 정하는 것이 아니다. 모델이 손실을 줄이는 과정에서 어떤 위치를 더 크게 볼지 스스로 조정한다.

다만 주의할 점도 있다. Attention 가중치가 높다고 해서 항상 인간이 생각하는 설명과 완전히 일치하는 것은 아니다. Attention은 해석에 도움을 줄 수 있지만, 그 자체가 완벽한 설명 도구는 아니다.

쉬운 비유: 회의록을 읽고 결론 내리기

긴 회의록을 읽고 "이 회의의 분위기는 긍정적인가, 부정적인가?"를 판단한다고 해 보자.

RNN은 회의록을 처음부터 끝까지 읽으며 머릿속 메모를 계속 갱신하는 사람과 비슷하다. 앞에서 나온 내용을 기억하면서 다음 문장을 읽는다. 하지만 회의록이 너무 길면 초반 내용을 잊을 수 있다.

LSTM과 GRU는 메모장에 중요한 내용을 표시하고, 덜 중요한 내용은 지우는 사람에 가깝다. 모든 내용을 똑같이 기억하지 않고, 필요한 정보를 오래 남긴다.

Attention은 결론을 내릴 때 회의록 전체를 다시 훑으며 중요한 문장에 형광펜을 치는 방식과 비슷하다. "찬성한다", "위험하다", "보류하자" 같은 핵심 표현에 더 집중한다. 그래서 긴 문장이나 문서에서 유용하다.

직접 해보는 실습: 한국어 감성 분류 모델 비교

이번 실습의 목표는 모델을 세 개 만들어 비교하는 것이다.

  1. 임베딩 평균 모델

  2. RNN 또는 GRU 모델

  3. Attention 기반 모델

데이터는 한국어 문장과 감성 라벨이 있는 형태라고 가정한다.

문장: 이 영화 정말 재미있다
라벨: 1

문장: 지루하고 아쉬웠다
라벨: 0

라벨은 보통 긍정이면 1, 부정이면 0으로 둔다.

1단계: 전처리

한국어 문장은 띄어쓰기만으로 완벽하게 나누기 어렵다. 하지만 입문 단계에서는 먼저 단순 공백 기준 토큰화로 시작해도 된다. 이후 형태소 분석기나 서브워드 토크나이저는 다음 단계에서 다룬다.

실습 흐름은 다음과 같다.

  • 문장을 토큰으로 나눈다.

  • 자주 등장하는 토큰으로 단어 사전을 만든다.

  • 각 토큰을 정수 ID로 바꾼다.

  • 문장 길이를 맞추기 위해 padding을 추가한다.

  • 라벨과 함께 DataLoader로 묶는다.

padding은 길이가 다른 문장을 같은 크기의 배치로 만들기 위해 넣는 특별한 토큰이다. 예를 들어 최대 길이를 6으로 맞추면 다음처럼 된다.

[이, 영화, 정말, 재미있다, PAD, PAD]
[지루하고, 아쉬웠다, PAD, PAD, PAD, PAD]

중요한 점은 PAD를 실제 단어처럼 학습하면 안 된다는 것이다. 평균을 낼 때도, Attention 점수를 계산할 때도 PAD 위치는 제외해야 한다.

2단계: 임베딩 평균 모델

가장 단순한 기준 모델부터 만든다. 각 단어를 임베딩 벡터로 바꾼 뒤, 문장 안의 단어 벡터를 평균낸다. 그 평균 벡터로 긍정/부정을 분류한다.

단어 ID -> Embedding -> 평균 -> Linear -> 긍정/부정

이 모델은 단어 순서를 거의 보지 않는다. "좋지 않다"와 "좋다"를 구분하기 어렵다. 하지만 기준 모델로는 매우 중요하다. 복잡한 모델이 단순 모델보다 나은지 확인할 수 있기 때문이다.

3단계: RNN 또는 GRU 모델

두 번째 모델은 단어를 순서대로 읽는다.

단어 ID -> Embedding -> GRU -> 마지막 은닉 상태 -> Linear -> 긍정/부정

GRU를 사용하면 RNN보다 긴 문장에서 안정적인 경우가 많다. 입문 실습에서는 LSTM보다 GRU가 코드가 단순해 시작하기 좋다.

비교할 때는 다음 질문을 확인한다.

  • 임베딩 평균 모델보다 검증 정확도가 좋아졌는가?

  • 긴 문장에서 성능 차이가 더 크게 나는가?

  • 부정 표현이나 반전 표현을 더 잘 처리하는가?

예를 들어 "재미있을 줄 알았는데 별로였다" 같은 문장은 순서 정보가 중요하다. 단어만 보면 "재미있을"이라는 긍정 단어가 있지만, 최종 감성은 부정에 가깝다.

4단계: Attention 기반 모델

세 번째 모델은 GRU 출력 전체를 사용한다. 마지막 은닉 상태만 쓰는 대신, 각 위치의 출력에 Attention 점수를 부여한다.

단어 ID -> Embedding -> GRU -> 각 위치 출력
각 위치 출력 -> Attention 점수 -> 가중합 -> Linear -> 긍정/부정

Attention 모델에서는 PAD 위치를 반드시 가려야 한다. 그렇지 않으면 모델이 의미 없는 PAD에 점수를 줄 수 있다.

실험 후에는 몇 개 문장을 골라 Attention 가중치를 확인해 보자.

이 영화는 초반은 지루했지만 결말은 훌륭했다

모델이 "지루했지만", "훌륭했다" 같은 단어 근처에 높은 가중치를 주는지 살펴본다. 결과가 항상 사람이 기대한 대로 나오지는 않는다. 그 차이를 관찰하는 것도 좋은 분석이다.

5단계: 결과 비교 표 작성

실습 결과는 다음 표로 정리한다.

모델순서 반영주요 장점주요 한계검증 정확도
임베딩 평균낮음빠르고 단순함어순과 반전 표현에 약함직접 기록
GRU중간문장 흐름 반영긴 문장에서는 정보 손실 가능직접 기록
GRU + Attention높음중요한 위치에 집중해석을 과신하면 안 됨직접 기록

정확도만 보지 말고 오류 문장도 함께 보아야 한다. 딥러닝 실험에서 중요한 것은 숫자 하나가 아니라, 모델이 어떤 유형을 잘 맞히고 어떤 유형에서 실패하는지 이해하는 것이다.

흔한 실수와 오류 분석

첫째, padding을 무시하지 않는 실수다. PAD 토큰은 문장 길이를 맞추기 위한 자리 채움일 뿐이다. 평균 계산이나 Attention 계산에 PAD가 포함되면 문장 표현이 왜곡된다.

둘째, 훈련 데이터와 검증 데이터를 섞는 실수다. 단어 사전을 만들 때는 훈련 데이터 기준으로 만드는 것이 안전하다. 검증 데이터의 정보를 미리 사용하면 평가가 실제보다 좋아 보일 수 있다.

셋째, 마지막 은닉 상태를 무조건 문장 전체 표현으로 쓰는 실수다. padding이 있는 배치에서는 마지막 위치가 실제 단어가 아니라 PAD일 수 있다. 이 경우 문장 길이를 고려해 마지막 실제 토큰의 은닉 상태를 가져오거나, Attention에서 마스크를 적용해야 한다.

넷째, Attention을 완벽한 설명으로 받아들이는 실수다. Attention 가중치는 모델 내부 계산의 일부다. 높은 가중치를 받은 단어가 중요하다는 힌트는 될 수 있지만, 그것만으로 모델의 판단 이유를 완전히 설명했다고 말하기는 어렵다.

다섯째, 복잡한 모델부터 시작하는 실수다. 처음부터 큰 LSTM이나 복잡한 Attention 모델을 만들면 문제가 생겼을 때 원인을 찾기 어렵다. 임베딩 평균 모델처럼 단순한 기준선을 먼저 만들고, 그다음 RNN, Attention으로 확장하는 편이 좋다.

요약

시퀀스 데이터는 순서가 중요하다. 문장, 주가, 센서 신호처럼 시간이나 앞뒤 맥락이 의미를 만드는 데이터에서는 고정 길이 표 데이터와 다른 접근이 필요하다.

RNN은 이전 은닉 상태를 다음 단계로 넘기며 순서를 처리한다. 그러나 문장이 길어지면 앞쪽 정보가 뒤까지 잘 전달되지 않는 장기 의존성 문제가 생길 수 있다. LSTM과 GRU는 게이트를 사용해 어떤 정보를 기억하고 버릴지 조절한다.

Attention은 모든 위치를 똑같이 보지 않고, 현재 판단에 중요한 위치에 더 큰 가중치를 준다. 이 아이디어는 다음 장에서 배울 Transformer의 핵심 기반이 된다.

퀴즈

  1. 시퀀스 데이터가 일반적인 고정 길이 표 데이터와 다른 점을 두 가지 설명해 보자.

  2. RNN에서 hidden state는 어떤 역할을 하는가?

  3. 긴 문장에서 기본 RNN이 어려움을 겪는 이유는 무엇인가?

  4. LSTM과 GRU에서 게이트는 어떤 역할을 하는가?

  5. Attention을 감성 분류 문제에 적용하면 어떤 장점이 있는가?

  6. Attention 가중치를 해석할 때 주의해야 할 점은 무엇인가?

체크리스트

  • 문장, 주가, 센서 신호가 왜 시퀀스 데이터인지 설명할 수 있다.

  • RNN이 현재 입력과 이전 은닉 상태를 함께 사용한다는 점을 이해했다.

  • 장기 의존성 문제가 무엇인지 예를 들어 말할 수 있다.

  • LSTM과 GRU가 게이트로 정보를 조절한다는 직관을 설명할 수 있다.

  • Attention이 중요한 위치에 더 집중하는 방식임을 이해했다.

  • 임베딩 평균 모델, GRU 모델, Attention 모델의 차이를 비교할 수 있다.

  • padding mask가 왜 필요한지 설명할 수 있다.

다음 장 연결

이번 장에서는 순서가 있는 데이터를 다루는 모델을 배웠다. RNN, LSTM, GRU는 입력을 순서대로 읽는다. Attention은 중요한 위치를 더 크게 보는 방법을 제공한다.

다음 장에서는 이 Attention 아이디어를 중심으로 발전한 Transformer를 배운다. Transformer는 RNN처럼 단어를 하나씩 순서대로 처리하지 않고, 문장 안의 단어들이 서로를 직접 바라보게 만든다. 이 구조가 현대 언어 모델의 핵심이다.

책 목록

AI 교육 3권 : 딥러닝 핵심: 입력에서 업데이트까지, 신경망을 제대로 이해하는 법

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기