정리에 의해 임의의 함수 F(x)는 single perceptron만으로 F(x)에 근사하는 임의의 함수 f(x)를 만들어낼 수 있다는 것을 의미한다.
아래에서 소개할 과정은 Neural Network에서 wi와 bi를 찾아가는 과정을 알아볼 것이다.
2. Single perceptron
Notation 아래와 같이 d번째 Layer에 존재하는 임의의 index i를 가지는 x를 다음과 같이 표기하자.
xi(d)
위의 그림에서 다음 Layer의 xi(1)를 일반화하면 다음과 같다.
f(∑j=1Nwi,j(1)xj(0)+bi(1))=xi(1), f() is an activation function.
이 때, 편의 상 zi(1)=∑j=1Nwi,j(1)xj(0)+bi(1) 라 정의하자.
그러면 f(zi(1))=xi(1). 이며, 간단히 f(z)=x로 표기할 수 있다.
이 처럼 이전 layer로부터 다음 layer로의 계산을 통해 xid로 값을 전달하는 과정을 forward propagation이라 한다.
단, zi(1) 의 계산에 xj(0), 즉 이전 Layer로부터의 입력된 값을 사용한다는 데 주의한다.
3. Loss function (J)
위 그림의 d=1이 output layer일 때 xi(1) 은 예측 값이라 할 수 있다. 따라서 정답 값 ti 와 예측 값 xi(1) 의 오차(이하 손실률 J)를 계산하고, 정답으로 근사시킬 w(weight) 및 b(bias)의 값을 찾아가야 한다. 이를 위해서는 xi(1)의 계산에 참여한 wi(1) 및 bi(1) 값이 손실률에 얼마나 기여했는지에 대해 찾아서 아래처럼 적절히 update해야 할 것이다.
wb←w−μ∂w∂J,μ is learning rate←b−μ∂b∂J,μ is learning rate
예를 들어, 손실함수 J를 아래의 mean-squared-error를 사용하는 경우를 생각해보자.
J=21i=1∑N(ti−xi)2
이 경우 그래프는 아래와 같다.
위의 mean-square 역시 ti=xi로 수렴하는 순간 손실률 J=0이 된다. 정답 값으로 근사할 수록 J의 변화율이 줄어드므로, 과정을 반복할 수록 정답에 근사하는 w 및 b의 값을 찾아낼 수 있을 것임을 유추할 수 있다.
4. Activation functions
앞서 Universal Approximation Theorem에서 Φ가 단조증가연속함수로 정의하였으니, activation function으로 아래와 같은 적절한 함수를 지정할 수 있다.
실제 network 구성 시 Single perceptron이 아닌 다수의 Neurons, Layers가 존재할 것이므로, 최종 결과 값 xj(d)에 대한 손실률은 다변수 함수에 대한 편미분을 통해 w, b 값을 업데이트할 수 있다. 가령, 어떤 w1,1(0) 값에 의한 손실률 J의 미분 즉 ∇w1,1(0)J 는, 전파하였던 레이어들의 모든 wi,j(1),wi,j(2),...의 영향을 받는다. 따라서 하나의 wi,j(d)를 update 하기 위해서는 매우 큰 계산비용이 필요하다. 또한 각각의 모든 Neurons의 w, b를 update해야 하므로 비용은 더욱 커진다.
이를 해결하기 위해 아래의 그림처럼 Chain rule을 통해 계산하여 비용을 대폭 줄일 수 있다.
(그림)
그림처럼 손실률 J 를 아래의 cross entropy라 가정하면,
cross-entropy
J(xkd)=−i=1∑Ntilogxid, where t is an answer vector, d is an output layer, k is one of index i
ⓐ∂xk∂J
definitely, ∂xk∂J∴∂x∂J=−xkt=−xt
(그림)
ⓑ z(2)→x(2)→∇z(2)J 의 손실률 ∇z(2)J을 구해보자. 위 그림에서 보듯이, 특정 zk(2), (k=i) or (k=i)에 의한 cross entropy 계산은 다른 모든 xi(2)에 모두 영향을 미치므로, 모든 xi(2)에 대한 변화율을 합해주어야 한다. 즉,
ⓒ
∇zkJ=i∑∂xi∂J∂zk∂xi,(k=i) or (k=i)=i=k∑∂xi∂J∂zk∂xi+∂xk∂J∂zk∂xk
그런데 이미 ⓐ에서 ∂x∂J=−xt는 알고 있으니, ∂z∂x에 대해 생각해보자.
위 그림처럼 cross entropy를 통해 손실률 J을 계산하기 전에 사용한 activation function은 softmax이다. 즉, xk(2)=f(zk(2))=∑ezi(2)ezk(2) , Let S=∑ezi(2) 여기에서 xk의 zk에 대한 편미분은 i=k 인 경우와 i=k 인 경우로 나누어 계산할 수 있다.
∇zkJ=i∑∂xi∂J∂zk∂xi,(k=i) or (k=i)=i=k∑∂xi∂J∂zk∂xi+∂xk∂J∂zk∂xk=i=k∑(−xiti)(−xixk)+(−xktk)(xk(1−xk))=xki=k∑ti+tk(xk−1)=xki∑ti−tk=xk−tk , ∵∑ti=1∴∂z∂J=x−t
ⓓ 이제 w, b에 의한 J의 변화율을 구하기에 앞서 zk(d)의 정의를 Layer d에 대하여 일반화하면 다음과 같다.
zi(d)=j=1∑Nwi,j(d)xj(d−1)+bi(d)
아래 ⓔ, ⓕ를 통해 각각의 변화율을 차례로 계산해보자.
ⓔ w의 변화율 ∂wi,j(d)∂J=∂zi(d)∂J⋅∂wi,j(d)∂zi(d) 이고, ∂zi(d)∂J 는 ⓒ에서 이미 구한 값이다. 또한 ∂wi,j(d)∂zi(d)는 명백히 xi(d−1) 이므로, 따라서