본문 바로가기

딥러닝

[Deep Learning] 신경망 기초 3; Forward Propagation(순전파) & Back Propagation(역전파), 손실함(Losses)

신경망 학습 알고리즘 요약:

  1. 학습할 신경망 구조를 선택합니다.
    • 입력층 유닛의 수 = 특징 수
    • 출력층 유닛의 수 = 타겟 클래스 수
    • 은닉층 수, 각 은닉층의 노드 수
  2. 가중치 랜덤 초기화
  3. 순방향 전파를 통해 출력층 y값 을 모든 입력 에 대해 계산합니다.
  4. 비용함수를 J(θ)를 계산합니다.
  5. 역방향 전파를 통해 편미분 값들을 계산합니다.
  6. 경사하강법 (or 다른 최적화 알고리즘)을 역전파와 함께 사용하여 비용함수인 J(θ)를 최소화 합니다.
  7. 어떤 중지 기준을 충족하거나 비용함수를 최소화 할 때까지 단계 2-5를 반복합니다. 2-5를 한 번 진행하는 것을 epoch 또는 iteration이라 말합니다.

비용(cost), 손실(loss), 에러(error) 함수 계산

손실함수 : 실제값 - 예측값, 실제값과 예측값 사이의 차이로. 성능을 향상시키는데 활용이 되며 모델의 성능을 향상시키기위해 사용됨.  (MAE,MSE,cross entropy)

한 데이터 샘플을 Forward Propagation를 시키고 마지막 출력층을 통과한 값과 이 데이터의 타겟값을 비교하여 loss or error를 계산. 여기서 한 데이터 포인트에서의 손실을 loss라 하고 전체 데이터 셋의 loss를 합한 개념을 cost라고 합니다.

신경망을 훈련시키기 위해서는 다른 머신러닝 알고리즘들 보다 훨씬 많은 훈련 데이터가 필요하고 그에 따라 훈련 시간도 오래 걸리며 더 많은 하이퍼파라미터를 튜닝해야 합니다. 이렇게 복잡한 신경망을 훈련하기 위해서는 특별한 방법이 필요합니다, 바로 역전파 알고리즘 

평균제곱계열

  • (복습) mean_squarederror (MSE) 
  • (복습) RMSE (Root Mean Squared Error) 
  • (복습) mean_absoluteerror (MAE) 
  • (복습) R-Squared (coefficient of determination)  
    • SSE, SST, SSR: Sum of Squared Error, Total, Regression(mean_absolute_percentageerror 
  • mean_squared_logarithmicerror 

엔트로피계열

  • binarycrossentropy 
  • categoricalcrossentropy 

 

Forward Propagation (순전파)

입력층에서 출력층 까지 순서대로 weight(가중치)와 bias가 계산되어지는 방법

 

Backpropagation (역전파. Backwards Propagation of errors)

실제값과 예측값의 오류를 최소화 하기 위하여 가중치를 업데이트하는 방식으로 편미분을 사용하는 신경망 학습 알고리즘으로, 역전파 알고리즘을 통해서 가중치와 편향이 학습이 되고 업데이트가 된다.(이러한 작업이 신경망 학습)

 

Keras를 이용한 역전파 실습

케라스는 거의 모든 종류의 딥러닝 모델을 간편하게 만들고 훈련시킬 수 있는 파이썬 딥러닝 프레임워크.
여러 백엔드 엔진(Tensorflow, Theano, Microsoft Cognitive Toolkit(CNTK))에서 제공하는 특화된 텐서 라이브러리를 사용하여 우리가 공부했던 내용을 자동화된 방식으로 활용. 한편, 케라스는 CPU, GPU 모두 동일한 코드로 실행할 수 있다.

 

케라스로 신경망을 만들때는  다음과 같은 작업 흐름을 가집니다.

모델을 정의하는 방법 중 Sequential 방법은 가장 자주 사용하는 구조인 층(layer)을 순서대로 쌓아 올린 네트워크 입니다.

  1. 학습 데이터 로드
  2. 모델 정의
  3. 컴파일(Compile)
  4. 모델 학습(Fit)
  5. 모델 검증(Evaluate)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
 
model = Sequential()

# 신경망 모델 구조 정의
model.add(Dense(3, input_dim=2, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))

# 컴파일 단계, 옵티마이저와 손실함수, 측정지표를 연결해서 계산 그래프를 구성을 마무리 합니다.
model.compile(optimizer='sgd', loss='mse', metrics=['mae', 'mse'])
# model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 분류인 경우 예시

results = model.fit(X,y, epochs=50)

Fashion MNIS를 이용하여 실습

from tensorflow.keras.datasets import fashion_mnist

# 데이터 불러오기
(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()
print(X_train.shape, X_test.shape)



# 데이터를 정규화 합니다 
# 이미지데이터의 경우에는 255.으로 나누어 줍니다.
X_train = X_train / 255.
X_test = X_test /255.

import matplotlib.pyplot as plt

for i in range(9):
    # subplot 정의
    plt.subplot(3, 3, i+1)
    
    # 데이터를 plot 합니다.
    plt.imshow(X_train[i], cmap=plt.get_cmap('gray'))
    plt.axis('off')
    
plt.show()

# 클래스를 확인합니다.
np.unique(y_train)


from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten


model = Sequential() 
model.add(Flatten(input_shape=(28, 28))) # 28*28 = 784 특성 벡터로 펼쳐 변환해 Dense 층으로 들어갑니다
model.add(Dense(10, activation='softmax'))

model.compile(optimizer='adam'
             , loss='sparse_categorical_crossentropy'
             , metrics=['accuracy'])

model.summary()
# 총 7850 parameters (10 bias)

# 모델 학습
model.fit(X_train, y_train, epochs=10, validation_data=(X_test,y_test))
# model.fit(X_train, y_train, epochs=5)


# 예측
model.predict(X_test[0:1])


# 테스트 데이터 예측 정확도
test_loss, test_acc = model.evaluate(X_test,  y_test, verbose=2)

 

 

ref.

https://www.youtube.com/watch?v=tIeHLnjs5U8 

https://www.coursera.org/lecture/machine-learning/putting-it-together-Wh6s3

 

Putting It Together - Neural Networks: Learning | Coursera

Video created by 스탠퍼드 대학교 for the course "기계 학습". In this module, we introduce the backpropagation algorithm that is used to help learn parameters for a neural network. At the end of this module, you will be implementing your own neur

www.coursera.org