
PyTorch와 Lightning AI로 LSTM 구축하기 파트 3: LSTM 셀 완성하기
요약
PyTorch와 Lightning AI를 사용하여 LSTM 셀의 구현을 완성하고 순전파(forward pass) 과정을 설명합니다. 단기 기억 생성 로직과 옵티마이저 설정 방법을 다룹니다.
핵심 포인트
- LSTM 유닛의 단기 기억(Short-Term Memory) 생성 및 스케일링 구현
- 시그모이드 함수를 이용한 출력 비율 결정 방식 설명
- unrolled LSTM을 통한 순전파(forward pass) 메서드 구현
- Lightning AI 환경에서 Adam 옵티마이저 설정 방법
이전 글에서 우리는 LSTM 셀의 생성을 시작했습니다.
이 글에서는 LSTM Unit 구축을 계속하고, 순전파 (forward pass) 및 옵티마이저 (optimizer)를 생성할 것입니다.
단기 기억 (Short-Term Memory) 생성하기
이 단계에서는 업데이트된 단기 기억을 생성하고, 그 중 몇 퍼센트를 출력으로 보낼지 결정합니다.
먼저, 출력 퍼센트를 계산합니다:
output_percent = torch.sigmoid(
(short_memory * self.wo1) +
(input_value * self.wo2) +
...
여기서:
wo1은 현재 단기 기억과 관련된 가중치 (weight)입니다.wo2는 현재 입력값 (input value)과 관련된 가중치입니다.bo1은 편향 (bias) 항입니다.
시그모이드 (sigmoid) 함수는 0과 1 사이의 값을 생성하며, 이는 출력으로 전달되어야 하는 정보의 비율을 나타냅니다.
다음으로, 이 퍼센트를 사용하여 새로운 단기 기억의 크기를 조절 (scale)합니다.
먼저 업데이트된 장기 기억 (long-term memory)에 tanh 활성화 함수 (activation function)를 적용한 다음, 그 결과에 output_percent를 곱합니다.
updated_short_memory = torch.tanh(updated_long_memory) * output_percent
마지막으로, 업데이트된 장기 기억 및 단기 기억 값을 반환합니다:
return [updated_long_memory, updated_short_memory]
이 시점에서 우리의 lstm_unit() 함수는 완성되었습니다.
def lstm_unit(self, input_value, long_memory, short_memory):
long_remember_percent = torch.sigmoid(
...
이제 LSTM unit을 구현했으므로, 다음 단계는 펼쳐진 (unrolled) LSTM을 통해 순전파 (forward pass)를 수행하는 forward() 메서드를 생성하는 것입니다.
이 예제에서 입력값은 지난 4일간의 주가 (stock prices)가 될 것입니다.
먼저, 장기 기억 및 단기 기억 값을 초기화합니다:
def forward(self, input):
long_memory = 0
short_memory = 0
다음으로, LSTM unit을 통해 각 날짜의 주가를 처리합니다:
def forward(self, input):
long_memory = 0
...
여기서 동일한 LSTM 유닛(unit)이 매일의 입력에 대해 재사용됩니다. 각 값이 처리됨에 따라, 장기 기억(long-term memory)과 단기 기억(short-term memory)이 업데이트되어 다음 단계로 전달됩니다.
네 번째 날 이후, 우리는 LSTM의 출력 역할을 하는 최종 단기 기억을 반환합니다.
이제 언롤링(unrolled)된 LSTM을 통해 순전파(forward pass)를 수행할 수 있는 forward() 메서드를 갖추었으므로, 옵티마이저(optimizer)를 설정할 준비가 되었습니다.
이는 간단합니다:
def configure_optimizers(self):
return Adam(self.parameters())
이는 Lightning에게 모델의 모든 학습 가능한 파라미터(parameters)를 훈련하기 위해 Adam 옵티마이저를 사용하도록 지시합니다.
다음 기사에서는 훈련 중 손실(loss)을 계산하는 역할을 담당하는 training_step() 메서드를 살펴보겠습니다.
AI 에이전트는 코드를 빠르게 작성합니다. 하지만 사용자에게 알리지 않고 조용히 로직을 제거하거나, 동작을 변경하고, 버그를 유발하기도 합니다. 이러한 문제는 종종 프로덕션(production) 환경에서 발견되곤 합니다.
git-lrc가 이 문제를 해결합니다. 이 도구는 git 커밋에 후킹(hook)하여 모든 diff를 반영하기 전에 검토합니다. 설정은 60초면 충분하며, 완전히 무료입니다.
모든 피드백과 기여자를 환영합니다! 온라인에서 소스 코드를 확인할 수 있으며, 누구나 사용할 준비가 되어 있습니다.
Github에서 ⭐ star를 눌러주세요
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기