반응형
이 글은 의공학과 3학년 전공 수업 [인공지능과 딥러닝]을 듣고 정리한 내용입니다. |
대상의 특징을 이용해 '분류'를 하는 것을 분류기라 한다. 가장 간단한 인공신경망 분류기가 퍼셉트론(perceptron)이다.
우리 인간의 신경세포인 뉴런과 유사한데 한번 살펴보도록 해보자.
데이터가 각각 X1과 X2에 입력이 되면 가중치 W1과 W2가 각각 곱해진 후 더해져 step function으로 입력이 된다. 후에 임계값 이상이면 1, 아니면 0으로 step function이 출력된다.
가중치 W값들은 훈련과정에서 계속하여 업데이트 된다. Train Dataset을 입력하여 나온 값과 정답지를 비교해 가중치 W를 업데이트한 후 다시 Train Dataset을 입력하여 다시 정답지와 비교해보고 가중치를 또 업데이트 하는 과정을 계속해서 반복한다.
위 두 이미지에서 파란점과 빨간점을 구분하는 직선은 그리 어렵지 않게 설정할 수 있다. 그러나 아래 이미지는 퍼셉트론을 이용해서 풀 수 없다. 하나의 직선으로 아래 이미지에서 파란점과 빨간점을 구분하는 것을 불가하다.
이 XOR 문제를 풀지 못한 시기를 인공지능의 암흑기라고 불린다.
이 XOR 문제는 두개의 직선을 이용하거나 곡선을 이용하면 풀 수 있을 것이다. 그래서 도입된 개념이 다층 퍼셉트론이다.
직접 코드를 실행시켜 정말 XOR 문제를 퍼셉트론은 해결하지 못하고 다층 퍼셉트론은 해결할 수 있는지 알아보자.
model = Sequential()
model.add(Dense(1, input_dim=2, activation='sigmoid'))
model.summary()
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param# ================================================================= dense (Dense) (None, 1) 3 ================================================================= Total params: 3 (12.00 Byte) Trainable params: 3 (12.00 Byte) Non-trainable params: 0 (0.00 Byte) _________________________________________________________________ |
test_data = np.ndarray((30*30,2), dtype=np.float32)
n = 0
for x in range(30):
for y in range(30):
test_data[n][0] = 0.033*x
test_data[n][1] = 0.033*y
n=n+1
res = model.predict(test_data)
for n in range (30*30):
if res[n] < 0.4:
plot(test_data[n][0],test_data[n][1],'+r')
elif res[n] > 0.6:
plot(test_data[n][0],test_data[n][1],'+b')
else:
plot(test_data[n][0],test_data[n][1],'+g')
show()
퍼셉트론은 전혀 구분을 못한다.
model1 = Sequential()
model1.add(Dense(2, input_dim=2, activation='sigmoid'))
model1.add(Dense(1, activation='sigmoid'))
Model: "sequential_2" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_3 (Dense) (None, 2) 6 dense_4 (Dense) (None, 1) 3 ================================================================= Total params: 9 (36.00 Byte) Trainable params: 9 (36.00 Byte) Non-trainable params: 0 (0.00 Byte) _________________________________________________________________ |
test_data = np.ndarray((30*30,2), dtype=np.float32)
n = 0
for x in range(30):
for y in range(30):
test_data[n][0] = 0.033*x
test_data[n][1] = 0.033*y
n=n+1
res = model1.predict(test_data)
for n in range (30*30):
if res[n] < 0.4:
plot(test_data[n][0],test_data[n][1],'+r')
elif res[n] > 0.6:
plot(test_data[n][0],test_data[n][1],'+b')
show()
다층 퍼셉트론 사용 시 위와 같이 XOR 문제를 해결하는 모습을 볼 수 있다.
반응형
'공부 | Study > AI' 카테고리의 다른 글
PyTorch에서 GPU setting (0) | 2024.07.09 |
---|---|
알맞은 버전의 CUDA, Pytorch 설치하기 (0) | 2024.07.09 |
numpy Runtime Error (0) | 2021.01.04 |
anaconda 가상환경 생성하기 (0) | 2021.01.03 |
tensorflow import Error (0) | 2021.01.03 |