Trực giác đằng sau mạng thần kinh tái phát dài hạn (LSTM) là gì?


11

Ý tưởng đằng sau Mạng thần kinh tái phát (RNN) là rõ ràng đối với tôi. Tôi hiểu nó theo cách sau:
Chúng tôi có một chuỗi các quan sát ( ) (hay nói cách khác là chuỗi thời gian đa biến). Mỗi quan sát đơn là một vectơ số chiều. Trong mô hình RNN, chúng tôi giả định rằng quan sát tiếp theo là một chức năng của quan sát trước đó cũng như "trạng thái ẩn" trước đó , trong đó các trạng thái ẩn cũng được biểu thị bằng số vectơ (kích thước của các trạng thái quan sát và ẩn có thể khác nhau). Bản thân các trạng thái ẩn cũng được giả định phụ thuộc vào quan sát trước đó và trạng thái ẩn:o1,o2,,onoiNoi+1oihi

oi,hi=F(oi1,hi1)

Cuối cùng, trong mô hình RNN, hàm được coi là một mạng thần kinh. Chúng tôi đào tạo (phù hợp) mạng lưới thần kinh bằng cách sử dụng dữ liệu có sẵn (một chuỗi các quan sát). Mục tiêu của chúng tôi trong khóa đào tạo là có thể dự đoán các quan sát tiếp theo một cách chính xác nhất có thể bằng các quan sát trước đó.F

Bây giờ, mạng LSTM là một sửa đổi của mạng RNN. Theo tôi hiểu, động lực đằng sau LSTM là giải quyết vấn đề bộ nhớ ngắn đặc biệt với RNN (RNN thông thường gặp rắc rối với các sự kiện liên quan cách nhau quá xa).

Tôi hiểu cách các mạng LSTM hoạt động. Dưới đây là lời giải thích tốt nhất về LSTM mà tôi đã tìm thấy. Ý tưởng cơ bản là như sau:

Ngoài vectơ trạng thái ẩn, chúng tôi giới thiệu một vectơ "trạng thái ô" có cùng kích thước (chiều) với vectơ trạng thái ẩn ( ). Tôi nghĩ rằng vectơ "trạng thái tế bào" được giới thiệu để mô hình bộ nhớ dài hạn. Như trong trường hợp RNN thông thường, mạng LSTM lấy trạng thái quan sát và ẩn làm đầu vào. Sử dụng đầu vào này, chúng tôi tính toán một "trạng thái ô" mới theo cách sau:ci

ci+1=ω1(oi,hi)ci+ω2(oi,hi)cint(oi,hi),

trong đó các chức năng của , và được mô hình hóa bởi các mạng thần kinh. Để làm cho biểu thức đơn giản hơn, tôi chỉ cần loại bỏ các đối số:ω1ω2cint

ci+1=ω1ci+ω2cint

Vì vậy, chúng ta có thể thấy rằng "vectơ trạng thái ô" mới ( ) là tổng trọng số của vectơ trạng thái cũ ( ) và vectơ trạng thái ô "trung gian" ( ). Phép nhân giữa các vectơ là thành phần khôn ngoan (chúng tôi nhân hai vectơ N chiều và kết quả là vectơ N chiều khác). Nói cách khác, chúng ta trộn hai vectơ trạng thái ô (một vectơ cũ và trung gian) bằng cách sử dụng các trọng số riêng của thành phần.cici1cint

Đây là trực giác giữa các hoạt động được mô tả. Vectơ trạng thái tế bào có thể được hiểu là một vectơ bộ nhớ. Vectơ trọng số thứ hai (được tính theo mạng thần kinh) là một cổng "giữ" (hoặc quên). Giá trị của nó quyết định nếu chúng ta giữ hoặc quên (xóa) một giá trị tương ứng từ vectơ trạng thái ô (hoặc vectơ bộ nhớ dài hạn). Vectơ trọng số đầu tiên ( ), được tính bởi một mạng thần kinh khác, được gọi là cổng "ghi" hoặc "ghi nhớ". Nó quyết định nếu một bộ nhớ mới (vectơ trạng thái ô "trung gian") phải được lưu (hay chính xác hơn, nếu một thành phần cụ thể của nó phải được lưu / ghi). "Trung gian"ω2ω1ω1vectơ). Trên thực tế, sẽ chính xác hơn để nói rằng, với hai vectơ trọng số ( và ), chúng tôi "trộn" bộ nhớ cũ và mới.ω1ω2

Vì vậy, sau khi trộn mô tả ở trên (hoặc quên và ghi nhớ), chúng ta có một vectơ trạng thái tế bào mới. Sau đó, chúng tôi tính toán trạng thái ẩn "trung gian" bằng cách sử dụng một mạng thần kinh khác (như trước đây, chúng tôi sử dụng trạng thái quan sát và trạng thái ẩn làm đầu vào). Cuối cùng, chúng tôi kết hợp trạng thái ô mới (bộ nhớ) với trạng thái ẩn "trung gian" ( ) để có trạng thái ẩn mới (hoặc "cuối cùng") mà chúng tôi thực sự xuất ra:oihihint

hi+1=hintS(ci+1),

Trong đó là hàm sigmoid được áp dụng cho từng thành phần của vectơ trạng thái tế bào.S

Vì vậy, câu hỏi của tôi là: Tại sao (hoặc chính xác) kiến ​​trúc này giải quyết vấn đề như thế nào?

Cụ thể tôi không hiểu như sau:

  1. Chúng tôi sử dụng mạng thần kinh để tạo bộ nhớ "trung gian" (vectơ trạng thái ô) được trộn với bộ nhớ "cũ" (hoặc trạng thái ô) để có bộ nhớ "mới" (trạng thái ô). Các yếu tố trọng số cho việc trộn cũng được tính toán bởi các mạng thần kinh. Nhưng tại sao chúng ta không thể sử dụng chỉ một mạng thần kinh để tính toán trạng thái tế bào "mới" (hoặc bộ nhớ). Hay nói cách khác, tại sao chúng ta không thể sử dụng trạng thái quan sát, trạng thái ẩn và bộ nhớ cũ làm đầu vào cho mạng thần kinh tính toán bộ nhớ "mới"?
  2. Cuối cùng, chúng tôi sử dụng các trạng thái được quan sát và ẩn để tính toán trạng thái ẩn mới và sau đó chúng tôi sử dụng trạng thái ô "mới" (hoặc (dài hạn)) để sửa thành phần của trạng thái ẩn mới được tính toán. Nói cách khác, các thành phần của trạng thái ô được sử dụng giống như các trọng số chỉ làm giảm các thành phần tương ứng của trạng thái ẩn được tính toán. Nhưng tại sao vector trạng thái tế bào được sử dụng theo cách đặc biệt này? Tại sao chúng ta không thể tính toán trạng thái ẩn mới bằng cách đặt vectơ trạng thái ô (bộ nhớ dài hạn) vào đầu vào của mạng nơ ron (cũng lấy trạng thái quan sát và ẩn làm đầu vào)?

Thêm:

Đây là một video có thể giúp làm rõ cách tổ chức các cổng khác nhau ("giữ", "viết" và "đọc").


1
Bạn dường như hiểu LSTM tốt hơn tôi, vì vậy tôi sẽ không đăng câu trả lời thực sự, vì đó có thể không phải là thứ bạn đang tìm kiếm: cổng LSTM (chủ yếu là cổng quên) cho phép nó giữ kích hoạt và chuyển màu trong thời gian dài khi cần thiết Vì vậy, thông tin tại thời điểm t có thể được lưu giữ cho đến thời điểm t + n, đối với n lớn tùy ý.
RCpinto

@rcpinto, tôi cũng nghĩ rằng ý tưởng chính đằng sau "kiến trúc" được đề xuất là cho phép lưu giữ thông tin trong thời gian dài (nhiều bước thời gian). Nhưng tôi không hiểu chính xác những gì làm cho nó có thể. Hai mạng cổng ("giữ" và "ghi") có thể học được rằng trọng số phải lớn và trọng lượng ghi phải nhỏ (sau đó chúng ta giữ bộ nhớ trong thời gian dài). Nhưng không thể đạt được chỉ bằng một mạng? Không thể một mạng thần kinh (lấy trạng thái ẩn (bộ nhớ) và trạng thái quan sát làm đầu vào) học được rằng trạng thái ẩn đó nên được giữ mà không thay đổi?
La Mã

Thật vậy, chỉ cần đặt ma trận trọng số định kỳ thành danh tính và nó sẽ luôn giữ kích hoạt cuối cùng. Vấn đề là phần luôn luôn , có nghĩa là các đầu vào mới sẽ tích lũy và nhanh chóng bão hòa kích hoạt nơ-ron, đây cũng là một loại quên. Do đó, khả năng xóa bộ nhớ trước hoặc chặn sự hình thành ký ức mới là rất quan trọng.
RCpinto

@rcpinto, nhưng không thể đạt được "khả năng xóa bộ nhớ trước hoặc chặn sự hình thành của bộ nhớ mới" trong một mạng lưới thần kinh duy nhất? Mạng thần kinh lấy vectơ bộ nhớ (hoặc vectơ trạng thái ẩn) và vectơ trạng thái quan sát làm đầu vào. Không thể một mạng như vậy "quyết định" giữ hoặc thay thế một số thành phần của trạng thái ẩn (bộ nhớ của nó) dựa trên các giá trị của các thành phần trong vectơ trạng thái quan sát?
La Mã

Các LSTM có thể làm điều đó bởi vì các cổng mở hoặc đóng theo đầu vào và trạng thái hiện tại. Không có khái niệm như vậy trong các RNN đơn giản. Trong trường hợp này, chính trạng thái luôn phản ứng với đầu vào / trạng thái trực tiếp và ngay lập tức, ngăn không cho nó "chọn" xem có lưu trữ thông tin mới hay không. Ngoài ra, không có cơ chế xóa một số bộ nhớ được lưu trữ, nó sẽ luôn tích lũy theo các trọng số đầu vào của nơron và các trọng số đó không thể thay đổi sau khi đào tạo. Vì các cổng LSTM là số nhân, chúng mô phỏng sự thay đổi trọng lượng trong quá trình suy luận, phản ứng với đầu vào / trạng thái hiện tại.
RCpinto

Câu trả lời:


1

Theo tôi hiểu câu hỏi của bạn, những gì bạn hình dung về cơ bản là ghép nối đầu vào, trạng thái ẩn trước đó và trạng thái ô trước đó và chuyển chúng qua một hoặc một lớp được kết nối đầy đủ để tính toán trạng thái ẩn và trạng thái ô đầu ra, thay vì tính toán độc lập "Cập nhật tương tác một cách hợp lý với trạng thái tế bào. Điều này về cơ bản sẽ tạo ra một RNN thông thường chỉ xuất ra một phần của trạng thái ẩn.

Lý do chính để không làm điều này là do cấu trúc tính toán trạng thái tế bào của LSTM đảm bảo dòng lỗi liên tục qua các chuỗi dài . Nếu bạn đã sử dụng trọng số để tính toán trạng thái tế bào trực tiếp, bạn cần phải sao lưu thông qua chúng ở mỗi bước! Tránh các hoạt động như vậy phần lớn giải quyết các độ dốc biến mất / nổ mà nếu không thì gây ra RNNs.

Thêm vào đó, khả năng lưu giữ thông tin dễ dàng trong khoảng thời gian dài hơn là một phần thưởng tuyệt vời. Theo trực giác, mạng sẽ khó khăn hơn nhiều để học từ đầu để duy trì trạng thái tế bào trong khoảng thời gian dài hơn.

Điều đáng chú ý là giải pháp thay thế phổ biến nhất cho LSTM, GRU , tương tự tính toán các cập nhật trạng thái ẩn mà không học các trọng số hoạt động trực tiếp trên chính trạng thái ẩn.


0

Nếu tôi đã hiểu chính xác cả hai câu hỏi của bạn sẽ hiểu rõ điều này. Hai nơi chúng tôi đang sử dụng cả tanh và sigmoid để xử lý thông tin. Thay vào đó, chúng ta nên sử dụng một mạng thần kinh duy nhất chứa tất cả thông tin.

Tôi không biết những hạn chế của việc sử dụng một mạng thần kinh duy nhất. Theo tôi, chúng ta có thể sử dụng một mạng nơ ron duy nhất với phi tuyến sigmoid để tìm hiểu chính xác vectơ sẽ được sử dụng một cách thích hợp (được thêm vào trong trạng thái tế bào trong trường hợp đầu tiên hoặc được chuyển sang trạng thái ẩn trong trường hợp thứ hai).

Tuy nhiên, cách chúng tôi đang thực hiện bây giờ, chúng tôi đang chia nhỏ nhiệm vụ thành hai phần, một phần sử dụng tính phi tuyến tính sigmoid để tìm hiểu lượng dữ liệu cần lưu giữ. Phần khác sử dụng tanh là phi tuyến tính chỉ là thực hiện nhiệm vụ tìm hiểu thông tin quan trọng.

Nói một cách đơn giản, sigmoid học được bao nhiêu để tiết kiệm và tanh học những gì để tiết kiệm và phá vỡ nó thành hai phần sẽ giúp việc đào tạo dễ dàng hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.