Sắp xếp với một mạng lưới thần kinh


15

Những thách thức chơi golf mạng thần kinh trước đây ( này cái kia ) đã thôi thúc tôi đặt ra một thử thách mới:

Các thách thức

Tìm mạng nơ ron dẫn nguồn nhỏ nhất sao cho, với bất kỳ vectơ đầu vào 4 chiều nào (a,b,c,d) với các mục nguyên trong [10,10] , mạng đầu ra sort(a,b,c,d) với một lỗi phối hợp-khôn ngoan nhỏ hơn 0.5 .

Quyền tiếp nhận

Đối với thách thức này, một mạng lưới thần kinh feedforward được định nghĩa là một thành phần của các lớp . Một lớp là một hàm L:RnRm được chỉ định bởi một ma trận MộtRm×n của trọng lượng , một vector bRm của những thành kiến , và một chức năng kích hoạt f:RR được áp dụng coordinate- khôn ngoan:

L(x): =f(Mộtx+b),xRn.

Vì các chức năng kích hoạt có thể được điều chỉnh cho bất kỳ tác vụ nhất định, chúng tôi cần hạn chế lớp chức năng kích hoạt để giữ cho thử thách này thú vị. Các chức năng kích hoạt sau đây được cho phép:

  • Danh tính. f(t)=t

  • ReLU. f(t)=max(t,0)

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

  • Hyperbolic tiếp tuyến. f(t)=tanh(t)

  • Sigmoid. f(t)= =etet+1

Nhìn chung, một lưới thần kinh có thể chấp nhận có dạng LkLk-1L2L1 đối với một số k , trong đó mỗi lớp LTôi được xác định bởi trọng lượng MộtTôi , những thành kiến bTôi , và một chức năng kích hoạt fTôi từ danh sách trên. Ví dụ: mạng lưới thần kinh sau đây được chấp nhận (trong khi nó không thỏa mãn mục tiêu hiệu suất của thử thách này, nó có thể là một tiện ích hữu ích):

[tối thiểu(một,b)tối đa(một,b)]= =[1-1-12-121-11212]ReLBạn[1212-12-121-1-11][mộtb]

Ví dụ này thể hiện hai lớp. Cả hai lớp có độ lệch bằng không. Lớp đầu tiên sử dụng kích hoạt ReLU, trong khi lớp thứ hai sử dụng kích hoạt nhận dạng.

Chấm điểm

Điểm của bạn là tổng số khác trọng số và độ lệch nhau.

(Ví dụ: ví dụ trên có điểm 16 vì các vectơ sai lệch bằng không.)


2
@ Gần cử tri: Chính xác thì điều gì không rõ ràng? Tôi không nghĩ một trong những thách thức NN trước đó được chỉ định rõ ràng như vậy.
flawr

1
Không - bỏ qua các kết nối không được phép.
Dustin G. Mixon

1
@ DustinG.Mixon Tôi thực sự chỉ tìm thấy một cách tiếp cận tối đa / phút chỉ sử dụng 15 trọng lượng thay vì 16, nhưng nó kém thanh lịch hơn đáng kể :)
flawr

3
Đây là một thách thức được chỉ định độc đáo mà tôi nghĩ có thể đóng vai trò là mô hình cho các thách thức mạng lưới thần kinh trong tương lai.
xnor

1
Cá nhân tôi thấy khó khăn để tối ưu hóa mà không bỏ qua các kết nối. Điều này là do NN sắp xếp được yêu cầu để số đầu ra đủ gần với đầu vào. Vì vậy, có vẻ như cần phải 'nhớ' / 'tái cấu trúc' các đầu vào trên các lớp. Tôi không thấy làm thế nào có thể được thực hiện dễ dàng một lầnetđược tham gia vì không có nghịch đảo của các chức năng được phép như kích hoạt. Vì vậy, chúng tôi chỉ còn lại các ReLUs mà đường cơ sở (với những cải tiến nhỏ như trong câu trả lời của flawr) đã gần tối ưu.
Joel

Câu trả lời:


13

Octave , 96 88 87 84 76 54 50 trọng lượng & thành kiến

Mạng lưới thần kinh 6 lớp này về cơ bản là một mạng sắp xếp 3 bước được xây dựng từ một mạng rất đơn giản min/ maxnhư một thành phần. Về cơ bản, đây là mạng ví dụ từ wikipedia như dưới đây, với một sửa đổi nhỏ: Hai so sánh đầu tiên được thực hiện song song. Để bỏ qua các số âm mặc dù ReLU, chúng ta chỉ cần thêm 100 trước, sau đó trừ 100 lần nữa vào cuối.

Vì vậy, điều này chỉ nên được coi là một cơ sở vì nó là một thực hiện ngây thơ. Tuy nhiên, nó sắp xếp tất cả các số có thể không có cường độ quá lớn một cách hoàn hảo. (Chúng tôi có thể điều chỉnh phạm vi bằng cách thay thế 100 bằng một số khác.)

Hãy thử trực tuyến!

tối đa / tối thiểu thành phần

Hiện tại có một cách ( thanh lịch hơn đáng kể thanh lịch hơn, cảm ơn @xnor!) Để tìm tối thiểu và tối đa hai số sử dụng ít tham số:

tối thiểu= =một-ReLBạn(một-b)tối đa= =b+ReLBạn(một-b)

Điều này có nghĩa là chúng ta phải sử dụng trọng lượng và độ lệch ít hơn rất nhiều.

Cảm ơn @Joel đã chỉ ra rằng nó là đủ để làm cho tất cả các số dương trong bước đầu tiên và đảo ngược nó trong bước cuối cùng, làm cho trọng số -8. Cảm ơn @xnor đã chỉ ra một phương pháp tối đa / tối thiểu thậm chí ngắn hơn mà làm cho trọng lượng -22! Cảm ơn @ DustinG.Mixon về mẹo kết hợp các ma trận nhất định dẫn đến trọng số -4 khác!

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

Hãy thử trực tuyến!


1
Các giá trị bù không đổi được sử dụng cơ bản để làm cho các đầu vào không âm. Sau khi được thực hiện trong lớp đầu tiên, tất cả các đầu ra trung gian của các khối so sánh là không âm và nó chỉ đủ để thay đổi nó trở lại trong lớp cuối cùng.
Joel

1
Bạn có thể có được một tiện ích tối thiểu ngắn hơn với (a - relu(a-b), b + relu(a-b))?
xnor

@joel Bây giờ tôi hiểu rồi, điều đó rất có ý nghĩa :)
flawr

@xnor Cảm ơn rất nhiều mà tạo ra sự khác biệt rất lớn !!!!
flawr

1
Nitlog không liên quan: Điểm cho thành kiến ​​đầu tiên là nnz (A1 * a0), không phải nnz (a0). (Hoặc nếu không, chúng ta phải trả giá của ma trận danh tính.) Những con số này giống nhau trong trường hợp này.
Dustin G. Mixon
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.