딥러닝/혁펜하임의 Easy! 딥러닝

[Chapter 2] 인공 신경망과 선형 회귀, 그리고 최적화 기법들

꾸준함. 2025. 1. 25. 01:08

1. 인공 신경망 (Artificial Neural Network)

  • 인간 뇌의 신경망 구조에서 영감을 받아 만들어졌으며
  • 인공적으로 만든 신경들이 서로 연결되어 망을 이룬 형태

 

1.1 생물학적 신경 구조와 인공 신경의 유사성

생물학적 신경 구조는 다음과 같이 크게 세 가지 부분으로 나눌 수 있습니다.

  • 수상돌기: 전기 신호를 받는 부분
  • 세포체: 받은 신호를 처리하는 부분
  • 축삭: 처리된 신호를 다음 신경으로 전달하는 부분

 

위와 같은 구조로 자극을 수용하고 해당 자극이 특정 임계값을 넘으면 다음 신경으로 신호를 전달하는 방식으로 작동합니다.

 

https://ko.wikipedia.org/wiki/%EC%8B%A0%EA%B2%BD_%EC%84%B8%ED%8F%AC

 

인공 신경은 위와 같은 생물학적 신경의 작동 원리를 모방합니다.

인공 신경의 작동 과정을 간단히 설명하면 다음과 같습니다.

  • 여러 입력 노드로부터 자극을 받고
  • 받은 자극들의 총합을 계산
  • 계산된 총합을 활성화 함수에 통과시킨 뒤
  • 활성화 함수의 출력값을 다음 층의 신경에 전달

 

https://medium.com/@balaka2605/decoding-activation-functions-in-neural-networks-are-you-choosing-the-right-one-24f792c9f4c6

 

1.2 활성화 함수 (Activation Function)

  • 들어오는 값과 나가는 값의 관계를 나타냄
  • 인공 신경이 입력 신호를 어떻게 처리하여 출력할지를 결정
  • 인공 신경망의 뉴런 출력에 비선형성을 추가하여 모델이 복잡한 패턴을 학습할 수 있도록 지원
  • 각 뉴런의 출력에 적용되며, 이로 인해 네트워크는 다양한 입력에 대해 다양한 출력을 생성 가능
  • 신경망의 성능에 큰 영향을 미치며, 모델의 수렴 속도와 정확도에 중요한 역할을 수행하기 때문에 문제의 특성에 따라 적절한 활성화 함수를 선택하는 것이 딥러닝 모델의 성능을 최적화하는 데 필수적
  • ex) Unit Step Function, Sigmoid Function, Hyperbolic Tangent, ReLU (Rectified Linear Unit), Leaky ReLU, Softmax

 

1.3 인공 신경의 Weight와 Bias

  • 인공 신경은 노드와 엣지로 이루어져 있고, 입력된 자극의 값에 웨이트를 곱하고 바이어스와 함께 더한 다음 활성화 함수를 통과시킴
  • Bias는 들어오는 값을 계산할 때 자극의 값과 함께 더해지는 값으로, 신경의 민감도를 조절하는 파라미터
  • Weight는 각 자극의 중요도를 결정하는 파라미터로, 자극의 값에 곱해져 총합에 반영
  • 웨이트와 바이어스 값을 적절히 부여하는 것이 인공 신경의 성능을 결정하는 데 매우 중요함
    • 실제 인공 신경망에서는 웨이트와 바이어스가 수억 개에 달할 수 있어, 사람이 일일이 값을 정하는 것은 불가능하며 후술 할 알고리즘들을 통해 AI가 스스로 적절한 바이어스와 웨이트를 찾아내도록 구현해야 함

 

1.4 인공 신경망과 MLP (Multi-Layer Perception)

  • 인공 신경망은 여러 인공 신경이 서로 연결되어 망을 이루는 구조로 본질적으로 이는 `곱하고 더하고 액티베이션하는` 과정의 연속
  • 각 노드가 가진 웨이트 세트가 곧 해당 노드의 `역할`을 결정하므로 웨이트 세트가 서로 충분히 다를 때, 각 신경은 고유한 역할을 수행할 수 있음
    • 이러한 다양성이 신경망의 표현력을 높이는 핵심 요소

 

  • 노드끼리 모두 연결된 층을 Fully-Connected 레이어라고 하며
  • Input, Output Layer와 더불어 Hidden Layer를 하나 이상 가지면서 모든 레이어가 Fully-Connected 레이어인 신경망을 MLP라고 지칭
    • Input Layer: 입력값을 가진 노드들이 존재하는 층
    • Hidden Layer: 중간에 존재하는 은닉된 층
    • Output Layer: 최종 출력을 내는 층

 

  • 히든 레이어의 개수가 많을수록 신경망은 더욱 깊어지며 히든 레이어 개수가 많은 인공 신경망을 깊은 인공 신경망이라고 지칭
  • 초기에는 Unit Step Function을 사용하는 인공 신경만을 퍼셉트론이라고 불렀지만, 현재는 히든 레이어에서 비선형 액티베이션을 사용하기만 하면 MLP라고 부름
    • 선형 액티베이션 (Linear Activation): f(x) = x의 형태로, 쉽게 말해 들어온 값이 그대로 나가게끔 하는 액티베이션
    • 비선형 액티베이션 (Non-linear Activation): 입력에 대해 어떤 형태로든 변화를 주어 출력하는 함수라고 생각할 수 있으며 이러한 변화는 데이터를 처리하는 방식에 있어서 더 복잡하고 유연한 패턴을 학습하도록 지원

 

https://www.researchgate.net/figure/Typical-MLP-architecture-with-deep-learning_fig9_320420847

 

1.5 인공 신경망은 함수다

  • 함수는 입력값을 처리하여 하나의 출력값에 대응시키는 것
  • 인공 신경망 역시 Input Layer를 통해 입력값이 들어오고 여러 Hidden Layer를 거쳐 Output Layer에서 출력값을 얻으므로 함수라고 정의할 수 있음
  • 정리하면 인공 신경망은 웨이트를 곱하고, 바이어스를 더하고, 액티베이션을 통과시키는 작은 구성 요소들이 연결된 하나의 복잡한 함수
  • 따라서, AI의 학습은 수많은 데이터를 보여주면서 `해당 입력에는 해당 출력이 나와야해! 라고 반복적으로 알려주며 입력과 출력을 연결하는 최적의 함수를 찾아가는 과정`

 

2. 선형 회귀 (Linear Regression)

  • 머신러닝의 기본적인 기법 중 하나
  • 선형 회귀를 인공 신경망으로 구현하고 학습시켜 봄으로써 딥러닝의 핵심 원리를 이해할 수 있음
  • 회귀란 입력과 출력 간의 관계를 알아내는 것으로 정의할 수 있음
    • 입력과 출력을 연결하는 함수를 알아내는 것

 

  • 선형 회귀는 해당 관계를 선형으로 놓고 알아내는 것으로 정의 가능

 

https://www.lennysnewsletter.com/p/linear-regression-and-correlation-analysis

 

2.1 손실 함수 (Loss 함수)

  • 선형 회귀의 목표는 특정 관계를 가장 잘 표현하는 직선을 찾는 것
  • 간단하게 해당 직선을 y = ax + b라고 가정했을 때
    • 학습 초기에는 a와 b를 무작위로 설정한 뒤
    • Loss 함수를 통해 파라미터의 좋고 나쁨을 정량적으로 평가한 뒤 a와 b 값을 조정
    • 위 두 과정을 반복하여 Loss 함수의 값을 최소화하는 a와 b를 찾으면 됨

 

  • 정리하자면 Loss 함수는 해당 파라미터가 얼마나 안 좋은지를 나타내는 함수로, 이를 최소화하는 파라미터가 곧 최적의 파라미터
  • 따라서, `이 입력`에는 `이 출력`이 가깝게 나올수록 Loss가 작아지도록 설계해야 함
  • Loss 함수는 딥러닝 학습의 핵심 요소로 해결하고자 하는 문제의 특성에 맞게 적절히 정의해야 함
    • MSE (Mean Squared Error) Loss: 예측값과 실제값 간의 차이(오차)를 제곱한 후 평균을 구한 값, 미분 가능하므로, 수학적으로 최적화하기에 유리한 특성을 지님
    • MAE (Mean Absolute Error) Loss: 예측값과 실제값 간의 차이의 절대값을 평균한 값, 이상치(outlier)에 덜 민감하며, 직관적으로 해석하기 쉬움

 

  • 복잡한 인공 신경망의 경우 파라미터 개수가 매우 많기 때문에 Loss 함수의 결과를 통해 파라미터의 값을 일일이 바꿔가며 찾는 방법을 적용하기는 현실적으로 불가능
    • 위 문제를 해결하기 위해 개발된 최적화 기법들이 존재

 

3. 최적화 기법들

 

3.1 경사 하강법 (Gradient Descent)

  • 경사 하강법의 작동 방식은 다음과 같음
    • 파라미터 a와 b를 임의의 값으로 초기화
    • 현재 위치에서 가장 가파르게 내려가는 방향을 탐색
    • 해당 방향으로 한 걸음 나아감
    • 새로운 위치에서 두 번째, 세 번째 과정 반복
    • 최소점에 도달할 때까지 위 과정을 반복

 

  • 현재 위치에서 가장 가파르게 내려가는 방향을 알아내는 것은 상대적으로 빠르기 때문에 a와 b를 일일이 바꿔가며 Loss 함숫값을 비교하는 것보다 훨씬 빠르게 최적의 값을 찾을 수 있음
  • 경사 하강법의 핵심 역할을 하는 것은 그레디언트
    • 그레디언트는 항상 함숫값이 가장 가파르게 증가하는 방향을 가리킴
    • 따라서 현재 위치에서 그래디언트를 구한 뒤 그 반대 방향으로 이동하면 Loss를 줄일 수 있음

 

https://medium.com/analytics-vidhya/gradient-descent-optimization-techniques-4316419c5b74

 

 

3.1.1 Learning Rate (학습률)

  • 경사 하강법에서 그레디언트의 반대 방향으로 이동할 때 그 보복을 조정하는 역할
  • 초기 Gradient Descent 알고리즘에서는 각 반복마다 매개변수를 얼마나 변경할지를 결정하기 위한 방법이 필요했으며 Learning Rate는 이러한 변경의 크기를 조절함으로써 효율적인 최적화를 가능
    • Learning Rate가 너무 크면 최적점 근처에서 오버슈팅(over-shooting)하여 발산할 수 있고
    • 너무 작으면 수렴 속도가 느려져 학습이 오래 걸릴 수 있음
    • 따라서 적절한 Learning Rate를 설정하는 것이 모델의 성공적인 학습에 필수적

 

  • 일반적으로 Learning Rate는 0.1, 0.01, 0.001 등의 값을 사용하며, 문제의 복잡도와 데이터의 특성에 따라 조정
    • 많은 경우 0.01이나 0.001부터 시작하여 점진적으로 조정해 나가는 방식을 사용

 

https://www.genspark.ai/

 

3.1.2 경사 하강법의 두 가지 문제

  • 경사 하강법은 효과적인 최적화 알고리즘이지만, 두 가지 주요한 문제를 지니고 있음
    • 계산 속도가 여전히 느릴 수 있고
    • 좋지 않은 Local Minimum에 빠질 수 있음

 

  • 경사 하강법은 모든 파라미터를 일일이 바꿔가며 Loss 값을 관찰하는 방법보다 빠르지만, 여전히 개선의 여지는 있음
    • 경사 하강법의 수식을 보면 Loss 함수가 모든 데이터를 고려하고 있음을 알 수 있으며
    • 이는 데이터가 많아질수록 한 번의 파라미터 업데이트에도 상당한 시간이 소요되어 최소점에 수렴하기까지 매우 오랜 시간이 필요하게 됨
    • 모든 데이터를 고려하기 때문에 매우 신중하게 방향을 설정한다고 할 수 있으나 극단적인 속도 저하를 초래하여 대규모 데이터셋에서는 현실적으로 사용이 어려워짐

 

  • Loss 함수가 여러 개의 아래로 볼록한 형태로 가질 때 좋지 않은 Local Minimum에 빠질 수 있음
    • 여러 개의 아래로 볼록한 형태를 가질 때 Loss 함수는 여러 개의 Local Minimum을 가짐
    • Local Minimum은 주변의 작은 영역에서는 가장 낮은 값을 가지지만, 전체 영역에서 반드시 가장 낮은 값은 아닌 지점을 의미
    • 반면, Global Minimum은 전체 영역에서 가장 낮은 값을 가지는 지점을 지칭
    • 경사 하강법의 문제점은 이러한 상황에서 좋지 않은 Local Minimum에 수렴할 가능성이 크다는 점
    • 파라미터의 초기값은 보통 무작위로 설정되며 무작위 위치에서 시작하여 가장 가까운 Local Minimum에 수렴할 경우 충분한 탐색이 이뤄지지 않아 좋지 않은 Local Minimum에 도달할 가능성이 높아짐
    • 해당 문제점은 후술 할 확률적 경사 하강법을 통해 해결 가능

 

https://www.i2tutorials.com/what-are-local-minima-and-global-minima-in-gradient-descent/

 

3.2 웨이트 초기화 (Weight Initialization)

  • 파라미터의 초깃값이 최소점으로부터 멀리 떨어져 있을수록 최적값에 도달하기 위해 더 많은 업데이트가 필요함
    • 이는 학습 시간을 늘리고 모델의 성능에 부정적인 영향을 미칠 수 있음
    • 위와 같은 문제를 개선하기 위해 다양한 웨이트 초기화 방법이 소개됨
    • ex) Yann Lecun 방식, Kaiming He 방식, Xavier 방식

 

  • 앞서 소개한 세 가지 웨이트 초기화 방식은 모두 공통적으로 웨이트를 평균이 0이니 랜덤 한 값으로 초기화하며, 웨이트의 분산은 각 방식에 따라 다르게 설정
  • 바이어스는 일반적으로 0으로 초기화하거나 작은 양수 값으로 초기화
    • 웨이트와 달리 바이어스는 각 뉴런의 민감도를 조정하는 역할을 수행하기 때문

 

3.2.1 Lecun 방식, He 방식, 그리고 Xavier 방식

 

https://www.genspark.ai/
https://www.genspark.ai/
https://www.genspark.ai/

 

3.2.2 소개된 초기화 방식들이 입력 뉴런의 수와 출력 뉴런의 수를 고려하는 이유

  • 입력 뉴런의 수가 크면 그만큼 많은 입력값이 각각의 웨이트와 곱해진 후 모두 더해지기 때문에 액티베이션을 통과한 인풋 값의 분산이 커짐
    • 인풋 값의 분산이 지나치게 클 경우 Sigmoid와 같은 활성화 함수를 사용할 때 문제가 발생할 수 있음 (Sigmoid 함수의 경우 입력값이 매우 크거나 작으면 그레디언트가 0에 가까워져 학습이 느려지는 현상 발생)
    • 위 문제점을 `기울기 소실 (Vanishing Gradeint)` 문제라고 지칭

 

  • 기울기 소실 문제를 해결하기 위해 앞서 소개된 세 가지 초기화 방식 모두 `입력 뉴런의 수`가 클수록 분산을 작게 하여 웨이트를 0에 더 가깝게 초기화
    • 이는 순전파 (Forward Propagation) 과정, 즉 입력 데이터가 신경망의 입력층에서 출력층까지 층층이 전달되며 계산되는 과정에서 분산이 급격히 커지는 것을 방지함

 

  • Xavier 방식은 특이하게 출력 뉴런의 수까지 고려하는데 이는 역전파 (Backpropagation) 과정 때문
    • 그레디언트를 계산할 때는 출력층에서 입력층 방향으로 웨이트가 곱해지고 더해지는 연산이 수행됨
    • 이러한 계산 구조는 순전파 과정과 매우 유사하지만 방향이 반대라는 점이 다름
    • 인풋 뉴런의 수가 커지면 순전파에서 인풋 뉴런의 수가 클 때와 마찬가지로 그레디언트 값의 분산이 커지게 됨
    • 분산이 커지면 학습이 불안정하게 만들고 `그레디언트 폭발 (Exploring Gradient)` 문제를 야기할 수 있음
    • Xavier 방식은 이러한 점을 고려하여 순전파와 역전파 모두에서 분산을 적절하게 유지하도록 설계됨

 

  • 정리하자면 앞서 소개한 세 가지 초기화 방식들은 신경망의 깊이가 깊어져도 안정적으로 학습할 수 있도록 지원
    • 적절한 초기화는 그레디언트 소실이나 폭발 문제를 완화하고 더 빠르고 안정적인 학습을 가능케 함

 

3.3 확률적 경사 하강법 (Stochastic Gradient Descent)

  • 앞서 언급했듯이 확률적 경사 하강법은 경사 하강법의 한계를 개선하는 방법
    • 경사 하강법은 모든 데이터를 고려하여 Loss를 계산하는 반면
    • 확률적 경사 하강법은 단 하나의 데이터만을 `무작위로 선택`하여 Loss를 계산

 

  • 확률적 경사 하강법이 진행 과정은 다음과 같음
    • 초기화: 모델 파라미터를 무작위로 초기화
    • 데이터 셔플링: 전체 데이터셋을 무작위로 섞음
    • 무작위 하나의 데이터 포인트 선택: 하나의 데이터 샘플 선택
    • 그래디언트 계산: 선택된 데이터 샘플에 대한 손실 함수의 기울기 계산
    • 파라미터 업데이트: 수식 θ:=θ−α∇J(θ) 에 따라 업데이트
      • 는 학습률, 는 비용 함수의 기울기

 

  • 확률적 경사 하강법의 Loss 함수는 각 스텝마다 하나의 데이터 샘플만 고려하기 때문에 모든 데이터 샘플을 고려하는 경사 하강법보다 속도가 빠름 (앞서 언급한 한계점 #1 해결)
  • 확률적 경사 하강법은 한계점 #2로 거론된 Local Minimum에 빠지는 문제를 완화할 수 있음
    • 확률적 경사 하강법의 불규칙한 움직임 덕분에 경사 하강법과 달리 Global Local Minimum에 고일 가능성이 생김
    • 데이터를 무작위로 선택한 순서에 따라 결과가 달라질 수 있으므로 확률적 경사 하강법은 단지 Local Minimum으로부터 `탈출할 기회를 제공한다`고 이해하는 것이 적절
    • 100% 해결한다는 아님

 

 

https://medium.com/analytics-vidhya/stochastic-gradient-descent-sgd-881d7a0ea137

 

부연 설명

  • 확률적 경사 하강법은 매 스텝마다 무작위로 선택된 하나의 데이터 포인트에 대한 Loss를 최소화하는 방향으로 움직임
  • 따라서 각 스텝은 해당 데이터의 '+'를 향하지만, 전체 Loss 함수의 환점에서 보면 불규칙한 경로를 그리는 것으로 보이게 됨
  • 반면, 경사 하강법의 Loss 함수는 모든 데이터를 고려하기 때문에 규칙적인 경로를 그리는 것으로 보임
  • 위와 같은 확률적 경사 하강법의 특성은 복잡한 Loss 지형에서 더 유연한 탐색을 가능하게 하며, 때로는 경사 하강법보다 더 좋은 해를 찾을 수 있게 해 줌

 

3.4 Mini-Batch Gradient Descent

  • 확률적 경사 하강법의 경우 단 하나의 데이터만을 고려하기 때문에 대규모 데이터셋에서 지나치게 편향된 업데이트를 초래하는 문제점이 발생할 수 있음
  • Mini-Batch GD는 위 문제를 해결하기 위해 복수의 데이터를 Loss 계산에 포함시킴
  • Mini-Batch GD의 진행 과정은 다음과 같음
    • 초기화: 모델 파라미터를 무작위로 초기화
    • 데이터 셔플링: 전체 데이터셋을 무작위로 섞음
    • 미니배치 선택: 일정 크기의 데이터 샘플 선택
    • 그래디언트 계산: 선택된 미니배치에 대한 손실 함수의 기울기 계산
    • 파라미터 업데이트: 수식 θ:=θ−α∇J(θ) 에 따라 업데이트
      • 는 학습률, 는 비용 함수의 기울기

 

  • 진행 과정을 보면 알 수 있다시피 Mini-Batch GD는 확률적 경사 하강법과 경사 하강법의 중간 지점에 있는 알고리즘
    • Batch Size가 1이면 확률적 경사 하강법과 같고 Batch Size를 키울수록 경사 하강법에 가까워짐
    • 이러한 유연성 덕분에 Mini-Batch GD는 데이터의 특성과 컴퓨팅 자원에 따라 적절히 조정하여 사용할 수 있음

 

  • GPU를 사용하면 Mini-Batch GD의 효율성이 더욱 높아짐
    • GPU는 병렬 연산이 가능하므로, 여러 데이터에 대한 계산을 동시에 수행할 수 있음
    • Batch Size를 키우면 전체적인 학습 속도를 크게 향상할 수 있으나 GPU 메모리의 한계로 인해 병렬적으로 처리할 수 있는 Batch Size에는 제한이 있음
    • 또한 Batch Size를 키우는 것이 항상 좋은 것이 아닌 게 Batch Size가 커질수록 경사 하강법과 가까워져 안 좋은 Local Minimum에 수렴할 가능성이 커짐
    • 따라서, Batch Size 선택 시 학습 속도와 최적화 성능 사이의 균형을 고려해야 함

 

https://www.analyticsvidhya.com/blog/2022/07/gradient-descent-and-its-types/

 

3.4.1 Batch Size와 Learning Rate의 조절

  • 일반적인 방법에서는 Batch Size가 커질수록 에러가 증가
  • 위 문제를 해결하기 위해 논문에서는 두 가지 방법을 제안
    • Linear Scaling Rule: Batch Size를 키울 때 Learning Rate도 비례하여 키우는 방식
    • Learning Rate Warmup: 학습 초기에 Learning Rate를 0에서 시작하여 점진적으로 증가시키는 방식

 

Linear Scaling Rule

  • 해당 규칙은 주로 대규모 분산 학습에서 효율적으로 적용되며, 배치 크기를 k배 늘릴 때 학습률도 k배 늘려야 수렴 속도와 모델 성능이 유지된다는 경험적·이론적 근거에 기반함
    • 미니배치 기법에서 그래디언트는 각 샘플마다 발생하는 오차를 평균 내어 추정
    • 배치 크기가 커질수록 실제 그래디언트에 대한 추정 분산이 작아지고, 이는 학습 과정에서의 잡음을 줄여 더욱 안정적인 업데이트를 가능케 함
    • 즉, 배치 크기 B가 증가하면 그래디언트 추정의 정확도가 높아지고, 그만큼 학습률을 높여 업데이트 양을 늘려도 학습이 폭주하지 않고 수렴을 유지할 수 있음

 

  • 배치 크기가 매우 큰 경우에도 항상 완벽한 선형 스케일링이 성립하는 것은 아님
    • 배치 크기가 지나치게 크면 분산 감소 효과가 한계에 도달하며, 통신 병목이나 메모리 제약 등의 물리적 요소가 추가로 작용

 

Learning Rate Warmup

  • 학습 초기에는 파라미터가 랜덤 한 값으로 초기화되어 있어 그래디언트가 큰 경향이 있으므로, 이 시기에는 Learning Rate Warmup을 적용
  • 이는 Learning Rate를 0에서 시작하여 점진적으로 목푯값까지 증가시키는 방법
  • 아래 그래프는 Epoch에 따른 Learning Rate 변화를 보여주며 이와 같이 Learning Rate를 조절하는 것을 `Learning Rate Scheduling`이라고 함
    • 그래프에서 볼 수 있는 `Cosine Decay`와 `Step Decay`는 각각 코사인 함수 모양과 계단 모양으로 Learning Rate를 감소시키는 방법
    • 그래프 초반부의 선형적 증가 구간은 앞서 설명한 `Learning Rate Warmup` 구간

 

https://github.com/ultralytics/yolov5/issues/3156

 

여태까지 설명한 경사 하강법, 확률적 경사 하강법, 그리고 Mini-batch 경사 하강법은 현재 시점의 그래디언트 정보만 활용하기 때문에 개선의 여지가 있습니다.

이를 더 발전시킨 방법으로 Momentum, RMSProp, 그리고 Adam이 있으며 해당 알고리즘들은 과거의 그래디언트 정보도 활용하여 더 효과적인 학습을 수행합니다.

 

3.5 Momentum

  • 경사 하강법, 확률적 경사 하강법, 그리고 Mini-Batch 경사 하강법은 특정 상황, 특히 Loss 함수의 등고선이 타원형일 때 효율적인 학습에 어려움을 겪을 수 있음
    • 경사 하강법에서는 그래디언트가 항상 등고선에 수직 하기 때문에 최저점을 향해 지그재그로 움직임
    • 확률적 경사 하강법이나 Mini-Batch 경사 하강법도 비슷한 패턴을 보일 수 있는데, 이는 전체 데이터의 Loss 함수 등고선이 타원형이라면 개별 데이터나 Mini-Batch의 등고선도 유사한 형태일 가능성이 높기 때문

 

  • 위 문제를 해결하기 위해 고안된 Momentum은 이전 그래디언트들을 누적하여 현재의 이동 방향을 결정
    • 물리학의 `관성` 개념과 유사

 

  • Momentum의 작동 원리는 다음과 같음
    • 첫 번째 이동: 경사 하강법과 동일한 방향으로 이동
    • 두 번째 이동: 현재와 이전 그래디언트를 합산하여 방향 결정
    • 세 번째 이동: 현재 그래디언트가 한쪽을 가리켜도 직전의 반대 방향으로 이동하던 관성이 남아 한쪽으로의 이동이 제한됨
    • 이후 이동: 위 과정이 반복되면서 좌우 움직임은 상쇄되지만, 최저점을 향한 방향으로의 움직임은 누적됨

 

  • 정리하면 Momentum은 불필요한 좌우 진동을 줄이며 최저점을 향해 더 빠르고 직접적으로 나아가며 이로 인해 최저점으로의 수렴이 더 빨라짐
    • 때로는 관성으로 인해 최저점을 약간 지나칠 수 있지만, 전체적으로 보다 효율적인 학습이 가능해짐
    • Momentum 방식은 경사 하강법뿐만 아니라 확률적 경사 하강법, Mini-Batch 경사 하강법에도 적용할 수 있어 다양한 최적화 상황에서 학습 효율을 크게 높일 수 있음

 

https://statusneo.com/accelerate-convergence-mini-batch-momentum-in-deep-learning/

 

 

3.6 RMSProp (Root Mean Squared Propagation)

  • Momentum이 이전 그래디언트를 더해서 누적했던 것과 달리 RMSProp은 각 파라미터에 대한 편미분값을 제곱하여 누적시킴
  • RMSProp의 이름을 보면 과정을 잘 이해할 수 있음
    • Root: 제곱근을 취함
    • Mean: 누적할 때 이동 평균을 사용
    • Squared: 편미분값을 제곱
    • Propagation: 위 과정을 계속 진행
    • RMSProp은 최근 기울기(gradient)의 제곱을 지수 이동 평균(Exponential Moving Average) 형태로 추적하여, 파라미터마다 다른 크기의 학습률을 적용하고 이를 통해, 기울기가 크게 변동하는 축에서는 업데이트 크기를 작게 하고, 기울기가 안정적인 축에서는 더 크게 업데이트하여 빠르고 안정적인 수렴을 유도

 

  • 위 과정을 통해 RMSProp은 방향마다 다른 크기의 학습률을 적용함으로써, 최적점 근방에서 불필요한 진동을 줄이고 빠르게 수렴할 수 있으며 이는 단순 SGD나 모멘텀 기반 방법에서 관찰되는 학습률 설정의 어려움을 상당 부분 해결해 주어, 깊은 신경망 모델을 안정적으로 학습시키는 데 유용한 기법으로 널리 사용
    • ex) 파라미터가 두 개고 첫 이동 방향이 [0.1, 10] 이었다면, RMSProp을 적용한 후에는 대략 [1, 1] 로 수정됨
    • 이는 마치 가파른 축으로는 조심스럽게, 완만한 축으로는 과감하게 이동하는 효과를 냄

 

  • RMSProp의 장점은 얕고 가파른 부분과 깊고 완만한 부분을 동시에 가지고 있는 복잡한 Loss 함수 지형에서 잘 드러남
    • 가파른 부분은 작은 이동으로도 Loss 값이 크게 변하는 부분으로, 많이 이동하면 최저점을 지나칠 수 있기 때문에 조심스럽게 이동하여 급격한 변화를 방지함
    • 완만한 부분은 Loss의 변화가 크지 않는 부분으로, 더 많이 이동해도 안전하기 때문에 과감하게 이동하여 평평한 영역을 빠르게 탈출할 수 있게 함

 

 

 

3.7 Adam (Adaptive Moment Estimation)

  • Adam은 딥러닝 모델 학습에서 자주 사용되는 최적화 알고리즘 중 하나로, 확률적 경사하강법(SGD)에 모멘텀과 RMSProp의 장점을 결합한 기법
    • 과거 기울기를 활용한 관성 효과(모멘텀)와, 현재 기울기의 제곱에 대한 가중 이동 평균을 통한 적응형 학습률(RMSProp)을 동시에 적용
    • 이를 통해 학습 초기에는 빠르게 내려가면서도, 최적점 근방에서 적절히 학습률을 줄여 안정적으로 수렴하는 특징을 가짐

 

  • 기존 파라미터 업데이트 수식은 다음과 같았음:  θ:=θ−α∇J(θ)
    • Adam은 기본적으로 확률적 경사하강법(SGD)의 “θ := θ − α∇J(θ)” 공식을 변형해, 1차 모멘트(모멘텀)와 2차 모멘트(기울기 제곱에 대한 지수 이동 평균)를 모두 추적하고, 이를 통해 학습률을 좌표별로 조절
    • 단순히 기울기만 사용하는 것이 아니라, 적응형 스케일링과 바이어스 보정 단계를 거친 모멘텀( m̂ᵗ )을 사용한다는 점에서 크게 달라짐

 

https://www.genspark.ai/

 

부연 설명

  • m̂ᵗ 는 편향 보정된 Momentum, (v^t​)^(1/2) ​+ ϵ  는 편향 보정된 RMSProp을 반영한 항
  • 모멘텀은 그래디언트의 지수 이동 평균 (Exponential Moving Average)을 통해 구하는 것을 확인할 수 있으며 과거의 그래디언트 정보가 지수적으로 감소하여 누적되는 것을 볼 수 있음
    • 이는 실제 관성과 유사하게, 오래된 시점의 이동 방향이 점점 잊히는 효과를 나타냄

 

  • RMSProp 부분 또한 모멘텀과 마찬가지로 EMA를 이용하여 누적하는 것을 확인할 수 있으며 이렇게 계산된 값에 제곱근을 취해 분모에 넣음으로써 가파른 경사에서는 천천히, 완만한 경사에서는 빠르게 이동하도록 함
    • 또, 0으로 나누는 것과 분모가 0에 가까워 이동하는 보폭이 크게 튀는 문제를 방지하기 위해 작은 양수 입실론이 분모에 추가됨

 

  • Adam은 mt와 vt에 대해 바이어스 보정을 수행하는데 보정이 필요한 이유는 다음과 같음
    • 보정된 추정치의 기댓값 E[mt]이 실제 그래디언트의 기댓값 E[gt]와 유사해지도록 만드는 것이 핵심 아이디어
    • 이를 통해 학습 초기부터 그래디언트 추이를 더욱 잘 따라갈 수 있게 됨
    • vt에 대해서도 동일한 원리로 보정이 이루어짐

 

정리하면 Adam은 Momentum의 `관성` 효과와 RMSProp의 적응적 이동 방향 조정을 모두 활용하면서, 학습 초반의 편향 문제도 해결하기 때문에 결과적으로 Adam은 다양한 최적화 문제에서 안정적이고 효율적인 성능을 보여줍니다.

 

https://medium.com/@LayanSA/complete-guide-to-adam-optimization-1e5f29532c3d

 

4. 검증 데이터

  • 이전 챕터를 복습하자면 모델은 훈련 데이터로 학습하고, 처음 보는 데이터인 테스트 데이터로 최종 성능이 평가됨
  • 여기서 핵심은 AI의 진정한 목표가 훈련 데이터가 아닌 테스트 데이터에서 좋은 성능을 보인다는 점
    • 테스트 성능이 실제 상황에서의 성능을 나타냄

 

https://discuss.pytorch.org/t/validation-loss-error-curve-isnt-as-smooth-as-training-loss-curve/72076

 

  • 하지만 여기서 딜레마가 발생함
    • 테스트 데이터를 학습 과정에 사용하면 실제 상황에서의 성능을 알 수 없지만
    • 훈련 데이터만으로는 언제 학습을 멈춰야 할지 판단하기 어려움
    • 위 그래프처럼 반복 학습할수록 Loss는 점점 줄어들다가 결국 수렴하지만 이것만으로는 최적의 학습 중단 시점을 결정하기 어려움

 

https://www.researchgate.net/figure/The-training-testing-loss-vs-epoch-graph-for-an-overfitted-model-For-ensuring-the_fig1_371977688

 

  • 앞선 딜레마에 답하기 위해 테스트 데이터의 Loss를 함께 살펴보면 위 그래프처럼 흥미로운 현상이 나타남
    • 초기에는 Test Loss도 감소하지만, 어느 순간부터 다시 증가하기 시작
    • 이는 모델이 훈련 데이터에 과도하게 맞춰져 일반화 능력을 잃는 Overfitting 현상 때문
    • 띠리사 그래프에 표시된 Optimal Training Point에서 학습을 멈추는 것이 이상적으로 보이지만 해당 방법에도 문제가 있음
    • 테스트 데이터를 기준으로 학습을 조정할 경우 해당 테스트 데이터에 Overfitting 된 모델을 얻게 될 수 있기 때문

 

  • 위 딜레마를 해결하기 위해 등장한 것이 바로 검증 데이터 (Validation Data)
    • 검증 데이터는 훈련 데이터의 일부를 떼어내 만듦
    • 이를 통해 총 Epoch 수, batch Size 등의 하이퍼파라미터를 조정할 수 있음
    • 검증 데이터에 대한 Loss는 Test Loss와 유사한 그래프 개형을 보이기 때문에 Test Loss가 아닌 Val Loss가 최소가 되는 시점에서 학습을 멈추는 것이 총 Epoch 수를 결정하는 적절한 방법

 

4.1 K-fold 교차 검증 (K-fold Cross Validation)

  • 데이터가 부족할 때는 검증 데이터를 더 효과적으로 활용하기 위해 교차 검증을 사용하며 이 중 가장 널리 사용되는 기법이 K-fold 교차 검증
  • K-fold 교차 검증은 데이터를 K 개의 그룹으로 나누어 각기 다른 훈련, 검증 데이터 쌍을 만드는 방식
    • K개의 서로 다른 훈련/검증 데이터 조합을 만들고, 각 조합에 대해 Loss를 구한 후 평균을 산출
    • 해당 평균 Val Loss를 기준으로 하이퍼파라미터를 선정할 경우 편향 문제를 줄일 수 있음
    • 다만, 해당 방식은 K배만큼의 추가 학습 시간이 소요됨

 

https://vitalflux.com/k-fold-cross-validation-python-example/

 

참고

혁펜하임의 Easy! 딥러닝

반응형