공부 기록장

딥러닝의 기초 개념과 최적화 방법 : 경사하강법의 종류와 선택 기준 본문

카카오테크 부트캠프/강의

딥러닝의 기초 개념과 최적화 방법 : 경사하강법의 종류와 선택 기준

빛나무 2024. 7. 18. 13:35

딥러닝이란?

딥러닝은 인공신경망을 기반으로 한 기계학습의 한 분야

인간의 두뇌를 모방한 구조로, 다층 신경망을 사용해 데이터로부터 특징을 학습하고 패턴을 인식하는 기술

 

딥러닝의 중요성

복잡한 데이터 분석과 패턴 인식에 뛰어난 성능

자율주행, 음성인식, 이미지 분류, 자연어 처리 등 다양한 분야에서 활용

 

머신러닝 vs 딥러닝

딥러닝 ⊂ 머신러닝

 

모델의 복잡성

머신러닝 : 비교적 단순한 알고리즘 사용(선형 회귀, 의사결정트리 등)

딥러닝 : 복잡한 모델을 사용해 데이터의 깊은 패턴 학습

 

데이터 요구사항

머신러닝 : 적은 양의 데이터로도 학습이 가능, but 데이터 품질 중요

딥러닝 : 대량의 데이터 필요, 데이터 양 많을수록 성능 향상

 

특징 추출

머신러닝 : 수동으로 특징 추출해야 하는 경우 많음

딥러닝 : 자동으로 특징을 추출하여 데이터의 중요한 부분을 학습

 

학습 속도

머신러닝 : 상대적으로 빠르게 학습이 가능

딥러닝 : 학습 시간이 오래 걸리며, GPU와 같은 고성능 하드웨어가 필요

 

성능

머신러닝 : 적은 양의 데이터와 간단한 문제에 대해 좋은 성능

딥러닝 : 대량의 데이터와 복잡한 문제에서 뛰어난 성능

 

인공 신경망 구조

뉴런

- 생물학적 뉴런과 유사

- 입력 신호를 받아 가중치와 함께 처리한 후, 활성화 함수를 통해 출력 신호를 생성

- 입력 데이터에서 특정 패턴이나 특징을 학습

 

구성 요소

입력(Input) : 다른 뉴런이나 입력 데이터로부터 전달받는 값

가중치(Weight) : 각 입력 신호에 곱해지는 값, 입력값의 중요도를 조절함

바이어스(Bias) : 출력값에 더해지는 상수, 모델의 유연성을 높이고 다양한 출력을 생성하도록 조절함

활성화 함수(Activation Function) : 뉴런의 가중 합을 비선형 변환하여 최종 출력 값을 생성

 

 

활성화 함수

활성화 함수는 비선형 함수로서 입력 신호의 `선형 결합에 비선형성을` 도입

신경망이 복잡한 패턴을 학습하고 비선형 문제를 해결할 수 있게 해줌

 

활성화 함수의 종류

1) Sigmoid 함수

출력 값을 (0,1)  사이로 변환하여 이진 분류에 유용

 

2) ReLU 함수

음수값은 0으로 변환하고, 양수값은 그대로 반환한다

기울기 소실 문제 완화해줌

3) Tanh 함수

출력값을 (-1, 1) 사이로 변환하여 신경망 학습에 유리

 

활성화 함수 비교

- Sigmoid는 주로 이진 분류에 사용하며, 출력이 0과 1 사이로 해석이 용이하지만, Vanishing Gradient 문제가 심하다

- ReLU는 계산이 빠르고 Gradient 소실 문제가 적어 대규모 딥러닝 모델에 많이 사용되지만, Dying ReLU 문제가 존재한다

- Tanh는 Sigmoid의 변형으로 데이터 중심을 0으로 맞추어 주지만, 여전히 Vanishing Gradient 문제를 완전히 해결하지 못한다.

 

⇒ 신경망 모델을 설계할 때에는 이러한 특성을 고려해 적절한 활성화 함수를 선택하는 것이 중요

⇒ ReLU는 대부분의 딥러닝 모델에서 기본값으로 사용되지만, 특정 상황에서는 Sigmoid나 Tanh가 더 적합할 수 있다

 

신경망의 구조

- 입력층 : 원본 데이터를 받아들이는 층

- 은닉층 : 입력 데이터를 처리하고 특징을 추출하는 층

- 출력층 : 최종 결과를 출력하는 층

 

단층 신경망

- 입력층과 출력층으로만 구성된 신경망

- 단순 문제 해결에는 유용, but XOR 문제 같은 비선형 문제를 해결하지는 못함

 

다층 신경망

- 입력층, 은닉층, 출력층으로 구성된 신경망

- 은닉층을 통해 비선형 문제 해결 가능, 더 복잡한 패턴을 학습

 

딥러닝의 학습 원리

학습 과정

1. 순방향 계산(Feedforward process) : 입력 데이터를 네트워크를 통해 전달하며 출력 값을 계산

2. 손실 함수(Loss Function) : 예측값과 실제값의 차이를 계산

3. 역전파(Backpropagation) : 손실 함수를 기준으로 가중치 업데이트

 

학습 방법

- 배치 학습 : 전체 데이터를 한 번에 학습

- 미니 배치 학습 : 데이터를 여러 작은 배치로 나누어 학습

 

손실 함수

모델의 예측 값과 실제 값 간의 차이를 측정하는 함수

모델이 `얼마나 잘 학습하고 있는지 평가하는 기준`이 된다

(ex. 교차 엔트로피)

 

손실 함수의 역할

- 모델이 예측한 값과 실제 값 간의 차이를 줄이기 위해 사용

- 손실 함수의 값이 작을수록 모델의 성능이 좋다

- 손실함수를 최소화하는 방향으로 가중치를 업데이트하는데 도움

 

역전파

- 모델의 예측 오류를 줄이기 위해서 가중치를 조정하는 방법

- 딥러닝 모델에서 가중치를 학습하고 최적화하는 데 핵심적인 역할

 

최적화 알고리즘

최적화 알고리즘은 `모델의 가중치와 바이어스를 업데이트하여 손실 함수를 최소화`하는 중요한 역할

 

★ 경사하강법(Gradient Descent)

    : 손실 함수 최소화를 위해 반복적으로 가중치를 업데이트하는 최적화 알고리즘

w : 가중치, α : 학습률, L(w) : 손실함수의 기울기

⇒ 적절한 학습률을 선택하는 것이 중요하다

 

더보기

cf.  손실 함수의 변화율(L(w))이 갖는 의미

기울기(그래디언트)는 손실 함수 L(w)가 가중치 w에 따라 얼마나 빠르게 변하는지를 나타낸다.

수학적으로, 는 손실 함수 L의 각 가중치 w에 대한 편미분 값들의 벡터이다.

 

1) 배치 경사 하강법

`전체 데이터셋을 사용`하여 기울기를 계산하고 가중치를 업데이트하는 방식

  • 장점 : 기울기 계산과 수렴 과정이 안정적이다
  • 단점 : 계산 비용과 메모리 사용량이 높다

2) 확률적 경사 하강법(SGD)

`하나의 데이터 포인트를 사용`하여 기울기를 계산하고 가중치를 업데이트하는 방식

  • 장점 : 계산이 빠르고, 메모리 사용량이 적다
  • 단점 : 기울기가 불안정하고, 수렴 과정에서 진동 가능성이 있다

3) 미니배치 경사하강법

전체 데이터셋을 작은 배치로 나누어, 각 배치에 대해 손실함수의 기울기를 계산하고 가중치를 업데이트하는 방식

  • 장점 : 계산 효율성과 메모리 사용량의 균형을 잡을 수 있고, 수렴 과정이 비교적 안정적이다
  • 단점 : 배치 크기 선택이 어려울 수 있으며, 하이퍼파라미터 튜닝이 필요하다

    배치 사이즈에 따른 특징

    - 작은 배치 크기 : 잦은 업데이트로 확률적 경사하강법(SGD)과 유사해지고, 계산이 빠르지만 불안정해짐

    - 큰 배치 크기 : 더 안정적이고 배치 경사하강법과 유사해지고, 계산이 느리지만 안정적임

 

 

학습률에 따른 특징

  • 학습률이 너무 크면 : 최적점 주변에서 진동하거나 발산할 가능성이 높아짐
  • 학습률이 너무 작으면 : 수렴 속도가 느리고, 최적점에 도달하는 시간이 길어짐

 

각 최적화 알고리즘 비교

- 배치 경사하강법 : 데이터셋이 작고, 높은 안정성이 필요한 경우 사용

- 확률적 경사하강법 : 데이터셋이 몹시 크고, 빠른 계산이 필요한 경우 사용

- 미니배치 경사하강법 : 배치와 확률적 경사하강법의 중간 특성

 

⇒ 실제 적용에서는 종종 여러 방법을 실험해보고, 검증 데이터셋에 대한 성능과 수렴 속도를 비교하여 최적의 방법을 선택

 

역전파의 한계

- 역전파 알고리즘은 계산 비용이 높아 큰 신경망에서 학습 시간이 길어질 수 있음

- 기울기 소실(Gradient Vanishing) : 역전파 과정에서 기울기가 점점 작아져서 학습이 잘 되지 않는 현상

- 기울기 폭발(Gradient Exploding) : 기울기가 너무 커져서 학습이 불안정해지는 현상

 

과적합

딥러닝은 모델이 복잡하고 사용하는 데이터셋이 크다

모델이 학습 데이터에 지나치게 적응하여 과적합이 될 가능성이 높다

 

과적합 방지 방법

- 데이터 증강(Data Augmentation) : 학습 데이터를 다양하게 변형하여 데이터 양을 늘리기

- 정규화(Regularization) : 모델의 복잡성을 제한하여 과적합을 방지(ex. L1, L2 정규화)

- 드롭아웃(Dropout) : 무작위로 `뉴런을 비활성화`하여 모델의 일반화 능력을 향상시키기

 

에포크

에포크(Epoch)란?

전체 데이터셋을 신경망을 통해 한 번 완전히 통과시키는 과정을 의미

 

에포크의 역할

1. 학습 과정 반복

- 데이터셋 한 번 학습으로는 불충분 → 여러 번의 에포크를 통해 모델을 반복적으로 학습

- 각 에포크마다 손실 함수 값을 계산해, 역전파를 통해 가중치 업데이트

2. 모델 성능 향상

- 여러 에포크를 통해 모델은 점진적으로 가중치와 바이어스를 조정해 손실 함수 값 최소화

- 에포크가 너무 적으면 과소적합, 너무 많으면 과적합이 발생할 수 있다

 

에포크 관련 개념

배치(Batch)

- 전체 데이터셋을 한 번에 처리하기 어려운 경우, 데이터를 작은 묶음, 배치로 나눈다

- 각 배치는 모델이 학습할 때 한 번에 처리되는 데이터 샘플의 수를 의미한다

- 한 데이터셋이 1000개의 샘플로 구성되어 있고 배치 크기를 100으로 설정한다면, 한 에포크는 10개의 배치로 나뉜다

 

스탭(Step)

- 한 에포크 내에서 배치 단위로 가중치를 업데이트 하는 과정을 스템(Step) 혹은 이터레이션(Iteration)이라고 한다

- 한 에포크가 10개의 배치로 나뉘면, 10번의 스텝 혹은 이터레이션이 발생한다