인공지능/신경망 이해

오류 역전파 및 기울기 계산 과정

FedTensor 2025. 12. 5. 12:34

개요

  • 붓꽃 데이터를 대상으로 꽃의 종류를 분류
  • 다층 퍼셉트론(Multi-Layer Perceptron, MLP) 모델의 오류 역전파 및 기울기 계산 과정 설명

데이터셋

붓꽃 데이터

  • 꽃 종류
    • setosa (50개)
    • versicolor (50개)
    • virginica (50개)
  • 측정 항목
    • sepal length (cm): 꽃받침 길이
    • sepal width (cm): 꽃받침 넓이
    • petal length (cm): 꽃잎 길이
    • petal width (cm): 꽃잎 넓이

문제 정의

  1. 붓꽃의 종류가 무엇인지 표시되어 있는 데이터 세트를 사용하여 붓꽃 분류 기능을 학습합니다.
  2. 새로운 붓꽃 데이터에 대하여 종류가 무엇인지 예측합니다.

모델 함수 정의

  • 입력층의 크기: 4
  • 은닉층의 크기: 8 (다른 값으로 지정할 수도 있음)
  • 출력층의 크기: 3

비용 함수 정의

비용 함수로 크로스-엔트로피 손실(cross-entropy loss)을 사용합니다.

 

예를 들어,  데이터 샘플의 참 값이 setosa(0)이고 해당 샘플에 대하여 모델로 계산한 확률 분포에서 setosa일 확률이 0.5일 때 손실 값은 다음과 같습니다.

모델 파라미터 찾기

경사하강법(Gradient Descent)을 사용하여 손실 값을 줄일 수 있는 모델의 파라미터를 찾습니다.

기울기 수식 도출

찾고자 하는 파라미터를 변경하였을 때 영향을 받는 변수들을 화살표 방향으로 표시해 봄으로써 오류 역전파 경로를 파악하고 파라미터 변경에 대한 비용 함수의 기울기 수식을 도출할 수 있습니다.


위의 기울기 수식에서 각각의 항목을 구하면 아래와 같습니다.


손실 함수 $L$의 $y$에 대한 변화율 계산 과정은 생략하고 결과만 적으면 아래와 같습니다.


이제 기울기 계산에 필요한 모든 항목을 구할 수 있게 되었습니다.


위 기울기 수식에서, $L$의 $y$에 대한 기울기는 주어진 샘플 데이터의 참 값이 무엇인지를 고려하여 식 (14)와 (15)로 계산합니다. 수식 (16) ~ (19)로부터 다음 두 가지 사항을 알 수 있습니다.

  • 기울기 결정 요소
    • 입력 값: $x$
    • 현재의 파라미터 값들: $W_{hy}$
    • 신경망을 통해 계산하는 과정에서 나오는 값들: $h$, $p_i$
  • 기울기 계산 대상
    • 훈련 가능한 개별 파라미터별

반복 수행 (학습 단계)

비용 함수의 값이 최솟값에 가까워지도록 아래의 과정을 수행합니다.

  • 지정한 epoch 수만큼 반복
    • 훈련 데이터의 수만큼 반복
      1. 예측 및 오류 계산
        1. 오류 역전파 과정에서 사용하기 위하여 $x$ 보관
        2. $h$를 얻기 위하여 수식 (1)을 적용
        3. 오류 역전파 과정에서 사용하기 위하여 $h$ 보관
        4. 위의 결과로 얻은 $h$에 대하여 수식 (2), (3)을 적용
        5. 수식 (4)를 통해서 오류 계산
      2. 오류 역전파 및 기울기 계산
        1. 수식 (9) ~ (15) 계산
        2. 수식 (16), (17)으로 비용 함수의 $W_{hy}$, $b_y$에 대한 기울기 계산
        3. 수식 (18), (19)로 비용 함수의 $W_{xh}$, $b_h$에 대한 기울기 계산 
      3. 파라미터 조정

새로운 붓꽃의 종류 예측

새로운 붓꽃 데이터가 아래와 같이 주어졌을 때 학습을 마친 모델을 사용하여 꽃의 종류를 예측해 봅니다.

$$x = [6.1, 3.3, 5.1, 2.4]$$

 

  1. $x$에 대하여 수식 (1)을 적용
  2. 위의 결과로 얻은 $h$에 대하여 수식 (2), (3)을 적용
  3. 수식 (3)의 결과 $p_0$, $p_1$, $p_2$ 중에서 제일 큰 값에 해당하는 종류를 채택

위에서, 출력층과 분류 확률의 구체적인 값은 예시를 위해 임의로 지정한 값입니다. 실제 모델에서는 다른 값일 수도 있습니다.