การเปลี่ยนแปลงของโครงข่ายประสาทเทียม


14

กำหนดเครือข่ายประสาทfที่ใช้เป็น input nข้อมูลจุด: x1,,xnx_n เราบอกว่าfเป็นการเปลี่ยนแปลงที่ไม่แปรเปลี่ยนถ้า

f(x1...xn)=f(pi(x1...xn))

สำหรับการเปลี่ยนแปลงใด ๆปี่pi

ใครช่วยแนะนำจุดเริ่มต้น (บทความตัวอย่างหรือกระดาษอื่น ๆ ) สำหรับการเปลี่ยนแปลงโครงข่ายประสาทเทียม


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

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

เครือข่ายเอาท์พุทคืออะไร? หากเครือข่ายมีการเปลี่ยนแปลงอย่างต่อเนื่องเอาต์พุตจะเหมือนกันสำหรับลำดับของอินพุตใด ๆ นี่คือสิ่งที่คุณต้องการ?
BlueMoon93

@ BlueMoon93 ใช่นั่นคือสิ่งที่ฉันต้องการ เอาต์พุตสามารถเป็นอะไรก็ได้ (หมายเลข, เวกเตอร์) ตราบใดที่มันไม่ได้ขึ้นอยู่กับลำดับของอินพุต
Josef Ondrej

ทำไมคุณต้องการโครงข่ายใยประสาทแบบแปรเปลี่ยน?
kc sayz 'kc sayz'

คำตอบ:


2

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

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

อีกวิธีหนึ่งในการทำเช่นนี้คือการให้น้ำหนักซ้ำสำหรับอินพุตทั้งหมด ตัวอย่างเช่นสมมติว่าคุณมี 3 อินพุต (i0, i1, i2) และเลเยอร์ที่ซ่อนถัดไปมี 2 โหนด (hl0, hl1) และฟังก์ชั่นการเปิดใช้งาน F. สมมติว่าเป็นเลเยอร์ที่เชื่อมต่ออย่างสมบูรณ์คุณมี 2 น้ำหนัก w0 และ w1 โหนดของเลเยอร์ที่ซ่อนอยู่จะได้รับ hl0 และ hl1 ตามลำดับโดย

  • hl0 = F (i0w0 + i1w0 + i2w0)

  • hl1 = F (i0w1 + i1w1 + i2w1)

ดังนั้นให้เลเยอร์ที่ซ่อนอยู่ซึ่งมีค่าการเปลี่ยนแปลงที่เปลี่ยนแปลงจากอินพุต จากนี้ไปคุณสามารถเรียนรู้และสร้างเครือข่ายที่เหลือตามที่เห็นสมควร นี่เป็นวิธีการที่ได้มาจากเลเยอร์ convolutional


นอกหัวข้อนี้ดูเหมือนจะเป็นโครงการเจ๋ง ๆ หากคุณต้องการที่จะร่วมมือในโครงการวิจัยบางอย่างติดต่อฉัน (ตรวจสอบรายละเอียดของฉัน)


วิธีแรกที่แนะนำจะเป็นไปไม่ได้ในกรณีของฉันเนื่องจากความซับซ้อนในการคำนวณ ในทางกลับกันดูเหมือนจะเข้มงวดเกินไป แต่มันเป็นการเริ่มต้นที่ดีอย่างแน่นอน สิ่งที่ฉันได้มาด้วยเพื่อให้ห่างไกลเป็นวิธีการเดียวกับที่ผมพบว่าในบทความนี้: arxiv.org/pdf/1612.04530.pdf ครั้งแรกที่ฉันพิจารณาทุกคู่ (โดยทั่วไป k-tuples ทั้งหมด) ของอินพุต x_i, x_j, i, j ใน 0 ... n และใช้เครือข่ายประสาทเทียมกับพวกเขาทั้งหมด (เหมือนกัน nn ในแต่ละคู่) สิ่งนี้ให้ฉัน n ** 2 เอาต์พุต f (x_i, x_j) จากนั้นฉันหาค่าเฉลี่ยพวกเขา (หรือหาค่าสูงสุด) และใช้ anoter nn กับผลลัพธ์
Josef Ondrej

นี่คือสิ่งที่ฉันได้มาด้วยจนถึงตอนนี้: github.com/josefondrej/Symmetric-Layers
Josef Ondrej

5

นี่คือสิ่งที่คุณกำลังมองหา:


3

ฉันได้ติดตั้ง Permutational Layer ที่นี่โดยใช้ Keras: https://github.com/off99555/superkeras/blob/master/permutational_layer.py

คุณสามารถเรียกใช้PermutationalModuleฟังก์ชั่นนี้ได้

ดำเนินการตามกระดาษนี้: https://arxiv.org/pdf/1612.04530.pdf

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

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