เครือข่ายแบบเรียกซ้ำ vs Recursive Neural: NLP ไหนดีกว่ากัน?


48

มีเครือข่ายประสาทที่เกิดขึ้นอีกและเครือข่ายประสาทแบบเรียกซ้ำ ทั้งสองมักจะแสดงโดยตัวย่อเดียวกัน: RNN ตามที่Wikipedia , Recurrent NN เป็นความจริงแล้ว Recursive NN แต่ฉันไม่เข้าใจคำอธิบายจริงๆ

ยิ่งกว่านั้นฉันดูเหมือนจะไม่พบสิ่งที่ดีกว่า (พร้อมตัวอย่างหรือมากกว่านั้น) สำหรับการประมวลผลภาษาธรรมชาติ ความจริงก็คือถึงแม้ว่า Socher จะใช้ Recursive NN สำหรับ NLP ในการสอนของเขาแต่ฉันไม่พบการใช้งานที่ดีของเครือข่ายประสาทแบบเรียกซ้ำและเมื่อฉันค้นหาใน Google คำตอบส่วนใหญ่เกี่ยวกับ NN ที่เกิดขึ้นอีก

นอกจากนั้นมี DNN อื่นที่ใช้กับ NLP ได้ดีกว่าหรือไม่นั้นขึ้นอยู่กับงาน NLP หรือไม่ ความเชื่อลึกหรือตาข่าย Autoencoders ซ้อนกัน? (ฉันดูเหมือนจะไม่พบการใช้งานใด ๆ ที่พิเศษสำหรับ ConvNets ใน NLP และการใช้งานส่วนใหญ่อยู่ในวิสัยทัศน์ของเครื่องในใจ)

ในที่สุดฉันต้องการใช้งาน DNN สำหรับ C ++ (ดีกว่าถ้ามีการรองรับ GPU) หรือ Scala (ดีกว่าถ้ามีการสนับสนุน Spark) มากกว่า Python หรือ Matlab / Octave

ฉันได้ลอง Deeplearning4j แล้ว แต่มันยังอยู่ในระหว่างการพัฒนาอย่างต่อเนื่องและเอกสารนั้นล้าสมัยไปเล็กน้อยและดูเหมือนว่าฉันจะไม่สามารถใช้งานได้ เลวร้ายเกินไปเพราะมันมี "กล่องดำ" เหมือนกับวิธีทำสิ่งต่าง ๆ เช่น scikit-learning หรือ Weka ซึ่งเป็นสิ่งที่ฉันต้องการจริงๆ

คำตอบ:


42

เครือข่ายประสาทที่เกิดขึ้นซ้ำจะเกิดขึ้นในช่วงเวลา ตัวอย่างเช่นถ้าคุณมีลำดับ

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

ลำดับนี้จะถูกส่งไปยังเซลล์ประสาทเดียวซึ่งมีการเชื่อมต่อเดียวกับตัวเอง

ในขั้นตอนเวลา 0 ตัวอักษร 'h' จะถูกกำหนดเป็นอินพุตในขณะที่ขั้นตอนที่ 1 จะได้รับ 'e' เป็นอินพุต เครือข่ายเมื่อกางออกเมื่อเวลาผ่านไปจะมีลักษณะเช่นนี้

RNN

เครือข่ายแบบเรียกซ้ำเป็นเพียงลักษณะทั่วไปของเครือข่ายที่เกิดซ้ำ ในเครือข่ายที่เกิดขึ้นซ้ำน้ำหนักจะถูกแชร์ (และมิติยังคงที่) ตลอดความยาวของลำดับเนื่องจากคุณจะจัดการกับน้ำหนักที่ขึ้นอยู่กับตำแหน่งอย่างไรเมื่อคุณพบกับลำดับที่เวลาทดสอบที่มีความยาวแตกต่างกันไปตามเวลารถไฟ . ในเครือข่ายแบบเรียกซ้ำน้ำหนักจะถูกแชร์ (และมิติยังคงที่) ที่โหนดทุกโหนดด้วยเหตุผลเดียวกัน

ซึ่งหมายความว่าน้ำหนัก W_xh ทั้งหมดจะเท่ากัน (ใช้ร่วมกัน) และจะเป็นน้ำหนัก W_hh นี่เป็นเพียงเพราะมันเป็นเซลล์ประสาทเดี่ยวที่ถูกเปิดเผยในเวลา

นี่คือลักษณะของ เครือข่ายประสาทแบบเรียกซ้ำเครือข่ายประสาทแบบเรียกซ้ำ

มันค่อนข้างง่ายที่จะดูว่าทำไมมันถึงเรียกว่า Recursive Neural Network แต่ละโหนดย่อยพาเรนต์เป็นเพียงโหนดเดียวกับโหนดนั้น

เครือข่ายประสาทที่คุณต้องการใช้ขึ้นอยู่กับการใช้งานของคุณ ในบล็อกของ Karpathyเขากำลังสร้างตัวละครทีละตัวดังนั้นเครือข่ายประสาทกำเริบนั้นดี

แต่ถ้าคุณต้องการสร้างทรีการแยกวิเคราะห์การใช้เครือข่ายแบบวนซ้ำแบบ Recursive จะดีกว่าเพราะช่วยในการสร้างการแสดงลำดับชั้นที่ดีขึ้น

หากคุณต้องการเรียนรู้อย่างลึกซึ้งใน c ++ ให้ใช้ CUDA มันมีฐานผู้ใช้ที่ดีและรวดเร็ว ฉันไม่ทราบเพิ่มเติมเกี่ยวกับสิ่งนั้นดังนั้นจึงไม่สามารถแสดงความคิดเห็นเพิ่มเติมได้

ในไพ ธ อน Theano เป็นตัวเลือกที่ดีที่สุดเพราะมันให้ความแตกต่างโดยอัตโนมัติซึ่งหมายความว่าเมื่อคุณสร้าง NN ที่ใหญ่และน่าอึดอัดใจคุณไม่ต้องหาการไล่ระดับสีด้วยมือ Theano ทำเพื่อคุณโดยอัตโนมัติ Torch7 ขาดคุณสมบัตินี้

Theano นั้นเร็วมากเนื่องจากมีตัวห่อ C สำหรับโค้ดไพ ธ อนและสามารถนำไปใช้กับ GPU ได้ นอกจากนี้ยังมีฐานผู้ใช้ที่ยอดเยี่ยมซึ่งเป็นสิ่งสำคัญมากในขณะที่เรียนรู้สิ่งใหม่


11

โครงข่ายประสาทขนาดใหญ่ที่เกิดขึ้นอีกครั้งนั้นถือได้ว่าเป็นตัวแบบที่ทรงพลังที่สุดสำหรับ NLP บทความที่ยอดเยี่ยมที่เขียนโดย A. Karpathy เกี่ยวกับเครือข่าย Neural กำเริบและการสร้างแบบจำลองระดับตัวละครสามารถดูได้ที่http://karpathy.github.io/2015/05/21/rnn-effectiveness/

ต้องลองใช้ห้องสมุดจำนวนมากเพื่อการเรียนรู้อย่างลึกซึ้ง (theano, caffe ฯลฯ ) ฉันขอแนะนำให้ใช้ Torch7 ซึ่งถือเป็นเครื่องมือล้ำสมัยสำหรับ NNs และสนับสนุนโดย NYU, Facebook AI และ Google DeepMind Torch7 ขึ้นอยู่กับ lua และมีตัวอย่างมากมายที่คุณสามารถคุ้นเคยได้ง่าย จำนวนมากของรหัสที่สามารถพบได้บน GitHub เป็นจุดเริ่มต้นที่ดีที่จะhttps://github.com/wojzaremba/lstm

ในที่สุดความงามของ lua คือ LuaJIT สามารถฉีดได้อย่างง่ายดายใน Java, Python, Matlab และอื่น ๆ


2
แนะนำให้อ่านบล็อกของ Karpathy มีความเชี่ยวชาญในการทำความเข้าใจ RNN มาก
SolessChong

1

เครือข่ายประสาทกำเริบ (RNN) โดยทั่วไปแผ่ออกไปตามเวลา มันถูกใช้สำหรับอินพุตแบบลำดับที่ปัจจัยเวลาเป็นปัจจัยความแตกต่างหลักระหว่างองค์ประกอบของลำดับ ตัวอย่างเช่นที่นี่เป็นเครือข่ายประสาทที่เกิดขึ้นอีกที่ใช้สำหรับการสร้างแบบจำลองภาษาที่ได้รับการเปิดเผยในช่วงเวลา ในแต่ละขั้นตอนนอกเหนือจากอินพุตของผู้ใช้ในขั้นตอนนั้นแล้วยังยอมรับเอาต์พุตของเลเยอร์ที่ซ่อนอยู่ซึ่งถูกคำนวณในขั้นตอนเวลาก่อนหน้า

RNN


Recursive Neural Networks เป็นเหมือนเครือข่ายแบบลำดับชั้นที่ไม่มีการเรียงลำดับของอินพุต แต่การป้อนข้อมูลจะต้องดำเนินการแบบลำดับชั้นในแบบต้นไม้ นี่คือตัวอย่างของลักษณะเครือข่ายประสาทแบบเรียกซ้ำ มันแสดงให้เห็นวิธีการเรียนรู้ต้นไม้แยกของประโยคโดยการเอาท์พุทของการดำเนินการซ้ำ ๆ บนข้อความขนาดเล็ก

Recursice Neural Networks


[ หมายเหตุ ]:

LSTM และ GRUเป็น RNN แบบขยายสองประเภทพร้อมกับเกทเกทซึ่งเป็นเรื่องธรรมดาใน NLP

LSTM

LSTM และ GRU


สูตรเซลล์ LSTM:

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.