ANN에서 사용하는 Backpropagation 노트
                                            
                                                
                                                
                                                
                                                
                                                
                                                 2398 단어  기계 학습
                    
입문 
이 문장에서 쓰지 않고 끝난 Backpropagation을 기록합니다.
계산 방법과 설치는 비교적 쉽지만 이해하는 데 시간이 걸리기 때문에 정리한 후 자신의 메모용으로 사용한다.
어디에서 사용합니까? 
인공신경망(ANN: Artificial Neural Network)과 심층신경망(DNN: Deep Neural Network)을 학습할 때 발생하는 오차가 네트워크에 반영될 때 사용하는 방법은 Backpropagation이다.
Backpropagation은 일본어에서 오차 역전파법이라고 불린다.
계산 방법 
업데이트 처리에서 다음 원가 함수 $J$는 매개 변수 $\Theta$로 미세한 값을 나누어야 합니다.\frac{\partial}{\partial \Theta_{ij}^{(l)}}J(\Theta)
이것은 매개 변수 $\Theta_모든 {ij}^(l)}$에서 오차를 구합니다. 한 번에 모든 것을 구하는 것은 비현실적입니다. 이보다 효율이 좋은 구법이 있습니다. 이것이 바로 Backpropagation Algorithm입니다.
다음 4층 ANN을 예로 들어 Backpropagation을 계산합니다.
 
 
우선, 입력 값이 $x$이면 Forward Propagation의 계산은 다음과 같습니다.\begin{align}
a^{(1)} &= x \\
\\
z^{(2)} &= \Theta^{(1)}a^{(1)} \\
a^{(2)} &= g(z^{(2)}) \\
a^{(2)} &:= \left(\begin{matrix}
1 \\
a_1^{(2)}\\
\vdots\\
a_{s_2}^{(2)}
\end{matrix}\right)\\
\\
z^{(3)} &= \Theta^{(2)}a^{(2)} \\
a^{(3)} &= g(z^{(3)}) \\
a^{(3)} &:= \left(\begin{matrix}
1 \\
a_1^{(3)}\\
\vdots\\
a_{s_3}^{(3)}
\end{matrix}\right)\\
\\
z^{(4)} &= \Theta^{(3)}a^{(3)} \\
a^{(4)} &= g(z^{(4)}) = h_\Theta(x)
\end{align}
레이어당 $l$노드 $j$의 오차는 $\delta_{j}^{(l)}$.
그리고 각 노드의 오차 $\delta_{j}^(l)}$는 다음과 같이 계산됩니다.\begin{align}
\delta^{(4)} &= a^{(4)} - y \\
\\
\delta^{(3)} &= (\Theta^{(3)})^T \delta^{(4)} \circ g^\prime(z^{(3)}) \\
\\
\delta^{(2)} &= (\Theta^{(2)})^T \delta^{(3)} \circ g^\prime(z^{(2)}) \\
\end{align}
$\delta^ (1)}$이 없는 이유는 입력 값에 오차가 없기 때문입니다.
$g^\prime(\cdot)$는 활성화 함수의 도수입니다. Sigmoid 함수라면 $x(1-x)$입니다. 또한 $\circ$는 아다마적으로 행렬의 요소 간의 누적을 나타냅니다.
각 레이어의 $\delta^ (l)}$를 구할 수 있으면 업데이트 값을 계산합니다.\begin{align}
\triangle_{ij}^{(l)} &= \sum_{i=1}^m a_j^{(l)}\delta_i^{(l+1)} \\
\frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta) &= \frac{1}{m}\triangle_{ij}^{(l)} + \lambda\Theta_{ij}^{(l)} \\
\end{align}
총결산 
Backpropagation은 단순한 계산이 아니라 Forward propagation과 비슷한 설치입니다.
만약 식을 이해하지 못한다면, 변수의 비수를 확인하면 된다.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(ANN에서 사용하는 Backpropagation 노트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/ryouka0122/items/1e06ce006c03f89694c3
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
인공신경망(ANN: Artificial Neural Network)과 심층신경망(DNN: Deep Neural Network)을 학습할 때 발생하는 오차가 네트워크에 반영될 때 사용하는 방법은 Backpropagation이다.
Backpropagation은 일본어에서 오차 역전파법이라고 불린다.
계산 방법 
업데이트 처리에서 다음 원가 함수 $J$는 매개 변수 $\Theta$로 미세한 값을 나누어야 합니다.\frac{\partial}{\partial \Theta_{ij}^{(l)}}J(\Theta)
이것은 매개 변수 $\Theta_모든 {ij}^(l)}$에서 오차를 구합니다. 한 번에 모든 것을 구하는 것은 비현실적입니다. 이보다 효율이 좋은 구법이 있습니다. 이것이 바로 Backpropagation Algorithm입니다.
다음 4층 ANN을 예로 들어 Backpropagation을 계산합니다.
 
 
우선, 입력 값이 $x$이면 Forward Propagation의 계산은 다음과 같습니다.\begin{align}
a^{(1)} &= x \\
\\
z^{(2)} &= \Theta^{(1)}a^{(1)} \\
a^{(2)} &= g(z^{(2)}) \\
a^{(2)} &:= \left(\begin{matrix}
1 \\
a_1^{(2)}\\
\vdots\\
a_{s_2}^{(2)}
\end{matrix}\right)\\
\\
z^{(3)} &= \Theta^{(2)}a^{(2)} \\
a^{(3)} &= g(z^{(3)}) \\
a^{(3)} &:= \left(\begin{matrix}
1 \\
a_1^{(3)}\\
\vdots\\
a_{s_3}^{(3)}
\end{matrix}\right)\\
\\
z^{(4)} &= \Theta^{(3)}a^{(3)} \\
a^{(4)} &= g(z^{(4)}) = h_\Theta(x)
\end{align}
레이어당 $l$노드 $j$의 오차는 $\delta_{j}^{(l)}$.
그리고 각 노드의 오차 $\delta_{j}^(l)}$는 다음과 같이 계산됩니다.\begin{align}
\delta^{(4)} &= a^{(4)} - y \\
\\
\delta^{(3)} &= (\Theta^{(3)})^T \delta^{(4)} \circ g^\prime(z^{(3)}) \\
\\
\delta^{(2)} &= (\Theta^{(2)})^T \delta^{(3)} \circ g^\prime(z^{(2)}) \\
\end{align}
$\delta^ (1)}$이 없는 이유는 입력 값에 오차가 없기 때문입니다.
$g^\prime(\cdot)$는 활성화 함수의 도수입니다. Sigmoid 함수라면 $x(1-x)$입니다. 또한 $\circ$는 아다마적으로 행렬의 요소 간의 누적을 나타냅니다.
각 레이어의 $\delta^ (l)}$를 구할 수 있으면 업데이트 값을 계산합니다.\begin{align}
\triangle_{ij}^{(l)} &= \sum_{i=1}^m a_j^{(l)}\delta_i^{(l+1)} \\
\frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta) &= \frac{1}{m}\triangle_{ij}^{(l)} + \lambda\Theta_{ij}^{(l)} \\
\end{align}
총결산 
Backpropagation은 단순한 계산이 아니라 Forward propagation과 비슷한 설치입니다.
만약 식을 이해하지 못한다면, 변수의 비수를 확인하면 된다.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(ANN에서 사용하는 Backpropagation 노트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/ryouka0122/items/1e06ce006c03f89694c3
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
\frac{\partial}{\partial \Theta_{ij}^{(l)}}J(\Theta)
\begin{align}
a^{(1)} &= x \\
\\
z^{(2)} &= \Theta^{(1)}a^{(1)} \\
a^{(2)} &= g(z^{(2)}) \\
a^{(2)} &:= \left(\begin{matrix}
1 \\
a_1^{(2)}\\
\vdots\\
a_{s_2}^{(2)}
\end{matrix}\right)\\
\\
z^{(3)} &= \Theta^{(2)}a^{(2)} \\
a^{(3)} &= g(z^{(3)}) \\
a^{(3)} &:= \left(\begin{matrix}
1 \\
a_1^{(3)}\\
\vdots\\
a_{s_3}^{(3)}
\end{matrix}\right)\\
\\
z^{(4)} &= \Theta^{(3)}a^{(3)} \\
a^{(4)} &= g(z^{(4)}) = h_\Theta(x)
\end{align}
\begin{align}
\delta^{(4)} &= a^{(4)} - y \\
\\
\delta^{(3)} &= (\Theta^{(3)})^T \delta^{(4)} \circ g^\prime(z^{(3)}) \\
\\
\delta^{(2)} &= (\Theta^{(2)})^T \delta^{(3)} \circ g^\prime(z^{(2)}) \\
\end{align}
\begin{align}
\triangle_{ij}^{(l)} &= \sum_{i=1}^m a_j^{(l)}\delta_i^{(l+1)} \\
\frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta) &= \frac{1}{m}\triangle_{ij}^{(l)} + \lambda\Theta_{ij}^{(l)} \\
\end{align}
Backpropagation은 단순한 계산이 아니라 Forward propagation과 비슷한 설치입니다.
만약 식을 이해하지 못한다면, 변수의 비수를 확인하면 된다.
Reference
이 문제에 관하여(ANN에서 사용하는 Backpropagation 노트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryouka0122/items/1e06ce006c03f89694c3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)