자연어처리(NLP) 24일차 (DNN 정리)

정민수
6 min readJul 19, 2019

--

2019.07.19

출처 : https://www.edwith.org/boostcourse-dl-tensorflow/lecture/42993/

핵심키워드

  • Relu Activation Function
  • Weight initialization
  • DropOut
  • Batch Normalization

Relu Activation Function

기존 Backpropagation 연산에서 미분 값을 곱해나가다보니, Activation Function이 Softmax 라면, 함수의 양 끝의 미분 값이 0에 수렴하므로 미분의 곱이 0으로 수렴하는 Vanishing Gradient 문제가 발생한다. 따라서 이를 방지하게 위해 Relu를 Softmax를 대신하는 Activation Function으로 사용했다.

Relu 함수는 tf.keras.activations의 sigmoid, tanh, relu, elu, selu에서 확인.

activation function으로 사용할 때는 tf.keras.layers의 leaky relu를 콜하여 사용.

기존 Load mnist 코드에서 달라진 점을 확인하자면.

relu function을 정의하고,

model을 class로 정의 시

모델을 생성하는 데 있어서 relu를 콜하여 layer를 쌓아주면 된다.

Weight initialization

(1) Xavier Initialization

기존 코드의 Weight Initialization을 random으로 주었지만, 사실 weight를 초기화하는 좋은 알고리즘이 있다. Xavier Initialization은 평균은 0, 분산은 input으로 입력되는 Channel의 갯수와 Output으로 들어가는 Channel의 갯수를 더한 것을 2에 나눠주는 값을 취한다.

Xavier Initialization Variance

(2) He Initialization

He Initialization은 Xavier Initialization과 같이 평균은 0이고, 다만 분산은 Xavier의 분산의 분자가 2가 아니라 4인 점에서 다르다.

He Initialization Variance

He Initialization은 Relu에서 사용하기 적합하다.

(3) 사용법

model create 단계에서(class로 구현 시) weight_init 에서 Xavier를 쓰고 싶다면 glorot_uniform(), He를 쓰고 싶다면 he_uniform()으로 작성해주면 된다.

Dropout

Dropout은 overfitting을 방지하는 Regularization 기법이다. 모든 뉴런을 활용하여 학습하는 것이 아니라, 일부의 뉴런을 학습에서 제외하는 방법이다. 제외되는 뉴런을 랜덤으로 설정한다. 테스트 시에는 모든 뉴런으로 정답을 맞춘다.

create model에서 제외할 뉴런의 비율을 설정해준다.(0.5, 0.3, … )

테스트 시에는 Dropout의 사용여부를 설정할 수 있다. loss function에서 logits을 설정할 때, training 이라는 파라미터를 True로 설정해주면 테스트 과정에서 dropout을 사용한다라는 의미고, 반대로 False로 설정하면 테스트 과정에서 dropout을 사용하지 않는다라는 의미이다.

Batch Normalization

Input으로 들어온 data의 distribution은 각 layer를 지나면서 정규분포에서 벗어나기 시작한다. 이를 Internel Covariate Shift이라고 한다. data의 distribution이 망가지면 학습이 저해되기 때문에 일정한 distribution으로 만들어주는 기법을 Batch Normalization이라고 한다.

batch normalization 전

x-bar로부터 x-hat을 만들어 layer로 전달하여 distribution을 새로 만들어준다.

batch normalization 후

사용법은 tf.keras.layers.BatchNormalization()을 이용해 함수를 정의해준다.

layer -norm -activation 순서로 적어준다. norm -activation -layer 순서도 많이 사용하지만, 가장 많이 사용하는 layer-norm-activation 순서를 꼭 기억하자.

--

--

정민수
정민수

No responses yet