모두를 위한 딥러닝 강좌 시즌 1 정리 (하) - lec 8 ~ 12

NN(Neural Network)
K(X) = sigmoid(XW₁ + b1)
H(X) = sigmoid(K(X)W₂ + b2)

Back propagation
딥 네트워크에서 나온 결과물에서 나온 error(또는 cost)를 역으로 전파시키면서 weight들에게 그 것을 반영시키는 것.
미분과 chain rule을 이용하여 각 weight가 결과에 미치는 영향(변화량)을 계산하여 그 것만큼 반영시킨다.
(Back propagation)

Geoffrey Hinton's summary of findings up to today
1. Our labeled datasets were thousands of times too small.
2. Our computers were millions of times too slow.
3. We initialized the weights in a stupid way.
4. We used the wrong type of non-linearity. (Activate Functions)

Vanishing gradient (NN winter2 : 1986-2006)
깊은 NN일 경우, back propagation이 진행되면서 점점 초반 부분의 layer들의 영향력이 작아지는 문제. 
sigmoid를 사용할 경우 이 문제가 크게 발생한다. ReLU등의 다른 activation functions을 사용하면서 어느정도 해결할 수 있다.

Activation Functions
종류 : Sigmoid, tanh, ReLU, Leaky ReLU, Maxout, ELU, ...
ReLU (Rectified Linear Unit) = max(H(x), 0)
비교 : https://hunkim.github.io/ml/lec10.pdf 24페이지

Initializing weights wisely
- Not all 0's
- challenging issue
비교 : https://hunkim.github.io/ml/lec10.pdf 52페이지

Restricted Boatman Machine (RBM)
W = [3, 4] 
Forward(Encode) : X x W = Y 
Backward(Decode) : Y x transpose(W) = X` 
X`이 X에 최대한 근접하도록하는 W를 찾는다. 
이것을 각 layer들에 대해서 앞에서 부터 반복적으로 실행한다. (ex, Deep Belief Network)
좀 더 간단한 방법 : Xavier/He initialization (2010/2015)

Dropout
NN에서 학습할 때 임의로 노드들중 일부를 쉬게함으로서 overfitting을 해결하는 방법.

Ensemble
여러 개의 learning model들을 만들어서 학습시켜놓고, combine해서 prediction하는 방법.

Neural Network like a LEGO!
Fast forward, Split & Merge, Recurrent network, ...

(Fast forward)

Convolutional Neural Network(CNN, or ConvNet)
여러 개의 convolutional, relu, pooling layer들을 거친 다음 FC(Fully Connected) 뉴럴 네트워크를 거치는 식이다.

Convolution Layer
여러 개의 filter를 이용해서 여러 개의 activation map들을 만드는 것.
output size = (N-F) / stride + 1

Padding
conv layer를 거칠 때 마다 size가 작아지는 것을 막기 위해 padding을 넣을 수 있다.

Pooling Layer (sampling)
max pooling : sampling 할 때 제일 큰 값을 뽑는 것.

Recurrent Neural Network (RNN)
sequence data를 학습하기에 용이한 구조.
이전의 state가 다음의 state와 output에 영향을 주도록 뉴럴 네트워크가 설계되어 있다.
H(t) = f(H(t-1), x(t))
Language Modeling, Machine Translation 등에 사용된다.
인풋 to 아웃풋에 있어서 one to one, one to many, many to one, many to many 등등 다양한 형태로 구성할 수 있다.
LSTM, GRU과 함께 많이 쓰인다고 한다.

Vanilla RNN
가장 기본적인 RNN.
H(t) = tanh(Whh*H(t-1) + Wxh*x(t))
y(t) = Why*H(t)
weights : Whh, Wxh, Why

(RNN)

댓글