- Neural network 구조

 : 인공 신경망(artificial neural networks)은 동물의 뇌가 가진 병렬적 구성을 모델화한 것 입니다.

   네트워크는 간단한 형태의 입력과 출력으로 이루어져 있습니다.

 

   인공신경망은 시냅스의 결합으로 네트워크를 형성한 인공 뉴런(노드)이 학습을 통해 시냅스의 결합 세기를 변화시켜,

   문제 해결 능력을 가지는 모델 전반을 가리킵니다.

 

   좁은 의미에서는 오차역전파법을 이용한 다층 퍼셉트론을 가리키는 경우도 있지만, 이것은 잘못된 용법으로,

   인공신경망은 이에 국한되지 않습니다. 

   Perceptron은 많은 Neural network 모델 중 하나의 이진 분류 모델 혹은 알고리즘이라고 할 수 있습니다.

 

 : 인공 신경망의 구성요소

   - 노드: 각 층 (Layer)를 구성하는 요소
   - 층 (Layer)
      입력층 (Input Layer): 데이터를 받아들이는 층
      은닉층 (Hidden Layer): 데이터를 한번 이상 처리하는 노드로 구성된 층 (가중치를 곱한 후, 활성함수의 결과를 얻은 노드)
      출력층 (Output Layer): 최종 은닉층 또는 입력층에 가중치를 곱하고, 출력함수의 결과를 얻은 노드로 구성된 층

   - 가중치 (Weight): 노드와 노드간의 연결강도를 나타냄
   - 합 (Summation): 가중치와 노드의 곱을 합하는 것

   - 활성함수 (Activation Function): 합을 처리해 주는 함수로 은닉층 노드의 결과를 얻을 경우 활성함수로 표현
   - 출력함수 (Output Function): 합을 처리해 주는 함수로 출력층 노드의 결과를 얻을 경우 출력함수로 표현
   - 손실함수 (Loss Function): 가중치의 학습을 위해 출력함수의 결과와 반응값 간 오차를 측정하는 함수

 

 

- Multiple layers form a network

 : Layer를 여러 번 순차적으로 붙이면 하나의 Network가 되는 걸 볼 수 있습니다.

   인공신경망인 단층 퍼셉트론은 한계를 가지는데,

   비선형적으로 분리되는 데이터에 대해서는 제대로된 학습이 불가능하다는 점 입니다.
   AND, OR 연산에 대해서는 학습이 가능하지만, XOR에 대해서는 학습이 불가능하다는 것이 증명되었습니다.

   이를 극복하기 위한 방안으로 입력층과 출력층 사이에 하나 이상의 중간층을 두어 비선형적으로 분리되는 데이터에

   대해서도 학습이 가능하도록  다층 퍼셉트론이 생기게 되었습니다.

 

 

 

- Artificial neural network 일반적 구조

 : 단계별로 합성함으로써 non-linear function을 만들 수 있습니다.

   neural network를 training 한다는 말은 neuron에 붙어있는 w(weight parameter) 들을 알아내는 것 입니다.

 

 

 

- Feed-forward network

 : 다층 페셉트론에서 입력층에서 전달되는 값이 은닉층의 모든 노드로 전달되며 은닉층의 모든 노드의 출력 값이 출력층의

   모든 노드 로 전달됩니다. 이와 같이 input에서 output 까지 한 방향으로만 가는 경우를 순전파 (Feed-forward) 라고 합니다.

 

 

 : 반대로 정보가 앞으로만 가지않고, 다시 돌아올 수 있는 경우를 Recurrent 라고 합니다.

   short term memory로 추가적인 정보를 기억하며 더 사용할 수 있습니다.

 

 

 

 

- Neural network 연산

 : 신경망의 입력, 출력 변환 과정입니다.

   내적 후에 activation 을 진행하는데, 이는 활성화 함수의 결과로 어떠한 신호를 입력받아 이를 적절한 처리를 하여 출력하는것

   입니다. 이를 통해 출력된 신호가 다음 단계에서 활성화 되는지를 결정합니다.

   아래의 과정은 하나의 neuron이 통과하는 과정 및 결과를 표현한 것 입니다.

 

=> 𝒚𝒐𝒖𝒕=𝑭(𝒙,𝑾)

 

 

 : 한 layer에 node가 여러 개이므로,

   pararell하게 계산한다.

 

 

 

 : layer를 엮는다면, 연산의 output을 input으로 넣어 다음 layer matrix를 곱한 후 activation 과정을 반복합니다.

   input vector로 training sample이 한개가 들어있을 경우입니다.

 

 

 

- Activation function (활성화 함수)

 : 활성화 함수 (Activation Function)은 입력 신호의 총합을 출력 신호로 변환하는 함수로, 

   입력 받은 신호를 얼마나 출력할지 결정하고 Network에 층을 쌓아 비선형성을 표현할 수 있도록 해줍니다.

   neural network가 통과해 가면서 값을 바꾸어 주는 메커니즘

 

- 단위 계산 함수 (threshold activation function)

 

 

 

- 시그모이드 함수

 : 시그모이드 함수란  S자형 곡선 또는 시그모이드 곡선을 갖는 수학 함수입니다.

 

 

- tanh 함수

 : Hyperbolic Tangent(tanh) 함수는 Sigmoid의 대체제로 사용될 수 있는 활성화 함수입니다.

   tanh와 Sigmoid의 차이점은 Sigmoid의 출력 범위가 0에서 1 사이인 반면 tanh와 출력 범위는 -1에서 1사이라는 점입니다.  

   Sigmoid와 비교하여 tanh와는 출력 범위가 더 넓고 경사면이 큰 범위가 더 크기 때문에 더 빠르게 수렴하여 학습하는

   특성이 있습니다.

 

    Sigmoid와 비교하여 중심점이 0이고 범위가 기울기 넓은 차이점이 있지만 Sigmoid의 치명적인 단점인

    Vanishing gradient problem 문제를 그대로 갖고 있습니다.

 

- ReLU 함수

 : ReLU(Rectified Linear Unit, 경사함수)는 가장 많이 사용되는 활성화 함수 중 하나입니다.

   Sigmoid와 tanh가 갖는 Gradient Vanishing 문제를 해결하기 위한 함수입니다.

   ReLU 함수는 x가 음수면 값을 0으로 내보냅니다.

 

 

 

 : 고전적인 모델은 saturating (미분 값이 0으로 감),

   최근에 나온 모델은 non-saturating 합니다.

 

 

 

 

- 출력 층에서의 활성화

 : regression

   regression의 경우 그 값을 그대로 내보내면 됩니다.

 

 

 

 : classification

   classification의 경우 각각에 들어갈 확률 값으로 하여 하나의 class의 들어갈 시나리오 계산  (softmax function)

 

 

 

- Training as optimization

 : Loss function(손실함수)

   손실함수 (Loss function)] 출력값과 정답의 오차를 정의하는 함수입니다.

   딥러닝에서 아래 두가지 (MSE, Cross entropy) 손실함수가 많이 쓰입니다.

 

   ex: MNIST 분류 예제

 

 

 : Example

   cross entropy가 성능 평가 간 좋은 성질이 존재합니다.

   cross entropy은 두 확률 분포 간에 차이를 볼 경우 많이 사용합니다.

 

 

- Learning as optimization

 : 방향은 미분 값 (gradients)에 의하여 결정됩니다. learning rates 는 미분 값 반대 방향으로 얼마나 이동할 지를 결정합니다.

   SGD 처럼 sample 하나를 볼 때 마다 w를 업데이트 할 수 있고,

   mini-batch를 이용하여 subset을 통해 w를 덜 빈번하게 업데이트할 수도 있습니다.

 

 

 

- 간단한 Back Propagation 예제

 : Forward prop는 input으로 부터 output을 계산하고 w들을 곱하고 activation을 곱한다.

   정답을 가지고 loss를 계산한 후 w를 업데이트 합니다.

   Back-prop는 미분 값을 계산할 경우 끝의 layer 부터 거꾸로 거슬러 올라오면 편리하다는 점을 착안하였습니다.

 

 

 

- Gradient calculation (기울기 계산)

 : neural network의 output은 합성 함수로 되어 있습니다.

   합성 함수의 미분 규칙을 chain rule이라고 부르고, 치환 후 미분한 값을 계속 곱합니다.

 

 

 

- Backpropagation (역전파)파

 : Gradient을 사용하여 가중치 업데이트 합니다. BP는 체인 규칙을 통해 기울기를 계산합니다.

   Gradient는 Network를 통해 역방향으로 전파됩니다.

 

   대부분의 딥 러닝 소프트웨어 라이브러리는 자동으로 기울기를 계산합니다.

   입력층과 출력층 사이에 존재하는 층을 은닉층이라고 부르고, 입력층과 출력층 사이에 여러 개의 은닉층이 있는 인공 신경망을

   심층 신경망이라고 합니다. 이 심층 신경망을 학습하기 위해 고안된 알고리즘들을 딥러닝이라 부릅니다.

 

 

 

 : 체인 규칙 순서를 결정하기 위한 종속성 그래프

 

 

 : 한 레이어 더 뒤로 이동

   미분 값을 계속 곱하기 때문에 1보다 작으면 문제가 될 수 있습니다.

 

 

- Vanishing gradient (기울기 소멸)

 : Sigmoid, tahn 과 같은 function을 activation으로 사용하였을 경우 기울이 값이 0에 가까워지는 문제가 발생합니다.

   주로 예전에 나온 함수들에서 발생하는 문제입니다.

 

 

 

- ReLU

 : 양수 영역에서 ReLU는 미분 값이 0으로 되지 않아 심층 네트워크에서 gradient가 사라지는 것을 방지합니다.

   음수 영역에서 ReLU는 0 값으로 해당 unit을 없애버리지만  이는 문제가되지 않습니다.

   DNN (Deep Neural Network)에서 가장 많이 사용합니다.

 

 

 

- 인공 신경망의 Training (훈련 과정)

 

 

* Convergence in NN (근사)

 : 도달하고 싶은 곳은 global cost minimum이지만, local cost minimun에서 멈춰버리는 문제가 발생할 수 있습니다.

   이를 방지하기 위해 Initialization, SGD를 변형한 Parameter update(ex.확률적 경사 하강법, 운동량)  등의 방법을 사용합니다.

 

 

 

* Batch normalization

 : 기본적으로 정규화를 하는 이유는 학습을 더 빨리 하기 위해서 혹은 local optimum 문제에 빠지는 가능성을

   줄이기 위해서 사용합니다.

  

   입력층의 입력 데이터는 쉽게 normalization 할 수 있지만,

   입력층을 지나서 만나게 되는 layer 들의 입력은 normalization 하기 쉽지 않습니다.

   Batch normalization 은 이런 문제를 해결하기 위한 알고리즘입니다.

 

   layer input 의 distribution 은 학습 중 이전 layer 의 변화에 의해 매번 달라집니다.

   이를 막기 위해 각 층의 출력물을 다음 층에 입력하기 전에 평균 0, 표준편차 1 로 normalize 할 수 있지만 이렇게 단순하게

   normalize 할 경우 문제가 생깁니다.

   입력이 N(0, 1) 로 normalize 될 경우 activation function 의 비선형성이 없어질 수도 있습니다.

 

   배치 정규화는 각 층의 활성화 함수의 출력값 분포가 골고루 분포되도록 '강제'하는 방법으로, 

   각 층에서의 활성화 함수 출력값이 정규분포(normal distribution)를 이루도록 하는 방법입니다.

   학습을 할 경우 training data를 mini-batches로 나눈 후 mini-batches 당 얻은 계산 값을 정규화를

   한번 더 진행했을 때 좋은 결과가 있었습니다.

 

   - Splits the traning dataset into small mini-baches that are used to calculate model error and update model conefficients.

   - Normalization transform distribution into standard Normal

   - Bach norm. normalizes each layer's activations according to the statistics of the batch

 

 

- Dropout

  : 전체 weight를 계산에 참여시키는 것이 아니라 layer에 포함된 weight 중에서 일부만 참여시킵니다

    즉, 학습 시 뉴런을 임의로 삭제하여 학습하는 방법으로 훈련 시에는 임의의 비율(dropout ratio) 만큼 뉴런을 삭제합니다.

    삭제된 뉴런의 값은 순전파/역전파하지 않습니다.

    시험 시에는 모든 뉴런의 값을 흘립니다.

    삭제된 뉴런의 값을 곱해서 값을 흘려야 하나 많은 딥러닝 프레임워크에선 비율을 곱하지 않습니다.

 

 

 

 

 아주대학교 정보통신대학원 손경아 교수님의 기계학습 및 데이터 마이닝 강의를 바탕으로 작성하였습니다.

 학습 목적으로 포스팅 합니다.

'Machine Learning' 카테고리의 다른 글

Recurrent Neural Network  (0) 2020.10.17
Convolution Neural Network  (0) 2020.10.14
Neural network: perceptron  (0) 2020.10.01
Logistic regression  (0) 2020.09.29
Model selection  (1) 2020.09.29