반응형

 

 

one to many : Image Captioning

many to one : sentiment classification

many to many : machine translation

 

 

# RNN(Recurrent Neural Network)


1) Vanilla RNN

ht를 구할 때, ht-1가 영향을 준다는 것이 핵심이다.

* 왜 tanh 쓰는지?

 

 

2) Computational Graph

 

BACK PROP에서는 각각의 w를 sum함.

 

* Many to Many

Loss도 다르게 할 수 있음

 

 

 

 

* One to many

 

 

* seq to seq : many to one + one to many

 

 

 

# Example : Character-level Language model


many to many

* softmax 는 숫자 벡터를 확률 벡터로 만들어주는 함수

- sigmoid : binary-classification에서 사용 -> 총합이 1 아님 -> 값이 큰 출력값이 그 클래스에 해당할 가능성이 높음
- softmax : multi-classification에서 사용 -> 총합이 1 -> 클래스별 기여도 측정

[출처] Softmax vs Sigmoid|작성자 JINSOL KIM

 

 

# Truncated Back Prop

모든 데이터를 한번에 back prop하기 어렵기 때문에

sub sequence씩 back prop 하는 trick.

 

 

 

 

 

 

# Image Captioning

CNN + RNN

 

 

 

# Visual Question Answering

 

 

 

# Vanilla RNN Gradient Flow


ht = tanh(Whh * ht-1 + Wxh * xt)

* make it sequence

h0의 gradient는 W의 여러 요소들을 포함한다.

1) Exploding gradient problem : Largest singular value > 1

-> Gradient clipping

 

2) Vanishing gradient problem

-> change RNN architecture -> LSTM

 

 

# LSTM


4개의 게이트 이용한다.

input gate : 얼마나 input하고 싶은지 -> sigmoid(0~1)

forget gate : 얼마나 잊고 싶은지 -> sigmoid(0~1)

output gate : 얼마나 표현(output)하고 싶은지 -> sigmoid(0~1)

gate gate(?) : input cell에 얼마나 쓰고 싶은지 -> tanh(-1~1)

-> 4가지 게이트는 각각 다른 non linearity를 사용한다.

 

 

* LSTM 자세히 보기

 

 

** Backpropagation

에서 W를 사용하지 않고 Cell state 만 가지고 한다. -> computational efficiency

+ tanh 계산을 하지 않아도 된다.

+ forward시에 cell state 계산할 때 W도 관여를 했으므로 back prop 시에도 W가 고려가 된다.

 

 

반응형
반응형

 

 

# 오늘 배울 내용

- CPU vs GPU

- Deep Learning Frameworks 

 

# CPU vs GPU


GPU : rendering, video game을 위해서 제작된 것

 

 

 

 

 

 

 

 

반응형
반응형

 

 

# 이전 강의 복습


sigmoid는 vanishing gradient라는 문제점이 있었다.

ReLU를 대부분 선택하는데, 잘 작동하기 때문이다.

 

 

 

weight 초기화


초기 weight가 너무 작으면 activation이 0으로 되고 gradient도 0가 되고 학습이 진행되지 않는다.

초기 weight가 너무 크면 activation이 saturate(뭐라고 해석해야하지)되고 gradient도 0이 되고 학습이 진행되지 않는다.

초기 weight를 적당하게 하려면 Xavier나 MSRA 초기화를 활용할 수 있다.

 

 

 

Data preprocessing


normalization(정규화 -> 데이터를 0에서 1 사이로)를 해준다.

정규화를 하지 않으면 loss가 가중치의 변화에 너무 민감하게 반응한다.

반면, 정규화를 해주면 데이터가 0에서 1 사이로 정규화되기 때문에 가중치에 덜 민감하게 loss가 반응하게 되어 학습에 용이하다.

 

 

Batch Normalization


중간의 activation들의 평균이 0이 되고, 분산이 1이다.

이거 해석...좀....

 

 

Babysitting Learning


Learning Rate에 따라서 달라지는 1) loss 그래프,

training set에 과적합되어 있어 보이는 3) Accuracy 그래프 -> Regularization(weight에 패널티 부여)이 필요해 보인다.

 

 

하이퍼파라미터 찾기


1) Grid Layout

2) Random Layout -> 이론적으로 이게 더 나음

 

 

 

# 오늘 배울 내용


- optimization

- Regularization

- Transfer Learning

 

 

# Optimization


그림의 x축은 가중치1, y축은 가중치2이다.

loss function을 가장 줄여주는 빨간색 부분을 찾아가는 것이 optimization이다.

아래 코드는 SGD를 표현한 것이다.

gradient를 loss function, data, weight를 가지고 판정한 다음, step size(=Learning Rate)와 곱하여 

기존의 weight에서 빼준다. (loss이기 때문에)

 

SGD의 문제점


- 만약, loss 변화가 한 방향에서만 빠르고 나머지에서는 느리다면? gradient descent는 어떻게 될 것인가?

얕은 차원에서는 매우 느리고, 가파른 차원에서는 ??

- local minima or saddle point 문제

: 중간에 멈춰버린다. 

* 고차원 문제로 가면 saddle point가 거의 대부분의 지점에서 일어나므로 사실상 의미가 없다.

- 모든 데이터를 사용하는 것이 아니라, 미니 배치로 일부를 가지고 하는 것이기 때문에 진짜 정보를 활용하지 못한다. 노이즈를 갖게 된다.

 

 

# 해결책 : Momentum


* rho는 일반적으로 0.9나 0.99이다.

velocity(vx)를 gradient의 평균으로서 계속해서 빌드업한다. <- 핵심

velocity에는 이전 gradient들이 축적되어 있으므로 gradient가 매우 작은 부분이더라도 velocity가 있으므로 멈추지 않는다.

1) local minima나 saddle point에서 멈추지 않고 계속해서 나아갈 수 있는 힘이 생긴다.

2) 또한, gradient 추정치가 평균되어 노이즈가 적어지는 장점이 있다.

 

 

# Nesterov Momentum

*convex optimization에서는 좋은 이론적 특징을 가지고 있지만, non-convex 문제에서는 쓸모가 없어진다.

 

* https://wikidocs.net/17206

 

 

 

 

 

# Adagrad


* 계속해서 학습이 진행되면?

grad_sqaured가 엄청 켜져서 x 는 거의 사라진다.

 

 

# RMSProp


Adagrad 문제를 좀 더 늦춘다.

SGD+Momentum보다 RMSProp이 더 느리지만, 정확하게 간다. SGD+Momentum은 도착해서 휘어지는것을 볼 수 있다.

 

 

# Adam(제일 많이 씀)


Momentum + RMSProp

Adam이 좀 더 휜다.

 

 

 

# decay Learning rate


처음에는 decay 없이 하고, decay 어떻게 넣을지 보기

 

 

 

# BFGS


- First-order optimization

 

- Second-order optimization

-> Learning rate가 없다는 장점있다.

하지만, non-convex 문제에서는 잘 작동하지 않으므로, 잘 쓰지 않는다.

 

 

So, Adam을 디폴트로 쓰고, 풀배치로 돌릴 수 있다면 L-BFGS를 사용할 것.

 

 

# 추가적인 tips

- ensemble

- regularization : Dropout, Batch normalization, Data augmentation, fraction max pooling

 

# Dropout

랜덤하게 뉴런을 0으로 지정하여 삭제한다.  -> 피쳐들간의 co-adaptation을 막아준다. overfitting 막아준다.

fully connected layer나 convolutional layer에서 많이 사용한다.

 

Dropout : Test time -> 결과가 일관되지 않으므로 성능이 좋지 않음.

 

# General Dropout

 

# Trick -> Inverted dropout

GPU가 좀 더 쉽게 학습할 수 있게 하도록.

 

* batch normalization도 비슷한 작용을 하기 때문에 Dropout과 Batch normalization을 동시에 사용할 필요가 없을 때가 있다.

하지만, Dropout은 batch normalization와 다르게 p값으로 normalization 정도를 조정할 수 있다는 장점이 있다.

 

 

 

# Data Augmentation

데이터를 다양하게 시도해볼 수있도록 해준다. train/test에 모두 해줄 수 있다. 

 

# Fractional max pooling

랜덤으로 맥스 풀링 적용

 

 

# Transfer Learning 


 

 

 

 

 

 

반응형
반응형

 

이전 복습


 

 

 

오늘 배울 것


1) 셋업

: activation functions, preprocessing, weight initialization, regularization, gradient checking

2) training dynamics

: baby sitting learning process, parameter updates, hyperparameter optimization

3) evaluation

: model ensembles

 

 

Activation Functions


 

 

* sigmoid

- output을 [0. 1] 내로 귀결시킨다.

[ 문제점 ]

- x가 너무 작거나 너무 크면(saturated) gradient 사라지는 문제발생

- sigmoid output이 zero-centered가 아니다.

- exp() 계산 시간이 소요된다.

 

* tanh(x)

[ 해결된 것 ]

- zero-centered임 

[ 문제점 ]

- x가 너무 작거나 너무 크면(saturated) gradient 사라지는 문제발생

 

* ReLU

[ 해결된 것 ]

- does not saturate

- 계산 효율적

- converge 하기에 더 빠름

- 생물학적으로 더 그럴듯하다.

- > AlexNet에서 사용

 

[ 문제점 ]

- not zero-centered

- 음수에서는 zero-gradient

 

 

dead-ReLU :

because of bad initialization, too high learning rate, 

 

* Leaky ReLU

[ 해결된 것 ]

- does not saturate

- 계산 효율적

- converge 하기에 더 빠름

- 생물학적으로 더 그럴듯하다.

- 음수에서도 gradient가 죽지 않는다.

 

* ELU

- 모든 ReLU의 장점

- exp() 계산 시간이 소요된다.

 

* tip

 

 

Data preprocessing


1) preprocess the data

normalize -> zero-centering, PCA, whitening

 

In practice) subtract the mean image

 

 

 

Weight Initialization


모든뉴런에서 동일한 gradient 가짐

1) small random numbers

-> small network에서는 괜찮지만, deep network에서는 not work well

all activations become zero!

 

 

 

Batch Normalization


input의 각각의 dimension을 가우시안 분포로 만드는 작업

fully-connected layer나 convolution layer 뒤에 붙인다.

nonlinearity 앞에 붙인다.

 

 

 

Babysitting the Learning Processing


1) data preprocessing

2) choose the architecture

tuning learning rate

cross-validation strategy

lr 너무 커서, reg 많이 안들어가서?

 

hyperparameter 조정 : 네트워크, Learning rate, ..

loss curve 보기

 

weight가 너무 큰지 확인

 

 

 

반응형
반응형

 

bit of history


 

 

Hierarchical orgnization

Simple Cells, Complex Cells, Hyper Complex Cells

 

Neorecognition[1980]

sandwich algorithm

 

 

 

 

 

 

Fully Connected Layer


 

 

 

Convolution layer


key : conserve spatial structure

* activation map의 개수 = filter 개수

 

 

ConvNet : sequence of Convolution layer


 

 

 

filter 과정


stride 1
stride 2

if stride 3? doesn't fit! we don't do convolution

output size formula?

ex) (7-3) / 1 + 1 = 5

(7-3)/2 + 1 = 3

 

 

Q. 가장자리가 적게 반영되는 문제는 어떻게 해결? + input size 유지 효과

zero pad를 Border에 넣기 !

N = 9, F = 3, output size = (9-3)/1 + 1 = 7

+ 제로 패딩 안넣으면 깊은 모델일수록 이미지 사이즈가 줄어든다.

+ 제로 패딩 개수 = (F-1)/2 

F는 filter size

 

 

Example Time

(32 + 2*2 - 5) / 1 + 1 = 32

-> 32 * 32 * 10

 

5 * 5 * 3 + 1 = 76 (+1 for bias)

-> 76 * 10 = 760

 

 

filter 수만큼 h 결정

 

 

Pooling Layer


representations를 더 작게 만들어서 관리하기 쉽게 하기 위함

activation map과 별개로 진행

 

 

1) MAX pooling

여기에도 필터존재

풀링 레이어에서는 제로 패딩 잘 쓰지 않음

 

반응형
반응형

 

복습


 

 

 

Gradient Descent


 

 

Computational Graphs


 

backpropagation


거꾸로 미분하면서 간다

computational graph를 따라서 gradients를 계산하면서 chain rule을 적용하는 반복적인 과정(input,parameters,intermediates)

 

 

local gradient를 사용하여 계산 진행 

 

 

Another example of backprop


1) df/d(variable) 를 구함 -> f 어떤거?

2) local gradient와 upstream gradient를 사용하여 계산

 

 

 

sigmoid function


grouping nodes -> activation

 

 

patterns in backward flow


??

 

 

Vectorized operations


 

-> 너무 크니까 mini-batch로 뽑아서 할것임

-> 어떤 input이 어떤 output에 영향을 주는지? diagonal matrix(대각행렬), element-wise

gradient값은 output에 얼마나 영향을 주는지를 나타냄

 

 

 

 

 

 

 

 

 

Neural Network


h 는 함수와 같은 것

 

 

 

 

반응형

+ Recent posts