이 블로그글은 2019년 조재영(Kevin Jo), 김승수(SeungSu Kim)님의 딥러닝 홀로서기 세미나를 수강하고 작성한 글임을 밝힙니다.
💡 도움이 되셨다면 ♡와 팔로우 부탁드려요! 미리 감사합니다.
둘의 차이가 무엇일까?
파라미터 개수를 늘릴 수록 더 복잡한 현상들을 예측할 수 있음
→ 이러한 파라미터 개수를 model capacity라고 한다.
MLP의 경우 복잡한 현상들을 잘 예측하려면 model capacity를 늘려야한다.
→ model capacity를 무한정 늘리면 즉 파라미터를 계속 늘리면 성능이 무조건 좋아지지않을까? - overfitting
→ Overfitting (모델이 훈련 데이터에 지나치게 적합하게 학습하는 현상)
💡 일반화
- 학습된 모델이 새로운, 보지 못한 데이터에서도 높은 성능을 발휘하는 능력
이미지 출처 : https://crunchingthedata.com/regression-overfitting/
실제 전체 데이터 셋을 그린 그래프
model capacity가 큰 모델로 학습한 그래프
→ 실제 Test 데이터셋이 들어오는 경우 에러가 엄청나게 큼
Emprical Risk가 매우작은데 True Risk가 큰 경우 (Risk에 대한 설명은 아래에 있음)
💡True Risk vs Empirical Risk
True Risk
- 전체 모집단에 적용했을 때 학습 알고리즘의 예상 손실을 의미
→ 사실 True Risk를 줄이는 것이 목표가 되어야 함
but. 구할 수 없음
Empirical Risk
- 학습 알고리즘이 유한한 데이터 샘플(훈련 세트)에서 계산된 평균 손실을 의미
- 우리가 구할 수 있는 값
→ True Risk를 잘 표현해줄 수 있는 데이터 샘플을 골라 Empirical Risk를 줄여나감
Loss Graph
→ 적절히 학습을 끊어주는 것과 적절한 model capacity를 찾아서 overfitting의 문제를 해결 할 수 있다.
→ 왜 L2 Regularization 항이 overfitting을 줄여주는가?
기하학적 설명
→ 학습 데이터의 loss minimum에 빠지지 않고 그 사이 어딘가로 학습하게 함 (학습 데이터의 손실 최소값에 지나치게 맞춰지는 것을 방지)
💡 Loss function contour
- 모델의 손실 함수가 특정 값들을 가질 때의 등고선을 나타낸 그래프
- 손실 함수의 출력이 일정한 점들의 집합을 시각화한 것으로, 손실 함수의 형태와 경사 정보를 제공한다.
- 같은 등고선에 있는 점들은 손실 함수의 값이 동일한 점들의 집합을 나타낸다.
- 등고선의 중심은 Global minimum이거나 Local minimum일 수 있다.
주로 2차원에서 모델의 매개변수(예: 가중치)가 손실에 미치는 영향을 시각적으로 분석할 때 사용
💡 참고
- Validation과 Test시에는 Dropout이 적용되지 않음
- pytorch의 경우
model.eval()
호출시 Dropout이 비활성화됨
→ 실제로, 1980년대에 역전파 알고리즘이 개발되었음에도 잘 사용되지 않았던 이유이다.
💡 Activation Example
Sigmoid
: 값이 0과 1 사이로 압축되며, 이진 분류에 자주 사용됨tanh
: 값이 -1에서 1 사이로 출력되어, Sigmoid보다 중심을 0으로 맞추는 효과가 있음ReLU
: 0보다 작은 값은 0으로, 그 외는 그대로 출력하여 학습 속도를 가속화함Leaky ReLU
: ReLU와 유사하지만, 음수 입력에 작은 기울기를 적용하여 죽은 뉴런 문제를 완화함Maxout
: 여러 선형 함수 중 가장 큰 값을 선택하는 방식으로, 다양한 활성화 함수를 대체할 수 있음ELU
: ReLU와 유사하지만 음수 입력에 대한 값을 부드럽게 하여 학습 안정성을 높임
가중치 초기화 문제 상황 예시
→ 각 Weight에 대한 기울기가 동일해져 각 Weight가 동일한 방향으로 업데이트되어 결국 최적의 해에 도달할 수 없게 된다.
tanh activation을 사용하고 표준 정규분포에서 랜덤하게 뽑아서 상수를 곱해서 가중치를 초기화한다.
Xavier Initialization
→ 많은 activation을 거치더라도, 층을 통과하는 출력값들이 너무 크거나 작아지지 않도록 가중치를 초기화하여, 학습 초기 단계에서 출력값이 적절한 분포를 유지하도록 돕는다
문제 상황
activation function을 적용하지 않으면, layer를 깊게 쌓더라도 결국 하나의 layer를 쌓은 것과 동일한 효과를 낸다.
→ 이러한 이유로 비선형성을 추가하기 위해 non-linear한 activation function을 적용하게 된다.
배치 정규화
→ 이를 통해 기울기 소실 문제를 줄이고, 더 높은 학습률을 사용할 수 있어 학습이 빨라진다. 또한, 과적합을 줄이는 데에도 도움이 된다
💡죽는 뉴런(Dead neuron)
- ReLU 활성화 함수에서 발생하는 문제로, 뉴런의 출력이 항상 0이 되어 학습 중 더 이상 업데이트되지 않는 현상을 말한다.
- ReLU는 음수 입력을 0으로 바꾸기 때문에, 학습 과정에서 뉴런이 "죽는" 문제가 생길 수 있다.
- 이를 방지하기 위해 Leaky ReLU 등 대안적인 활성화 함수가 사용된다
💡 배치 vs 미니배치 vs 확률적 경사 하강법 (SGD)
- 배치(Batch):
- 정의: 전체 데이터셋을 한 번에 처리해 가중치를 업데이트하는 방식
- 장점: 모든 데이터를 사용하므로 가중치 업데이트가 정확함
- 단점: 메모리 사용량이 크고, 학습 시간이 오래 걸림
- 미니배치(Mini-batch):
- 정의: 데이터셋을 작은 그룹으로 나눠 처리하고, 각 그룹 단위로 가중치를 업데이트
- 장점: 메모리 절감, 속도와 안정성의 균형을 제공
- 단점: 너무 작은 배치는 학습이 불안정할 수 있음
- 확률적 경사 하강법(SGD):
- 정의: 한 번에 하나의 데이터 포인트로 가중치를 업데이트
- 장점: 메모리 사용이 적고, 업데이트가 매우 빠름
- 단점: 업데이트가 불안정하고, 수렴 과정에서 진동이 발생할 수 있음