จัดเรียงด้วยเครือข่ายประสาท


15

ประสาทความท้าทายในการเล่นกอล์ฟสุทธิก่อนหน้า ( นี้และว่า ) แรงบันดาลใจที่จะก่อให้เกิดความท้าทายใหม่:

ความท้าทาย

ค้นหาเครือข่ายนิวรัล feedforward ที่เล็กที่สุดซึ่งให้เวกเตอร์อินพุต 4 มิติใด ๆ(a,b,c,d)กับรายการจำนวนเต็มใน[10,10] , เครือข่ายเอาต์พุตsort(a,b,c,d)ด้วย ข้อผิดพลาดการประสานงานที่ชาญฉลาดอย่างเคร่งครัดมีขนาดเล็กกว่า0.50.5

ภัณฑ์

สำหรับความท้าทายนี้เป็นเครือข่ายประสาท feedforwardถูกกำหนดให้เป็นองค์ประกอบของชั้น ชั้นเป็นฟังก์ชันL:RnRmที่ระบุโดยเมทริกซ์ARm×nของน้ำหนัก , เวกเตอร์bRmของอคติและฟังก์ชั่นการเปิดใช้งาน f:RRที่ใช้พิกัด - ฉลาด

L(x):=f(Ax+b),xRn.

เนื่องจากสามารถเปิดใช้งานฟังก์ชั่นการเปิดใช้งานสำหรับงานที่กำหนดเราจำเป็นต้อง จำกัด คลาสของฟังก์ชั่นการเปิดใช้งานเพื่อให้ความท้าทายนี้น่าสนใจ อนุญาตให้ใช้งานฟังก์ชั่นต่อไปนี้:

  • เอกลักษณ์ f(t)=t

  • Relu f(t)=max(t,0)

  • Softplus f(t)=ln(et+1)

  • แทนเจนต์ซึ่งเกินความจริง f(t)=tanh(t)

  • sigmoid f(t)=etet+1

โดยรวมแล้ว, โครงข่ายประสาทที่ยอมรับได้ใช้รูปแบบLkLk1L2L1สำหรับบางk , ซึ่งแต่ละชั้นLiถูกระบุโดยน้ำหนักAi , อคติbi , และฟังก์ชั่นการเปิดใช้งานfiจากรายการด้านบน ตัวอย่างเช่นตาข่ายประสาทต่อไปนี้สามารถใช้ได้ (แม้ว่าจะไม่เป็นไปตามเป้าหมายประสิทธิภาพของการท้าทายนี้ แต่อาจเป็นอุปกรณ์ที่มีประโยชน์):

[min(a,b)max(a,b)]=[111212111212]ReLU[121212121111][ab]

ตัวอย่างนี้แสดงสองชั้น เลเยอร์ทั้งสองไม่มีศูนย์อคติ เลเยอร์แรกใช้การเปิดใช้งาน ReLU ในขณะที่ชั้นที่สองใช้การเปิดใช้งานข้อมูลเฉพาะตัว

เกณฑ์การให้คะแนน

คะแนนของคุณคือจำนวนรวมของน้ำหนักและอคติที่ไม่ใช่ศูนย์ทั้งหมด

(เช่นตัวอย่างด้านบนมีคะแนน 16 เนื่องจากเวกเตอร์อคติเป็นศูนย์)


2
@ Close-voter: อะไรที่ไม่ชัดเจน? ฉันไม่คิดว่าความท้าทาย NN ก่อนหน้านี้ถูกระบุไว้อย่างดี
ข้อบกพร่อง

1
ไม่อนุญาตการข้ามการเชื่อมต่อ
Dustin G. Mixon

1
@ DustinG.Mixon จริง ๆ แล้วฉันเพิ่งพบวิธีการสำหรับสูงสุด / นาทีที่ใช้เพียง 15 น้ำหนักแทน 16 แต่มันสง่างามน้อยลงมาก :)
27419

3
นี่เป็นความท้าทายที่ระบุไว้อย่างดีซึ่งฉันคิดว่าสามารถใช้เป็นแบบจำลองสำหรับความท้าทายโครงข่ายประสาทในอนาคต
xnor

1
ฉันพบว่าเป็นการยากที่จะปรับให้เหมาะสมโดยไม่ต้องข้ามการเชื่อมต่อ นี่เป็นเพราะจำเป็นต้องมีการเรียงลำดับ NN เพื่อส่งออกตัวเลขที่อยู่ใกล้กับอินพุตเพียงพอ ดังนั้นจึงจำเป็นต้อง 'จดจำ' / 'สร้างใหม่' อินพุตข้ามเลเยอร์ ฉันไม่เห็นวิธีการที่สามารถทำได้อย่างง่ายดายเพียงครั้งเดียวมีส่วนเกี่ยวข้องตั้งแต่มีแปรผกผันของฟังก์ชันเหล่านั้นไม่ได้รับอนุญาตให้เปิดใช้งานเป็น ดังนั้นเราจึงเหลือเฉพาะ ReLUs ที่พื้นฐาน (พร้อมการปรับปรุงเล็กน้อยตามที่แสดงในคำตอบของข้อบกพร่อง) ใกล้ดีที่สุดแล้ว et
โจเอล

คำตอบ:


13

เสียงคู่แปด , 96 88 87 84 76 54 50 น้ำหนักและอคติ

โครงข่ายประสาท 6 ชั้นนี้เป็นเครือข่ายการเรียงลำดับ 3 ขั้นตอนที่สร้างขึ้นจากง่ายมากmin/max เครือข่ายเครือข่ายที่โดยพื้นฐานแล้วมันเป็นเครือข่ายตัวอย่างจากวิกิพีเดียดังที่แสดงด้านล่างโดยมีการดัดแปลงเล็กน้อย: การเปรียบเทียบสองรายการแรกนั้นทำแบบขนาน ในการหลีกเลี่ยงตัวเลขที่เป็นลบแม้ว่า ReLU เราเพิ่งบวก 100 ก่อนแล้วจึงลบ 100 อีกครั้งในตอนท้าย

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

ลองออนไลน์!

สูงสุด / นาทีส่วนประกอบ

มีวิธี (ที่สวยงามน้อยกว่าวิธีที่สวยงามกว่าตอนนี้ขอบคุณ @ xnor!) วิธีหาจำนวนต่ำสุดและสูงสุดของสองตัวเลขโดยใช้พารามิเตอร์น้อยลง:

min=aReLU(ab)max=b+ReLU(ab)

ซึ่งหมายความว่าเราต้องใช้น้ำหนักและอคติน้อยลงมาก

ขอบคุณ @Joel ที่ชี้ให้เห็นว่ามันเพียงพอที่จะทำให้ตัวเลขทั้งหมดเป็นบวกในขั้นตอนแรกและย้อนกลับไปในตัวเลขสุดท้ายซึ่งทำให้น้ำหนัก -8 ขอบคุณ @xnor สำหรับการชี้ให้เห็นว่าวิธี max / min ที่สั้นกว่านั้นทำให้น้ำหนัก -22! ขอบคุณ @ DustinG.Mixon สำหรับเคล็ดลับในการรวมเมทริกซ์บางอย่างซึ่งทำให้น้ำหนักเพิ่มอีก -4!

function z = net(u)
a1 = [100;100;0;100;100;0];
A1 = [1 0 0 0;0 0 1 0;1 0 -1 0;0 1 0 0;0 0 0 1;0 1 0 -1];
B1 = [1 0 -1 0 0 0;0 0 0 1 0 -1;0 1 1 0 0 0;0 0 0 0 1 1];
A2 = [1 0 0 0;0 1 0 0;1 -1 0 0;0 0 1 0;0 0 0 1;0 0 1 -1];
A3 = [1 0 -1 0 0 0;0 1 1 0 0 0;0 0 0 1 0 -1;0 1 1 -1 0 1;0 0 0 0 1 1];
B3 = [1 0 0 0 0;0 1 0 -1 0;0 0 1 1 0;0 0 0 0 1];
b3 = -[100;100;100;100];
relu = @(x)x .* (x>0);
id = @(x)x;
v = relu(A1 * u + a1);
w = id(B1 * v) ;
x = relu(A2 * w);
y = relu(A3 * x);
z = id(B3 * y + b3);
% disp(nnz(a1)+nnz(A1)+nnz(B1)+nnz(A2)+nnz(A3)+nnz(B3)+nnz(b3)); %uncomment to count the total number of weights
end

ลองออนไลน์!


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

1
คุณจะได้รับ min-max ที่สั้นกว่าด้วย(a - relu(a-b), b + relu(a-b))หรือไม่
xnor

@joel โอ้ตอนนี้ฉันเห็นแล้วว่ามันเป็นเรื่องที่สมเหตุสมผล :)
27419

@ xnor ขอบคุณมากที่สร้างความแตกต่างอย่างมาก !!!!
ข้อบกพร่อง

1
Nitpick แบบต่อเนื่อง: คะแนนสำหรับอคติแรกคือ nnz (A1 * a0) ไม่ใช่ nnz (a0) (หรืออย่างอื่นเราต้องจ่ายราคาของ matrix matrix) ตัวเลขเหล่านี้เหมือนกันในกรณีนี้
Dustin G. Mixon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.