DNN (Deep Neural Network)
신경망 구성요소
활성 함수 (Activation Function)
활성화 함수(Activation function)은 인공 신경망에서 뉴런의 출력을 결정하는 함수이다.
신경망의 각 층에서 입력 값을 받아 출력 값을 계산할 때 활성화 함수를 적용하여 비선형성을 도입하고 다양한 형태의 함수 근사를 가능하게 한다.
활성함수(Activation Function)의 종류
[Dying ReLU 문제점 보안]
=Leaky ReLU=
수식: 𝐿𝑒𝑎𝑘𝑦𝑅𝑒𝐿𝑈(𝑥)=𝑚𝑎𝑥(𝛼𝑥,𝑥)
𝛼(alpha)의 범위: 0< 𝛼 < 1
=> 음수 z를 0으로 반환하지 않고 alpah (0 ~ 1 사이 실수)를 곱해 반환
위의 활성함수 중 알맞은 활성함수를 선택 후 만약 입력층이 1개 이고 히든층이 3개일 경우 3번의 활성함수를 하게되고 3개의 확률의 총합은 1이 된다.
<코드로 살펴보자>
# 데이터 생성
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
def func(x):
return 3*x**2 + 2 + np.random.rand(*x.shape)*3
# (개수, 1) # randn(): 평균-0, 표준편차-1 (표준정규분포)를 따르는 난수 생성.
X = np.random.randn(100, 1) # (개수,1(Feature개수))
y = func(X)
plt.scatter(X, y)
plt.show()
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# activation 함수를 사용하지 않은 모델
# 빈 모델 생성.
model1 = keras.Sequential()
# 모델에 Layer들 추가
# input_shape=(1, )는 입력데이터의 형태로 (1, )은 하나의 숫자를 입력으로 받는 형태를 나타낸다.
# 따라서 model1.add(layers.InputLayer(input_shape=(1, )))는 하나의 숫자를 입력으로 받는 입력층을 모델에 추가하는 것을 의미한다.
# 첫번째 층을 만드는 것.
model1.add(layers.InputLayer(input_shape=(1, )))
# Hidden Layer
# Unit을 10개로 지정
model1.add(layers.Dense(10))
# Output Layer
# 추론값이 1개이므로 unit을 1개로 지정.
model1.add(layers.Dense(1))
# 모델 컴파일
model1.compile(optimizer='adam', loss='mse')
# 모델 학습
# 200번 학습시킬 것이다.
model1.fit(X, y, epochs=200)
⇒ loss: 줄어든 것을 확인할 수 있다.
손실함수(Loss function, 비용함수)
다양한 문제 유형에 따라 다른 손실 함수가 사용될 수 있다.
log loss 사용 => 𝑙𝑜𝑔(모델이출력한정답에대한확률)
수식: 𝐿𝑜𝑠𝑠(𝑦̂ (𝑖),𝑦(𝑖))=−𝑦(𝑖)𝑙𝑜𝑔(𝑦̂ (𝑖))−(1−𝑦(𝑖))𝑙𝑜𝑔(1−𝑦̂ (𝑖))
𝑦(𝑖): 실제 값(Ground Truth)
𝑦̂ (𝑖): 예측확률
수식: 𝐿𝑜𝑠𝑠(𝑦̂ (𝑖)𝑐,𝑦(𝑖))=−∑𝑐=1𝐶𝑦(𝑖)𝑐𝑙𝑜𝑔(𝑦̂ (𝑖)𝑐)
𝑦(𝑖): 실제 값(Ground Truth)
𝑦̂ (𝑖)𝑐: class별 예측확률
수식: 𝐿𝑜𝑠𝑠(𝑦̂ (𝑖),𝑦(𝑖))=1/2(𝑦̂ (𝑖)−𝑦(𝑖))2
𝑦(𝑖): 실제 값(Ground Truth)
𝑦̂ (𝑖): 예측 값
<정리>
Optimizer (최적화 방법)
Training 시 Loss function이 출력하는 값을 줄이기 위해 파라미터(weight, bias)를 update 과정을 최적화(Optimization) 이라고 한다.
Training시 모델 네트워크의 parameter를 데이터에 맞춰 최적화 하는 알고리즘이다.
최적화의 종류
수식 𝑊𝑛𝑒𝑤=𝑊−𝛼(∂/∂𝑊)𝐿𝑜𝑠𝑠(𝑊)
𝑊:파라미터
𝛼:학습률
오차 역전파를 이해하기위해서는 계산 그래프를 이해하여야 한다.
" 우리가 지금까지 계산 한것들은 모두 합성함수 인것을 알 수 있겠는가? "
특히 최적화에서는 합성함수를 이용하여 미분을 적용하는데
적용되는 풀이과정을 살펴보자.
합성함수의 미분
합성함수: 여러 함수로 구성된 함수
연쇄 법칙(Chain Rule)
<오차 역전파 정리>
여기서 이제 본격적으로 오차 역전파를 이용방법을 알아보자.
<정리>
[경사하강법과 오차 역전파의 차이점]
졍사하강법은 순전파로 입력에서 출력으로 향하며 가중치믈 업데이트 한다.
but
오차 역전파는 순전파에서 부터 손실함수까지 계산 후 -> 오차 역전파를 적용하여 출력층 오차 -> 출력층 가중치와 편향 업데이트 -> 은닉층 가중치와 편향 업데이트 -> 경사하강법을 이용한 가중치와 편향업데이트처럼 역으로 계산하여 가중치뿐만이니라 편향(bias)까지 업데이트한다.