ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1. 순방향 신경망
    딥러닝 2023. 9. 13. 10:41

    이 포스트는 Do it 딥러닝 교과서 (윤성진 저)를 참고하여 만들어졌음!

     

    순방향 신경망 (Feedforward neural network)

    Feed-forward and feedback networks - Neural Networks with R [Book] (oreilly.com)

    위 그림에서 각 동그라미를 퍼셉트론(인공뉴런)이라 부르고, 여러 퍼셉트론이 층을 이루는 구조를 순방향 신경망(feed forward neural network)라고 부른다. Input layer에 입력된 값들이 hidden layer로 전달되고, 마지막 Output layer를 통해 최종 값이 산출된다. Input layer에서 데이터를 입력받고 Hidden layer에서 입력된 데이터의 특징을 추출하며 그 결과를 Output layer를 통해 출력하는 것이다.

     

     

     

     

    Fully connected

    FC(Fully connected) layer란 현재 층의 모든 뉴런과 이전 층의 모든 뉴런이 모두 연결된 형태를 의미한다. FC 계층의 뉴런들은 이전 계층의 모든 뉴런으로부터 동일한 데이터를 전달받는다. 하지만 각 뉴런이 연결되는 경로의 가중치는 서로 다르기 때문에 (같을 수도 있겠지만) 현재 층의 각 뉴런은 입력된 데이터의 서로 다른 특징을 학습한다.  

    여러 FC층이 Hidden layer로 존재할 때, 한 층에서 학습한 특징이 전부 다음 hidden layer로 전달되고 이 과정이 output layer에 이르기까지 반복된다. Hidden layer를 한 층 건널 때마다 inference에 적합한 특징들을 추출하도록 변환된다.

     

     

     

     

     

    Non-linearity

    Hidden layer를 한 계층 이동하면서 수행되는 연산은 예를들어 다음과 같이 쓸 수 있다.

    $$\text{output} = w_1x_1+w_2x_2+\cdots+w_nx_n+b$$

    이때 $\vec{x}$는 입력 데이터를, $\vec{w}$는 뉴런의 경로에 따라 곱해지는 가중치를 의미한다. 마지막으로 더해지는 $b$는 오프셋이다. 이때 위 연산은 단순 선형 계산인데, 선형 계산만으로는 이 복잡한 세상의 입력 데이터를 표현하는 데 한계가 있다. (표현이 불가능하다고 봐야함) 따라서 매 Hidden layer를 거칠 때마다 위 연산 값을 activation function을 이용하여 데이터를 비선형으로 변환한다. 비선형성을 이용하면 출력공간의 차원이 확장되어 더 복잡한 데이터에서도 특징을 추출해낼 수 있다.

     

     

     

     

     

     

    실함수, 벡터함수

    실함수 : $f: \mathbb{R}^n \rightarrow \mathbb{R}$로 정의되는 함수. 다시 말하면 어떤 함수의 입력이 $n$차원 벡터일 때 출력이 1차원 값이면 그 함수를 실함수라고 한다. 입력벡터 $\vec{x}^T=(x_1, x_2, \cdots, x_n)$을 실함수에 입력한 결과는 다음과 같이 쓸 수 있다.

    $$f(\vec{x})=f(x_1, x_2, \cdots, x_n)=k$$

     

     

    벡터 함수 : $f: \mathbb{R}^n \rightarrow \mathbb{R}^m$로 정의되는 함수. 어떤 함수의 입력이 $n$차원 벡터일 때 출력이 $m$차원 벡터이면 그 함수를 벡터 함수라고 한다. 입력벡터 $\vec{x}^T=(x_1, x_2, \cdots, x_n)$을 벡터 함수에 입력한 결과는 다음과 같이 쓸 수 있다.

    $$f(\vec{x})=(f_1(\vec{x}), f_2(\vec{x}), \cdots, f_m(\vec{x})) $$

     

     

    이때 한 뉴런의 연산은 $f(\vec{x}) = f(\vec{w}^T\vec{x}+b)=k$로 주어지므로 뉴런은 실함수이다. (이때 $f(\cdot)$은 activation function이다.) 

    한 Layer에는 뉴런이 여러 개 존재하므로 이를 다음과 같이 나타낼 수 있다.

    $$(f_1(\vec{x}), f_2(\vec{x}), \cdots, f_m(\vec{x}))$$

    따라서 한 Layer는 벡터 함수이다.

     

     

    신경망의 한 layer가 $f(\vec{x})$로 표현된다면 $L$개의 layer를 가진 신경망은 다음과 같이 나타낼 수 있다.

    $$\vec{y}=f^L(\cdots f^2(f^1 (\vec{x})))$$

    이때 $f^1, f^2, \cdots$는 각 hidden layer를 의미하며, 마지막 $f^L$층은 output layer이다. 아직 backward 개념이 나오지 않았지만 신경망의 학습을 위해서는 모든 계층의 함수를 파라미터로 미분할 수 있어야 하기 때문에 $f^1, f^2, \cdots$는 반드시 미분이 가능해야 한다.

     

     

     

     

    여기서 한 번에 다 다루기는 어렵지만 벌써 많은 요소들이 언급되었다. 딥러닝 사용자는 네트워크 구조에 맞게 데이터를 변경할 수도, 데이터에 맞게 네트워크 구조를 변경할 수도 있다. 네트워크 깊이가 과도하게 크거나 깊으면 과적합이 발생할 우려가 있고, 지나치게 작은 네트워크를 사용하면 입력 데이터의 출력을 추출하지 못하는 상황이 발생할 수 있다.

    따라서 딥러닝 네트워크를 잘 설계하기 위해서는 (주어진 데이터에 대해 높은 성능을 낼 수 있는 모델을 설계하기 위해서는) 여러 파라미터들을 조정해가며 안목을 기르는 것 또한 중요해 보인다.

Designed by Tistory.