Cửa sổ trượt dẫn đến quá mức trong LSTM?


15

Tôi có phù hợp với LSTM của mình không nếu tôi huấn luyện nó thông qua phương pháp cửa sổ trượt? Tại sao mọi người dường như không sử dụng nó cho LSTM?

Đối với một ví dụ đơn giản, giả sử rằng chúng ta phải dự đoán chuỗi ký tự:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Có tệ không (hoặc tốt hơn?) Nếu tôi tiếp tục đào tạo LSTM của mình với các xe buýt nhỏ sau:

A B C D E F G H I J K L M N, backprop, erase the cell

B C D E F G H I J K L M N O, backprop, erase the cell

 .... and so on, shifting by 1 every time?

Trước đây, tôi luôn đào tạo nó như:

A B C D E F G H I J K L M N,  backprop, erase the cell

O P Q R S T U V W X Y Z,  backprop, erase the cell

Thay vì thay đổi bởi một, thay vào đó, tốt hơn là trượt cửa sổ bằng 2 mục, v.v.? Điều đó có nghĩa là gì (về độ chính xác / quá mức)?


Ngoài ra, nếu tôi thực hiện phương pháp cửa sổ trượt trong mạng Feed-Forward, nó có dẫn đến tình trạng thừa không? Tôi sẽ cho là có, bởi vì mạng được tiếp xúc với cùng một vùng thông tin trong một thời gian rất dài. Ví dụ, nó được tiếp xúc E F G H I J Ktrong một thời gian dài.


Biên tập:

Xin nhớ rằng trạng thái tế bào bị xóa giữa các đợt huấn luyện, vì vậy LSTM sẽ có "búa đập đầu" vào những thời điểm này. Không thể nhớ những gì trước OPQRSTUVWXYZ. Điều này có nghĩa là LSTM không thể biết rằng "O" tuân theo "M".

Vì vậy, tôi nghĩ (vì vậy toàn bộ câu hỏi của tôi), tại sao không đưa ra lô trung gian (chồng chéo) ở giữa ... và trong trường hợp đó tại sao không sử dụng nhiều xe buýt nhỏ chồng chéo - với tôi điều này sẽ cung cấp một khóa đào tạo mượt mà hơn? Cuối cùng, điều đó có nghĩa là một cửa sổ trượt cho một LSTM.


Một số thông tin hữu ích tôi đã tìm thấy sau khi câu trả lời được chấp nhận:

từ đây

Từ đầu tiên của bản dịch tiếng Anh có lẽ tương quan cao với từ đầu tiên của câu nguồn. Nhưng điều đó có nghĩa là bộ giải mã phải xem xét thông tin từ 50 bước trước và thông tin đó cần được mã hóa bằng cách nào đó trong vector. Mạng thần kinh tái phát được biết là có vấn đề đối phó với các phụ thuộc tầm xa như vậy. Về lý thuyết, các kiến ​​trúc như LSTM sẽ có thể giải quyết vấn đề này, nhưng trong thực tế, các phụ thuộc tầm xa vẫn còn có vấn đề.

Ví dụ, các nhà nghiên cứu đã phát hiện ra rằng việc đảo ngược chuỗi nguồn (đưa nó ngược vào bộ mã hóa) tạo ra kết quả tốt hơn đáng kể vì nó rút ngắn đường dẫn từ bộ giải mã đến các phần có liên quan của bộ mã hóa. Tương tự, cho ăn một chuỗi đầu vào hai lần dường như cũng giúp mạng ghi nhớ mọi thứ tốt hơn. Ví dụ: nếu một ví dụ đào tạo là "John về nhà", bạn sẽ đưa "John về nhà John về nhà" với mạng như một đầu vào.

Chỉnh sửa sau khi chấp nhận câu trả lời:

Vài tháng sau, tôi có xu hướng sử dụng phương pháp cửa sổ trượt hơn, vì nó sử dụng dữ liệu tốt hơn. Nhưng trong trường hợp đó, có lẽ bạn không muốn đào tạo BCDEFGHIJKLMNO ngay sau ABCDEFGHIJKLMNO. Thay vào đó, hãy xáo trộn các ví dụ của bạn, để dần dần và thống nhất "nhập" tất cả thông tin vào LSTM của bạn. Cung cấp cho nó HIJKLMNOPQRSTU sau ABCDEFGHIJKLMNO, vv Điều đó liên quan trực tiếp đến quên lãng thảm khốc. Như mọi khi, hãy theo dõi Xác thực và Kiểm tra được thiết lập chặt chẽ và dừng ngay khi bạn thấy lỗi của mình tăng dần

Ngoài ra, vấn đề "búa vào đầu" có thể được cải thiện, bằng cách sử dụng Độ dốc tổng hợp. Xem lợi ích của nó ở đây: (câu trả lời được liên kết thảo luận về lợi ích của chuỗi dài) /datascience//a/32425/43077

Câu trả lời:


9

Mặc dù câu trả lời trước đây của @Imran là chính xác, tôi cảm thấy cần phải thêm một lời cảnh báo: có những ứng dụng ngoài kia nơi mọi người đưa cửa sổ trượt vào LSTM. Ví dụ, ở đây , để đóng khung dự báo như là một vấn đề học tập có giám sát.

4(mn+n2+n)mn

Vì các LSTM không yêu cầu đầu vào kích thước cố định, họ có thể tự tìm số nhìn lại tối ưu. Tuy nhiên, nếu bạn đã thực hiện phân tích tự động trước đó và quyết định rằng, ví dụ, bước thời gian hiện tại có tương quan nhất với bước thời gian thứ 10 trước đó và không tương quan với bước thứ 11 hoặc bất kỳ bước nào trong quá khứ, thì bạn có thể có lẽ tiết kiệm cho mình một số thời gian đào tạo bằng cách cho ăn theo trình tự dài cố định. Tuy nhiên, loại đó đánh bại mục đích của một LSTM.

Nếu dữ liệu của bạn không đủ phong phú cho một LSTM, tôi khuyên bạn nên thử một cái gì đó đơn giản hơn nhiều, như một mô hình tự động và làm theo cách của bạn.

EDIT (trả lời một bình luận):

Trình tự chồng lấp được sử dụng làm đầu vào, đặc biệt là khi trình tự rất dài (mặc dù, tất nhiên, 'dài' là tương đối). Mặc dù các LSTM tốt hơn RNN vanilla cho các chuỗi dài, nhưng chúng vẫn có thể gặp một số khó khăn khi nhớ các bước thời gian từ đầu chuỗi nếu chuỗi rất dài. Điều đó dẫn đến những thứ như LSTM hai chiều, đọc chuỗi tiến và lùi, cải thiện sự tiếp xúc của mạng với đầu và cuối của mỗi chuỗi đầu vào. Nguyên tắc là giống nhau với các chuỗi chồng chéo, mặc dù tôi sẽ cho rằng các chuỗi chồng chéo là trực quan hơn.


Cảm ơn bạn, tôi vẫn không biết liệu LSTM có nên / không được đào tạo với các đợt không chồng chéo hay không. Bài đăng bạn thích là một bài có giá trị, nhưng nó chỉ thảo luận về các mạng Chuyển tiếp và không giải quyết các lợi ích / nguy hiểm trong các xe buýt nhỏ chồng chéo của LSTM trong quá trình đào tạo. @Imran cũng không thảo luận về "chống kê đơn" chống lại các xe buýt nhỏ chồng chéo - bình luận đầu tiên của tôi cho bài đăng của anh ấy.
Kari

Tôi đã chỉnh sửa câu hỏi của mình để đưa ra nhận xét
Kari

Rất nhiều thông tin tuyệt vời!
Imran

@Kari Tôi đã sửa đổi câu trả lời của tôi. cái đó có giúp ích không?
Số liệu thống kê

5

LSTM không yêu cầu cửa sổ trượt của đầu vào. Họ có thể nhớ những gì họ đã thấy trong quá khứ và nếu bạn cung cấp các ví dụ đào tạo một lần, họ sẽ chọn cửa sổ kích thước phù hợp của đầu vào để tự nhớ.

Các LSTM đã có xu hướng bị quá mức và nếu bạn cung cấp nhiều dữ liệu dư thừa với một cửa sổ trượt thì có, chúng có khả năng phù hợp quá mức.

Mặt khác, một cửa sổ trượt là cần thiết để dự báo chuỗi thời gian với Mạng thần kinh Feedforward, bởi vì FNN yêu cầu đầu vào có kích thước cố định và không có bộ nhớ, vì vậy đây là cách tự nhiên nhất để cung cấp cho họ dữ liệu chuỗi thời gian.

Việc FNN có phù hợp hay không phụ thuộc vào kiến ​​trúc và dữ liệu của bạn, nhưng tất cả các kỹ thuật chính quy tiêu chuẩn sẽ được áp dụng nếu có. Ví dụ: bạn có thể thử chọn một mạng nhỏ hơn, chính quy L2, Bỏ học, v.v.


Cảm ơn! Tôi sẽ lập luận rằng trạng thái tế bào bị xóa giữa các đợt đào tạo, vì vậy LSTM sẽ có "búa đập đầu" vào những thời điểm này. Không thể nhớ những gì trước OPQRSTUVWXYZ. Điều này có nghĩa là LSTM không thể biết rằng "O" tuân theo "M". Vì vậy, tôi nghĩ, tại sao không cho nó một đợt trung gian (chồng chéo) ở giữa ... và trong trường hợp đó tại sao không sử dụng nhiều xe buýt nhỏ chồng chéo - với tôi điều này sẽ cung cấp một khóa đào tạo mượt mà hơn?
Kari

Cuối cùng, điều đó có nghĩa là một cửa sổ trượt cho một LSTM
Kari

Không cần thiết phải xóa trạng thái tế bào ở giữa các đợt huấn luyện, mặc dù việc sao chép ngược trở lại là điều không thể xảy ra.
Jan van der Vegt

Tôi đã thử nó và - ngay cả với tốc độ học tập 0, lỗi vẫn tăng vọt lên rất ít vì các trạng thái ô không chính xác được sử dụng lại làm "di sản" trong quá trình đào tạo. Tôi không thể xếp chồng hơn 6 lớp với cách tiếp cận này - nó quá hỗn loạn và sẽ không hội tụ. Tuy nhiên, việc đặt lại trạng thái tế bào về 0 sau mỗi Backprop cho phép tôi xếp chồng 150 lớp với 64 nơ-ron trong mỗi lớp và huấn luyện nó với 0,001 tốc độ học & động lượng là 0,9 (Tôi đang sử dụng LayerN normalization, đó là lý do tại sao trường hợp của tôi quá lớn)
Kari

1
Điều này có nghĩa là với "tế bào di sản" LSTM trở nên không ổn định và không đáng tin cậy - nó bắt đầu hoạt động trên một xe buýt nhỏ mới dựa trên các quyết định của nó về trạng thái tế bào cuối cùng (của xe buýt nhỏ trước đó) không được sửa chữa ở mức độ đầy đủ. Vì vậy, xóa trạng thái tế bào sẽ loại bỏ lỗ hổng cơ bản này, nhưng khiến LSTM bị mất trí nhớ
Kari
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.