LSTM(장단기 기억)

LSTM(장단기 기억)이란?

LSTM 작동 원리, LSTM 적용 분야 및 LSTM 설계 방법 알아보기

LSTM(장단기 기억) 신경망은 일종의 RNN(순환 신경망)입니다. LSTM은 데이터 시간 스텝 사이의 장기 종속성을 학습할 수 있으므로 순차 데이터를 학습, 처리, 분류하는 데 주로 사용됩니다.

LSTM 작동 원리

LSTM과 RNN

LSTM 신경망은 RNN 아키텍처의 특수한 형태입니다. RNN은 과거의 정보를 사용하여 현재 입력과 미래의 입력에 대한 신경망의 성능을 개선합니다. RNN에는 은닉 상태와 루프가 있으며, 이를 통해 신경망은 은닉 상태에 과거의 정보를 저장하고 시퀀스에 대해 연산할 수 있습니다. RNN에는 두 개의 가중치 세트가 있습니다. 하나는 은닉 상태 벡터에 대한 가중치 세트이며, 다른 하나는 입력에 대한 가중치 세트입니다. 신경망은 훈련 중에 입력과 은닉 상태, 두 가지 모두에 대한 가중치를 학습합니다. 구현이 되면 출력은 현재 입력, 그리고 이전 입력을 기반으로 하는 은닉 상태를 기반으로 합니다.

실제로, 간단한 RNN은 장기적인 의존관계를 학습하는 능력이 제한적입니다. RNN은 일반적으로 역전파를 통해 훈련되며, 여기서 소실 또는 폭주하는 기울기 문제에 직면할 수 있습니다. 이러한 문제로 인해 신경망의 가중치가 아주 작아지거나 아주 커지므로 신경망이 장기적인 관계를 훈련해야 하는 응용 분야에서 효율성이 떨어지게 됩니다.

RNN은 입력에 은닉 상태를 사용하며, 이 상태는 다음 시간 스텝에서 RNN에 대한 추가 입력으로도 사용됩니다.

기존 RNN에 대한 시간 스텝 t에서의 데이터 흐름.

LSTM 계층 아키텍처

LSTM 계층은 부가적인 게이트를 사용하여 어느 은닉 상태의 정보를 출력과 다음 은닉 상태로 보낼지 제어합니다. 이러한 부가적인 게이트는 장기 종속성을 학습하면서 흔히 발생하는 RNN의 문제를 극복합니다. 기존 RNN의 은닉 상태 이외에도 LSTM 블록의 아키텍처에는 일반적으로 기억 셀, 입력 게이트, 출력 게이트, 망각 게이트 등이 있습니다. 부가적인 게이트를 통해 신경망은 데이터에 있는 장기적인 관계를 더욱 효과적으로 훈련할 수 있습니다. LSTM 신경망은 시간 격차에 대한 민감도가 낮으므로 단순한 RNN에 비해 순차 데이터를 분석하는 데 더욱 적합합니다. 아래 그림에서는 시간 스텝 t에서의 LSTM 아키텍처와 데이터 흐름을 볼 수 있습니다.

LSTM 신경망은 망각 게이트와 기억 셀 같은 추가 유닛을 사용하여 소실 및 폭주하는 기울기 문제를 방지합니다.

LSTM 유닛에 대한 시간 스텝 t에서의 데이터 흐름. 망각 게이트와 기억 셀은 소실하는 기울기 문제와 폭주하는 기울기 문제를 방지합니다.

입력 게이트에 들어가는 가중치와 바이어스는 LSTM 유닛으로 유입되는 새로운 값의 범위를 제어합니다. 이와 유사하게, 망각 게이트와 출력 게이트로 들어가는 가중치와 바이어스는 각각 유닛에 남게 될 값의 범위와 LSTM 블록의 출력 활성화를 계산하는 데 사용되는 유닛 안 값의 범위를 제어합니다.

다음 다이어그램은 시간 스텝이 여러 개인 LSTM 계층을 통한 데이터 흐름을 보여줍니다. 출력의 채널 수는 LSTM 계층의 은닉 유닛 수와 일치합니다.

LSTM 계층의 여러 스텝을 통해 정보가 전파되는 방식을 보여주는 다이어그램.

시간 스텝이 여러 개인 LSTM의 데이터 흐름. 각 LSTM 연산은 이전 연산의 은닉 상태와 셀 상태를 수신하고 업데이트된 상태와 셀 상태를 다음 연산으로 전달합니다.

LSTM 신경망 아키텍처

LSTM은 분류 작업과 회귀 작업을 위한 시퀀스 데이터 및 시계열 데이터와 잘 작동합니다. 비디오는 본질적으로 영상 시퀀스이므로 LSTM은 비디오에도 효과적입니다. 신호를 사용한 작업과 마찬가지로 영상의 시퀀스를 LSTM 계층으로 공급하기 전에 특징 추출을 하는 것이 좋습니다. 각 프레임에 대한 특징 추출을 위해 CNN(컨벌루션 신경망)(예: GoogLeNet)을 활용할 수 있습니다. 다음 그림은 다양한 작업에 대해 LSTM 신경망을 설계하는 방법을 보여줍니다.

다양한 작업에 대해 RNN을 구축하는 데 사용되는 계층이 있는 LSTM 신경망 아키텍처의 다이어그램.

분류 작업, 회귀 작업, 비디오 분류 작업을 위한 LSTM 신경망 아키텍처.

양방향 LSTM

BiLSTM(양방향 LSTM)은 시계열 데이터 또는 시퀀스 데이터의 시간 스텝 간 양방향 종속성을 학습합니다. 이러한 종속성은 신경망이 각 시간 스텝에서 전체 시계열을 학습하도록 하려는 경우에 유용할 수 있습니다. BiLSTM 신경망은 입력 데이터가 LSTM 계층을 두 번 통과하므로 추가 훈련이 가능하며, 따라서 신경망의 성능을 높일 수 있습니다.

BiLSTM은 두 개의 LSTM 컴포넌트, 즉 순방향 LSTM과 역방향 LSTM으로 구성됩니다. 순방향 LSTM에서는 첫 번째 시간 스텝부터 마지막 시간 스텝까지 연산이 수행됩니다. 역방향 LSTM에서는 마지막 시간 스텝부터 첫 번째 시간 스텝까지 연산이 이루어집니다. 두 개의 LSTM 컴포넌트를 통해 데이터를 전달한 후, 연산은 채널 차원을 따라 출력을 결합합니다.

BiLSTM에서 순방향 LSTM 연산과 역방향 LSTM 연산을 보여주는 다이어그램.

시간 스텝이 여러 개인 BiLSTM의 아키텍처.

MATLAB에서 LSTM 예제 시작하기

LSTM 응용 분야

LSTM은 길이가 다를 수 있는 순차적 데이터로 작업하고 해당 데이터의 시간 스텝 간 장기 종속성을 학습하는 데 특히 효과적입니다. LSTM은 감성 분석, 언어 모델링, 음성 인식, 비디오 분석 등에 널리 활용됩니다.

광범위한 LSTM 응용 분야

RNN은 다음과 같은 응용 분야에서 핵심 기술로 사용됩니다.

  • 신호 처리. 신호는 일정 시간에 걸쳐 센서로부터 수집되는 경우가 많으므로 본질적으로 순차적인 데이터입니다. 대규모 신호 데이터셋에 대해 자동 분류회귀를 수행하면 실시간 예측이 가능합니다. 원시 신호 데이터를 심층 신경망에 입력하거나 전처리하여 주파수 성분과 같은 특정한 특징에 집중할 수 있습니다. 특징 추출은 신경망의 성능을 대폭 개선할 수 있습니다.
  • NLP (자연어 처리). 언어는 본질적으로 순차적이며, 텍스트 조각의 길이는 다양합니다. LSTM은 문장의 단어를 맥락화하는 방법을 학습할 수 있기 때문에 텍스트 분류, 텍스트 생성, 기계 번역, 감성 분석 등의 자연어 처리 작업에 매우 유용한 툴입니다.

다음 예제를 통해 신호 처리와 자연어 처리에 LSTM을 적용해 보십시오.

LSTM 수직 응용 분야

딥러닝 응용 분야가 지속적으로 증가함에 따라, LSTM은 다음과 같은 수직 응용 분야에 사용됩니다.

LSTM 신경망을 사용한 NOx 배출량 추정

Renault 엔지니어들은 ZEV(무공해 차량)를 위한 차세대 기술을 개발하는 데 LSTM을 사용했습니다.

이들은 실제 엔진에서 수행한 테스트에서 훈련 데이터를 얻었습니다. 이 테스트 동안 엔진은 일반적인 드라이브 사이클을 거쳤습니다. 엔진 토크, 엔진 속도, 냉매 온도, 기어 수 배출량 등 캡처된 데이터는 LSTM 신경망에 입력으로 제공되었습니다. LSTM 아키텍처의 설계를 반복한 후, 최종 버전의 LSTM은 NOX 수준 예측에서 85~90%의 정확도를 달성했습니다.

MATLAB을 사용한 LSTM

MATLAB®Deep Learning Toolbox™와 함께 사용하면 LSTM을 설계, 훈련, 배포할 수 있습니다. Text Analytics Toolbox™ 또는 Signal Processing Toolbox™를 사용하면 텍스트 분석 또는 신호 분석에 LSTM을 적용할 수 있습니다.

신경망의 설계 및 훈련

단 몇 줄의 코드를 사용하여 프로그래밍 방식으로 LSTM을 설계하고 훈련시킬 수 있습니다. LSTM 계층, 양방향 LSTM 계층LSTM 투영 계층을 사용하여 LSTM을 구축할 수 있습니다. 또한 심층 신경망 디자이너 앱을 사용하여 대화형 방식으로 LSTM을 설계, 분석, 수정할 수도 있습니다.

심층 신경망 디자이너 앱을 사용하여 대화형 방식으로 구축된 단순 BiLSTM 신경망의 스크린샷.

심층 신경망 디자이너 앱을 사용하여 LSTM 신경망을 대화형 방식으로 구축, 시각화, 편집.

신경망 가져오기 및 내보내기

다음과 같이 LSTM 신경망을 Python® 기반 딥러닝 프레임워크와 교환할 수 있습니다.

  • 코드 한 줄로 PyTorch® 모델, TensorFlow™ 모델 및 ONNX™ 모델을 가져올 수 있습니다.
  • 심층 신경망 디자이너를 사용하여 PyTorch 모델과 TensorFlow 모델을 대화형 방식으로 가져올 수 있습니다.
  • 코드 한 줄로 TensorFlow와 ONNX로 LSTM 신경망을 내보낼 수 있습니다.
MATLAB, TensorFlow, ONNX, PyTorch 간의 LSTM 신경망과 기타 심층 신경망의 상호운용성을 보여주는 다이어그램.

MATLAB, TensorFlow, ONNX, PyTorch 간의 LSTM 신경망 변환.

신경망 배포

다음과 같이 임베디드 시스템, 엔터프라이즈 시스템 또는 클라우드에 훈련된 LSTM을 배포할 수 있습니다.

  • CPU와 GPU에 배포할 최적화된 C/C++ 코드와 CUDA 코드를 자동으로 생성할 수 있습니다.
  • FPGA와 SoC에 배포할 합성 가능한 Verilog® 코드와 VHDL® 코드를 생성할 수 있습니다.
CPU, GPU, 마이크로컨트롤러, FPGA에 심층 신경망을 배포하기 위한 MATLAB 및 Simulink 코드 생성을 보여주는 다이어그램.

훈련된 딥러닝 신경망을 프로덕션으로 신속하게 배포할 수 있습니다.