[1] DeepLearning 이론
업데이트:
[1] Machine Learning
- Linear Regression (선형 회귀)
- 선형 회귀는 연속적인 값 예측, MSE 비용함수 사용
- 입력 변수와 출력 변수 사이의 선형 관계를 모델링하는 알고리즘
- 사용 예시: 집 가격 예측, 매출 예측 등 연속적인 값을 예측하는 문제에 많이 사용
- Cost Function: 선형 회귀에서는 일반적으로 Mean Squared Error (MSE)를 비용 함수로 사용.
- Logistic Regression (로지스틱 회귀)
- 로지스틱 회귀는 이진 분류, BCE 비용함수 사용
- 개념: 로지스틱 회귀는 이진 분류 문제를 해결하기 위한 알고리즘. 선형 회귀와 유사하지만, 출력 함수로 시그모이드 함수를 사용하여 0과 1 사이의 확률 값을 반환함. 이 확률 값을 기준으로 이진 분류를 수행
- 사용 예시: 스팸 메일 분류, 질병 진단 등 이진 분류 문제에 많이 사용
- Cost Function: 로지스틱 회귀에서는 일반적으로 Binary Cross-Entropy (BCE)를 비용 함수로 사용. BCE는 실제 클래스와 예측 확률 사이의 차이를 측정
- Softmax Regression (소프트맥스 회귀)
- 소프트맥스 회귀는 다중 클래스 분류, 크로스 엔트로피 손실 사용
- 개념: 소프트맥스 회귀는 다중 클래스 분류 문제를 해결하기 위한 알고리즘. 입력 변수의 선형 조합에 소프트맥스 함수를 적용하여 각 클래스에 대한 확률을 계산. 가장 높은 확률을 가진 클래스를 예측 결과로 선택.
- 사용 예시: 손글씨 숫자 인식, 이미지 분류 등 다중 클래스 분류 문제에 많이 사용
- Cost Function: 소프트맥스 회귀에서는 일반적으로 Cross-Entropy Loss를 비용 함수로 사용. 크로스 엔트로피 손실은 실제 클래스와 예측 확률 분포 사이의 차이를 측정.
[2] DeepLearning과 Perceptron, Artificial Neural Network
activation function
- perceptron (activation func = step func)
- logistic regression
- softmax regression
- GeLU (Gaussian Error Linear Unit)
- dropout, zoneout, ReLU의 특성을 조합하여 유도
- 입력값을 가우시안 함수에 적용 (ReLU의 smoothing 버전)
- GeLU는 음수 입력값도 작은 값으로 매핑하여 약간의 정보 보존 가능 + 음수영역에서도 작은 gradient를 가지기 때문에 gradient vanishing 문제 완화됨
- LLM에 GeLU 많이 사용됨
- LLM은 매우 깊은 신경망을 가지므로 gradient vanishing 문제가 덜 생기는 GeLU가 더 적합함
- 언어 데이터는 연속적이고 유연한 특성을 가지므로 smoothing 한 GeLU가 더 적합함
- 음수 입력값의 정보를 일부 보존하기 때문에 미묘한 뉘앙스를 포착하는데 더 좋음
- GLU (Gated Linear Unit)
- GLU는 입력 벡터를 두 부분으로 나누어 한 부분은 선형 변환을, 다른 부분은 게이트로 사용
- GLU(x) = (x * W + b) ⊙ σ(x * V + c), ⊙는 element-wise multiplication, σ는 시그모이드 함수
- 게이트를 통해 정보의 흐름을 조절하여 중요한 정보는 통과시키고 불필요한 정보는 차단할 수 있음
- SwiGLU
- 수식: SwiGLU(x) = Swish(x * W1 + b1) ⊙ (x * W2 + b2)
- SwiGLU는 Swish 함수의 장점과 GLU의 게이팅 메커니즘을 결합
- Swish 함수는 무한 차분 가능하며, 음수 영역에서도 작은 기울기를 가지므로 기울기 소실 문제를 완화시켜줌
- GLU의 게이팅 메커니즘은 중요한 정보는 통과시키고 불필요한 정보는 차단하여 정보 흐름을 조절합니다.
- GEGLU(GELU with GLU):
- GEGLU는 GELU와 GLU를 결합한 활성화 함수
- 수식: GEGLU(x) = GELU(x * W1 + b1) ⊙ (x * W2 + b2)
- GELU로 입력을 변환한 후, GLU처럼 게이트를 적용하여 정보 흐름을 조절합니다.
Underfitting과 Overfitting
Overfitting을 방지하는 방법
- (1) data 양 늘리기 (2) batch normalization (3) 모델의 complexity를 줄이기 (4) drop out (5) weight regularization
- dropout 의 효과
- (1) overfitting 방지 (모델이 일부 뉴런에 의존하는걸 방지, robust 강화) (2) ensemble (학습할 때마다 랜덤한 뉴런을 선택 → 여러 모델을 합친 효과와 유사하게 동작) (3) 효율적 계산 가능
- Regularization
- norm: 유한 차원의 벡터공간에서 벡터의 절대적 크기 (magnitude) 혹은 벡터 간 distance, Lp-norm (르베그 공간)
- L1 norm (manhattan distance), L2 norm (Euclidean distance)
Loss function
- Cross entropy Loss
- KL divergence 와 유사
Optimization
경사하강법을 기반으로 objective function에 대한 최적의 파라미터를 찾는 알고리즘
- [1] Gradient Descent
- 모델의 parameter를 최적화하는데 사용되는 알고리즘. loss function의 gradient를 계산한 후 loss가 최소화 되는 방향으로 weight를 업데이트함
- 한계: (1) local minimum에 빠지기 쉽다 (2) 안장점 (saddle point)를 벗어나지 못한다
- [2] momentum
- GD에서 loss를 업데이트할때 이전 step에서의 update 방향을 고려하여 (관성을 고려하여) 업데이트
- 한계: optimum point를 관성에 의해 지나칠 수 있음
- → Nesterov Accelerated Gradient (NAD) 같은 optimizer도 나옴
- [3] AdaGrad
- feature별로 adaptive learning rate를 적용 (이전까지의 gradient의 제곱값을 누적하여 lr 결정) gradient가 클수록 모델을 조금 업데이트하고, 작을수록 모델을 많이 업데이트
- → 학습 초기에는 빠르게 수렴하다가 후반에는 안정적으로 수렴
- 학습이 진행될수록 lr가 급격하게 작아져서 local optima + saddle point에 빠질 수 있음
- feature별로 adaptive learning rate를 적용 (이전까지의 gradient의 제곱값을 누적하여 lr 결정) gradient가 클수록 모델을 조금 업데이트하고, 작을수록 모델을 많이 업데이트
- [4] RMSProp
- Adagrad의 단점을 보완 → gradient의 제곱값의 지수이동평균을 사용 → 학습이 진행될수록 lr이 급격하게 작아지는 문제 보완
- [5] Adam
- momentum + RMSProp
- momentum 처럼 과거의 gradient 를 고려 (방향)
- RMSProp 처럼 adaptive lr 사용
- gradient의 1, 2차 momentum (평균과 분산)을 추정하여 lr 을 조정. 학습속도가 빠르고 hyperparameter에 대한 민감도가 낮음
- momentum + RMSProp
Loss Function과 Optimization 참고
Weight Initialization
- [1] zero initialization
- 모든 parameter의 값을 0으로 초기화 하는 것 → backprop 때 모두 같은 값으로 변하게 되어 의미 X (학습해도 weight가 안변함)
- [2] random initialization
- ex) gaussian distribution에서 샘플링
- layer가 깊어질수록 output cost가 0에 수렴 → zero ini랑 비슷
- activation function을 넣은 DNN에서는 문제가 됨 (layer가 깊어질수록 activation 값이 0으로 수렴) → gradient vanishing 문제 발생 가능
- weight를 큰 난수로 초기화 → 뉴런의 출력이 커져 -1, 1로 포화 & gradient는 0으로 수렴 → gradient vanishing
- ex) gaussian distribution에서 샘플링
- [3] Lecun Initialization
- weight를 적절한 범위 내에서 무작위로 초기화. 입력 유닛의 개수에 맞게 분산을 조절
- 각 출력 분산을 일정하게 유지하게 해서 네트워크의 수렴속도를 높임
- Lecun Initialization은 주로 시그모이드나 하이퍼볼릭 탄젠트 활성화 함수를 사용할 때 효과적
- weight를 적절한 범위 내에서 무작위로 초기화. 입력 유닛의 개수에 맞게 분산을 조절
- [4] Xavier initialization
- 입출력의 분산을 맞춰주는 게 목표
- Lecun Initialization은 입력 유닛의 개수만을 고려하는 반면, Xavier Initialization은 입력과 출력 유닛의 개수를 모두 고려
- → gradient vanishing / exploding 문제 완화 (출력의 분산이 일정하게 유지되어 gradient가 사라지지 않음)
- → gradient를 적절하게 학습시켜 학습속도가 빨라짐
- 시그모이드나 하이퍼볼릭 탄젠트와 같은 활성화 함수를 사용할 때 효과적
- 입출력의 분산을 맞춰주는 게 목표
- [5] He initialization
- ReLU 계열의 활성화 함수를 사용할 때 최적화
- → relu 계열은 음수값을 0으로 만들기 때문에 분산이 입력보다 작아지는 경향 → he는 이를 고려하여 xavier 보다 큰 분산을 가지도록 설계. relu 의 특성을 반영하여 입력과 출력의 분산을 맞춰줌
- ReLU 계열의 활성화 함수를 사용할 때 최적화
Normalization
- [1] batch normalization
- mini-batch 단위로 데이터를 normalize하는 방식. 각 feature map의 channel 별로 평균과 분산을 구한 후 normalize
- 사용) CNN, MLP에서 많이 사용. 특히 image classification, object detection 등에 사용
- BUT, RNN model 에는 적용이 힘듦 (rnn은 time step마다 각기 다른 데이터가 연속적으로 나오는 sequence data를 다룸 → batchnorm 적용이 힘듦)
- SGD에서 batch 단위로 학습하게 되면,
internal covariant shift
문제가 생김- 각 계층에서 feature가 입력되고 난 후 → conv, fc, … → activation 를 거치는데 그럼 연산 전후의 data distribution이 달라짐. (layer마다 분포가 다 달라짐) 이를 맞추기 위해 batchnorm
- batchnorm은 학습과 추론때 다르게 적용되어야함
- 학습 단계의 batchnorm
- 학습단계에서 모든 feature에 정규화를 해주면, gradient descent에 따른 weight의 반응이 같아져 학습에 유리해짐
-
batchnorm은 γ, β의 역할이 중요함
\[BN(X) = \gamma \left( \frac{X - \mu_{batch}}{\sigma_{batch}} \right) + \beta \]- 왜냐하면 batchnorm 후에 activation function이 적용되는데, 이때 relu를 사용하면 음수에 해당하는 부분이 날라감. 따라서 relu 같은 activation function을 적용하더라도 이 값이 사라지지 않도록 정규화값에 γ, β 를 곱하고 더해줌
- 추론 단계의 batchnorm
- 학습 때와 달리 batch 단위로 평균과 분산을 구하기 어려움 → 학습 때 저장된 평균/분산을 사용
- 평균 - 이동평균 (moving average): 학습시 최근 N개의 평균값
- 분산 - 지수평균 (exponential average)
- 학습 때와 달리 batch 단위로 평균과 분산을 구하기 어려움 → 학습 때 저장된 평균/분산을 사용
- 학습 단계의 batchnorm
- [2] layer normalization
- layer를 기반으로 하여 data sample 단위로 normalize (각 sample의 feature map 전체에 대해 normalize)
- sequence에 따른 고정길이 정규화. 일반화를 잘함
- 사용) NLP 모델에 많이 사용 (RNN, Transformer 구조 등)
- [3] Instance Norm
- data sample의 channel 별로 normalize
- 사용) 이미지 스타일 변환 계열에 많이 사용됨 (style-transfer, image generation)
- stylegan 에서도 adain 사용
- batchnorm은 batch 별 normalize를 한다면, instance norm은 mini-batch에서 이미지 한장씩만을 normalize 한 후 개별 이미지 분포를 사용
- [4] Group Normalization
- BN과 LN의 중간 형태, channel을 그룹별로 나눠서 normalize
- batch가 작거나 메모리 제약이 있는 상태에서 BN의 대용으로 사용
- 사용) image segmentation, mask r-cnn
Forward 와 Backward
Reference 자연어천재만재 06-02 머신 러닝 훑어보기
댓글남기기