Cấu trúc liên kết mạng thần kinh tái phát (RNN): tại sao luôn được kết nối đầy đủ?


8

Tôi đã bắt đầu đọc về Mạng thần kinh tái phát (RNNs) và Bộ nhớ ngắn hạn (LSTM) ... (... ồ, không đủ điểm đại diện ở đây để liệt kê tài liệu tham khảo ...)

Một điều tôi không nhận được: Dường như các nơ-ron trong mỗi trường hợp của một lớp ẩn được "kết nối đầy đủ" với mọi nơ-ron trong trường hợp trước của lớp ẩn, thay vì chỉ được kết nối với thể hiện của bản thân trước đây / bản thân (và có thể một vài người khác).

Là sự kết nối đầy đủ thực sự cần thiết? Có vẻ như bạn có thể tiết kiệm rất nhiều thời gian lưu trữ và thực hiện và 'nhìn lại' trong thời gian xa hơn, nếu không cần thiết.

Đây là sơ đồ câu hỏi của tôi ...

hình ảnh rnn: kết nối đầy đủ so với kết nối một phần

Tôi nghĩ rằng điều này là để hỏi liệu có ổn không khi chỉ giữ các phần tử đường chéo (hoặc gần đường chéo) trong ma trận "W ^ hh" của 'khớp thần kinh' giữa lớp ẩn định kỳ. Tôi đã thử chạy mã này bằng mã RNN đang hoạt động (dựa trên bản demo bổ sung nhị phân của Andrew Trask ) - tức là đặt tất cả các thuật ngữ không đường chéo thành 0 - và nó thực hiện khủng khiếp, nhưng giữ các thuật ngữ gần đường chéo, tức là tuyến tính có dải hệ thống rộng 3 yếu tố - dường như hoạt động tốt như phiên bản được kết nối đầy đủ. Ngay cả khi tôi tăng kích thước của đầu vào và lớp ẩn .... Vậy ... tôi có gặp may không?

Tôi đã tìm thấy một bài báo của Lai Wan Chan , nơi anh ấy chứng minh rằng đối với các chức năng kích hoạt tuyến tính , luôn có thể giảm mạng thành "dạng chính tắc Jordan" (nghĩa là các yếu tố đường chéo và gần đó). Nhưng dường như không có bằng chứng nào cho sigmoids và các kích hoạt phi tuyến khác.

Tôi cũng nhận thấy rằng các tham chiếu đến các RNN "được kết nối một phần" dường như hầu như biến mất sau khoảng năm 2003, và các phương pháp điều trị mà tôi đã đọc trong vài năm qua dường như đều cho rằng kết nối hoàn toàn. Vậy ... tại sao vậy?


1
Đưa cho tôi các tài liệu tham khảo và tôi sẽ gửi chúng cho bạn nếu bạn muốn.
Antoni Parellada

Bạn có thể nhận xét về bài đăng của riêng bạn và tôi nghĩ đặt (ít nhất) một liên kết cho mỗi bình luận.
Mark L. Stone

@AntoniParellada Cảm ơn! Không thể tìm ra cách nhắn tin trực tiếp, nhưng theo @ Mark L. Stone, tôi sẽ bắt đầu bình luận ...
sh37211

Bài viết về Karpathy trên RNNs: karpathy.github.io/2015/05/21/rnn-effectivity
sh37211

Bài đăng / hướng dẫn của Andrew Trask: iamtrask.github.io/2015/11/15/anyone-can-code-lstm
sh37211

Câu trả lời:


2

Một lý do có thể là do sự thuận tiện toán học. Mạng thần kinh tái phát vanilla (loại Elman ) có thể được định dạng như:

ht= =f(xt,ht-1) , trong đó có thể được viết là .f()σ(Wxt+Bạnht-1)

Phương trình trên tương ứng với hình ảnh đầu tiên của bạn. Tất nhiên bạn có thể làm cho ma trận lặp lại thưa thớt để hạn chế các kết nối, nhưng điều đó không ảnh hưởng đến ý tưởng cốt lõi của RNN.Bạn

BTW: Có hai loại ký ức trong RNN. Một là trọng lượng đầu vào-to-ẩn , trong đó chủ yếu lưu trữ các thông tin từ đầu vào. Cái còn lại là ma trận ẩn-to-hidden , được sử dụng để lưu trữ các lịch sử. Vì chúng tôi không biết phần nào của lịch sử sẽ ảnh hưởng đến dự đoán hiện tại của chúng tôi, cách hợp lý nhất có thể là cho phép tất cả các ý nghĩa có thể và để mạng tự tìm hiểu.WBạn


0

Bạn có thể sử dụng 2 nơ ron đầu vào nếu bạn sắp xếp chúng theo cách tương tự như biến đổi Walsh Hadamard nhanh. Vì vậy, một thuật toán không đúng chỗ sẽ là bước qua vector đầu vào tuần tự 2 phần tử tại một thời điểm. Có 2 nơ ron 2 đầu vào tác động lên từng cặp nguyên tố. Đặt đầu ra của nơ ron thứ nhất một cách tuần tự ở nửa dưới của một mảng vectơ mới, đầu ra của nơ ron thứ hai tuần tự ở nửa trên của mảng vectơ mới. Lặp lại sử dụng mảng vector mới làm đầu vào. Sau khi log_base_2 (n) lặp lại thay đổi trong một trong các thành phần đầu vào có khả năng thay đổi tất cả các đầu ra. Đó là điều tốt nhất bạn có thể làm. n phải là công suất nguyên dương của 2.

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.