반응형
퍼셉트론(Perceptron)
- 퍼셉트론은 초기 형태의 인공 신경망으로, 다수 입력으로부터 하나의 결과를 내보내는 알고리즘
- 뉴런을 흉내내어 만든 구조
→ 이런 수식을 보여주는데 , 여기서 i가 한개밖에 없으면 결국 선형회귀랑 똑같음 !!
- 인공신경망은 퍼셉트론을 여러층 쌓고 이렇게 만듬
- 결국 선형회귀랑 로지스틱회귀를 여러개 겹쳐서 사용하면 인공신경망에 쓰는 딥러닝이 되는 구조
그래서 선형회귀랑 로지스틱 회귀를 잘 이해하고 넘어가야 함
거의 선형회귀랑 로지스틱회귀가 딥러닝의 밑거름
XOR 문제
→ AND 나 OR 같은 경우 선을 하나만 그으면 분류가 가능함 (선형회귀, 로지스틱 회귀)
→ XOR 는 선 하나만 가지고 분류가 불가능함
왜 인공지능에 딥러닝이 나왔는가 ?? (XOR 문제)
- 하나의 퍼셉트론은 선형으로만 분리할 수 있어, XOR은 풀 수 없음
- 퍼셉트론을 여러 층으로 쌓으면 곡선으로도 분리할 수 있음,, 그래서 딥러닝이 등장함!
→ 다층 퍼셉트론 (MultiLayer Perceptron, MLP) - 딥러닝의 제일 시초 - 다층 퍼셉트론처럼 은닉층이 2개 이상인 경우, 심층 신경망 (Deep Neural Network, DNN)이라고 부름
XOR 문제 실습 1
- 단순 로지스틱 회귀 → XOR 문제를 해결할 수 없음
import numpy as np
import tensorflow as tf
- Input 정의
- 00 → 0 , 01 → 1 , 10 → 1 , 11 → 0
input = np.array([[0,0], [0,1], [1,0], [1,1]]).astype(np.float)
output = np.array([[0], [1], [1], [0]]).astype(np.float)
- tensorflow 를 활용해서 모델 생성
- Input 데이터가 두개가 들어오면 거기에 대해서 Dense 라는 Layer를 추가
- → 퍼셉트론이라고 생각하면 됨
- → sigmoid 함수를 썼는데 1층만 있으면 결국 Logistic regression이랑 똑같음
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=2, dtype='float32'), # Input 정의
tf.keras.layers.Dense(1, activation='sigmoid') # 실질적인 층
])
model.summary() # param:3 -> W:2, b:1
→ parameter 수가 3개라고 나옴,, Input 에서 두개가 들어오기때문에 두개에 대한 각각의 W가 생성이 되고 W 두개에 b가 한개 !!
- 로지스틱 회귀랑 선형회귀에서 계속 학습할 때 썼던 GD를 SGD이라고 생각하면 됨
- SGD는 Gradient Descent 위에 momentum이라고 생각하면 됨
optimizer = tf.keras.optimizers.SGD(lr=0.01, decay=0, momentum=0.99, nesterov=True)
model.compile(optimizer=optimizer, loss='mse', metrics=['accuracy'])
# 학습 fit() 함수 호출
model.fit(input, output, epochs=10)
→ 파라미터 3개에 대해서 10번 학습하는데 계속 정확도가 50밖에 안나옴
→ XOR 문제를 풀 수가 없어서 50밖에 안나옴
아무리 학습을 해도 50점밖에 안되는 구조가 있어서 그런 부분을 수학적으로 풀어주기 위해서 층을 더 쌓으면 풀 수 있다 !!
반응형
XOR 문제 실습 2
- 다층 퍼셉트론 → XOR 문제 해결 가능
import numpy as np
import tensorflow as tf
input = np.array([[0,0], [0,1], [1, 0], [1,1]]).astype(np.float)
output = np.array([[1,0], [0, 1], [0, 1], [1, 0]]).astype(np.float)
- 모델 생성
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=2, dtype='float32'),
tf.keras.layers.Dense(4, activation='relu'),
tf.keras.layers.Dense(4, activation='relu'),
tf.keras.layers.Dense(2, activation='softmax')
])
model.summary()
- binary_crossentropy
optimizer = tf.keras.optimizers.SGD(lr=0.01, decay=0, momentum=0.99, nesterov=True)
model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
- 학습
model.fit(input, output, epochs=30)
→ 30번쯤 돌리니 정확도가 1점이 나옴 !! 드디어 !!!
XOR-1 에서는 모델에서 층을 하나만 줬음
XOR-2 에서는 모델에서 층을 3개를 쓰고, loss function도 binary_crossentropy 으로 바꿔줌
→ cross entropy가 분류에서 많이 씀
→ 멀티 Layer로 모델을 바꿔주고 학습을 하니깐 성능이 좋아짐
→ 이런식의 문제를 풀기 위해서 처음에는 단층을 썼었는데 XOR 문제도 당장 못풀기때문에 그부분을 해결하기 위해 다층 퍼셉트론으로 바꾸면서 DNN이 등장함 !!
반응형
'AI' 카테고리의 다른 글
[AI] DNN(Deep Neural Network)이란? - 개념 및 실습 (0) | 2020.12.15 |
---|---|
[AI] 딥러닝 개요 - 순전파, 역전파 그리고 활성화 함수 (0) | 2020.12.15 |
[AI] SVM 과 k-means clustering 이론 및 실습 (0) | 2020.11.27 |
[AI] 회귀(Regression) 실습 - 선형회귀 및 로지스틱 회귀 (0) | 2020.11.27 |
[AI] 인공지능의 개요 (0) | 2020.11.27 |