신경망으로 정렬


15

이전의 신경망 골프 도전 ( 이것저것 )은 저에게 새로운 도전을하게했습니다.

도전

정수 항목을 가진 4 차원 입력 벡터 (a,b,c,d) 가 지면 네트워크가 출력 하도록 가장 작은 피드 포워드 신경망을 찾습니다 보다 작은 좌표 방향 오차 .[10,10]sort(a,b,c,d)0.5

허용 성

이 과제를 위해, 피드 포워드 신경망계층 구성으로 정의됩니다 . 레이어는 함수 로, 행렬 의 가중치 , 벡터로 지정됩니다. of biases 및 좌표 방향으로 적용되는 활성화 함수 :L:RnRmARm×nbRm f:RR

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

특정 작업에 대해 활성화 기능을 조정할 수 있으므로이 과제를 흥미롭게 유지하기 위해 활성화 기능 클래스를 제한해야합니다. 다음과 같은 활성화 기능이 허용됩니다.

  • 정체. f(t)=t

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

  • 소프트 플러스. f(t)=ln(et+1)

  • 쌍곡 탄젠트. f(t)=tanh(t)

  • S 자형. f(t)=etet+1

전반적으로, 허용 가능한 신경망 은 일부 k에 대해 LkLk1L2L1 합니다 . 여기서 각 레이어 L_i 는 가중치 A_i , 바이어스 b_i 및 활성화 함수 f_i로 지정됩니다 위 목록에서. 예를 들어, 다음 신경망은 허용됩니다 (이 도전의 성능 목표를 만족 시키지는 않지만 유용한 가젯 일 수 있습니다).kLiAibifi

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

이 예는 두 개의 레이어를 보여줍니다. 두 레이어 모두 바이어스가 없습니다. 첫 번째 계층은 ReLU 활성화를 사용하고 두 번째 계층은 ID 활성화를 사용합니다.

채점

당신의 점수는 0이 아닌 가중치와 바이어스 의 총 수입니다 .

(예를 들어, 바이어스 벡터가 0이므로 위 예제의 점수는 16입니다.)


2
@ Close-voter : 명확하지 않은 것은 무엇입니까? 이전 NN 과제 중 하나가 잘 지정되지 않았다고 생각합니다.
flawr

1
아니요-건너 뛰기 연결이 허용되지 않습니다.
Dustin G. Mixon

1
@ DustinG.Mixon 저는 실제로 16 개 대신 15 개의 가중치 만 사용하는 max / min에 대한 접근법을 찾았지만 상당히 덜 우아합니다.)
flawr

3
이것은 미래의 신경망 과제에 대한 모델로 사용할 수 있다고 생각되는 훌륭한 과제입니다.
xnor

1
개인적으로 연결을 건너 뛰지 않고 최적화하는 것이 어렵다는 것을 알게되었습니다. 입력에 충분히 가까운 숫자를 출력하려면 정렬 NN이 필요하기 때문입니다. 따라서 여러 레이어에 걸쳐 입력을 '기억'/ '재구성'해야합니다. 활성화로 허용되는 기능의 역수가 없기 때문에 가 포함 된 후에는 쉽게 수행 할 수있는 방법을 알 수 없습니다. 따라서 우리는 기준선 (flawr의 답변에 표시된 것처럼 약간의 개선 사항이 있음)이 이미 최적에 가까운 ReLU 만 남았습니다. et
Joel

답변:


13

Octave , 96 88 87 84 76 54 50 무게 및 바이어스

이 6 계층 신경망은 본질적 으로 구성 요소로서 매우 간단한 / 네트워크로 구축 된 3 단계 분류 네트워크 입니다. 기본적으로 아래 그림과 같이 Wikipedia의 예제 네트워크이며 약간 수정되었습니다. 처음 두 비교는 병렬로 수행됩니다. ReLU를 통해 음수를 우회하려면 먼저 100을 더한 다음 끝에 100을 다시 빼십시오.minmax

따라서 이것은 순진한 구현이므로 기준으로 간주되어야합니다. 그러나 너무 큰 크기가 아닌 가능한 모든 숫자를 완벽하게 정렬합니다. 100을 다른 숫자로 바꿔 범위를 조정할 수 있습니다.

온라인으로 사용해보십시오!

최대 / 최소 구성 요소

A (이 상당히 적은 우아한 적은 매개 변수를 사용하여 두 숫자의 최소 및 최대 값을 찾기 위해! 이제 더 우아한 방법, 감사 @xnor) 방법 :

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

이것은 우리가 훨씬 적은 무게와 바이어스를 사용해야 함을 의미합니다.

첫 번째 단계에서 모든 숫자를 양수로 만들고 마지막 단계에서 역수로 바꾸면 -8 가중치가된다는 점을 지적한 @Joel에게 감사드립니다. -22 무게를 만드는 더 짧은 최대 / 최소 방법을 지적 해 주신 @xnor에게 감사드립니다! 특정 매트릭스를 결합하여 또 다른 -4 가중치를 생성하는 팁에 대해 @ DustinG.Mixon에게 감사드립니다!

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
상수 오프셋은 기본적으로 입력을 음이 아닌 것으로 만드는 데 사용됩니다. 첫 번째 계층에서 완료되면 비교 블록의 모든 중간 출력은 음이 아니므로 마지막 계층에서만 다시 변경하기에 충분합니다.
Joel

1
(a - relu(a-b), b + relu(a-b))? 로 더 짧은 최소 최대 가제트를 얻을 수 있습니까?
xnor

@joel 오 이제 나는 많은 이해가된다 :)
flawr

@xnor 큰 차이를 만드는 많은 감사합니다 !!!!
flawr

1
결과가 아님 : 첫 번째 치우침의 점수는 nnz (a0)가 아니라 nnz (A1 * a0)입니다. (그렇지 않으면 신원 매트릭스의 가격을 지불해야합니다.)이 숫자는이 경우 동일합니다.
Dustin G. Mixon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.