Câu hỏi này nhận được ở một số phẩm chất rất quan trọng của RNN và DNN nói chung. Tôi sẽ trả lời từng câu hỏi phụ của bạn, mặc dù không theo cùng một thứ tự (Tôi sẽ cố gắng làm nổi bật nơi tôi làm)
Chia sẻ thông số
Đầu tiên, chất lượng quan trọng nhất của RNNs được gọi là chia sẻ tham số . Dữ liệu tuần tự thường được nhập vào các lớp riêng biệt. Đối với đầu vào dài 20, mạng RNN sẽ có 20 lớp. Các tham số bên trong giống nhau được sử dụng cho mỗi lớp, vì vậy tất cả 20 lớp sử dụng cùng trọng số và độ lệch b . So sánh điều này với một tri giác đa lớp sẽ có 20 trọng số và độ lệch riêng biệt.Wb
Chia sẻ tham số có một số lợi ích:
- Bây giờ chúng ta có ít tham số hơn. Có 1 khối lặp lại thay vì 20 lớp riêng biệt. Giảm 20 lần!
- Điều này có hiệu quả nhân lên dữ liệu đào tạo. Lớp lặp lại được học từ mỗi từ trong một câu ví dụ trong khi mỗi lớp trong MLP học từ một từ duy nhất cho mỗi câu.
- Mạng của chúng tôi bây giờ linh hoạt hơn nhiều. Chúng tôi có thể đào tạo các câu lên đến 20 từ và sau đó khái quát thành câu 25 từ bằng cách thêm nhiều bước hoặc sử dụng RNN động
Kiến trúc mạng
Bạn hỏi về kích hoạt tanh và sigmoid. Để trả lời điều này, chúng ta phải nói về kiến trúc RNN cụ thể. RNN đơn giản được thảo luận ở trên có một kích hoạt duy nhất. Các RNN đơn giản có xu hướng tạo ra vấn đề biến mất độ dốc (hoặc phát nổ!) Do ứng dụng lặp lại của cùng trọng số và chức năng kích hoạt.
Các khối RNN được kiểm soát (như GRU và LSTM) sử dụng các cơ chế gating để chuyển các kích hoạt vào và ra khỏi trạng thái bộ nhớ và kết hợp các trạng thái bộ nhớ với đầu vào để tạo đầu ra của mỗi khối. Bởi vì điều này, các cổng có thể ngăn chặn độ dốc lan truyền ngược. Sigmoid là một chức năng kích hoạt phổ biến cho các cổng vì nó nén kích hoạt thành (0,1) --- 0 hoàn toàn dừng kích hoạt và 1 cho phép nó đi qua. Bất kỳ chức năng kích hoạt phong nha với một hồ sơ squashing tương tự hoạt động, mặc dù. Giai thoại, sigmoid cứng là khá phổ biến những ngày này.
Ngoài các cổng, các khối RNN có kiểm soát có trạng thái bên trong mà kích hoạt thay đổi khá nhiều. Vì gating giới hạn độ dốc backprop, chúng tôi có rất nhiều tính linh hoạt trong việc kích hoạt này. Chẳng hạn, nó không cần phải bị đè bẹp, và đây là nơi thường thấy các kích hoạt chỉnh lưu (relu, elu, islu, v.v.). Tanh là một lựa chọn hoàn toàn hợp lý là tốt.
Về độ lệch và trọng số, mỗi kích hoạt trong một ô RNN thường có trọng số và độ lệch riêng. Vì vậy, GRU có 3 kích hoạt (ẩn, cập nhật và đặt lại) và mỗi kích hoạt có trọng số và độ lệch riêng. Mặc dù, nhớ lại rằng với tư cách là một RNN, mỗi trong số này được sử dụng lại cho mỗi dấu thời gian.
Đèo ngược
Điều đó bao gồm việc vượt qua khá tốt nhưng bạn cũng hỏi một câu hỏi quan trọng về cách lỗi lan truyền ngược. Có hai phương pháp để tiếp cận điều này.
Buộc giáo viên
Đối với các RNN đưa ra dự đoán ở mỗi bước thời gian (chẳng hạn như dự đoán kết quả của các bước sau, dịch hoặc nhận dạng âm vị), buộc giáo viên là một phương pháp để cô lập từng bước của RNN. Bằng cách loại bỏ các phụ thuộc này, Buộc giáo viên cho phép RNN sử dụng backprop thông thường với quy tắc chuỗi.
txtyt - 1tt - 1t. Do đó, chúng tôi đã xóa mọi kết nối qua mạng.
yt - 1ot - 1
Tuyên truyền ngược thời gian
nxhoy
BPTT hoạt động theo các bước sau.
- ∇otot, yt
- ∇ht
- n ∇WtW
đọc thêm
Tôi đặc biệt giới thiệu chương 10 của Goodfellow, Bengio và Courville's Deep Learning để biết thêm thông tin về RNNs. Ngoài ra, sách RNN của Graves là fantstic cho chi tiết cấp cao hơn