Mạng thần kinh tái phát và đệ quy: Cái nào tốt hơn cho NLP?


48

Có Mạng thần kinh tái phát và Mạng thần kinh đệ quy. Cả hai thường được ký hiệu bằng cùng một từ viết tắt: RNN. Theo Wikipedia , NN tái phát thực tế là NN đệ quy, nhưng tôi không thực sự hiểu lời giải thích.

Hơn nữa, tôi dường như không tìm thấy cái nào tốt hơn (với các ví dụ hoặc như vậy) cho Xử lý ngôn ngữ tự nhiên. Thực tế là, mặc dù Socher sử dụng NN đệ quy cho NLP trong hướng dẫn của mình , tôi không thể tìm thấy triển khai tốt các mạng thần kinh đệ quy và khi tôi tìm kiếm trên Google, hầu hết các câu trả lời là về NN tái phát.

Ngoài ra, có một DNN nào áp dụng tốt hơn cho NLP không, hay nó phụ thuộc vào nhiệm vụ NLP? Deep Belief Nets hoặc Autoencoder xếp chồng? (Tôi dường như không tìm thấy bất kỳ việc sử dụng cụ thể nào cho ConvNets trong NLP và hầu hết các triển khai đều có trong tầm nhìn của máy).

Cuối cùng, tôi thực sự thích triển khai DNN cho C ++ (tốt hơn nếu có hỗ trợ GPU) hoặc Scala (tốt hơn nếu có hỗ trợ Spark) thay vì Python hoặc Matlab / Octave.

Tôi đã thử Deeplearning4j, nhưng nó đang được phát triển liên tục và tài liệu hơi lỗi thời và dường như tôi không thể làm cho nó hoạt động được. Quá tệ bởi vì nó có "hộp đen" như cách làm việc, rất giống như scikit-learn hoặc Weka, đó là những gì tôi thực sự muốn.

Câu trả lời:


42

Mạng thần kinh tái phát đang tái phát theo thời gian. Ví dụ: nếu bạn có một chuỗi

x = ['h', 'e', ​​'l', 'l']

Trình tự này được đưa đến một nơron duy nhất có một kết nối duy nhất với chính nó.

Tại thời điểm bước 0, chữ 'h' được đưa ra làm đầu vào. Ở bước 1, 'e' được đưa ra làm đầu vào. Mạng khi được mở ra theo thời gian sẽ trông như thế này.

RNN

Mạng đệ quy chỉ là một khái quát của mạng tái phát. Trong mạng lặp lại, các trọng số được chia sẻ (và thứ nguyên không đổi) dọc theo chiều dài của chuỗi vì bạn sẽ xử lý các trọng số phụ thuộc vào vị trí như thế nào khi bạn gặp một chuỗi tại thời gian thử nghiệm với độ dài khác nhau với bất kỳ thời gian nào bạn thấy . Trong một mạng đệ quy, các trọng số được chia sẻ (và thứ nguyên không đổi) tại mọi nút vì cùng một lý do.

Điều này có nghĩa là tất cả các trọng số W_xh sẽ bằng nhau (được chia sẻ) và do đó sẽ là trọng số W_hh. Điều này đơn giản là vì nó là một nơ-ron đơn lẻ đã được mở ra theo thời gian.

Đây là những gì một Mạng thần kinh đệ quy trông như thế nào. Mạng thần kinh đệ quy

Nó khá đơn giản để xem tại sao nó được gọi là Mạng thần kinh đệ quy. Mỗi con của nút cha chỉ đơn giản là một nút tương tự như nút đó.

Mạng thần kinh bạn muốn sử dụng phụ thuộc vào cách sử dụng của bạn. Trong blog của Karpathy , anh ấy đang tạo từng nhân vật một lần nên mạng lưới thần kinh tái phát là tốt.

Nhưng nếu bạn muốn tạo một cây phân tích cú pháp, thì sử dụng Mạng thần kinh đệ quy sẽ tốt hơn vì nó giúp tạo ra các biểu diễn phân cấp tốt hơn.

Nếu bạn muốn học sâu trong c ++, thì hãy sử dụng CUDA. Nó có một cơ sở người dùng tốt, và nhanh chóng. Tôi không biết nhiều hơn về điều đó nên không thể bình luận thêm.

Trong python, Theano là lựa chọn tốt nhất vì nó cung cấp sự khác biệt tự động, điều đó có nghĩa là khi bạn đang hình thành các NN lớn, lúng túng, bạn không phải tìm độ dốc bằng tay. Theano làm điều đó tự động cho bạn. Tính năng này bị Torch7 thiếu.

Theano rất nhanh vì nó cung cấp trình bao C cho mã python và có thể được thực hiện trên GPU. Nó cũng có một cơ sở người dùng tuyệt vời, điều này rất quan trọng trong khi học một cái gì đó mới.


11

Mạng thần kinh tái phát lớn được coi là mô hình mạnh nhất cho NLP. Một bài viết tuyệt vời được viết bởi A. Karpathy trên Mạng thần kinh tái phát và mô hình hóa cấp độ nhân vật có sẵn tại http://karpathy.github.io/2015/05/21/rnn-effectively/

Đã thử một số lượng lớn các thư viện để học sâu (theano, caffe, v.v.). Tôi thực sự muốn đề xuất sử dụng Torch7 được coi là công cụ tiên tiến nhất cho NN và nó được NYU, Facebook AI và Google DeepMind hỗ trợ. Torch7 dựa trên lua và có rất nhiều ví dụ mà bạn có thể dễ dàng làm quen. Rất nhiều mã có thể được tìm thấy trên github, một khởi đầu tốt sẽ là https://github.com/wojzaremba/lstm .

Cuối cùng, cái hay của lua là LuaJIT có thể được tiêm rất dễ dàng trong Java, Python, Matlab, v.v.


2
Đề nghị đọc blog của Karpathy. Thực sự rất lớn trong việc hiểu RNN.
SolessChong

1

Mạng thần kinh tái phát (RNN) về cơ bản mở ra theo thời gian. Nó được sử dụng cho các đầu vào tuần tự trong đó yếu tố thời gian là yếu tố khác biệt chính giữa các yếu tố của chuỗi. Ví dụ, đây là một mạng thần kinh tái phát được sử dụng để mô hình hóa ngôn ngữ đã được mở ra theo thời gian. Ở mỗi bước thời gian, ngoài đầu vào của người dùng tại bước thời gian đó, nó cũng chấp nhận đầu ra của lớp ẩn được tính ở bước thời gian trước đó.

RNN


Mạng thần kinh đệ quy giống như một mạng phân cấp trong đó thực sự không có khía cạnh thời gian nào cho chuỗi đầu vào nhưng đầu vào phải được xử lý theo cấp bậc theo kiểu cây. Dưới đây là một ví dụ về cách một mạng nơ ron đệ quy trông như thế nào. Nó chỉ ra cách học một cây phân tích cú pháp của câu bằng cách đệ quy đầu ra của thao tác được thực hiện trên một đoạn nhỏ hơn của văn bản.

Đệ quy Mạng thần kinh


[ LƯU Ý ]:

LSTM và GRU là hai loại RNN mở rộng có cổng quên, rất phổ biến trong NLP.

LSTM

LSTM và GRU


Công thức tế bào LSTM:

nhập mô tả hình ảnh ở đây

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.