
PyTorch와 Lightning AI로 LSTM 구축하기 파트 9: 단순화된 LSTM 완성하기
요약
PyTorch와 Lightning AI를 사용하여 단순화된 LSTM 모델을 구축하고 완성하는 과정을 다룹니다. forward 메서드 구현, 옵티마이저 설정, training_step 구현 및 모델 테스트와 학습 과정을 단계별로 설명합니다.
핵심 포인트
- PyTorch의 nn.LSTM을 활용한 데이터 재구성 및 forward 메서드 구현 방법
- Adam 옵티마이저를 사용한 학습률 설정 및 가중치 수렴 관찰
- Lightning AI의 Trainer를 이용한 효율적인 모델 학습 프로세스 구축
- LSTM 모델의 예측값 확인 및 학습 루프 완성
이전 기사에서 우리는 pytorch의 nn.LSTM()을 통해 더 단순화된 버전의 LSTM을 어떻게 사용하기 시작할 수 있는지 살펴보았습니다.
이 기사에서는 단순화된 LSTM 구축을 계속하고 그것이 어떻게 작동하는지 테스트할 것입니다.
forward() 메서드 구현하기
forward() 메서드를 구현하는 것부터 시작해 봅시다.
def forward(self, input):
input_trans = input.view(len(input), 1)
lstm_out, temp = self.lstm(input_trans)
...
input_trans에서, 우리는 데이터 포인트가 몇 개인지에 관계없이 각 데이터 포인트에 대해 하나의 행이 있도록 입력을 재구성(reshape)합니다.
다음으로, 각 데이터 포인트가 단일 특성(feature)만을 포함하므로 입력이 **하나의 열(one column)**을 가져야 한다고 지정합니다.
이렇게 재구성된 입력은 그 다음 LSTM으로 전달됩니다.
출력은 lstm_out에 저장됩니다.
lstm_out은 시퀀스가 처리됨에 따라 각 LSTM 유닛에 의해 생성된 단기 기억(short-term memory) 값을 포함합니다.
우리의 예시에서 시퀀스는 4개의 입력 값을 포함하므로, LSTM은 4번 펼쳐지며(unrolled) lstm_out은 4개의 출력을 포함합니다.
다음으로, 인덱스 -1을 사용하여 시퀀스의 마지막 요소를 선택함으로써 최종 LSTM 유닛으로부터 예측값(prediction)을 추출합니다.
마지막으로, 이 예측값을 반환합니다.
옵티마이저(Optimizer) 설정하기
다음으로, configure_optimizers()를 구현해 봅시다.
학습률(learning rate)을 기본값인 0.001에서 0.1로 높였다는 점을 제외하면 이전 구현과 거의 동일합니다.
이를 통해 Adam 옵티마이저가 최적의 가중치(weights)와 편향(biases)으로 어떻게 수렴하는지 관찰할 수 있습니다.
def configure_optimizers(self):
return Adam(self.parameters(), lr=0.1)
training_step() 구현하기
마지막으로, training_step()을 구현합니다.
이 메서드는 이전과 정확히 같습니다. 손실(loss)을 계산하고 학습 진행 상황을 기록(log)합니다.
def training_step(self, batch, batch_idx):
input_i, label_i = batch
output_i = self.forward(input_i[0])
...
이 시점에서 우리의 모델은 필요한 모든 것을 갖추고 있습니다:
__init__()forward()configure_optimizers()training_step()
모델 테스트하기
학습을 시작하기 전에 모델을 실행하여 예측값을 확인해 보겠습니다.
model = LightningLSTM()
print("\nComparing observed and predicted values")
...
결과는 다음과 같이 출력됩니다:
Comparing observed and predicted values
Company A: Observed = 0, Predicted = tensor([0.0131])
...
모델 학습하기
이제 Lightning 트레이너 (trainer)를 생성해 보겠습니다.
trainer = L.Trainer(max_epochs=300, log_every_n_steps=2)
우리는 300 에포크 (epochs) 동안 학습을 진행하며, log_every_n_steps를 2로 설정합니다.
기본적으로 Lightning은 **50 스텝 (steps)**마다 로그를 기록하는데, 이는 이와 같은 소규모 학습 실행에는 너무 빈도가 낮습니다.
다음으로, 단순히 fit()을 호출합니다.
trainer.fit(model, train_dataloaders=dataloader)
결과 확인하기
학습이 완료되면 예측값을 다시 확인합니다.
Comparing observed and predicted values
Company A: Observed = 0, Predicted = tensor([0.0001])
...
이제 Company A에 대한 예측값은 0에 매우 가깝고, Company B에 대한 예측값은 1에 매우 가깝습니다.
학습 분석하기
다시 한번 TensorBoard를 열어보겠습니다.
모델이 원하는 예측값으로 수렴함에 따라 그래프가 평탄해진 것을 확인할 수 있습니다.
이것으로 LSTM에 대한 탐색을 마칩니다.
우리는 처음부터 직접 LSTM을 구축한 다음, PyTorch의 내장 기능을 사용하여 훨씬 더 단순화된 버전을 구현했습니다. 그 과정에서 TensorBoard를 사용하여 학습 과정을 분석하는 방법과 이러한 통찰을 사용하여 학습 결정을 내리는 방법도 배웠습니다.
다음 시리즈의 기사에서는 PyTorch와 Lightning AI를 사용하여 **워드 임베딩 (word embeddings)**을 구현하는 방법을 살펴보겠습니다.
AI 에이전트(AI agents)는 코드를 빠르게 작성합니다. 하지만 사용자에게 알리지 않고 조용히 로직을 제거하거나, 동작을 변경하고, 버그를 유발하기도 합니다. 이러한 문제는 종종 프로덕션(production) 환경에서 발견되곤 합니다.
git-lrc가 이 문제를 해결합니다. 이 도구는 git 커밋(commit)에 후킹(hook)하여 모든 차이점(diff)이 반영되기 전에 검토합니다. 설정은 60초면 충분하며, 완전히 무료입니다.
모든 피드백과 기여자(contributors)를 환영합니다! 이 프로젝트는 온라인에 공개되어 있으며, 소스 사용이 가능(source-available)하여 누구나 사용할 준비가 되어 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기