효과가 없는 아니나요
4 입력 xor 문제에 정답이 많아져요.
영화 이미테이션 게임 (2014)에서는 해답을 찾는데 컴퓨터로 0부터 끝 번까지 치루었는데 해를 알았음 굳이 이러는 이유가 없다는 거여요.
반복되는 패턴을 따르는 거이다 이럼 이번에는 -1 0 0 1 이나 -1 1 0 0 으로 틀어요. -1 -1 0 2 이거나 .. -1 -1 -1 3 이거나 .. 사실을 더알고 싶었음 학습 역전파 계산이 아니고 브루트포스를 치면 다알겠쩌.
이럼 0101 1010은 출력이 2가 되버리는거 아니나요. 상한 값이 1이어서 머여도 댔저.

Hello world (4 xor) • Playground • Svelte
<script>
// 입력값 4개
var x1 = $state(0)
var x2 = $state(0)
var x3 = $state(0)
var x4 = $state(0)
// 은닉층 가중치/편향 (노드 4개, 각 4가중치)
var w11=$state(0), w12=$state(0), w13=$state(0), w14=$state(0), b1=$state(0)
var w21=$state(0), w22=$state(0), w23=$state(0), w24=$state(0), b2=$state(0)
var w31=$state(0), w32=$state(0), w33=$state(0), w34=$state(0), b3=$state(0)
var w41=$state(0), w42=$state(0), w43=$state(0), w44=$state(0), b4=$state(0)
// 출력층 가중치/편향
var v1=$state(0), v2=$state(0), v3=$state(0), v4=$state(0), b5=$state(0)
// 은닉/출력 노드
var h1=$state(0), h2=$state(0), h3=$state(0), h4=$state(0), r1=$state(0)
function relu(x){ return Math.max(0,x); }
function sigmoid(x){ return 1/(1+Math.exp(-x)); }
$effect(()=>{
h1 = relu(w11*x1 + w12*x2 + w13*x3 + w14*x4 + b1)
h2 = relu(w21*x1 + w22*x2 + w23*x3 + w24*x4 + b2)
h3 = relu(w31*x1 + w32*x2 + w33*x3 + w34*x4 + b3)
h4 = relu(w41*x1 + w42*x2 + w43*x3 + w44*x4 + b4)
r1 = relu(v1*h1 + v2*h2 + v3*h3 + v4*h4 + b5)
})
function resetAll(){
x1=0;x2=0;x3=0;x4=0;
w11=0;w12=0;w13=0;w14=0;b1=0;
w21=0;w22=0;w23=0;w24=0;b2=0;
w31=0;w32=0;w33=0;w34=0;b3=0;
w41=0;w42=0;w43=0;w44=0;b4=0;
v1=0;v2=0;v3=0;v4=0;b5=0;
}
</script>
<table>
<tbody>
<!-- 입력값 선택 -->
<tr>
<td>입력</td>
<td colspan="4">
<label><input type="radio" name="inputs" on:change={()=>{x1=0;x2=0;x3=0;x4=0;}} checked /> (0,0,0,0)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=0;x2=0;x3=0;x4=1;}} /> (0,0,0,1)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=0;x2=0;x3=1;x4=0;}} /> (0,0,1,0)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=0;x2=0;x3=1;x4=1;}} /> (0,0,1,1)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=0;x2=1;x3=0;x4=0;}} /> (0,1,0,0)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=0;x2=1;x3=0;x4=1;}} /> (0,1,0,1)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=0;x2=1;x3=1;x4=0;}} /> (0,1,1,0)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=0;x2=1;x3=1;x4=1;}} /> (0,1,1,1)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=1;x2=0;x3=0;x4=0;}} /> (1,0,0,0)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=1;x2=0;x3=0;x4=1;}} /> (1,0,0,1)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=1;x2=0;x3=1;x4=0;}} /> (1,0,1,0)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=1;x2=0;x3=1;x4=1;}} /> (1,0,1,1)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=1;x2=1;x3=0;x4=0;}} /> (1,1,0,0)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=1;x2=1;x3=0;x4=1;}} /> (1,1,0,1)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=1;x2=1;x3=1;x4=0;}} /> (1,1,1,0)</label>
<label><input type="radio" name="inputs" on:change={()=>{x1=1;x2=1;x3=1;x4=1;}} /> (1,1,1,1)</label>
</td>
</tr>
<tr>
<td colspan="5">x1,x2,x3,x4 = {x1}, {x2}, {x3}, {x4}</td>
</tr>
<!-- 은닉 노드 1 -->
<tr>
<td><span class="output">h1 = {h1.toFixed(3)}</span></td>
<td><input type="range" bind:value={w11} min="-9" max="9" step="1"/><span>w11:{w11}</span></td>
<td><input type="range" bind:value={w12} min="-9" max="9" step="1"/><span>w12:{w12}</span></td>
<td><input type="range" bind:value={w13} min="-9" max="9" step="1"/><span>w13:{w13}</span></td>
<td><input type="range" bind:value={w14} min="-9" max="9" step="1"/><span>w14:{w14}</span></td>
<td><input type="range" bind:value={b1} min="-9" max="9" step="1"/><span>b1:{b1}</span></td>
</tr>
<!-- 은닉 노드 2 -->
<tr>
<td><span class="output">h2 = {h2.toFixed(3)}</span></td>
<td><input type="range" bind:value={w21} min="-9" max="9" step="1"/><span>w21:{w21}</span></td>
<td><input type="range" bind:value={w22} min="-9" max="9" step="1"/><span>w22:{w22}</span></td>
<td><input type="range" bind:value={w23} min="-9" max="9" step="1"/><span>w23:{w23}</span></td>
<td><input type="range" bind:value={w24} min="-9" max="9" step="1"/><span>w24:{w24}</span></td>
<td><input type="range" bind:value={b2} min="-9" max="9" step="1"/><span>b2:{b2}</span></td>
</tr>
<!-- 은닉 노드 3 -->
<tr>
<td><span class="output">h3 = {h3.toFixed(3)}</span></td>
<td><input type="range" bind:value={w31} min="-9" max="9" step="1"/><span>w31:{w31}</span></td>
<td><input type="range" bind:value={w32} min="-9" max="9" step="1"/><span>w32:{w32}</span></td>
<td><input type="range" bind:value={w33} min="-9" max="9" step="1"/><span>w33:{w33}</span></td>
<td><input type="range" bind:value={w34} min="-9" max="9" step="1"/><span>w34:{w34}</span></td>
<td><input type="range" bind:value={b3} min="-9" max="9" step="1"/><span>b3:{b3}</span></td>
</tr>
<!-- 은닉 노드 4 -->
<tr>
<td><span class="output">h4 = {h4.toFixed(3)}</span></td>
<td><input type="range" bind:value={w41} min="-9" max="9" step="1"/><span>w41:{w41}</span></td>
<td><input type="range" bind:value={w42} min="-9" max="9" step="1"/><span>w42:{w42}</span></td>
<td><input type="range" bind:value={w43} min="-9" max="9" step="1"/><span>w43:{w43}</span></td>
<td><input type="range" bind:value={w44} min="-9" max="9" step="1"/><span>w44:{w44}</span></td>
<td><input type="range" bind:value={b4} min="-9" max="9" step="1"/><span>b4:{b4}</span></td>
</tr>
<!-- 출력 -->
<tr>
<td><span class="output final">r1 = {r1.toFixed(3)}</span></td>
<td><input type="range" bind:value={v1} min="-9" max="9" step="1"/><span>v1:{v1}</span></td>
<td><input type="range" bind:value={v2} min="-9" max="9" step="1"/><span>v2:{v2}</span></td>
<td><input type="range" bind:value={v3} min="-9" max="9" step="1"/><span>v3:{v3}</span></td>
<td><input type="range" bind:value={v4} min="-9" max="9" step="1"/><span>v4:{v4}</span></td>
<td><input type="range" bind:value={b5} min="-9" max="9" step="1"/><span>b5:{b5}</span></td>
</tr>
</tbody>
</table>
<div class="controls">
<button on:click={resetAll}>🔄 Reset</button>
</div>
<style>
td:nth-child(1n){min-width:5em}
.output { font-weight: bold; }
.final { color: darkblue; }
</style>
