신경망 학습

LegendKi·2023년 12월 2일

MachineLearning

목록 보기
1/5

신경망 학습


신경망 학습의 의미

학습데이터를 통해 입력 데이터가 들어왔을 때 적절한 출력을 만들어 낼 수 있는 규칙을 찾는 과정

입출력 매핑 규칙의 형태

  • 신경망에 입력 데이터가 들어왔을 때 어떤 출력 데이터를 만들어야 할지를 정하는 규칙은 함수적 매핑 관계로 표현된다.
  • 가중 합산과 활성함수가 연결되어 뉴런을 구성하고 뉴런이 모여 계층을 구성하며 계층이 쌓여 신경망의 계층구조가 정의된다.
  • 신경망 구조와 관련된 것들은 학습전에 미리 정하고 학습 과정에서는 모델 파라미터의 값을 찾는다.

최적의 파라미터 값을 찾는 법

함수의 해를 근사적으로 찾는 최적화 기법을 활용해 신경망이 관측 데이터를 가장 잘 표현하는 함수가 되도록 만들어준다.

최적화 (회귀문제)

타깃과 예측값의 오차를 최소화하는 파라미터를 찾으라는 최적화 문제로 정의

MSE=minθ1Ni=1Ntiy(xi;θ)22MSE = \min_{\theta} \frac{1}{N} \sum_{i=1}^{N} ||t_i - y(x_i; \theta)||^2_2

최적화 (분류 문제)

분류 문제는 확률 모델 관점에서 관측 확률 분포와 예측 확률 분포의 차이를 최소화하는 파라미터를 찾으라 라는 최적화 문제로 정의

crossentropy=minθ1Ni=1Nk=1Ktiklogμ(xi;θ)kcross entropy = \min_{\theta} -\frac{1}{N} \sum_{i=1}^{N} \sum_{k=1}^{K} t_{ik} \cdot \log \mu(x_i; \theta)_k

최적화를 통한 신경망 학습

손실 함수의 임의의 위치에서 출발해 최적해가 있는 최소 지점을 찾아가는 과정을 최적화 과정이라 한다.
최적해를 찾기 위한 좋은 출발점은 알 수 없으므로 최적화 알고리즘은 어느 위치에서 출발하든 손실함수의 최소지점에 갈 수 있어야한다.

신경망의 학습목표

궁극적인 학습 목표는 Global minimum에 해당하는 파라미터를 찾는 것이지만 Global minimum를 찾기위해선 곡면 전체모양을 확인해야하므로 계산비용이 많이 들어 대부분의 최적화 알고리즘의 목표는 local minimum을 찾는 것이다. 단 좋은 local minimum을 찾으려면 해를 여러 번 찾아 좋은 해를 선택한다.

경사 하강법(Gradient Descent)

  • 경사 하강법은 손실 함수의 최소 지점을 찾기 위해 경사가 가장 가파른 곳을 찾아서 한 걸음씩 내려가는 방법이다.

  • 현재 위치에서 경사가 가장 가파른 곳을 찾기 위해 손실 함수의 기울기를 구하고 기울기의 반대방향으로 내려간다.

    θ+=θαJθ\theta^+ = \theta - \alpha \frac{\partial J}{\partial \theta}
  • 경사 하강법으로 손실함수의 현재 위치 θ에서 다음 위치 θ^+로 한걸음 이동하려면 다음과 같은 업데이트 식을 사용한다. θ는 신경망 모델의 파라미터이다.

  • 이때 J는 손실함수 αα는 step size 또는 learning rate로 이동 폭을 결정한다.
    기울기 Jθ∂J\over∂θ는 손실함수 J(f(x;θ))J(f(x;θ))를 파라미터 θ에 대해 미분한 그래디언트다.
    -Jθ∂J\over∂θ는 이동방향으로 기울기의 음수 방향을 나타내므로 현재 지점에서 가장 가파른 내리막길로 내려가겠다는 의미다.

  • 경사 하강법에서는 파라미터 업데이트 과정을 반복하다가 θθ+θ- θ^+가 아주작은 특정값 이하가 되면 최소지점에 도달한 것으로 판단하고 이동을 멈춘다.

파라미터 업데이트식

  • wnm1w^1_{nm}에서 위 첨자 1은 계층 번호이고 아래 첨자 nn은 입력 뉴런의 인덱스를 mm은 은닉 뉴런의 인덱스를 나타낸다.
  • 경사 하강법을 이용해 가중치 wnm1w_{nm}^1값을 업데이트하려면 먼저 손실 함수에 대한 가중치의 미분 Jwnm1∂J\over∂w_{nm}^1를 구해서 다음 업데이트 식으로 wnm1w_{nm}^1wnm1+w_{nm}^{1+}로 변경한다.
    wnm1+=wnm1αJwnm1w^{1+}_{nm} = w^1_{nm} - \alpha \frac{\partial J}{\partial w^1_{nm}}
    그런데 이 업데이트식은 바로 계산 할 수 없다.
    손실함수 J(y,t)=1N(x,t)Dty22J(y, t) = \frac{1}{N} \sum_{(x,t) \in D} ||t - y||^2_2 에는 가중치 변수 wnm1w^1_{nm}가 포함되지 않기 때문이다. 신경망에서 가중치변수 wnm1w^1_{nm}는 은닉 뉴런에 정의되며 출력 뉴런을 거쳐서 손실함수에 간접적으로 영향을 미친다.
    즉, 손실함수는 합성 함수로 정의되며 합성함수를 미분하려면 연쇄법칙(chain rule)을 사용해야한다.

연쇄 법칙을 사용한 미분 계산

연쇄법칙으로 합성함수의 미분을 표현할 때는 합성 함수의 실행 순서에 따라 각함수의 미분을 곱해준다.
가중치 변수 w_nm^1가 정의된 은닉 뉴런부터 손실 함수까지 실행되는 함수의 순서

(1)zm1=w1m1x1w2m1x2++wnm1xnzm1wnm1=xn(1) z_m^1 = w_{1m}^1\cdot x_1 w_{2m}^1\cdot x_2 + \cdots + w_{nm}^1\cdot x_n \rarr \frac{\partial z_m^1}{\partial w^1_{nm}} = x_n
(2)am1=ReLU(zm1)am1zm1=RELU(zm1)(2) a_m^1 = ReLU(z_m^1) \rarr \frac{\partial a_m^1}{\partial z^1_m} = RELU'(z_m^1)
(3)z2=w12a11+w22a21++wm2am1z2am1=wm2(3) z^2 = w_1^2\cdot a_1^1 + w_2^2\cdot a_2^1 + \cdots + w_m^2\cdot a_m^1 \rarr \frac{\partial z^2}{\partial a_m^1} = w_m^2
(4)y=Identity(z2)yz2=Identity(z2)=1(4) y = Identity(z^2) \rarr \frac{\partial y}{\partial z^2} = Identity'(z^2)=1
(5)J(y)=1N(x,t)DNty22Jy=1N(x,t)DN2(ty)(5) J(y) = \frac{1}{N} \displaystyle\sum_{(x,t)∈D}^{N}{||t-y||_2^2} \rarr \frac{\partial J}{\partial y} = -\frac{1}{N}\displaystyle\sum_{(x,t)∈D}^{N}{2(t-y)}

(1)과 (2)는 은닉 뉴런 hmh_m에 정의된 가중 합산과 ReLUReLU이다.
(3)과 (4)는 출력 뉴런 OO에 정의된 가중 합산과 항등 함수이다.
(5)는 손실 함수이다.
각 함수의 미분을 곱하면 연쇄 법칙 형태

Jwnm1=Jyyz2z2am1am1zm1zm1wnm1\frac{\partial J}{\partial w_{nm}^1} = \frac{\partial J}{\partial y} \cdot \frac{\partial y}{\partial z^2} \cdot \frac{\partial z^2}{\partial a_m^1} \cdot \frac{\partial a_m^1}{\partial z_m^1} \cdot \frac{\partial z_m^1}{\partial w_{nm}^1}

Jwnm1\frac{∂J}{∂w_nm^1}를 정의할 수 있다.

Backpropagation (역전파 알고리즘)

뉴런 hmh_m의 또다른 가중치 wn1m1w_{n-1m}^1에 대해 미분할 때 연쇄 법칙으로 미분을 표현하면 마지막항인 zm1wn1m1∂z_m^1 \over∂w_{n-1m}^1을 제외한 앞부분의 Jyyz2z2am1am1zm1\frac{\partial J}{\partial y} \cdot \frac{\partial y}{\partial z^2} \cdot \frac{\partial z^2}{\partial a^1_m} \cdot \frac{\partial a^1_m}{\partial z^1_m}의 미분과 동일하다는 것을 알 수 있다.

Jwm1=Jyyz2z2am1am1zm1zm1wnm1\frac{\partial J}{\partial w_m^1} = \frac{\partial J}{\partial y} \cdot \frac{\partial y}{\partial z^2} \cdot \frac{\partial z^2}{\partial a^1_m} \cdot \frac{\partial a^1_m}{\partial z^1_m} \cdot \frac{\partial z_m^1}{\partial w_{nm}^1}
Jwn1m1=Jyyz2z2am1am1zm1zm1wn1m1\frac{\partial J}{\partial w_{n-1m}^1} = \frac{\partial J}{\partial y} \cdot \frac{\partial y}{\partial z^2} \cdot \frac{\partial z^2}{\partial a^1_m} \cdot \frac{\partial a^1_m}{\partial z^1_m} \cdot \frac{\partial z_m^1}{\partial w_{n-1m}^1}

즉 공통부분

Jzm1=Jyyz2z2am1am1zm1\frac{\partial J}{\partial z_m^1} = \frac{\partial J}{\partial y} \cdot \frac{\partial y}{\partial z^2} \cdot \frac{\partial z^2}{\partial a^1_m} \cdot \frac{\partial a^1_m}{\partial z^1_m}

은 한 번 계산해두면 같은 뉴런에 속한 모든 가중치의 미분을 계산할 때 재사용 할 수 있다.
공통부분의 계산을 중복하지 않으려면 손실 함수에서 시작해서 입력 계층 방향으로 계산된 미분 값을 역방향으로 전파해주면 된다. 이때 각 뉴런의 공통부분에 해당하는 미분값을 오차라고 하며 오차를 역방향으로 전파하면서 미분을 계산한다고 해서 이런 미분 계산 방식을 오차의 역전파 알고리즘이라고 부른다.

역전파 알고리즘의 실행 순서

손실함수 미분

  • 손실함수 미분
  • 출력 뉴런에 미분 전달

출력 뉴런 미분

  • 공통부분 계산
  • 가중치 업데이트
  • 은닉 계층에 미분전달

은닉 뉴런 미분

  • 공통부분 계산
  • 가중치 업데이트 입력 계층에 미분전달

0개의 댓글