딥러닝 기초부터 심화, 논문 리뷰까지 차근 차근 작성하여 글을 작성할 계획입니다.
먼저, 딥러닝이라는 기술에 대해 기초 지식부터 적어보고자 합니다.
세부적인 내용들은 찾아보시는 걸 권장하고 틀린 부분이 있으면 언제든 댓글로 말씀해주시면 수정하겠습니다.
1. 딥러닝
1-1. 구성요소
- Layer : 모델을 구성하는 각층
- Node : 각 layer를 구성하는 요소
- Weight : 다음 layer에 있는 Node에 미치는 영향을 주는 요소
- 최종적으로 Loss를 최소로 만드는 weight를 찾는 것이 목표
1-2. 학습 순서
- Forward-Propagation : 예측 값을 구하는 과정
- Loss 계산 : 실제 값과 오차를 구함
- Back-Propagation : Loss를 줄일 수 있는 weight 업데이트
2. 경사 하강법
- 개념
- 함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 최소값에 이를 때까지 반복시키는 알고리즘
- loss 값이 최저점으로 찾아가는 방법
- 어떤 포인트에서 가파른 경사(즉, 미분값)의 반대 부분으로 업데이트를 함 (그래프 U자 생각하면 편함)
- 얼마나 업데이트 방향을 정할지 결정하는게 learning rate & LR scheduler
- 잘 안되면 local minima에 빠질 수 있음 / 잘 되면 global minimum
- 장점
- 간단하고 직관적인 알고리즘
- 국부 최적점(local minimum)에 수렴하지만 전역 최적점(global minimum)에는 못 미치더라도 전반적으로 좋은 결과를 도출
- 내장된 파라미터가 적기 때문에 계산량이 작아 속도가 비교적 빠름
- 수치 미분을 안해도됨
- 단점
- Learning rate를 적절하게 해야 함 (optimizer)
- Local minima
- 해결책
- momentum 알고리즘을 적용함
3. Back-Propagation
- 개념
- 역방향으로 오차를 전파시키면서 각 층의 가중치를 업데이트하고 최적의 학습 결과를 찾아가는 방법
- 이 방법은 체인룰을 활용하여 각 레이어를 거슬러 올라가면서 기울기를 효율적으로 계산할 수 있으며, 중간 계산 결과를 재사용하여 많은 계산량을 절약할 수 있음
- 순전파 미분은 직관적이지만 신경망이 깊어지고, 파라미터가 많아질수록 계산량이 기하급수적으로 증가함.
- chain rule을 이용하여 출력층부터 입력층까지 기울기를 차례로 계산하는 방식
4. Hyperparameter
4-1. Activation Function
- 개념
- 노드에 입력된 값들을 비선형 함수에 통과시킨 후 다음 레이어로 전달
- 비선형이여야 하는 이유
- 선형 함수 : Wx+b = f(x)
- f(x) = Wx → f(f(f(x))) → W x W x W x x → W의 세제곱값을 k라고 정의하면, y(x) = kx와 같이 표현이 됨 → 선형 함수로는 은닉층을 여러번 추가하더라도 1번 추가한것과 큰 차이가 없음(아무런의미가 없다는 뜻 x) → 1회 추가나 여러번 추가나 차이가 없음
- Activation Function의 구간에서 기울기(gradient)가 0에 가까워지는 현상을 Saturated
- Sigmoid, tanh 등
- Vanishing Gradient 문제를 야기 - weight 업데이트 제대로 X
- Sigmoid의 경우 기울기의 최댓값이 0.25이므로, 레이어가 깊어질 수록 역전파 되는 값이 0에 가까워짐 (내적하여 전파되므로), tanh의 경우 기울기 최댓값이 1 이지만 모든 경우에 최댓값이 역전파 되지 않으므로 결국 0에 수렴하게 됨.
- weight 업데이트가 0이 된다는 의미
- 해결하는 방법 - BatchNorm, Skip Connection 등이 있음
- ReLU
- 장점
- Sigmoid, tanh보다 6배 이상 빠름 (exp 계산이 없기 때문)
- 단점
- 음수 영역에서 Saturated 문제
- Dead ReLU가 일어날 수 있음
- Dead ReLU
- activation이 제대로 이루어지지 않음
- 원인
- 초기화가 잘 못 되었을 때
- Learning rate가 지나치게 높을 때
- 해결책
- ELU 또는 Leaky ReLU
- 장점
- Swish (SiLU)
- ReLU와 다르게 Smooth한 activation map을 보여줌
4-2. Regularization Parameter
- 개념
- W(weight)가 너무 큰 값들을 가지지 않도록 하는 것
- W가 너무 큰 값을 가지게 되면 과하게 구불구불한 형태의 함수가 만들어지는데, Regularization은 이런 모델의 복잡도를 낮추기 위한 방법
- L1, L2 모두 과적합을 막기 위해 사용하는 Weight에 대한 패널티 텀임. Weight가 클수록 Loss가 커져서 Weight가 커지는걸 방지함
- L1 Regularization
- Cost에 가중치 절대 값 더해줌
- 모든 Weight에 lambda를 곱한 전체 웨이트의 합을 빼줌
- 같은 값을 빼주기 때문에 값이 작은 애들은 0이 되고, 중요한 특징들만 남게 됨
- 미분하면 상수
- Sparse한 벡터로 보여지게 됨
- 특성 선택이 중요한 경우 사용
- L2 Regularization
- Cost에 가중치 제곱 값 더해줌
- Weight 업데이트 시에 비율 (0.995, 0.9 등)을 곱하여 업데이트 하므로 전체적인 가중치를 작게 유지
- 미분하면 w가 남음 ( w^2 -(미분)→ w )
- 일반적인 회귀 문제나 분류 문제에 사용
4-3. Learning Rate
- 개념
- 인공 신경망 모델이 학습을 진행할 때 각각의 가중치(weight)를 얼마나 업데이트할지 결정하는 하이퍼파라미터
- 너무 크게 할 경우 Overshooting(지그재그로 이상하게 가중치 업데이트 하는 현상)
- 너무 작게 할 경우 속도도 느리며, local minima
- 보통 torch, keras, tensorflow에서는 optimizer에 parameter 값을 입력
4-4. Optimizer
- 배경
- 가중치를 업데이트하는 방법은 경사하강법에서 생기는 여러가지 단점을 극복하기 위해 다양한 알고리즘
- 개념
- weight를 업데이트하는 최적화 알고리즘
- 기존 GD의 단점
- 모든 데이터를 다 계산하고 발생한 모든 에러를 합(Sum)하여 가중치(Weight)를 업데이트
- ex) 1000개의 dataset과 200개의 weight가 생긴다면, 모든 weight를 한 번 업데이트 하는데 1000*200번의 gradient 계산이 필요함
- 모든 데이터를 다 계산하고 발생한 모든 에러를 합(Sum)하여 가중치(Weight)를 업데이트
- SGD (Stochastic Gradient Descent)
- 전체가 아니라 배치(Batch)단위로 가중치 업데이트하는 알고리즘
- 1000개의 데이터 셋을 200개 1배치로 묶으면, 1 epoch당 총 5번의 업데이트
- 이후 대부분의 optimizer는 배치 단위로 계산
- Momentum
- 개념
- 이전 step의 방향(관성 = Momentum), 그리고 현재 위치에서의 기울기를 고려해 변수를 업데이트
- 개념
- ADAM
- RMSProp(Root Mean Square Propagation) + Momentum
- RMSProp
- 이전 step의 크기를 반영함. 기울기를 단순히 같은 비율로 누적하지 않고 지수이동평균(Exponential Moving Average, EMA)을 활용하여 기울기를 업데이트
- 즉 , 가장 최근 time step에서의 기울기는 많이 반영하고 먼 과거의 time step에서의 기울기는 조금만 반영
- Argument
- learning rate
- Momentum의 지수이동평균 베타1, RMSProp의 지수이동평균 베타2 (변경 필요 x)
- epsilon: 숫자 안정성을 위한 작은 값으로, 일반적으로 1e-8 (변경 필요 x)
- 문제점
- SGD에 비해서 조금 일반화 성능이 떨어짐
- ADAMW
- weight decay는 gradient descent에서 weight 업데이트를 할 때, 이전 weight의 크기를 일정 비율 감소시켜줌으로써 오버피팅을 방지
- 핵심 : Adam with decoupled L2 regularization
- Adam에서는 Weight Decay가 SGD에서 만큼 효과적이지 않음, 그 이유는 Weight Decay 계산이 학습을 진행할수록 누적되면서(Gradient와 같이 계산되기 때문에), 영향이 줄어들게 됨.
- AdamW에서는 L2 Regularization 부분을 Gradient와 떼어내어 계산을 함으로써, Weight Decay 값이 누적되지 않도록 함.
4-5. Weight Initialization
- Optimization에서 어떤 초기값에서 출발하느냐에 따라 local minimum, global minimum에 빠지느냐가 결정
- 정해진 규칙 X
- torch는 기본적인 모듈 클래스(Linear, ConvNd 등) 를 초기화 할 때, 자동으로 파라미터를 적절히 초기화
- 특수한 경우
- Pre-trained 모델은 가중치 초기화 X
- ReLU를 사용할 때 He 초기화 사용이 일반적
- Sigmoid, Tanh 사용할 때는 Xavier 초기화 사용이 일반적
4-6. Batch Normalization
- Normalization
- 데이터를 평균 0, 표준편차 1이 되게 변환
- Whitening
- 데이터의 평균을 0, 그리고 공분산을 단위행렬로 갖는 정규분포 형태로 변환
- Batch Normalization
- Whitening과 normalization의 단점인 “이전 레이어로부터 학습이 가능한 parameters의 영향을 무시”를 없애줌
- 과정
- 일정 크기에 해당하는 mini batch 안에서 평균과 분산을 계산
- 입력 데이터에 대하여 각 차원(feature)별로 normalization을 수행
- normalization 된 값들에 대해 Scale factor(gamma)와 Shift factor(beta)를 더하여 학습이 가능한 파라미터를 추가함 (평균은 더하고, 분산은 곱해주는것)
- Inference에서의 BN
- 추론 과정에서는 테스트 데이터 하나에 대해 답을 내야 하므로 평균과 분산을 계산 X
- 추론할 때는 training set에서 이동 평균으로 구한 평균과 분산 값으로 대체하여 정규화를 수행
- 단점
- 미니 배치 크기에 의존 (1일 경우, 분산 크기가 0이 되어 train X)
- RNN 모델 적용이 어려움 (각 time step마다 다른 데이터가 연속적으로 나오는 문제)
- Layer Normalization
- 과정
- data sample 단위로 평균(mean)과 표준편차(std)를 계산해서 정규화를 실행
- sequence에 따른 고정길이 정규화로 batch normalization에 비해 RNN 모델에 더 효과적
- Transformer에 주로 이용되는 normalization
- 하지만 CNN에서는 안좋게 나옴
- activation map의 가장자리와 중앙 부분의 통계량이 다르기 때문
- 과정
- Instance Normalization
- 과정
- mini-batch의 이미지 한장씩만 계산 하여 각각의 개별 이미지 분포를 사용
- 클래스 레이블이 입력 이미지의 명암에 의존하지 않아야하는 이미지 분류에 인스턴스 정규화 사용, 즉 스타일 변환하고자 하는 이미지가 컨텐츠 이미지의 Contrast에 의존하지 않을 때
- BatchNorm 에서는 이미지의 모든 값(명암, 색상, 모양)에 영향을 받지만, Style Transfer에는 명암, 색상 등의 정보는 중요하지 않으므로 Norm에 영향을 받지 않도록 각 채널에 대해 개별로 Norm을 한다.
- 과정
'Machine Learning' 카테고리의 다른 글
PDFTranslate FastAPI 구현 (1) | 2025.02.04 |
---|---|
Stable Diffusion FastAPI 구현 (0) | 2025.02.03 |
Grounding-DINO FastAPI 구현 (1) | 2024.12.06 |
GLIP : Grounded Language-Image Pre-training (1) | 2024.07.26 |
CNN 기반 모델들 (0) | 2024.06.25 |