Сортувати за допомогою нейронної мережі


15

Попередні нейронні проблеми чистої гри в гольф ( це і що ) надихнув мене поставити нове завдання:

Змагання

Знайдіть найменшу нейронну мережу подачі таким чином, що за будь-якого 4-мірного вхідного вектора (a,b,c,d) з цілими записами в [10,10] мережа виводить sort(a,b,c,d) з помилка координат, строго менша за 0.5 .

Допустимість

Для цього завдання нейронна мережа, що подається, визначається як склад шарів . Шар є функцією L:RnRm , що визначається матрицею R м × п з ваг , вектор Ь R м від ухилів , а функція активації F : RR , який застосовується координатно мудрий:ARm×nbRm 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)

  • Сигмоїдний. f(t)=etet+1

В цілому допустима нейронна сітка має вигляд LkLk1L2L1 для деякогоk , де кожен шарLi визначається вагами Ai , зміщенням bi та функцією активації fi із наведеного списку. Наприклад, допустима наступна нейронна сітка (хоча вона не відповідає цілі ефективності цього завдання, вона може бути корисним пристосуванням):

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

Цей приклад демонструє два шари. Обидва шари мають нульовий зміщення. Перший шар використовує активацію ReLU, а другий використовує активацію ідентичності.

Оцінка балів

Ваш бал - це загальна кількість ненульових ваг і ухилів.

(Наприклад, наведений вище приклад має оцінку 16, оскільки вектори зміщення дорівнюють нулю.)


2
@ Близький виборець: Що саме незрозуміло? Я не думаю, що жоден з попередніх викликів у галузі міжнародної співпраці був настільки точно визначений
недолік

1
Ні - пропускне з'єднання заборонено.
Дастін Г. Міксон

1
@ DustinG.Mixon Я фактично просто знайшов підхід для максимальної / хв, яка використовує лише 15 ваг замість 16, але це значно менш елегантно :)
недолік

3
Це чітко визначений виклик, який, на мою думку, може слугувати зразком для майбутніх проблем з нейромережею.
xnor

1
Мені особисто важко оптимізувати без пропускання з'єднань. Це пояснюється тим, що для сортування NN потрібен для виведення чисел досить близьких до входів. Тому видається необхідним "запам'ятати" / "реконструювати" вхідні дані по шарах. Я не бачу, як це можна було зробити легко, колись т. et бере участь , так як немає зворотних цих функцій допускаються в якості активацій. Отже, нам залишаються лише ті ReLU, для яких базовий рівень (з незначними поліпшеннями, як показано у відповіді недостатку) вже майже оптимальний.
Джоель

Відповіді:


13

Октава , 96 88 87 84 76 54 50 ваг і ухилів

Ця 6-шарова нейронна сітка по суті є 3-х ступінчастою системою сортування побудованою з дуже простої min/ max мережі в якості компонента. Це в основному приклад мережі з Вікіпедії, як показано нижче, з невеликою модифікацією: Перші два порівняння робляться паралельно. Щоб обійти від’ємні числа через ReLU, ми просто додаємо спочатку 100, а потім віднімаємо 100 знову в кінці.

Тож це просто слід розглядати як базову лінію, оскільки це наївна реалізація. Однак він сортує всі можливі числа, які не мають занадто великої величини. (Ми можемо регулювати діапазон, замінивши 100 на інше число.)

Спробуйте в Інтернеті!

max / min-компонент

Є ( значно менш елегантний спосіб більш елегантний зараз, завдяки @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
Постійні зсуви в основному використовуються для того, щоб зробити входи невід’ємними. Після того, як зроблено в першому шарі, всі проміжні виводи блоків порівняння є негативними, і його досить змінити лише в останньому шарі.
Джоель

1
Можливо, ви отримаєте коротший гаджет з мінімальним (a - relu(a-b), b + relu(a-b))?
xnor

@joel О тепер я бачу, це має багато сенсу :)
недолік

@xnor Спасибі велике, що робить величезну зміну !!!!
flawr

1
Невпливчастий нітрик: оцінка для першого зміщення - nnz (A1 * a0), а не nnz (a0). (Або ж ми повинні заплатити ціну матриці ідентичності.) Ці цифри в цьому випадку однакові.
Дастін Г. Міксон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.