1-1. Forward Propagation
일반적으로 입력층, 은닉층, 출력층을 순서대로 지나는 순서를 순전파라고 한다.
1-2. Backpropagation
2. Loss Function
오차가 클 수록 손실 함수의 값은 크고 오차가 작을 수록 손실 함수의 값은 작아집니다.
회귀에서는 평균 제곱 오차, 분류 문제에서는 크로스 엔트로피를 주로 손실 함수로 사용합니다.
손실 함수의 값을 최소화하는 두 개의 매개변수인 가중치 W와 편향 b를 찾아가는 것이 딥 러닝의 학습 과정이므로
손실 함수의 선정은 매우 중요합니다.
1) MSE(Mean Squared Error, MSE)
오차 제곱 평균을 의미합니다. 연속형 변수를 예측할 때 사용됩니다.
2) 크로스 엔트로피(Cross-Entropy)
y : 실제값 (0 or 1) / y^y^ : 예측값 (확률)
낮은 확률로 예측해서 맞추거나, 높은 확률로 예측해서 틀리는 경우 loss가 더 큽니다.
이진 분류 (Binary Classification)의 경우 binary_crossentropy를 사용하며
다중 클래스 분류(Multi-Class Classification)일 경우 categorical_crossentropy를 사용합니다.
범주형 교차 엔트로피와 동일하지만 이 경우 원-핫 인코딩이 된 상태일 필요없이 정수 인코딩 된 상태에서 수행 가능한 sparse_categorical_crossentropy 도 존재한다.
3. 옵티마이저(Optimizer)
손실 함수의 값을 줄여나가면서 학습하는 방법은 어떤 옵티마이저를 사용하느냐에 따라 달라집니다.
여기서 배치(Batch)라는 개념에 대한 이해가 필요합니다.
배치는 가중치 등의 매개 변수의 값을 조정하기 위해 사용하는 데이터의 양을 말합니다.
전체 데이터를 가지고 매개 변수의 값을 조정할 수도 있고, 정해준 양의 데이터만 가지고도 매개 변수의 값을 조정할 수 있습니다.
1) 배치 경사 하강법(Batch Gradient Descent)
배치 경사 하강법(Batch Gradient Descent)은 가장 기본적인 경사 하강법입니다.
배치 경사 하강법은 옵티마이저 중 하나로 오차(loss)를 구할 때 전체 데이터를 고려합니다.
머신 러닝에서는 1번의 훈련 횟수를 1 epoch라고 하는데, 배치 경사 하강법은 한 번의 epoch에 모든 매개변수 업데이트를 단 한 번 수행합니다.
장점 : 글로벌 미니멈을 찾을 수 있다는 장점이 있습니다.
단점 : 전체 데이터를 고려해서 학습하므로 1 epoch당 시간이 오래 걸리며, 메모리를 크게 요구합니다.
model.fit(X_train, y_train, batch_size=len(trainX))
2) 확률적 경사 하강법(Stochastic Gradient Descent, SGD)
기존의 배치 경사 하강법은 전체 데이터에 대해서 계산을 하다보니 시간이 너무 오래걸린다는 단점이 있습니다.
확률적 경사 하강법은 매개변수 값을 조정 시 전체 데이터가 아니라 랜덤으로 선택한 하나의 데이터에 대해서만 계산하는 방법입니다. 더 적은 데이터를 사용하므로 더 빠르게 계산할 수 있습니다.
장점 : 적은 data를 쓰니, 속도만큼은 배치 경사 하강법보다 빠르다는 장점이 있습니다.
단점 : 매개변수의 변경폭이 불안정하고, 때로는 배치 경사 하강법보다 정확도가 낮을 수도 있습니다.
케라스에서는 아래와 같이 사용합니다.
model.fit(X_train, y_train, batch_size=1)
3) 미니 배치 경사 하강법(Mini-Batch Gradient Descent)
전체 데이터도 아니고, 1개의 데이터도 아니고 정해진 양에 대해서만 계산하여 매개 변수의 값을 조정하는 경사 하강법을 미니 배치 경사 하강법이라고 합니다. Batch와 확률적 경사하강법의 보완책이다.
미니 배치 경사 하강법은 전체 데이터를 계산하는 것보다 빠르며, SGD보다 안정적이라는 장점이 있습니다.
실제로 가장 많이 사용되는 경사 하강법입니다.
model.fit(X_train, y_train, batch_size=32) #32를 배치 크기로 하였을 경우
4) 모멘텀(Momentum)
모멘텀(Momentum)은 관성이라는 물리학의 법칙을 응용한 방법입니다.
모멘텀 SGD는 경사 하강법에 관성을 더 해줍니다.
모멘텀은 SGD에서 계산된 접선의 기울기에 한 시점(step) 전의 접선의 기울기값을 일정한 비율만큼 반영합니다. 이렇게 하면 마치 언덕에서 공이 내려올 때, 중간에 작은 웅덩이에 빠지더라도 관성의 힘으로 넘어서는 효과를 줄 수 있습니다.
다시 말해 로컬 미니멈에 도달하였을 때, 기울기가 0이라서 기존의 경사 하강법이라면 이를 글로벌 미니멈으로 잘못 인식하여 계산이 끝났을 상황이라도
모멘텀. 즉, 관성의 힘을 빌리면 값이 조절되면서 로컬 미니멈에서 탈출하는 효과를 얻을 수도 있습니다.
케라스에서는 다음과 같이 사용합니다.
keras.optimizers.SGD(lr = 0.01, momentum= 0.9)
5) 아다그라드(Adagrad)
매개변수들은 각자 의미하는 바가 다른데, 모든 매개변수에 동일한 학습률(learning rate)을 적용하는 것은 비효율적.
아다그라드는 각 매개변수에 서로 다른 학습률을 적용시킵니다.
이 때, 변화가 많은 매개변수는 학습률이 작게 설정되고 변화가 적은 매개변수는 학습률을 높게 설정시킵니다.
변화가 적은 것은 학습을 많이해서 학습률을 끌어올려야 하기 때문이다.
케라스에서는 다음과 같이 사용합니다.
keras.optimizers.Adagrad(lr=0.01, epsilon=1e-6)
6) 알엠에스프롭(RMSprop)
아다그라드는 학습을 계속 진행한 경우에는, 나중에 가서는 학습률이 지나치게 떨어진다는 단점이 있는데 이를 다른 수식으로 대체하여 이러한 단점을 개선하였습니다.
케라스에서는 다음과 같이 사용합니다.
keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-06)
7) 아담(Adam)
아담은 알엠에스프롭과 모멘텀 두 가지를 합친 듯한 방법으로, 방향과 학습률 두 가지를 모두 잡기 위한 방법입니다.
케라스에서는 다음과 같이 사용합니다.
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
케라스의 옵티마이저 사용법은 아래의 링크에서 좀 더 상세히 확인할 수 있습니다.
링크 : https://keras.io/optimizers/
5. Epoch, Batch_Size, Iteration
Epoch
모든 data에 대해 문제를 풀고, 답을 맞춰서 학습을 1번 끝냈을 때, 1 Epoch 라고 한다.
Batch_size
data에 대해 몇 Batch_size 만큼 풀고 정답지를 검토할 것인지. 이 떄 Batch_size라고 한다.
Iteration
Batch_size 만큼 문제를 풀고 답을 맞추었을 때, 이 행위가 몇 번 반복되는지가 iteration이다.
'AI' 카테고리의 다른 글
ML & DL : 오류 정리 (0) | 2020.03.08 |
---|---|
ML & DL : 오류를 막는 방법 (0) | 2020.03.08 |
DL : Deep Learning 개요 : 인공 신경망, Activation Function (0) | 2020.03.08 |
DL : Deep Learning 성공 이유, 장단점 (0) | 2020.03.07 |
ML : 회귀분석 : PCA (Principal Component Analysis) 차원축소 (0) | 2020.03.07 |
댓글