· Woohyun Kim · AI  · 9 min read

수학으로 이해하는 Neural Network

수학적 직관과 기본 식을 중심으로 신경망의 핵심 개념을 정리합니다.

1. Universal Approximation Theorem [WIKI, Reference]

임의의 함수 F(x)F(x)가 연속한 실수공간에 존재하는 함수라 할 때, 아래와 같이 이에 근사하는 연속함수 f(x)f(x)가 존재한다.

F(x)i=1NviΦ(wiTx+bi)=f(x) where i1,...,NF(x) \simeq \sum_{i=1}^N v_i \Phi(w_i^Tx + b_i) = f(x) \text{ where } i \in 1, ..., N

이 때 Φ()\Phi()는 비상수인 단조증가연속함수이며, 충분히 작은 ϵ>0\epsilon > 0에 대하여 F(x)f(x)>ϵ|F(x) - f(x)| > \epsilon을 만족시키는 자연수 NN 과 실수 vi,biv_i, b_i 및 벡터 wiw_i가 존재한다.

(특히, Φ()\Phi()가 sigmoid 함수인 경우 시벤코 정리라 한다.)

정리에 의해 임의의 함수 F(x)F(x)는 single perceptron만으로 F(x)F(x)에 근사하는 임의의 함수 f(x)f(x)를 만들어낼 수 있다는 것을 의미한다.

아래에서 소개할 과정은 Neural Network에서 wiw_ibib_i를 찾아가는 과정을 알아볼 것이다.


2. Single perceptron

  • Notation 아래와 같이 d번째 Layer에 존재하는 임의의 index i를 가지는 xx를 다음과 같이 표기하자.

xi(d)\Huge {x_{i}^{(d)} }

위의 그림에서 다음 Layer의 xi(1)x_{i}^{(1)}를 일반화하면 다음과 같다.

f(j=1Nwi,j(1)xj(0)+bi(1))=xi(1), f() is an activation function. \Large f(\sum_{j=1}^N w_{i,j}^{(1)} x_{j}^{(0)} + b_{i}^{(1)}) = x_{i}^{(1)} \text{, f() is an activation function. }

이 때, 편의 상 zi(1)=j=1Nwi,j(1)xj(0)+bi(1)z_{i}^{(1)} = \sum_{j=1}^N w_{i,j}^{(1)} x_{j}^{(0)} + b_{i}^{(1)} 라 정의하자.

그러면 f(zi(1))=xi(1)f(z_{i}^{(1)}) = x_{i}^{(1)}. 이며, 간단히 f(z)=xf(\vec z) = \vec x로 표기할 수 있다.

이 처럼 이전 layer로부터 다음 layer로의 계산을 통해 xidx_{i}^{d}로 값을 전달하는 과정을 forward propagation이라 한다.

단, zi(1)z_{i}^{(1)} 의 계산에 xj(0)x_{j}^{(0)}, 즉 이전 Layer로부터의 입력된 값을 사용한다는 데 주의한다.


3. Loss function (J)

위 그림의 d=1d = 1이 output layer일 때 xi(1)x_{i}^{(1)} 은 예측 값이라 할 수 있다. 따라서 정답 값 tit_{i} 와 예측 값 xi(1)x_{i}^{(1)} 의 오차(이하 손실률 J)를 계산하고, 정답으로 근사시킬 w(weight)w(weight)b(bias)b(bias)의 값을 찾아가야 한다. 이를 위해서는 xi(1)x_{i}^{(1)}의 계산에 참여한 wi(1)w_{i}^{(1)}bi(1)b_{i}^{(1)} 값이 손실률에 얼마나 기여했는지에 대해 찾아서 아래처럼 적절히 update해야 할 것이다.

wwμJw,μ is learning ratebbμJb,μ is learning rate\begin{aligned} w &\leftarrow w - \mu \frac{\partial J}{\partial w}, \quad \mu \text{ is learning rate} \\ b &\leftarrow b - \mu \frac{\partial J}{\partial b}, \quad \mu \text{ is learning rate} \end{aligned}

예를 들어, 손실함수 J를 아래의 mean-squared-error를 사용하는 경우를 생각해보자.

J=12i=1N(tixi)2J = \frac{1}{2} \sum_{i=1}^N (t_{i} - x_{i})^2

이 경우 그래프는 아래와 같다.

MSE

위의 mean-square 역시 ti=xit_{i}=x_{i}로 수렴하는 순간 손실률 J=0J = 0이 된다. 정답 값으로 근사할 수록 J의 변화율이 줄어드므로, 과정을 반복할 수록 정답에 근사하는 wwbb의 값을 찾아낼 수 있을 것임을 유추할 수 있다.


4. Activation functions

앞서 Universal Approximation Theorem에서 Φ\Phi가 단조증가연속함수로 정의하였으니, activation function으로 아래와 같은 적절한 함수를 지정할 수 있다.

  • Sigmoid Sigmoid
f(x)=11+ex,dfdx=f(x)(1f(x))f(x) = \frac{1}{1+e^{-x}}, \qquad \frac{d f}{d x} = f(x) (1-f(x)) dfdx=(1+ex)2(ex)=11+exex1+exdfdx=f(x)(1f(x))\begin{aligned} \frac{d f}{d x} &= -(1+e^{-x})^{-2} (-e^{-x}) \\ &= \frac{1}{1+e^{-x}} \frac{e^{-x}}{1+e^{-x}} \\ \therefore \frac{d f}{d x} &= f(x) (1-f(x)) \end{aligned}
  • ReLU ReLU
f(x)={0,if x0x,if x>1,dfdx={0,if x01,if x>1f(x) = \begin{cases} 0, & \text{if } x \le 0 \\ x, & \text{if } x \gt 1 \end{cases}, \qquad \frac{d f}{d x} = \begin{cases} 0, & \text{if } x \le 0 \\ 1, & \text{if } x \gt 1 \end{cases}
  • softmax
f(xi)=exij=1Nexjf(x_{i}) = \frac{e^{x_{i}}}{\sum_{j=1}^N e^{x_{j}}}

5. Back propagation

실제 network 구성 시 Single perceptron이 아닌 다수의 Neurons, Layers가 존재할 것이므로, 최종 결과 값 xj(d)x_{j}^{(d)}에 대한 손실률은 다변수 함수에 대한 편미분을 통해 ww, bb 값을 업데이트할 수 있다. 가령, 어떤 w1,1(0)w_{1,1}^{(0)} 값에 의한 손실률 J의 미분 즉 w1,1(0)J\nabla_{w_{1,1}^{(0)}} J 는, 전파하였던 레이어들의 모든 wi,j(1),wi,j(2),...w_{i,j}^{(1)}, w_{i,j}^{(2)}, ...의 영향을 받는다. 따라서 하나의 wi,j(d)w_{i,j}^{(d)}를 update 하기 위해서는 매우 큰 계산비용이 필요하다. 또한 각각의 모든 Neurons의 w\vec w, b\vec b를 update해야 하므로 비용은 더욱 커진다.

이를 해결하기 위해 아래의 그림처럼 Chain rule을 통해 계산하여 비용을 대폭 줄일 수 있다.

(그림)

그림처럼 손실률 JJ 를 아래의 cross entropy라 가정하면,

  • cross-entropy
J(xkd)=i=1Ntilogxid, where t is an answer vector, d is an output layer, k is one of index iJ(x_{k}^{d}) = -\sum_{i=1}^N t_{i} \log x_{i}^{d} \quad \text{, where t is an answer vector, d is an output layer, k is one of index i}

Jxk\frac {\partial J }{\partial x_{k}}

definitely, Jxk=txkJx=tx\begin{aligned} \text{definitely, } \frac{\partial J}{\partial x_{k}} &= - \frac{t}{x_{k}} \\ \therefore \frac{\partial J}{\partial x} &= - \frac{t}{x} \end{aligned}

(그림)

z(2)x(2)z(2)Jz^{(2)} \rightarrow x^{(2)} \rightarrow \nabla_{z^{(2)}} J 의 손실률 z(2)J\nabla_{z^{(2)}} J을 구해보자. 위 그림에서 보듯이, 특정 zk(2)(k=i) or (ki)z_{k}^{(2)} \text{, } (k = i) \text{ or } (k \ne i)에 의한 cross entropy 계산은 다른 모든 xi(2)x_{i}^{(2)}에 모두 영향을 미치므로, 모든 xi(2)x_{i}^{(2)}에 대한 변화율을 합해주어야 한다. 즉,

zkJ=iJxixizk, (k=i) or (ki)=ikJxixizk+Jxkxkzk\begin{aligned} \nabla_{z_{k}} J &= \sum_{i} \frac{\partial J}{\partial x_{i}} \frac{\partial x_{i}}{\partial z_{k}}, \text{ } (k = i) \text{ or } (k \ne i) \\ &= \sum_{i \ne k} \frac{\partial J}{\partial x_{i}} \frac{\partial x_{i}}{\partial z_{k}} + \frac{\partial J}{\partial x_{k}} \frac{\partial x_{k}}{\partial z_{k}} \end{aligned}

그런데 이미 ⓐ에서 Jx=tx\frac {\partial J }{\partial x} = - \frac {t}{x}는 알고 있으니, xz\frac{\partial x}{\partial z}에 대해 생각해보자.

위 그림처럼 cross entropy를 통해 손실률 J을 계산하기 전에 사용한 activation function은 softmax이다. 즉, xk(2)=f(zk(2))=ezk(2)ezi(2) , Let S=ezi(2)x_{k}^{(2)} = f(z_{k}^{(2)}) = \frac{e^{z_{k}^{(2)}}} { \sum e^{z_{i}^{(2)}}} \text{ , Let } S =\sum e^{z_{i}^{(2)}} 여기에서 xkx_{k}zkz_{k}에 대한 편미분은 i=ki = k 인 경우와 iki \neq k 인 경우로 나누어 계산할 수 있다.

i) i=ki = k 인 경우

xizk=eziSezkeziS2=ezi(Sezk)S2=eziSSezkS=xi(1xi) ezi=ezk\begin{aligned} \frac{\partial x_{i}}{\partial z_{k}} &= \frac{e^{z_{i}} S - e^{z_{k}} e^{z_{i}}}{S^2} = \frac{e^{z_{i}} (S - e^{z_{k}})} { S^2} \\ &= \frac{e^{z_{i}}}{S} \frac{S-e^{z_{k}}}{S} = x_{i} (1-x_{i}) \text{ } \because e^{z_{i}} = e^{z_{k}} \end{aligned}

ii) iki \neq k 인 경우

xizk=0SeziezkS2=eziezkSS=xixk\frac{\partial x_{i}}{\partial z_{k}} = \frac{0 \cdot S - e^{z_{i}} e^{z_{k}}} {S^2} = \frac{- e^{z_{i}} e^{z_{k}}} {S \cdot S} = -x_{i} x_{k}

이제 ⓒ의 식으로 돌아와서 다시 정리하면,

zkJ=iJxixizk, (k=i) or (ki)=ikJxixizk+Jxkxkzk=ik(tixi)(xixk)+(tkxk)(xk(1xk))=xkikti+tk(xk1)=xkititk=xktk , ti=1\begin{aligned} \nabla_{z_{k}} J &= \sum_{i} \frac{\partial J}{\partial x_{i}} \frac{\partial x_{i}}{\partial z_{k}}, \text{ } (k = i) \text{ or } (k \ne i) \\ &= \sum_{i \ne k} \frac{\partial J}{\partial x_{i}} \frac{\partial x_{i}}{\partial z_{k}} + \frac{\partial J}{\partial x_{k}} \frac{\partial x_{k}}{\partial z_{k}} \\ &= \sum_{i \ne k} \left(- \frac{t_{i}}{x_{i}}\right) (-x_{i} x_{k}) + \left(- \frac{t_{k}}{x_{k}}\right) ( x_{k} (1-x_{k})) \\ &= x_{k} \sum_{i \ne k} t_{i} + t_{k} (x_{k}-1) = x_{k} \sum_{i} t_{i} - t_{k} \\ &= x_{k} - t_{k} \text{ , } \because \sum t_{i} = 1 \end{aligned} Jz=xt\therefore \frac{\partial J}{\partial z} = x-t

ⓓ 이제 ww, bb에 의한 J의 변화율을 구하기에 앞서 zk(d)z_{k}^{(d)}의 정의를 Layer dd에 대하여 일반화하면 다음과 같다.

zi(d)=j=1Nwi,j(d)xj(d1)+bi(d)z_{i}^{(d)} = \sum_{j=1}^N w_{i,j}^{(d)} x_{j}^{(d-1)} + b_{i}^{(d)}

아래 ⓔ, ⓕ를 통해 각각의 변화율을 차례로 계산해보자.

ww의 변화율 Jwi,j(d)=Jzi(d)zi(d)wi,j(d)\frac{\partial J}{\partial w_{i,j}^{(d)}} = \color{red}{\frac{\partial J}{\partial z_{i}^{(d)}}} \cdot \color{blue}{\frac{\partial z_{i}^{(d)}} {\partial w_{i,j}^{(d)}}} 이고, Jzi(d)\color{red}{\frac{\partial J}{\partial z_{i}^{(d)}}} 는 ⓒ에서 이미 구한 값이다. 또한 zi(d)wi,j(d)\color{blue}{\frac{\partial z_{i}^{(d)}} {\partial w_{i,j}^{(d)}}}는 명백히 xi(d1)x_{i}^{(d-1)} 이므로, 따라서

Jwi,j(d)=Jzi(d)xi(d1)\therefore \frac{\partial J}{\partial w_{i,j}^{(d)}} = \frac{\partial J}{\partial z_{i}^{(d)}} \cdot x_{i}^{(d-1)}

bb의 변화율

Jbi(d)=Jzi(d)zi(d)bi(d)=Jzi(d) (zi(d)bi(d)=1)\begin{aligned} \frac{\partial J}{\partial b_{i}^{(d)}} &= \frac{\partial J}{\partial z_{i}^{(d)}} \cdot \frac{\partial z_{i}^{(d)}}{\partial b_{i}^{(d)}} \\ &= \frac{\partial J}{\partial z_{i}^{(d)}} \text{ } (\because \frac{\partial z_{i}^{(d)}}{\partial b_{i}^{(d)}} = 1) \end{aligned}

ⓖ 마지막으로 Jxj(d1)\frac{\partial J} {\partial x_{j}^{(d-1)}}를 구하면, 재귀적으로 ⓑ~ⓖ의 과정을 수행할 수 있다.

Jxj(d1)=Jzi(d)zi(d)xj(d1)=Jzi(d)wi,j(d)\begin{aligned} \frac{\partial J} {\partial x_{j}^{(d-1)}} &= \frac{\partial J}{\partial z_{i}^{(d)}} \cdot \frac{\partial z_{i}^{(d)}} {\partial x_{j}^{(d-1)}} \\ &= \frac{\partial J}{\partial z_{i}^{(d)}} \cdot w_{i,j}^{(d)} \end{aligned}

여기에서 Jzi(d)\frac{\partial J}{\partial z_{i}^{(d)}}는 ⓒ에서 이미 구한 값이므로 Jxj(d1)\frac{\partial J} {\partial x_{j}^{(d-1)}}의 계산이 가능하다.

이 예제에서는 softmax-cross entropy로 계산하였으므로, ⓒ에서의 Jzi(d)\frac{\partial J}{\partial z_{i}^{(d)}}는 activation function 종류에 따라 별도로 확인해 볼 필요는 있다.


Back to Blog

Related Posts

View All Posts »