퍼셉트론의 한계
- XOR과 같이 선형분리가 불가능한 상황에 대처할 수 없음
: 이를 위한 해결법으로 Deep Learning 등장
Neural Network의 구성
- 가중치와 편향을 조정하는 방법
: 경사 하강법 대신 backpropagation(역전파) 활용
오차역전파
- 수치미분(전진 하면서 미분하는 방식, 경사하강법)의 단점을 개선한 방법
: 순전파와 역전파를 활용하여 미분을 효율적으로 계산
- 순전파
: 입력노드에서 출력노드까지 가중치를 업데이트 하면서 활성화 함수를 통해 결과 값을 가져오는 과정
- 역전파
: 입력노드의 방향으로 역방향으로 노드에 오차 값을 전송하여 가중치를 업데이트하는 과정
- ChainRule
: 오차역전파의 기본 원리로써, 국소미분을 전달하는 원리
: 국소미분 = 특정 한 노드에 대한 미분 값
=> 출력노드의 결과 값에서 나온 오차(기대 값과 결과 값의 차이)를 다시 입력층과 은닉층으로 보내
가중치를 재 계산하여 오차를 줄이는 방법
신경망의 정확도를 높이기 위한 방법
- 활성화 함수
: ReLU
= 깊고 넓은 신경망에 효과적인 알고리즘
= 0보다 작으면 0으로 출력, 0보다 크면 입력 값 그대로 출력
- 가중치 초기화
: xavier
= RBM을 이용하여 초기값 설정
(RBM = 2개의 계층으로 구성되어있는 신경망 / 비지도 학습 수행을 통해 가중치 구성)
= 입력 값과 출력 값 사이의 난수를 선택해서 입력 값의 제곱근으로 나누는 방법
= 현재 Tensorflow에 포함되어 있는 초기화 코드
=> W = np.random.randn(fan_in, fan_out)/np.sqrt(fan_in)
- 과적합(Overfitting) 해결
: 드롭아웃
= 임의로 뉴런(노드)을 삭제하는 방법
= 학습할때만 이용 (테스트할때는 사용하지 않음)
텐서플로를 활용한 XOR 연산 모델
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# XOR data
x_data = tf.constant([
[0,0],[0,1],[1,0],[1,1]], dtype=tf.float32)
y_data = tf.constant([
[0],[1],[1],[0]], dtype=tf.float32)
# define model
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(8,input_dim=2, activation='relu'),
tf.keras.layers.Dense(1, activation='softmax')
])
# model compile
model.compile(optimizer='adam',
loss='mean_squared_error',
metrics=["accuracy"])
model.summary()
# model fit
hist=model.fit(x_data, y_data,
validation_data=(x_data, y_data),
verbose=2, batch_size=4, epochs=100,
use_multiprocessing=True)
# model evaluate
model.evaluate(x_data, y_data, verbose=2, use_multiprocessing=True)
# Graph print
plt.figure(figsize=(8,4))
plt.subplot(1,2,1)
plt.plot(hist.history['loss'])
plt.title("Cost Graph")
plt.ylabel("cost")
plt.subplot(1,2,2)
plt.title("Performance Graph")
plt.ylabel("performance")
plt.plot(hist.history['accuracy'], 'b-', label="training accuracy")
plt.plot(hist.history['val_accuracy'], 'r:', label="validation accuracy")
plt.legend()
plt.tight_layout()
plt.show()
print()
- 정확도가 향상되지 않는 것을 보아서 잘못된 점이 존재하나, 추후 연구해볼 계획이다.
'Computer Science > DeepLearning' 카테고리의 다른 글
초보 딥러닝 - 파이썬 기초 / 퍼셉트론 / 신경망 (0) | 2021.04.03 |
---|---|
DeepLearning을 활용한 MNIST 데이터셋 분류 정확도 향상 (0) | 2020.12.16 |
머신러닝 기초 6 - 모델의 저장과 로딩 (0) | 2020.12.16 |
머신러닝 기초 5 - Classification (분류) (0) | 2020.12.16 |
머신러닝 기초 4 - 다중 선형회귀 (0) | 2020.12.10 |