페이지

2022년 11월 28일 월요일

붓꽃 분류를 위한 다층 퍼셉트론 이해

붓꽃 분류를 위한 다층 퍼셉트론 이해

1. 개요

  • 붓꽃의 종류가 무엇인지 분류하는 다층 퍼셉트론(Multi-Layer Perceptron, MLP) 모델에 대하여 설명
  • MLP 모델의 오류 역전파에 대하여 상세히 설명
  • 구현 코드를 작성하지는 않지만 구현이 가능한 수준으로 설명

2. 문제 정의

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

    • 붓꽃 세 종류에 대하여 종류별로 50개의 측정 데이터를 가짐
      • 꽃 종류
        • setosa
        • versicolor
        • virginica
      • 측정 항목
        • sepal length (cm): 꽃받침 길이
        • sepal width (cm): 꽃받침 넓이
        • petal length (cm): 꽃잎 길이
        • petal width (cm): 꽃잎 넓이
  2. 새로운 붓꽃 데이터에 대하여 종류가 무엇인지 예측합니다.

3. 문제 해결 과정

데이터 기반 예측 문제의 해결 과정을 아래의 세 단계로 나누어 볼 수 있습니다.

  1. 주어진 데이터 세트의 특성을 잘 나타내는 모델 함수를 정의합니다. 모델 함수가 가지고 있는 파라미터들은 데이터 세트에 맞도록 값이 조정되는 요소들입니다.
  2. 데이터 세트의 참값과 모델 함수가 예측하는 값의 차이의 정도를 나타내는 비용 함수를 정의합니다.
  3. 데이터 세트에 대하여 비용을 줄여나가는 방향으로 모델 파라미터를 조정합니다. 비용이 최솟값에 가까워질 때까지 파라미터 조정 과정을 반복합니다.

이렇게 얻은 모델 함수를 사용하여 새로운 데이터가 주어질 때 예측하고자 하는 값이 얼마일지 추정합니다.

4. 모델 함수 정의

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

h=tanh(Wxhx+bh)y=Whyh+bypi=softmax(yi)=eyii=02eyi \begin{alignat}{4} h& = tanh (W_{xh} \cdot x + b_{h}) \\ y& = W_{hy} \cdot h + b_{y} \\ p_{i}& = softmax(y_{i}) = \frac {e^{y_i}} { \sum_{i=0}^2 e^{y_i} } \\ \end{alignat}

  • ii는 붓꽃 종류에 부여한 인덱스 (0: setosa, 1: versicolor, 2: virginica)
  • xx는 한 개의 붓꽃에 대한 측정값 입력 벡터
  • hh는 은닉층의 노드
  • yy는 MLP 네트워크의 출력 벡터
  • pp는 붓꽃 종류별 예측 확률 벡터
  • WxhW_{xh}, WhyW_{hy}는 모델 학습 파라미터 행렬
  • bhb_{h}, byb_{y}는 모델 바이어스 파라미터 벡터

5. 비용 함수 정의

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

L=ln(pc) \begin{alignat}{4} L&=-ln(p_{c}) \end{alignat}

  • cc는 참인 종류
  • pcp_c는 참인 종류일 확률

6. 모델 파라미터 찾기

경사하강법(Gradient Descent)을 사용하여 모델의 파라미터를 찾습니다.

6.1. 경사도(derivative) 수식 도출

찾고자 하는 파라미터를 변경하였을 때 영향을 받는 변수들을 화살표로 표시해 봅니다. 이를 토대로 파라미터 변경에 대한 비용 함수의 경사도 수식을 도출할 수 있습니다.

LWhy=yWhyLyLby=ybyLyLWxh=hWxhyhLyLbh=hbhyhLy \begin{alignat}{4} \frac {\partial L}{\partial W_{hy}}& = \frac {\partial y}{\partial W_{hy}} \cdot \frac {\partial L}{\partial y} \\ \frac {\partial L}{\partial b_{y}}& = \frac {\partial y}{\partial b_{y}} \cdot \frac {\partial L}{\partial y} \\ \frac {\partial L}{\partial W_{xh}}& = \frac {\partial h}{\partial W_{xh}} \cdot \frac {\partial y}{\partial h} \cdot \frac {\partial L}{\partial y} \\ \frac {\partial L}{\partial b_{h}}& = \frac {\partial h}{\partial b_{h}} \cdot \frac {\partial y}{\partial h} \cdot \frac {\partial L}{\partial y} \end{alignat}

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

yWhy=hyby=1hWxh=(1h2)xhbh=(1h2)1yh=Why \begin{alignat}{4} \frac {\partial y}{\partial W_{hy}}& = h \\ \frac {\partial y}{\partial b_{y}}& = 1 \\ \frac {\partial h}{\partial W_{xh}}& = (1 - {h}^2) \cdot x \\ \frac {\partial h}{\partial b_{h}}& = (1 - {h}^2) \cdot 1 \\ \frac {\partial y}{\partial h}& = W_{hy} \end{alignat}

남은 항목 Ly\frac {\partial L}{\partial y}의 계산 과정은 생략하고 결과만 적으면 아래와 같습니다.

Lyi=pi,foricLyi=pi1,fori=c \begin{alignat}{4} \frac {\partial L}{\partial y_i}& = p_i &{, \quad for \quad i \ne c} \\ \frac {\partial L}{\partial y_i}& = p_i - 1 &{, \quad for \quad i = c} \end{alignat}

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

6.2. 반복 수행

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

  1. 지정한 epoch 수만큼 반복
    1. 훈련 데이터의 수만큼 반복
      1. 예측 및 오류 계산
        1. 오류 역전파 과정에서 사용하기 위하여 xx 보관
        2. hh를 얻기 위하여 수식 (1)을 적용
        3. 오류 역전파 과정에서 사용하기 위하여 hh 보관
        4. 위의 결과로 얻은 hh에 대하여 수식 (2), (3)을 적용
        5. 수식 (4)를 통해서 오류 계산
      2. 오류 역전파
        1. 수식 (9) ~ (15) 계산
        2. 수식 (5), (6)으로 비용 함수의 WhyW_{hy}, byb_y에 대한 경사도 계산
        3. 수식 (7), (8)로 비용 함수의 WxhW_{xh}, bhb_h에 대한 경사도 계산
      3. 파라미터 조정
        Why=lr×LWhyby=lr×LbyWxh=lr×LWxhbh=lr×Lbh \begin{alignat}{4} W_{hy}& -= l_r \times \frac {\partial L}{\partial W_{hy}} \\ b_{y}& -= l_r \times \frac {\partial L}{\partial b_{y}} \\ W_{xh}& -= l_r \times \frac {\partial L}{\partial W_{xh}} \\ b_{h}& -= l_r \times \frac {\partial L}{\partial b_{h}} \\ \end{alignat}
  • lrl_r은 학습 속도

7. 새로운 붓꽃의 종류

새로운 붓꽃 데이터가 아래와 같은 경우를 예로 들어 종류를 예측해 봅니다.

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

  1. xx에 대하여 수식 (1)을 적용
  2. 위의 결과로 얻은 hh에 대하여 수식 (2), (3)을 적용
  3. p0p_0, p1p_1, p2p_2 중에서 큰 값의 종류를 채택

Written with StackEdit.

댓글 없음:

댓글 쓰기

Llama 3.2로 문장 생성 및 챗팅 완성 실습

Llama 3.2로 문장 생성 및 챗팅 완성 실습 Running Meta Llama on Linux 문서의 내용을 참고하여 Llama 3.2 1B 모델로 다음 두 가지 기능을 실습합니다. 문장 완성 챗팅 ...