Long short-term memory (LSTM)

Short term vs Long term memory
Short term vs Long term memory
Deep learning là một kĩ thuật Machine Learning mạnh mẽ đang được nhiều người trong ngành biết đến và nghiên cứu. Kĩ thuật này nổi trội là do chúng thực hiện được hai việc cùng lúc: biểu diễn thông tin (represent problem/feature engineering) và học (learning). Do đó, kĩ thuật này còn được gọi là representation learning.

Bên cạnh các lĩnh vực đã gặt hái được nhiều thành công như Xử lý ảnh số và video số, hay Xử lý tiếng nói, Deep Learning cũng được áp dụng vào Xử lý ngôn ngữ tự nhiên. Cụ thể trong bài viết này, Long short-term memory (LSTM) là mô hình cải tiến từ RNN cũng thuộc họ Deep Learning mà ta cần quan tâm.

Nhắc lại Recurrent Neural Networks

Để đọc hiểu một câu hay một đoạn văn, con người chúng ta không quên hết những thông tin trước đó mà sẽ xâu chuỗi lại các dữ liệu đã đọc để làm rõ ý nghĩa cho thông tin hiện tại. Tương tự như việc ôn bài, việc làm này giúp các liên kết bên trong não được khắc sâu và tổ chức lại thông tin cho việc truy suất và xử lý thông tin trong tương lai được rõ ràng và nhanh chóng hơn.

Các mô hình Neural Networks truyền thống không thể làm được điều này. Ví dụ, trong bài toán phân lớp sự kiện cho một đoạn video theo từng giây. Thật khó để một mô hình như vậy có thể dựa vào thông tin trước đó để phân lớp.

RNN giải quyết vấn đề này bằng cách tạo ra các mạng vòng lặp bên trong chúng, cho phép thông tin được lưu trữ lại cho các lần phân tích tiếp theo.

Recurrent Neural Networks have loops
Recurrent Neural Networks have loops
Trong biểu đồ trên, A nhận thông tin của x_t tại thời điểm t và phản hồi lại tương ứng kết quả đầu ra h_t tại thời điểm t. Ta có thể rã vòng lặp trên thành một tiến trình để dễ hình dung hơn.

An unrolled recurrent neural network
An unrolled recurrent neural network
Thay vì chỉ nhận một đầu vào là x như các mạng neural truyền thống, RNN hình thành nên một chuỗi các đầu vào A cùng với x_t tại thời điểm t. Mô hình này khá tương tự như Hidden Markov Model trong bài toán gán nhãn từ loại.

Vấn đề phụ thuộc quá dài (Long-Term Dependencies)

Một trong những ý tưởng khởi thuỷ của RNN là kết nối những thông tin trước đó nhằm hỗ trợ cho các xử lý hiện tại. Nhưng đôi khi, ta chỉ cần dựa vào một số thông tin gần nhất để thực hiện tác vụ hiện tại. Ví dụ, trong language modeling, bạn cố gắng dự đoán từ tiếp theo dựa vào các từ trước đó. Nếu chúng ta dự đoán từ cuối cùng trong câu “đám mây bay trên bầu trời”, thì chúng ta không cần truy tìm quá nhiều từ trước đó, ta có thể đoán ngay từ tiếp theo sẽ là “bầu trời”. Trong trường hợp này, khoảng cách tới thông tin liên quan được rút ngắn lại.

RNN short term depdencies
RNN short term depdencies
RNN long term dependencies
RNN long term dependencies
Về lý thuyết, RNN hoàn toàn có khả năng xử lý “long-term dependencies”, nghĩa là thông tin hiện tại có được là nhờ vào chuỗi thông tin trước đó. Thật không may, trong thực tế, RNN dường như không có khả năng này. Vấn đề này đã được Hochreiter (1991) [German] and Bengio, et al. (1994) đưa ra như một thách thức cho mô hình RNN.

Trong những năm 1990, RNN phải đối diện với hai thách thức lớn đó là Vanishing và Exploding Gradients ảnh hưởng lớn đến hiệu suất của mô hình. Vấn đề này phát sinh trong quá trình huấn luyện.

LSTM formula
LSTM formula
Nếu trọng số của ma trận W nhỏ (trị riêng trọng số của ma trận nhỏ hơn 1.0), điều này sẽ dẫn đến trường hợp được gọi là vanishing gradients khi gradient signal ngày càng nhỏ/tan biến theo quá trình huấn luyện, khiến cho quá trình tối tiểu hoá hàm lỗi hội tụ chậm hoặc dừng hẳn.

Ngược lại, nếu trọng số của ma trận W lớn (trị riêng trọng số của ma trận lớn hơn 1.0), điều này sẽ dẫn đến trường hợp được gọi là exploding gradients khi gradient signal ngày càng bị phân tán trong quá trình huấn luyện, khi đó quá trình tổi tiểu hoá hàm lỗi không hội tụ.

Recurrent nets tìm kiếm và hình thành mối liên kết giữa final output và các input event thông qua nhiều bước trước khi kết thúc quá trình huấn luyện. Vấn đề đặt ra là các thông tin input trước đó cần đặt trọng số tương ứng là bao nhiêu. Do vậy, đối với câu huấn luyện càng dài thì thông tin trước đó ngày càng bị nhiễu hoặc bị che lấp. Khi thực hiện quá nhiều phép toán nhân ma trận liên tục xuyên suốt chiều dài của chuỗi thì hiệu ứng vanishing/exploding sẽ xuất hiện.

Hình minh hoạ dưới đây cho ta thấy hiệu ứng khi áp dụng liên tiếp hàm sigmoid. Dữ liệu thu được ngày càng tan biến dần cho đến lúc không còn nhận ra được nữa. Tương tự như gradient vanishing khi ta truyền dữ liệu qua nhiều layer.

Effects of applying a sigmoid function over and over again
Effects of applying a sigmoid function over and over again

LSTM Networks

Long Short Term Memory networks – thường được gọi là “LSTM”, là trường hợp đặc biệt của RNN, có khả năng học long-term dependencies. Mô hình này được giới thiệu bởi Hochreiter & Schmidhuber (1997), và được cải tiến lại. Sau đó, mô hình này dần trở nên phổ biến nhờ vào các công trình nghiên cứu gần đây. Mô hình này có khả năng tương thích với nhiều bài toán nên được sử dụng rộng rãi ở các ngành liên quan.

LSTM được thiết kế nhằm loại bỏ vấn đề long-term dependency. Trước khi đi vào LSTM, ta quan sát lại mô hình RNN bên dưới, các layer đều mắc nối với nhau thành các module neural network. Trong RNN chuẩn, repeating module này có cấu trúc rất đơn giản chỉ gồm một single tanh layer.

The repeating module in a standard RNN contains a single layer
The repeating module in a standard RNN contains a single layer
LSTM cũng có cấu trúc mắc xích tương tự, nhưng các repeating module có cấu trúc khác hẳn. Thay vì chỉ có một layer neural network, ta có tới bốn layer, tương tác với nhau theo một cấu trúc cụ thể.

The repeating module in an LSTM contains four interacting layers
The repeating module in an LSTM contains four interacting layers
Trước tiên, ta hãy làm quen với ký hiệu được sử dụng.

LSTM notation
LSTM notation
Ở biểu đồ trên, hình tròn nền hồng biểu diễn pointwise operations, ví dụ cộng vector. Hình hộp nền vàng là các neural network layers được huấn luyện. Đường kẻ gộp lại nhau biểu thị cho concatenation, trong khi đó đường rẽ nhánh biểu thị cho sự sao chép từ vị trí này sang vị trí khác.

Ý tưởng của LSTMs

Có lẽ sau khi quan sát mô hình thiết kế của LSTM, bạn sẽ nhận ra ngay, đây là một bảng mạch số, gồm các mạch logic và các phép toán logic trên đó. Thông tin, hay nói khác hơn là tần số của dòng điện di chuyển trong mạch sẽ được lưu trữ, lan truyền theo cách mà chúng ta thiết kế bảng mạch.

Mấu chốt của LSTM là cell state (tế bào trạng thái), đường kẻ ngang chạy dọc ở trên top diagram. Cell state giống như băng chuyền. Nó chạy xuyên thẳng toàn bộ mắc xích, chỉ một vài tương tác nhỏ tuyến tính (minor linear interaction) được thực hiện. Điều này giúp cho thông tin ít bị thay đổi xuyên suốt quá trình lan truyền.

LSTM C Line
LSTM C Line
LSTM có khả năng thêm hoặc bớt thông tin vào cell state, được quy định một cách cẩn thận bởi các cấu trúc gọi là cổng (gate).

Các cổng này là một cách (tuỳ chọn) để định nghĩa thông tin băng qua. Chúng được tạo bởi sigmoid neural net layer và một pointwise multiplication operation.

LSTM gate
LSTM gate
Sigmoid layer outputs có giá trị từ 0 – 1, mô tả độ lớn thông tin được phép truyền qua tại mỗi component. Nếu ta thu được zero điều này có nghĩa là “không cho bất kỳ cái gì đi qua”, ngược lại nếu thu được giá trị là một thì có nghĩa là “cho phép mọi thứ đi qua”. Một LSTM có ba cổng như vậy để bảo vệ và điều khiển cell state.

Phân tích mô hình LSTM

Bước đầu tiên của mô hình LSTM là quyết định xem thông tin nào chúng ta cần loại bỏ khỏi cell state. Tiến trình này được thực hiện thông qua một sigmoid layer gọi là “forget gate layer” – cánh cổng quên lãng. Đầu vào là h_{t-1}x_t, đầu ra là một giá trị nằm trong khoảng [0, 1] cho cell state C_{t-1}. 1 tương đương với “giữ lại thông tin”, 0 tương đương với “loại bỏ thông tin”.

LSTM focus f
LSTM focus f
Bước tiếp theo, ta cần quyết định thông tin nào cần được lưu lại tại cell state. Ta có hai phần. Một, single sigmoid layer được gọi là “input gate layer” quyết định các giá trị chúng ta sẽ cập nhật. Tiếp theo, một tanh layer tạo ra một vector ứng viên mới, \tilde{C}_t. được thêm vào trong cell state.

LSTM focus i
LSTM focus i
Ở bước tiếp theo, ta sẽ kết hợp hai thành phần này lại để cập nhật vào cell state. Lúc cập nhật vào cell state cũ, C_{t-1}, vào cell state mới C_t. Ta sẽ đưa state cũ hàm f_t, để quên đi những gì trước đó. Sau đó, ta sẽ thêm (i_t * C~_t). Đây là giá trị ứng viên mới, co giãn (scale) số lượng giá trị mà ta muốn cập nhật cho mỗi state.

LSTM focus c
LSTM focus c
Cuối cùng, ta cần quyết định xem thông tin output là gì. Output này cần dựa trên cell state của chúng ta, nhưng sẽ được lọc bớt thông tin. Đầu tiên, ta sẽ áp dụng single sigmoid layer để quyết định xem phần nào của cell state chúng ta dự định sẽ output. Sau đó, ta sẽ đẩy cell state qua tanh (đẩy giá trị vào khoảng -1 và 1) và nhân với một output sigmoid gate, để giữ lại những phần ta muốn output ra ngoài.

LSTM focus o
LSTM focus o

Các biến thể của LSTM

Trong thực tế, hầu như mọi bài báo liên quan đến LSTM đều là những biến thể của nó. Sự khác biệt này không đáng kể, nhưng đáng được đề cập ở đây.

Một trong những biến thể LSTM nổi tiếng được giới thiệu bởi Gers & Schmidhuber (2000) bằng cách thêm vào “peephole conections” tương tự như lỗ nhìn trộm được liên kết với nhau. Nghĩa là ta cho các gate layer nhìn thẳng vào cell state.

LSTM peepholes
LSTM peepholes
Đồ thị trên thêm vào các peephole ở tất cả các gate, nhưng có một vài bài báo sẽ bỏ bớt các peephole này.

Một biến thể khác sử dụng coupled forget và input gates. Thay vì tách biệt giữa quyết định quên đi và thêm thông tin mới, ta sẽ gộp chung hai quyết định này lại với nhau. Ta chỉ forget khi ta dự định input cái gì đó vào vị trí của nó. Ta chỉ input các giá trị mới vào state khi ta quên các thông tin cũ.

LSTM tied
LSTM tied
Một biến thể ấn tượng hơn là Gated Recurrent Unit – GRU được giới thiệu bởi Cho, et al. (2014). Mô hình này kết hợp forget và input gates thành một single “update gate”. Nó đồng thời gộp cell state và hidden state, và tạo ra một vài thay đổi khác. Kết quả ta thu được mô hình đơn giản hơn mô hình LSTM truyền thống, mô hình này đang ngày càng phát triển và được sử dụng rộng rãi.

LSTM GRU
LSTM GRU
Biến thể nào là tốt nhất? Sự khác biệt này có đáng kể? Greff, et al. (2015) cho ta thấy sự so sánh khá thú vị giữa các biến thể thông dụng hiện nay, và nhận định rằng tất cả chúng đều như nhau. Jozefowicz, et al. (2015) đã kiểm tra hơn 10,000 kiến trúc RNN, và thấy rằng một số bài toán RNN cho ra kết quả tốt hơn nhiều LSTM. Nên tuỳ theo bài toán mà ta sẽ chọn ra mô hình nào phù hợp nhất.

Kết luận

Mô hình LSTM là một bước đột phá mà chúng ta đạt được từ mô hình RNNs. Liệu vẫn còn những bước đột phá nào khác từ mô hình này không? Một ý kiến thông thường của các nhà nghiên cứu đó là “Có! Sẽ có một bước tiến mới”.

Các ứng dụng của mô hình LSTM

LSTM được ứng dụng vào hand writing rất tốt. Đầu vào là (x, y, p) đường đi của bút viết, output là dự đoán ký tự đang được viết ra.

Online hand writting recognition by RNN with LSTM
Online hand writting recognition by RNN with LSTM
Ngoài ra, còn có các ứng dụng khác như:

  • Robot control
  • Time series prediction
  • Speech recognition
  • Rhythm learning
  • Music composition – http://yoavz.com/music_rnn/
  • Grammar learning
  • Human action recognition
  • Protein Homology Detection

Nguồn tham khảo

9 thoughts on “Long short-term memory (LSTM)

  1. Reblogged this on Speak! Go and commented:
    Long Short Term Memory networks – thường được gọi là “LSTM”, là trường hợp đặc biệt của RNN, có khả năng học long-term dependencies. Mô hình này được giới thiệu bởi Hochreiter & Schmidhuber (1997), và được cải tiến lại. Sau đó, mô hình này dần trở nên phổ biến nhờ vào các công trình nghiên cứu gần đây. Mô hình này có khả năng tương thích với nhiều bài toán nên được sử dụng rộng rãi ở các ngành liên quan. LSTM được thiết kế nhằm loại bỏ vấn đề long-term dependency.

    Like

  2. Em chào anh,
    Em hiện là sinh viên Khoa học Máy tính năm 3 và em khá quan tâm đến Machine Learning. Anh cho em hỏi tên cụ thể của lý thuyết toán(tiếng Anh) trong bài viết này và một số keywords liên quan được không ạ? Em đọc nhưng không hiểu gì cả.
    Cảm ơn anh vì nhiều bài viết hay!

    Like

    1. Hi em,
      LSTM là mạng nơ-ron nhiều lớp nên lý thuyết toán chủ yếu sẽ là Đại số tuyến tính (các phép toán ma trận) và Giải tích (tính Gradient, đạo hàm, …), keywords thì LSTM là đủ.
      Một số link tham khảo:
      http://www-dsi.ing.unifi.it/~paolo/ps/tnn-94-gradient.pdf
      http://deeplearning.cs.cmu.edu/pdfs/Hochreiter97_lstm.pdf
      https://arxiv.org/pdf/1508.03790v2.pdf
      https://arxiv.org/pdf/1503.04069.pdf
      https://arxiv.org/pdf/1507.01526v1.pdf

      Liked by 1 person

  3. Chào anh,

    Khi tìm hiểu về LSTM em thấy nó có các dạng sau: one-to-many, many-to-one, many-to-many, Synchronized Many-to-Many (dựa vào mối quan hệ giữa input và output). Vậy nếu em có 1 tập data về dòng chảy sông gồm 8 thuộc tính và tốc độ dòng chảy ở mỗi row (1 row là 1 ngày và có nhiều rows). Anh cho em hỏi đây là dạng many-to-one hay many-to-many ạ.

    Cám ơn anh.

    Like

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s