일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 활성화함수
- pdf parsing
- 손실함수
- Mean squared error
- Non-Maximum Suppression
- anomaly detection
- Cross Entropy Error
- rrf
- 이상탐지
- 활성화 함수
- Time Series
- 퍼셉트론
- E
- multi-query
- 데이터 파싱
- visual instruction tuning
- segmentation
- computer vision
- 합성곱 신경망
- rag parsing
- 딥러닝
- LLaVA
- rag-fusion
- leetcode
- deep learning
- LLM
- 컴퓨터비전
- 오차역전파
- 시계열
- nlp
- Today
- Total
굴러가는 분석가의 일상
딥러닝의 구조 #4 [경사하강법] 본문
앞선 포스팅에서는 손실함수에 대해 알아보았습니다. 손실함수는 학습을 통해 얻은 데이터의 추정치가 실제 데이터와 얼마나 차이가 나는지 평가하는 지표입니다. 궁금하신 사항이 있으시다면, 이전 포스트를 참고해 주세요.
2023.11.20 - [Data Science/DL] - 딥러닝의 구조 #3. 1 [손실 함수]
딥러닝의 구조 #3.1 [손실 함수]
본 게시물은 공부목적으로 작성되었으며, 딥러닝 파이토치 교과서 참고하였습니다. 딥러닝의 구조 및 정의 (복습) 입력층: 데이터를 받아드리는 충 은닉층: 모든 뉴런으로 부터 값을 받아 가중
g3lu.tistory.com
본 포스팅에서는 손실함숫 값을 최소화하는 파라미터(가중치/편향)를 구하는 경사하강법에 대해 알아보겠습니다.
💡 경사 하강법 (Gradient Descent)
경사 하강법은 칠흑 같은 어둠이 깔린 산에서 한 걸음을 내딛으며 움직이는 것과 매우 흡사합니다. 큰 보폭으로 움직인다면 빠른 시간 안에 자유롭게 돌아다닐 수 있는 장점이 있습니다. 하지만, 자칫 잘못하면 산 중턱에 있는 연못에 빠져 가장 낮은 지역에 도착했다고 착각을 할 수도 있습니다. 반면에, 좁은 보폭으로 산을 조심스럽게 이동하다 보면 연못에 빠질 위험은 상당히 줄어들게 됩니다. 이에 적절한 이동 범위를 설정하여, 가장 낮은 지점에 도달하는 것이 매우 중요합니다.
신경망에서 대부분은 학습 단계에서 최적의 매개변수를 찾아냅니다. 여기에서 최적이란 손실함수가 최솟 값이 될 때의 매개변수 값입니다. 하지만 일반적인 문제의 손실함수는 매우 복잡합니다. 손실함수가 1차 방정식이나 2차 방정식과 같이 간단한 형태라면 미분계수가 0인 지점을 찾아 간단하게 최소 값을 찾을 수 있습니다. 하지만, 여러 층으로 구성되어 있는 신경망은 대부분 구조가 복잡하고 비선형적인 경우가 많습니다. 이에 매개변수 공간이 광범위하여 어디가 최솟값이 되는 곳인지 짐작할 수 없습니다. 이러한 상황에서 기울기를 사용하여 함수의 최솟 값을 찾으려는 것이 경사 하강법입니다.
💡 경사하강법의 문제점
(1) Local Minimum
위의 사진과 같이 손실함수에는 Global Minimum (전역 최솟값) 및 Local Minimum (지역 최솟값)이 존재합니다. Local Minimum 은 연못에 빠지는 것과 같이, 일부 구간의 최소 값을 뜻합니다. 더불어, Global Minimum 은 산의 가장 낮은 구간, 즉 전체 구간에서의 최소 값을 뜻합니다. 여기에서 짚고 넘어가야하는 것은 시간을 효율적으로 사용하면서 Local Minimum 값을 Global Minimum 값으로 혼동하는 문제를 피하는 것 입니다.
(2) Saddle Point
위 사진의 검은색 점은 안장점이라고 합니다. 이는 기울기가 0이지만 극값이 아닌 지점을 뜻합니다. A-B 사이에서 안정점은 최솟값(Minima)이지만, C-D사이에서는 최댓값(Maxima)입니다. 따라서 해당 지점은 미분이 0이지만 극값을 가질 수 없습니다. 경사 하강법은 미분이 0일 경우 더이상 파라미터를 업데이트 하지않아, 안장점을 벗어나지 못하는 한계가 있습니다.
💡 경사 하강법 (Gradient Descent)의 종류
머신러닝에서는 데이터를 학습할 때, 세 가지의 데이터 셋으로 나누어 진행하게 됩니다.
- Training Data : 모델의 학습을 위함.
- Test Data : 학습된 모델의 성능 평가를 위함.
- Validation Data : 파라미터 최적화를 위함.
Training data를 통해 매개변수(가중치/편향)을 업데이트하고, Validation data를 통해 Hyperparameter-Tuning을 통해 파라미터를 최적화하게 됩니다. 이후, 최종적으로 Test Set을 각종 지표를 사용하여 성능을 평가합니다.
하지만 현실세계에서 도출되는 데이터 경우, 한 번의 계산으로 최적의 값을 도출하는 것은 불가능에 가깝습니다. 이에 데이터를 아래와 같이 세분화하여 학습할 필요가 있습니다.
- Epoch : 전체 훈련 데이터 총 학습 횟수 (각 한번의 Forward/Back Propagation)
- Batch : 모델 학습 중 매개변수(가중치/편향) 등 업데이트할 때 사용할 데이터의 개수
- Iteration : 전체 데이터에 대한 총 Batch의 개수 (가중치가 업데이트 횟수)
경사 하강법은 손실 함수의 비용이 최소가 되는 지점을 찾을 때까지 데이터를 위의 방식처럼 나누어 학습하게 됩니다. 이에 training data의 매개변수(가중치/편향 등)를 어떻게 업데이트 하는지에 따라 크게 3가지의 종류로 나뉘게 됩니다.
1. 배치 경사하강법 (Batch Gradient Descent, BGD)
전체 데이터 셋에 대한 오류를 구한 후 기울기를 한 번만 계산하여 모델의 파라미터를 업데이트 합니다. BGD에 대한 특징은 아래와 같습니다.
- 파라미터 업데이트를 위해 전체 데이터 셋을 사용하기 때문에 많은 시간과 메모리가 필요함.
- 지속적으로 같은 데이터를 사용하기에 최적해에 대한 수렴은 안정적임.
- Local Minimum 빠질 수 있으나, Noise가 없어 벗어나기 힘듬.
2. 확률적 경사하강법 (Stochastic Gradient Descent, SGD)
"Stochastic" 이라는 단어를 통해 확률적이라는 것을 추출해 낼 수 있습니다. 이는 전체 데이터에서 무작위화 한후, 임의로 선택한 데이터에 대해 기울기를 계산하여 업데이트하는 방식입니다. 첫번째 매개변수를 업데이트가 끝이나면, 마지막 n번째 데이터까지 학습을 하게 됩니다. SGD의 특징은 아래와 같습니다.
- 임의로 선택된 데이터를 순차적으로 처리하므로, 학습 속도가 빠름.
- 데이터 셋을 하나씩 처리하기 때문에 오차율이 크고 Batch Gradient Descent 보다 불안정함 .
- 여러 번의 업데이트로 생긴 Noise으로 인하여, Local Minimum 빠져나오기 쉬움.
- 대부분 Global Minimum 값을 찾지만, 불안정한 학습 방식으로 인하여 정확도가 낮을 수 있음.
3. 미니배치 경사하강법 (Mini-Batch Gradient Descent)
일반적으로 딥러닝 라이브러리에서 SGD는 Mini-Batch Gradient Descent을 뜻합니다. 전체 데이터 셋의 각 하나의 미치 배치의 기울기를 구한 후, 그것 에 대한 평균 기울기를 이용하여 모델을 업데이트 하는 방식입니다. 특징은 아래와 같습니다.
- 계산속도가 매우 빠르며, 최적해 수렴이 안정적임.
- Local Minimum에 빠질 확률이 적음 → 만약 빠졌다면, 학습량을 늘려 해결 가능
또한, Mini-Batch Gradient Descent에서 Batch Size 설정하는 것은 매우 중요합니다. 예를 들어, 420 개의 데이터를 100 개의 배치로 나누게 된다면, 각 배치의 데이터는 1/100 만큼의 영향력을 가지게 됩니다. 그러나 마지막 배치 (20개)의 데이터는 1/20 의 영향력을 가지게 되므로 과평가 되는 경향이 있습니다. 이에 마지막 배치의 사이즈가 다를 경우, 삭제 하는 것이 효율적 입니다.
'Deep Learning 이해' 카테고리의 다른 글
딥러닝의 학습 #2.1 (Optimizer 종류와 학습) (0) | 2023.12.18 |
---|---|
딥러닝의 학습 #1 (Backpropagation) (0) | 2023.12.05 |
딥러닝의 구조 #3 [손실 함수] (0) | 2023.11.20 |
딥러닝의 구조 #2 [활성화 함수] (0) | 2023.11.09 |
딥러닝의 구조 #1 [퍼셉트론] (0) | 2023.11.08 |