Perceptron AND
인공신경망의 한 종류로서 간단한 형태로 만들어져있는데, 두 개의 노드가 있을 경우 그 두 개의 노
드가 각각 들어가야 하는 위치인 입력치와 그를 증가하는 가중치, 이를 통해 계산하여 나온 결과인
출력값으로 구성이 되어있습니다. 본 실습에서는 Perceptron과 배치경사하강법을 사용을 하여 오차
를 통해 가중치를 업데이트를 하여 AND연산자를 라이브러리를 사용하지 않고 numpy만 이용을 하
여서 구현을 합니다.

가장 처음 network를 선언하는 부분에서 x1, x2 , 1을 들어오게 하는데 이때 간선의 무게를 랜덤으로 주어지게 하였습니다.


Sigmoid 또한

Y 즉 목표값을 AND 연산을 위주로 설정을 하여

AND에 맞게 y를 0,0,0,1로 넣어줍니다.
그 다음 100번을 돌면서

그리고 그림에 맞게 sigmoid를 적용하기전 w0x0+w1x1+w2x2….wnxn처럼 더해주는 코드를 작성하여
야 하니 W^Tx + b에 맞도록 코드를 작성해주었고 여기서 b는 bias로 불러왔습니다.
그 다음에는 sigmoid를 적용을 해주고 나온 예측값과 타겟값과의 오차를 구하기 위해 MSELoss를 해
주고 여기서 러닝 레이트는 0.5로 주었습니다.
그리고 그래디언트로 나온 값을 theta = theta - p▽total에 맞게 빼주면서 업데이트를 해주었습니다.

테스트는 train과 거의 비슷하지만 여기서는 sigmoid를 계산한 결과 값이 0.5 이상이면 1을 그게 아니
면 0을 주어 리스트를 만들어 리턴을 시켜주었습니다.

그 다음 메인 코드에서는 가장 먼저 network를 형성 후 학습을 시켜주는데 이때 위에 표에 맞게 x1과 x2를 넣어주고, 학습 뒤 테스트를 하여 출력을 해보았습니다.
결과

결과는 계속 음수값으로 가여 정확하게 나오지 않고 레이블도 0,0,0,0으로 AND연산이 나오질 않았습 니다
여기서 어떻게 고칠까 하고 고민을 해보다가 MSELoss에서 **2을 빼서 계산을 해보니

0,0,0,1로 정확하게 나왔습니다.