LSTM คือ อะไร

LSTM คือ อะไร
Photo by cottonbro studio

LSTM ย่อจาก Long Short-Term Memory ถือเป็นประเภทหนึ่งของสถาปัตยกรรมแบบ Recurrent Neural Network (RNN) อยู่ในกลุ่มของ Deep Learning

ถูกออกแบบให้จดจำ Patterns ในช่วงเวลานานๆ มีประสิทธิภาพสำหรับปัญหาการทำนายที่เป็น Sequential เนื่องจากสามารถเก็บข้อมูลก่อนหน้าและนำมาร่วมใช้ในการประมวลผลได้

สามารถแก้ปัญหา Long-term Dependency ได้ โดย RNN แบบดั้งเดิมจะเผชิญกับ ความท้าทายในเรื่อง Long-range Dependency และมีปัญหา Vanishing Gradient

LSTM ถูกออกแบบมาให้จดจำ Long-term Information โดยใช้ Gating Mechanisms ที่ออกแบบมาเฉพาะ

มีความยืดหยุ่นที่ดี LSTM สามารใช้ Model ได้ทั้ง Long-term และ Short-term Temporal Sequences

undefined
Image Source: https://en.wikipedia.org/wiki/Long_short-term_memory

Applications

  • Time-series Prediction เช่น การทำนายราคาหุ้น (Stock Prices Prediction) การทำนายยอดขาย (Sales Forecasting)
  • NLP (Natural Language Processing) เช่น การ Generate text การทำ Sentimental Analysis การแปลภาษา
  • Speech Recognition การแปลงภาษาพูด (Speech) ไปเป็นข้อความ (Text)
  • Music Composition การสร้างเพลงใหม่ บนพื้นฐานของ Patterns ในอดีต
  • Video Analysis การจำแนก Action หรือ Activities ใน Video Sequences

ข้อดี

  • ความสามารถในการจดจำ การจดจำ Patterns จาก Long Sequences ทำให้เหมาะกับ Applications ส่วนใหญ่ในทางปฏิบัติ
  • มีการนำไปใช้งานอย่างแพร่หลาย
  • มี Libraries ต่างๆ รองรับ เช่น TensorFlow และ Keras ทำให้ง่ายต่อการ Implementation

ข้อเสีย

  • ความซับซ้อนในการคำนวณ การ Train LSTMs ใช้เวลาและทรัพยากรในการคำนวณสูง
  • ต้องใช้ Dataset จำนวนมาก สำหรับการ Train Model ที่มีประสิทธิภาพ และหลีกเลี่ยง Overfitting จำเป็นต้องใช้ Data จำนวนมาก
  • Hyperparameter Tuning เหมือนกับ Neural Network อื่นๆ หากต้องการได้ประสิทธิภาพที่ดี จำเป็นต้องใช้ความพยายามกับการทำ Hyperparameter Tuning

ตัวอย่าง Python Code 👨🏻‍💻

import numpy as np
from keras.models import Sequential
from keras.layers import LSTM, Dense

# Create sample data
data = np.array([i for i in range(100)])
target = np.array([i for i in range(1, 101)])

# Reshape the data
data = data.reshape((100, 1, 1))
target = target.reshape((100, 1))

# Create a sequential model
model = Sequential()

# Add an LSTM layer with 50 units
model.add(LSTM(50, activation='relu', input_shape=(1, 1)))

# Add a dense (fully connected) layer with 1 unit for the output 
model.add(Dense(1))

#Compile the model
model.compile(optimizer='adam', loss='mse')

# Train the model
model.fit(data, target, epochs=300, validation_split=0.2, verbose=0)

# Predict a new value
test_input = np.array([100])
test_input = test_input.reshape((1, 1, 1))
test_output = model.predict(test_input)
print (test_output)

******

ข้อมูลอ้างอิง - Analytics Vidhya