Nắm bắt các mẫu ban đầu khi sử dụng backpropagation cắt ngắn theo thời gian (RNN / LSTM)


12

Giả sử tôi sử dụng RNN / LSTM để phân tích tình cảm, đây là cách tiếp cận nhiều-một (xem blog này ). Mạng được đào tạo thông qua việc truyền bá ngược thời gian (BPTT), trong đó mạng không được kiểm soát chỉ trong 30 bước cuối cùng như bình thường.

Trong trường hợp của tôi, mỗi phần văn bản của tôi mà tôi muốn phân loại dài hơn 30 bước không được kiểm soát (~ 100 từ). Dựa trên kiến ​​thức của tôi, BPTT chỉ chạy một lần duy nhất cho một phần văn bản duy nhất, đó là khi nó đã vượt qua toàn bộ phần văn bản và tính toán mục tiêu phân loại nhị phân, , sau đó so sánh với hàm mất để tìm lỗi.y

Độ dốc sau đó sẽ không bao giờ được tính toán liên quan đến các từ đầu tiên của mỗi phần văn bản. Làm thế nào RNN / LSTM sau đó vẫn có thể điều chỉnh trọng số của nó để nắm bắt các mẫu cụ thể chỉ xảy ra trong một vài từ đầu tiên? Ví dụ, giả sử rằng tất cả các câu được đánh dấu là bắt đầu với "Tôi thích điều này" và tất cả các câu được đánh dấu là bắt đầu với "Tôi ghét điều này". Làm thế nào RNN / LSTM nắm bắt được điều đó khi nó chỉ không được kiểm soát trong 30 bước cuối cùng khi nó chạm vào cuối chuỗi dài 100 bước?poSTôitTôivenegmộttTôive

Câu trả lời:


11

Đúng là việc giới hạn độ lan truyền gradient của bạn xuống 30 bước thời gian sẽ ngăn nó học mọi thứ có thể trong tập dữ liệu của bạn. Tuy nhiên, nó phụ thuộc mạnh mẽ vào tập dữ liệu của bạn cho dù điều đó sẽ ngăn nó học những điều quan trọng về các tính năng trong mô hình của bạn!

Giới hạn độ dốc trong quá trình đào tạo giống như giới hạn cửa sổ mà mô hình của bạn có thể đồng hóa các tính năng đầu vào và trạng thái ẩn với độ tin cậy cao. Bởi vì tại thời điểm thử nghiệm, bạn áp dụng mô hình của mình cho toàn bộ chuỗi đầu vào, nó vẫn có thể kết hợp thông tin về tất cả các tính năng đầu vào vào trạng thái ẩn của nó. Nó có thể không biết chính xác làm thế nào để lưu giữ thông tin đó cho đến khi nó đưa ra dự đoán cuối cùng cho câu, nhưng có thể có một số kết nối (yếu hơn được thừa nhận) mà nó vẫn có thể thực hiện.

Trước tiên hãy nghĩ về một ví dụ giả định. Giả sử mạng của bạn tạo 1 nếu có 1 ở bất cứ đâu trong đầu vào của nó và 0 khác. Giả sử bạn huấn luyện mạng theo trình tự có độ dài 20 và giới hạn sau đó chuyển sang 10 bước. Nếu tập dữ liệu huấn luyện không bao giờ chứa 1 trong 10 bước cuối cùng của đầu vào, thì mạng sẽ gặp vấn đề với đầu vào kiểm tra của bất kỳ cấu hình nào. Tuy nhiên, nếu tập huấn luyện có một số ví dụ như [1 0 0 ... 0 0 0] và các ví dụ khác như [0 0 0 ... 1 0 0], thì mạng sẽ có thể nhận được "sự hiện diện của tính năng 1 "ở bất cứ đâu trong đầu vào của nó.

Quay lại phân tích tình cảm rồi. Giả sử trong quá trình đào tạo, mô hình của bạn gặp phải một câu phủ định dài như "Tôi ghét điều này bởi vì ... xung quanh và xung quanh" với, nói, 50 từ trong dấu chấm lửng. Bằng cách giới hạn lan truyền độ dốc xuống 30 bước thời gian, mô hình sẽ không kết nối "Tôi ghét điều này vì" với nhãn đầu ra, vì vậy nó sẽ không chọn "Tôi", "ghét" hoặc "điều này" từ khóa đào tạo này thí dụ. Nhưng nó sẽ nhận các từ trong vòng 30 bước kể từ khi kết thúc câu. Nếu tập huấn luyện của bạn chứa các ví dụ khác có chứa các từ tương tự, có thể cùng với "ghét" thì nó có cơ hội chọn liên kết giữa "ghét" và nhãn tình cảm tiêu cực. Ngoài ra, nếu bạn có các ví dụ đào tạo ngắn hơn, hãy nói, "Chúng tôi ghét điều này vì nó khủng khiếp!" sau đó mô hình của bạn sẽ có thể kết nối các tính năng "ghét" và "này" với nhãn đích. Nếu bạn có đủ các ví dụ đào tạo này, thì mô hình phải có khả năng học kết nối hiệu quả.

Vào thời gian thử nghiệm, giả sử bạn trình bày mô hình bằng một câu dài khác như "Tôi ghét điều này vì ... trên con tắc kè!" Đầu vào của mô hình sẽ bắt đầu bằng "Tôi ghét điều này", sẽ được chuyển sang trạng thái ẩn của mô hình ở một số dạng. Trạng thái ẩn này được sử dụng để tác động đến các trạng thái ẩn trong tương lai của mô hình, do đó, mặc dù có thể có 50 từ trước khi kết thúc câu, trạng thái ẩn từ những từ ban đầu đó có cơ hội lý thuyết ảnh hưởng đến đầu ra, mặc dù nó không bao giờ được huấn luyện về các mẫu có khoảng cách lớn như vậy giữa "Tôi ghét điều này" và cuối câu.


0

@ Imjohns3 có quyền, nếu bạn xử lý các chuỗi dài (kích thước N) và hạn chế truyền ngược lại cho các bước K cuối cùng, mạng sẽ không tìm hiểu các mẫu khi bắt đầu.

Tôi đã làm việc với các văn bản dài và sử dụng phương pháp mà tôi tính toán mất mát và thực hiện backpropagation sau mỗi bước K. Giả sử rằng chuỗi của tôi có N = 1000 mã thông báo, quá trình RNN của tôi trước tiên là K = 100 sau đó tôi cố gắng thực hiện dự đoán (mất tính toán) và backpropagate. Tiếp theo trong khi duy trì trạng thái RNN, phanh chuỗi gradient (theo pytorch-> tách ra) và bắt đầu k = 100 bước khác.

Một ví dụ điển hình về kỹ thuật này bạn có thể tìm thấy ở đây: https://github.com/ksopyla/pytorch_neural_networks/blob/master/RNN/lstm_imdb_tbptt.py

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.