인공신경망이란?
동물의 신경계, 그중에서 특히 뇌에 있는 뉴런의 동작 방식을 본떠 만든 모델이다.
Nuron
인간의 뇌에서 신호를 서로 주고받는, 신호를 전달하는 역할을 수행한다.
입력 신호들이 들어왔을 때, 신호의 크기가 어떤 특정값, threshold를 넘게 되면 활성화가 돼서 신호가 다음 뉴런으로 전파된다.
하지만 특정 값을 넘지 못하면 신호가 전파되지 못한다.
Perceptron
인공신경망의 한 종류이다. 초창기 perceptron은 Linear Classifier을 위해서 만들어진 모델이다.
linear classsifier는 어떤 두가지 클래스가 있을 때, 이것을 linear하게 분류를 할 수 있는 분류기를 말한다.
1950년도에 perceptron이 개발 되었는데, 그때는 AND와 OR문제를 해결하기 위해서 만들어졌다.
1개의 layer를 갖고 있는 persceptron구조로는 XOR 문제를 해결할 수 없다.
여러개의 multiplayer를 쌓아야만 XOR문제를 풀 수 있다.
backpropagation을 통해 이 w들을 학습할 수 있으나 당시 이 방법이 개발되지 않았다.
X = torch.FloatTensor([[0, 0], [0, 1], [1, 0], [1, 1]]).to(device)
Y = torch.FloatTensor([[0], [1], [1], [0]]).to(device)
# nn layers
linear = torch.nn.Linear(2, 1, bias=True)
sigmoid = torch.nn.Sigmoid()
model = torch.nn.Sequential(linear, sigmoid).to(device)
# define cost/loss & optimizer
criterion = torch.nn.BCELoss().to(device)
optimizer = torch.optim.SGD(model.parameters(), lr=1)
for step in range(10001):
optimizer.zero_grad()
hypothesis = model(X)
# cost/loss function
cost = criterion(hypothesis, Y)
cost.backward()
optimizer.step()
if step % 100 == 0:
print(step, cost.item())