계산 그래프 : 연산자로 구성된 노드와 값으로 구성된 엣지들로 나타낸 그래프
[kernelacademy-DL-Basic]
계산 그래프 사용 시 이점
국소적 계산 : 노드는 자신과 연결된 엣지만 신경쓰면 된다. → 작은 문제에 집중하여 복잡한 문제를 단순화할 수 있다.
⇒ 손실함수로 가중치들을 업데이트할 때 복잡성을 단순화하는 데 도움을 준다.
노드가 +, x 이면 미분이 가능하다.
연쇄 법칙 : 합성 함수의 미분은 합성 함수를 구성하는 각 함수의 미분의 곱으로 나타낼 수 있다.
$$ \frac{df(g(x))}{dx}=\frac{df(g(x))}{dg(x)}\cdot\frac{dg(x)}{dx} $$
→ 복잡한 합성함수의 미분을 단순화 가능
e.g. NueralNet with 4 simple layer example) (간단히 개념만 살펴보는 것이며 수식이 정확하지 않음. → 올바른 수식을 살펴보려면 영상 참고 : https://www.youtube.com/watch?v=tIeHLnjs5U8&list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi&index=4)
caculate differentiate of p4 parameter from loss function : $\frac{\partial L}{\partial p4} = -x$
caculate differentiate of p3 parameter from loss fuction
[kernelacademy-DL-Basic]
so as to p2, p1
[kernelacademy-DL-Basic]
덧셈 노드 : 미분값이 그대로 전달됨.
[kernelacademy-DL-Basic]
곱셈 노드 : 미분값에 자신을 제외한 다른 엣지값들을 곱해서 전달됨.
[kernelacademy-DL-Basic]
$\delta_j^l$ : l-번째 레이어의 j-번째 뉴런에 대한 error
$C$ : cost
Error signal : $\frac{\partial C}{\partial z_j^l}\cdot \Delta z_j^l$ . l-번째 레이어의 j-번째 뉴런의 출력값을 $\Delta z_j^l$만큼 변화시켰을 때 Cost의 값을 의미한다.
Error Gradient at L-layer
Error of each nodes at L-layer : $\delta_j^l=\frac{\partial C}{\partial z_j^l}$
$$ \frac{\partial C}{\partial z_j^l}=\frac{\partial \frac{1}{2}\sum_k (y_k-a_k^L)^2}{\partial z_j^l}=\frac{\partial \frac{1}{2} (y_j-a_j^L)^2}{\partial z_j^l}=\frac{\partial}{\partial z_j^l} \frac{1}{2} (y_j-\sigma(z_j^L))^2\\=(a_j^L-y_j)\sigma'(z_j^L) $$
Error Gradient : $\delta^L=[\delta_1^L,\cdots,\delta_j^L,\cdots]^T=\nabla_aC\odot\sigma'(z^L)=(a^L-y)\odot\sigma'(z^L)$
bias에 대한 편미분: $\frac{\partial C}{\partial b_j^l}=\frac{\partial C}{\partial z_j^l}\cdot \frac{\partial z_j^l}{\partial b_j^l}=\delta_j^l\cdot\frac{\partial}{\partial b_j^l}(w_j^la^{l-1}+b_j^l)=\delta_j^l$
weight에 대한 편미분: $\frac{\partial C}{\partial w_{kj}^l}=\frac{\partial C}{\partial z_j^l}\cdot \frac{\partial z_j^l}{\partial w_{kj}^l}=\delta_j^l\cdot\frac{\partial}{\partial w_{kj}^l}(w_{kj}^la_k^{l-1}+b_j^l)=\delta_j^l\cdot a_k^{l-1}$
Error Gradient at (L-1)-layer
[kernelacademy-DL-Basic]
Error of each nodes at (L-1)-layer : $\delta_j^{l-1}=\frac{\partial C}{\partial z_j^{l-1}}$
$$ \frac{\partial C}{\partial z_j^{l-1}}=\frac{\partial C}{\partial z_1^l}\cdot\frac{\partial z_1^l}{\partial z_j^{l-1}} + \cdots + \frac{\partial C}{\partial z_j^l}\cdot\frac{\partial z_j^l}{\partial z_j^{l-1}}+\cdots \\=\sum_k\frac{\partial C}{\partial z_k^l}\cdot\frac{\partial z_k^l}{\partial z_j^{l-1}}=\sum_k \delta_k^l\cdot w_{kj}^l\cdot \sigma'(z_j^{l-1}) \\=\sigma'(z_j^{l-1}) \cdot \sum_k\delta_k^l\cdot w_{kj}^l $$
→ matrix form : $\sigma'(z^{l-1}) \odot \big({w^l}^T \delta^l\big)$
(계산 그래프에서 곱셈 노드의 역전파라고 이해하면 된다.)
bias에 대한 편미분: $\frac{\partial C}{\partial b_j^{l-1}}=\frac{\partial C}{\partial z_j^{l-1}}\cdot \frac{\partial z_j^{l-1}}{\partial b_j^{l-1}}=\delta_j^{l-1}\cdot\frac{\partial}{\partial b_j^{l-1}}(w_j^{l-1}a^{l-2}+b_j^{l-1})=\delta_j^{l-1}$
(L-1)-layer의 k번째 노드의 weight에 대한 편미분: $\frac{\partial C}{\partial w_{kj}^{l-1}}=\frac{\partial C}{\partial z_j^{l-1}}\cdot \frac{\partial z_j^{l-1}}{\partial w_{kj}^{l-1}}=\delta_j^{l-1}\cdot\frac{\partial}{\partial w_{kj}^{l-1}}(w_{kj}^{l-1}a_k^{l-2}+b_j^{l-1})=\delta_j^{l-1}\cdot a_k^{l-2}$