Company
교육 철학

LSTM 텍스트 생성

학습 목표

RNN의 발전된 형태인 LSTM을 학습하여, 몇 개의 단어만 입력받아 다음 문장을 완성하는 인공지능을 만들어 봅니다.

학습 순서

1.
이해하기: 텍스트 생성 원리와 LSTM의 개념을 이해합니다.
2.
데이터 살펴보기: 학습에 사용할 데이터를 분석합니다.
3.
학습용 데이터셋 만들기: 모델 학습에 적합한 형태로 데이터를 가공합니다.
4.
LSTM 모델 정의하기: 파이토치를 이용해 LSTM 모델의 구조를 설계합니다.
5.
모델 학습하기: 준비된 데이터로 모델을 학습시킵니다.
6.
모델 성능 평가하기: 학습된 모델이 문장을 얼마나 잘 생성하는지 평가합니다.

핵심 용어 미리보기

LSTM (Long Short-Term Memory): RNN의 발전된 형태로, 장기 기억을 담당하는 **셀 상태(Cell State)**와 단기 기억을 담당하는 **은닉 상태(Hidden State)**를 함께 가진 신경망입니다.
BOW (Bag-of-Words): 문장에 있는 모든 단어들을 중복 없이 모아 고유 번호로 나타낸 단어 집합입니다.
희소 표현 (Sparse Representation): 대부분의 숫자가 0인 표현 방식입니다. (예: 원-핫 인코딩)
밀집 표현 (Dense Representation): 대부분의 숫자가 0이 아닌 유의미한 값으로 채워진 표현 방식입니다. (예: 임베딩 벡터)
파이토치의 임베딩층 (nn.Embedding): 단어를 표현하는 희소 표현을 의미가 압축된 밀집 표현으로 바꿔주는 역할을 합니다.
문장을 만들려면 바로 다음 단어뿐만 아니라 그 이후의 단어들도 예측해야 합니다. 이를 위해 모델을 반복 호출하면서 여러 차례 단어를 출력해야 합니다. 이 과정에서 LSTM을 사용합니다. LSTM은 게이트를 이용해 이전 은닉 상태를 현재 입력에 반영하는 알고리즘입니다. 우선 LSTM을 사용해 문장을 예측하는 방법을 알아보겠습니다.
▼ LSTM을 반복 호출해 예측값을 여러 번 출력하기 그림에서 1과 2는 모델에 들어가는 입력값이며, 0은 초기 은닉 상태입니다. 모델에 단어 1과 은닉 상태 0을 입력하면 새로운 은닉 상태를 얻습니다. 이 은닉 상태를 다음 시점의 입력인 단어 2와 함께 모델에 넣어줍니다. 3번 시점의 입력값은 이전 시점의 입력인 단어 2와 이전 시점의 은닉 상태로부터 예측한 단어 3이 됩니다. 예를 들어 '나는'을 입력받은 모델은 '빨간'이라는 단어를 예측하고, 다시 '나는'과 '빨간'을 입력받아 '사과를'이라는 단어를 예측합니다. 이런 과정을 여러 번 반복함으로써 글을 쓰는 인공지능을 만들 수 있습니다.
인간이 문장을 이해하고 미래를 예측하는 능력의 근간에는 '기억'이 있습니다. 과거의 경험과 정보를 바탕으로 현재를 해석하고 다음을 기약하는 것이죠. 순환 신경망, 즉 **RNN(Recurrent Neural Network)**은 이러한 인간의 사고방식을 모방하여 시계열 데이터 속에서 시간의 흐름과 순서라는 맥락을 학습하도록 설계된 모델입니다. 이전 단계의 출력을 현재 단계의 입력으로 되돌리는 단순하면서도 혁신적인 구조를 통해, RNN은 문장이나 주가처럼 순서가 중요한 데이터의 패턴을 추출하는 데 성공적인 첫발을 내디뎠습니다.
하지만 이 영리한 모델에게는 치명적인 약점이 있었습니다. 바로 기억의 한계였습니다. RNN의 학습 과정은 과거의 정보를 거슬러 올라가며 가중치를 조정하는 방식으로 이루어지는데, 이 과정에서 학습 신호인 '기울기'가 계속해서 곱해집니다. 이 값이 1보다 작으면 신호는 점점 희미해져 결국 사라지고, 1보다 크면 걷잡을 수 없이 커져 버리는 문제가 발생했습니다. 이는 마치 긴 문장의 맨 앞에 있던 중요한 단어를 문장 끝에서는 까맣게 잊어버리는 것과 같았습니다. 이러한 '기울기 소실 및 폭주' 문제 때문에, RNN은 시간의 간격이 조금만 길어져도 효과적으로 학습하기 어려웠습니다.
이러한 RNN의 근본적인 한계를 극복하기 위해 등장한 것이 바로 **LSTM(Long Short-Term Memory)**입니다. LSTM은 이름에서 알 수 있듯, 단기 기억뿐만 아니라 **'장기 기억'**을 효과적으로 다루기 위해 탄생했습니다. 그 핵심에는 **'셀 상태(Cell State)'**라는 별도의 기억 공간이 있습니다. LSTM은 이 셀 상태를 통해 중요한 정보를 컨베이어 벨트처럼 길게 전달하면서, 동시에 '망각', '입력', '출력'이라는 세 개의 정교한 게이트를 통해 기억을 관리합니다. 즉, 어떤 정보를 잊어버릴지, 어떤 새로운 정보를 기억할지, 그리고 어떤 기억을 현재 결과에 반영할지를 스스로 판단하여 학습하는 것입니다.
결론적으로 LSTM은 단순한 순환 구조를 넘어, 선택적으로 정보를 기억하고 잊는 능동적인 메모리 시스템을 도입함으로써 RNN의 고질적인 장기 의존성 문제를 해결했습니다. 이를 통해 비로소 인공지능은 더 길고 복잡한 문맥을 이해하고, 먼 과거의 정보가 현재에 미치는 영향을 파악하는 한 단계 진보한 '기억력'을 갖추게 되었습니다.

1. 망각 게이트 (Forget Gate)

"과거의 정보 중 무엇을 버릴까?"
가장 먼저, LSTM은 과거의 기억(Ct-1) 중에서 어떤 정보를 버릴지 결정합니다.
작동 방식: 현재 입력(Xt)과 바로 직전의 단기 기억(ht-1)을 받아서, 과거의 장기 기억이 현재 얼마나 중요한지 판단합니다.
결과: 만약 과거 정보가 현재 문맥과 관련이 없다면, 이 게이트는 해당 정보를 '잊어버리라'는 신호(0에 가까운 값)를 보냅니다. 반대로 중요하다면 '계속 기억하라'는 신호(1에 가까운 값)를 보내죠. 이미지에서 첫 번째 X 연산 부분이 이 역할을 합니다.

2. 입력 게이트 (Input Gate)

"새로운 정보 중 무엇을 저장할까?"
다음으로, 현재 들어온 정보(Xt) 중에서 어떤 것을 새로운 기억으로 저장할지 결정합니다. 이 과정은 두 단계로 나뉩니다.
1.
무엇을 저장할지 후보 정하기: 현재 입력(Xt)과 이전 단기 기억(ht-1)을 조합해 새로운 기억 후보를 만듭니다.
2.
어떤 정보를 저장할지 결정하기: 어떤 정보를 실제로 장기 기억에 추가할지 선택합니다.
작동 방식: 위 두 단계의 결과를 조합(이미지에서 두 번째 X 연산)하여, 유의미하다고 판단된 새로운 정보만 장기 기억(Ct)에 추가(이미지에서 + 연산)합니다.

3. 출력 게이트 (Output Gate)

"현재 무엇을 말해야 할까?"
마지막으로, 업데이트된 장기 기억(Ct)을 바탕으로 현재 시점의 결과물, 즉 **단기 기억(ht)**을 무엇으로 내보낼지 결정합니다.
작동 방식: 먼저, 현재 입력(Xt)과 이전 단기 기억(ht-1)을 보고 지금 어떤 정보를 출력해야 할지 판단합니다.
결과: 이 판단을 바탕으로, 장기 기억(Ct)에서 필요한 정보만 필터링하여 현재 시점의 결과(ht)로 내보냅니다. 이 ht는 최종 결과물이자, 다음 시점으로 넘어가는 단기 기억이 됩니다. 이미지에서 세 번째 X 연산이 이 과정을 담당합니다.
이처럼 LSTM은 망각, 입력, 출력이라는 세 개의 체계적인 게이트를 통해 정보의 흐름을 정교하게 제어함으로써, RNN의 단점이었던 장기 기억력 문제를 해결한 매우 강력한 모델입니다.

LSTM 장단점

장점
단점
• 순서가 있는 데이터를 다룰 때 사용할 수 있습니다.
• 입출력 관계가 복잡합니다.
• RNN보다 성능이 좋습니다.
• 여전히 과거의 정보가 흐려지는 단점이 남아 있습니다.

유용한 곳

주가, 날씨, 텍스트 등 순서가 있는 데이터를 다룰 때 용이합니다.
신경망을 반복해서 사용해야 하는 곳에 사용할 수 있습니다.