[CV] CS231N 4강 정리 [Neural Networks and Backpropagation]

김성윤(Jack)·2025년 9월 8일

CV

목록 보기
4/36
post-thumbnail

1. 신경망: 선형 분류기를 넘어서

  • 지난 시간 복습:
    • 이미지 분류는 컴퓨터에게 이미지를 보여주고 미리 정해진 레이블 중 하나를 맞추게 하는 작업입니다.
    • 선형 분류기는 데이터를 하나의 선으로 나누는 방식이었습니다. 하지만 현실 세계의 복잡한 데이터는 선 하나만으로 나눌 수 없는 경우가 많습니다.
  • 손실 함수 (Loss Function):
    • 모델이 얼마나 '나쁜지'를 알려주는 지표입니다. 즉, 모델의 예측이 실제 정답과 얼마나 다른지를 숫자로 나타냅니다.
    • 우리의 목표는 이 손실 값을 최소화하는 가중치 W를 찾는 것입니다.
  • 신경망(Neural Networks)의 등장:
    • 선형 분류기의 한계를 극복하기 위해, 여러 개의 선형 함수를 층층이 쌓고 그 사이에 비선형성(non-linearity)을 추가한 것이 바로 신경망입니다.
    • f = W2 * max(0, W1 * x) 와 같이, 1차 변환(W1*x) 결과에 활성화 함수(max(0,x))를 적용하고, 다시 2차 변환(W2)을 수행하는 방식입니다.
  • 비선형성의 중요성:
    • 만약 활성화 함수 없이 선형 함수만 계속 쌓는다면(W2 * W1 * x), 결국 하나의 거대한 선형 함수(W_total * x)와 다를 바가 없습니다. 층을 쌓는 의미가 사라지는 것입니다.
    • 활성화 함수라는 비선형적 '비틀기'를 중간에 넣어줘야, 신경망은 직선이 아닌 복잡하고 유연한 결정 경계(decision boundary)를 만들 수 있게 됩니다.
  • 신경망의 구조:
    • 완전 연결 계층 (Fully-Connected Layer): 한 계층의 모든 뉴런이 다음 계층의 모든 뉴런과 연결된 가장 기본적인 구조입니다.
    • 숨겨진 계층 (Hidden Layer): 입력과 출력 사이에 있는 모든 계층을 말합니다. 이 뉴런들은 데이터의 '눈', '코', '귀'와 같은 중간 단계의 특징(feature)들을 학습한다고 해석할 수 있습니다.

2. 활성화 함수: 신경망에 생명을 불어넣는 마법

  • 활성화 함수(Activation Function)란?:
    • 신경망 중간중간에 비선형성을 더해주는 함수입니다. 뉴런이 특정 자극에 대해 '활성화'될지 말지를 결정하는 스위치 같은 역할을 합니다.
  • 대표적인 활성화 함수들:
    • ReLU (Rectified Linear Unit): f(x) = max(0, x)
      • 장점: 계산이 매우 빠르고, 가장 널리 쓰이는 표준적인 활성화 함수입니다.
      • 단점: 입력이 음수이면 출력이 항상 0이 되어 해당 뉴런이 아예 죽어버리는 '죽은 ReLU(Dying ReLU)' 문제가 발생할 수 있습니다.
    • Leaky ReLU, ELU, GELU 등:
      • 개선점: '죽은 ReLU' 문제를 해결하기 위해, 입력이 음수일 때 0 대신 아주 작은 기울기를 주는 변형들입니다.
    • Sigmoid & Tanh:
      • 과거의 영광: 초기 신경망에서 많이 쓰였지만, 출력이 특정 범위(0~1 또는 -1~1)로 한정되어 기울기 소실(Vanishing Gradient) 문제를 일으키기 때문에 요즘은 중간 계층에서는 거의 쓰이지 않습니다.


3. 계산 그래프: 역전파를 위한 설계도


  • 역전파(Backpropagation)의 어려움:
    • 신경망이 깊어질수록 손실 함수는 수많은 행렬 곱과 함수들로 얽힌 매우 복잡한 식이 됩니다. 이것을 손으로 미분해서 기울기를 구하는 건 거의 불가능에 가깝습니다.
  • 계산 그래프(Computational Graph):
    • 이 복잡한 계산 과정을 노드(node)와 엣지(edge)로 이루어진 그래프로 시각화한 것입니다.
    • 아무리 복잡한 함수라도 덧셈, 곱셈, max 등 간단한 연산들의 조합으로 쪼개서 표현할 수 있습니다.
  • 장점:
    • 복잡한 전체 함수를 보지 않고, 각 노드에서의 '지역적(local)'인 계산에만 집중할 수 있게 해줍니다.


4. 역전파: 실수로부터 배우는 연쇄 법칙의 마법

  • 역전파(Backpropagation)는 신경망이 자신의 예측이 얼마나 틀렸는지(손실)를 계산한 뒤, 그 실수를 각 파라미터에게 "네 책임은 이만큼이야"라고 알려주며 스스로를 교정하게 만드는 핵심 알고리즘입니다. 이 과정의 수학적 심장에는 연쇄 법칙(Chain Rule)이 있습니다.

1) 핵심 원리: 연쇄 법칙 (Chain Rule)

  • 연쇄 법칙은 여러 함수가 연쇄적으로 연결되어 있을 때, 최종 결과의 변화율은 각 단계의 변화율들을 곱한 것과 같다는 원리입니다.
  • 수식: 함수 ffqq에 의존하고, qq가 다시 x,yx, y에 의존하는 경우(f(q(x,y))f(q(x, y))), 최종 결과 ff에 대한 xx의 영향력(fx\frac{\partial f}{\partial x})은 다음과 같이 계산할 수 있습니다.
    fx=fqqx\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q} \cdot \frac{\partial q}{\partial x}
  • 의미: "xx의 변화에 따른 ff의 변화율"은 "xx의 변화에 따른 qq의 변화율"과 "qq의 변화에 따른 ff의 변화율"을 곱한 것과 같습니다. 역전파는 이 원리를 계산 그래프의 끝에서부터 시작점까지 거꾸로 적용해 나가는 과정입니다.

2) 단계별 역전파 과정 상세보기

  • 강의의 예시 f(x, y, z) = (x + y) * z를 통해 역전파의 모든 단계를 자세히 살펴보겠습니다.

  • 상황: 입력값 x = -2, y = 5, z = -4

  • 1단계: 순방향 전파 (Forward Pass)

    • 먼저 입력값부터 최종 출력까지 모든 값을 계산하여 그래프에 기록합니다.
    • q = x + y => q = -2 + 5 = 3
    • f = q * z => f = 3 * (-4) = -12
  • 2단계: 역방향 전파 (Backward Pass)

    • 최종 출력 f에서부터 거꾸로 계산을 시작합니다.
    • 출발점: 최종 출력 ff가 자기 자신에게 미치는 영향, 즉 ff\frac{\partial f}{\partial f}1입니다. 이것이 맨 처음의 상류 그래디언트(Upstream Gradient)가 됩니다.
    • f 노드에서 qz:
      • 지역 그래디언트 (Local Gradient) 계산: f = q * z를 각 변수로 미분합니다.
        • fq=z=4\frac{\partial f}{\partial q} = z = -4
        • fz=q=3\frac{\partial f}{\partial z} = q = 3
      • 하류 그래디언트 (Downstream Gradient) 계산: 상류 그래디언트 × 지역 그래디언트 공식을 적용합니다.
        • z로 가는 그래디언트: fz=fffz=13=3\frac{\partial f}{\partial z} = \frac{\partial f}{\partial f} \cdot \frac{\partial f}{\partial z} = 1 \cdot 3 = 3
        • q로 가는 그래디언트: fq=fffq=1(4)=4\frac{\partial f}{\partial q} = \frac{\partial f}{\partial f} \cdot \frac{\partial f}{\partial q} = 1 \cdot (-4) = -4
      • 이제 -4라는 값이 q 노드로 흘러가는 새로운 상류 그래디언트가 됩니다.
    • q 노드에서 xy:
      • 지역 그래디언트 (Local Gradient) 계산: q = x + y를 각 변수로 미분합니다.
        • qx=1\frac{\partial q}{\partial x} = 1
        • qy=1\frac{\partial q}{\partial y} = 1
      • 하류 그래디언트 (Downstream Gradient) 계산: f에서 흘러온 상류 그래디언트 -4를 사용합니다.
        • y로 가는 그래디언트: fy=fqqy=(4)1=4\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q} \cdot \frac{\partial q}{\partial y} = (-4) \cdot 1 = -4
        • x로 가는 그래디언트: fx=fqqx=(4)1=4\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q} \cdot \frac{\partial q}{\partial x} = (-4) \cdot 1 = -4
    • 최종 결과: 최종 출력 f에 대한 모든 입력 변수의 영향력, 즉 그래디언트(fx,fy,fz\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z})를 모두 구했습니다. 이 값들을 이용해 x, y, z를 업데이트하면 손실 f를 줄일 수 있습니다.

3) 벡터와 행렬 연산으로의 확장

  • 실제 신경망에서는 모든 계산이 거대한 행렬과 벡터로 이루어집니다. 이때도 원리는 같지만, 지역 그래디언트는 야코비안(Jacobian)이라는 거대한 행렬이 됩니다.
  • 하지만 실제로는 이 비효율적인 야코비안 행렬을 만들지 않고, 대신 행렬 곱셈 같은 연산에 대한 역전파 공식을 미리 유도해서 사용합니다.
  • 행렬 곱셈의 역전파 공식:
    • 순방향 계산이 Y = XW일 때, 최종 손실 L에 대한 그래디언트는 다음과 같습니다.
      LX=LYWTLW=XTLY\frac{\partial L}{\partial X} = \frac{\partial L}{\partial Y} W^T \\ \frac{\partial L}{\partial W} = X^T \frac{\partial L}{\partial Y}
  • 핵심 원칙: 가장 중요한 것은 "그래디언트는 원래 변수와 항상 같은 모양(shape)을 가진다"는 것입니다. 이 원칙을 기준으로 위 공식을 적용하면 복잡한 네트워크도 효율적으로 그래디언트를 계산할 수 있습니다.


5. 심화 내용: 역전파의 진정한 의미

  • 기술적 배경: 역전파는 단순히 미분을 계산하는 기술을 넘어, 신경망 학습의 근간을 이루는 알고리즘입니다. 이는 복잡하게 얽힌 모델의 각 파라미터가 최종 손실에 얼마나 많은 '책임'을 져야 하는지를 신용 할당(credit assignment)하는 과정으로 볼 수 있습니다. 연쇄 법칙을 통해 최종 오차(loss)라는 단일 스칼라 값이 네트워크의 모든 파라미터(수백만 개)에 대한 의미 있는 그래디언트 벡터로 효율적으로 변환되는 과정은 딥러닝을 가능하게 한 가장 핵심적인 발견 중 하나입니다.
  • 최신 동향: PyTorch, TensorFlow와 같은 현대 딥러닝 프레임워크는 이러한 역전파 과정을 자동 미분(Automatic Differentiation) 기능으로 완전히 자동화했습니다. 개발자는 계산 그래프의 순방향 경로만 정의하면, 프레임워크가 알아서 역방향 경로를 구축하고 그래디언트를 계산해줍니다. 이는 연구자들이 그래디언트 계산이라는 지루한 작업에서 벗어나 더 창의적인 모델 아키텍처 설계에 집중할 수 있게 만들었습니다.
  • 명확한 한계점: 역전파는 기울기 소실/폭주(Vanishing/Exploding Gradients) 문제에 취약합니다. 네트워크가 깊어질수록, 1보다 작은 그래디언트가 계속 곱해지면 0에 수렴(소실)하고, 1보다 큰 그래디언트가 계속 곱해지면 무한대로 발산(폭주)하여 학습이 불안정해질 수 있습니다. ReLU 활성화 함수, 배치 정규화(Batch Normalization), 잔차 연결(Residual Connection)과 같은 현대 딥러닝의 주요 기법들은 모두 이 문제를 완화하기 위해 등장했다고 볼 수 있습니다.
profile
AI 공부합니다

0개의 댓글