Deep Learning 이론 및 개념 - soup1997/Study-Alone GitHub Wiki
Dataset
Train/Validate/Test Split
Normalization
Batch normalization
4D 입력(채널 차원이 추가된 2D 입력의 mini batch)에 배치 정규화를 적용한다. 학습 과정에서 각 배치 단위 별로 데이터가 다양한 분포를 가지더라도 각 배치별로 평균과 분산을 이용해 정규화하는 것을 뜻한다.
- 각 계층에서는 입력으로 feature를 받고 그 feature는 cnn이나 fully connected 연산을 거친 뒤 activation과정을 거친다.
- 학습 과정에서 batch 단위로 학습을 하게 되면 batch 단위간 또는 layer간 데이터 분포가 달라질 수 있다.
- 따라서 아래의 그림에서 batch단위나 layer에 따라서 입력 값의 분포가 모두 다르지만 정규화를 통하여 분포를 zero mean gaussian 형태로 만든다.
- 평균은 0, 표준 편차는 1로 데이터의 분포를 조정할 수 있다.
- $\gamma$는 scaling, $\beta$는 bias이며 두 값 모두 역전파를 통해 학습하는 파라미터이다.
Training
Difference between parameter and hyper parameter
Parameter is a value controlled through the train.
But hyper parameter is modeled by setting the value by the user without training.
The meaning of epoch, batch size, iteration
* 한 번의 epoch는 인공 신경망에서 전체 데이터 셋에 대해 forward pass/backward pass 과정을 거친 것을 말함. 즉, 전체 데이터 셋에 대해 한 번 학습을 완료한 상태
* batch size는 한 번의 batch마다 주는 데이터 샘플의 size. 여기서 batch(보통 mini-batch라고 표현)는 나눠진 데이터 셋을 뜻함
* iteration는 epoch를 나누어서 실행하는 횟수라고 생각하면 됨.
학습의 절차
전제: 신경망에는 적응 가능한 가중치와 편향이 있고, 이 가중치와 편향을 훈련 데이터에 적응하도록 조정하는 과정을 '학습'이라 한다.
-
1단계(미니배치): 훈련 데이터 중 일부를 무작위로 가져온다. 이렇게 선별한 데이터를 미니배치라 하며, 그 미니배치의(입력값)의 랜덤묶음에 가중치와 편향을 반영하고 활성화 함수에 통과시킨다. 활성화 함수는 입력값에 대한 출력값이 비선형적으로 출력되어 선형으로 학습되는것을 예방한다. 이렇게 생성된 예측값과 타겟값 사이의 차이인 에러를 변수로 하는 손실함수값을 줄이는 것이 목표이다.
-
2단계(기울기 산출): 미니배치의 손실 함수 값을 줄이기 위해(최솟값을 찾기 위해) 각 가중치 매개변수의 기울기를 구한다. 기울기는 손실 함수의 값을 가장 작게 하는 방향을 제시한다. 이를 최적화라 한다. 최적화 기법중에는 SGD, Momentum, AdaGrad, Adam 등이 존재한다. 모든 최적화 기법은 결국 기울기를 이용하는 것이다. 이러한 기울기를 빠르게 구하기 위하여 연쇄법칙에 의한 역전파를 이용하는 오차 역전파 방법을 사용하게 된다.
-
3단계(매개변수 갱신): 가중치 매개변수를 기울기 방향으로 아주 조금 갱신한다.
-
4단계(반복): 1 ~ 3단계를 반복한다.
Norm
- 놈(norm)이란 무엇인가?
- 딥러닝을 위한 Norm
- $cost(W,b)=\frac{1}{m}\Sigma_i^m L(\hat{y}^i,y^i)+\lambda\frac{1}{2}||w||^2$
더 이상 학습 데이터를 추가할 수 없거나 학습 데이터를 늘려도 과적합 문제가 해결되지 않을 때에는 Regularization을 사용해야 합니다.
Regularization에서는 Loss 함수를 다음과 같이 변형하여 사용합니다.
기존 Cost 함수에 L2 Regularization을 위한 L2 Norm을 추가한 변형된 형태의 Cost 함수입니다.
Test
model의 평가지표
-
MAE(Mean Absolute of Errors)
- $\frac{1}{n}\Sigma_{i=1}^n|\hat{Y}_i-Y_i|$
-
MSE(Mean Square of Errors)
- $\frac{1}{n}\Sigma_{i=1}^n(\hat{Y}_i-Y_i)^2$
-
RMSE(Root Mean Square of Errors)
- MSE에 sqrt 적용
- $\sqrt{\frac{1}{n}\Sigma_{i=1}^n(\hat{Y}_i-Y_i)^2}$
-
RMSLE(Root Mean Square Log Error)
- RMSE에 Log 적용
- $\frac{1}{N}\Sigma_{i=0}^N(\log(Y_i + 1)-\log(\hat{Y}_i + 1))^2$
-
$R^2$ (R Square)
- 분산기반 예측성능 평가, 1에 가까울 수록 예측 정확도가 높음
- $R^2 = \frac{Var(\hat{Y})}{Var(Y)}$
Loss function
What Are L1 and L2 Loss Functions?
Generally, L2 Loss Function(Euclidean loss function, Squared Error)
is preferred in most of the cases.
But when the outliers are present in the dataset, then the L2 Loss Function does not perform well.
The reason behind this bad performance is that if the dataset is having outliers, then because of the consideration of the squared differences,
it leads to the much larger error. Hence, L2 Loss Function is not useful here.
Prefer L1 Loss Function(Absolute value)
as it is not affected by the outliers or remove the outliers and then use L2 Loss Function.
CNN(Convolution Neural Network)
Padding
패딩(Padding)은 합성곱 연산을 수행하기 전, 입력데이터 주변을 특정값으로 채워 늘리는 것을 말한다. 패딩(Padding)은 주로 출력데이터의 공간적(Spatial)크기를 조절하기 위해 사용한다. 패딩을 할때, 채울 값은 hyperparameter로 어떤 값을 채울지 결정할 수 있다. 주로 zero-padding을 사용한다. 패딩을 사용하는 이유는 패딩을 사용하지 않을 경우, 데이터의 Spatial 크기는 Conv Layer를 지날 때 마다 작아지게 되므로, 가장자리의 정보들이 사라지는 문제가 발생하기 때문에 패딩을 사용한다.
Stride
스트라이드는 입력데이터에 필터를 적용할 때 이동할 간격을 조절하는 것, 즉 필터가 이동할 간격을 말한다. 스트라이드 또한 출력 데이터의 크기를 조절하기 위해 사용한다. 스트라이드(Stride)는 보통 1과 같이 작은 값이 더 잘 작동하며, Stride가 1일 경우 입력 데이터의 spatial 크기는 pooling 계층에서만 조절하게 할 수 있다. 위는 1폭 짜리 zero-padding과 Stride값을 1로 적용한 뒤 합성곱 연산을 수행하는 예제이다.
Pooling
풀링계층은 합성곱 계층의 패딩과 스트라이드처럼 데이터의 공간적 크기를 축소하는데 사용한다. 주로 합성곱 계층(Conv Layer)에서 출력데이터의 크기를 입력데이터의 크기 그대로 유지하고, 풀링계층(Pool 에서만 크기를 조절한다. 풀링에는 Max-Pooling과 Average pooling이 있는데 Max-Pooling은 해당영역에서 최대값을 찾는 방법이고, Average-Pooling은 해당영역의 평균값을 계산하는 방법이다. 이미지 인식 분야에서는 주로 Max-Pooling을 사용한다. 또한 풀링계층에서는 풀링의 윈도우 크기와 스트라이드 값은 같은 값으로 설정한다. 위에서는 풀링의 윈도우 사이즈는 (2, 2)이며 스트라이드는 2로 설정