부스트 캠프 ai tech 4주 1일차 DL Basic (4)


AlexNet

  • CNN으로 구성된 Network
  • 시작부분에 11 x 11의 큰 convolution Layer를 사용했다

VGGNet

  • 여러장의 3 x 3의 convolution Layer와 2 x 2 MaxPooling을 사용하였다
  • 여러장의 3 x 3의 convolution Layer를 사용하면서 다음과 같은 advantage를 얻었다
    • 큰 convolution Layer와 동일한 연산을 더 작은 Parameter로 수행할 수 있다
    • receptive field를 크게 유지할 수 있다
    • 더 깊게 비선형적으로 Layer 추가가 가능해 진다

GoogLeNet

  • 1 x 1, 3 x 3, 5 x 5, maxpooling을 이용하여 inception module을 구성하였다
  • 1 x 1 convolution Layer를 이용해서 Channel 수를 줄여주었다
  • Layer가 깊어지면서 Gradient Vanashing이 일어나는것을 막기위해 Auxiliary classifier를 두어서 추가적으로 Gradient를 더해주었다
    • inference시에는 사용되지 않는다

ResNet

  • Skip Conncetion을 두어 Gradient Vanashing을 해결하여 더 많게 레이어를 쌓은 모델이다
  • VGGnet의 3x3을 차용하여 파라미터 수를 크게 늘리지 않으면서 레이어를 더 쌓았다
  • channel이 변하는 구간에서는 DownSampling을 통하여 channel과 Height, weight를 맞춰주었다

reference

부스트 캠프 ai tech 4주 2일차 DL Basic (3)


Convolution Neural Network (CNN)

  • 시각적 데이터르 분석하는데 사용되는 인공신경망
  • CNN은 크게 Convolution Layer, Pooling Layer, (Fully Cunnect Layer)로 구성된다

Convolution layer

  • 합성곱 연산이 진행되는 레이어
  • parameter의 수는 $kernel_size \times Channel_in \times Channel_out$으로 계산된다
  • 이미지 처리를 할 시에 Fully Connected Layer보다 parameter 수가 월등하게 적다
  • 실제 연산 이미지
  • input과 output의 크기는 아래와 같이 계산된다
  • input : $(N, C_{in}, H_{in}, W_{in})$
  • output : $(N, C_{out}, H_{out}, W_{out})$
  • stride : 연산이 이루어지는 간격
  • padding : 차원을 확장시켜 convolution 연산후에도 크기가 일정하게 유지되도록 한다
  • kernel : convolution 연산을 하는 주체, filter이기도 하다
  • N : batch size
  • C : Channel 수
  • W : 연산될 Matrix의 가로 길이
  • H : 연산될 Matrix의 세로 길이

Pooling Layer

  • 일정 범위안의 값들을 대표하는 하나의 값으로 압축하는 down sampling 기법
  • W와 H을 줄여서 차원을 축소하고, 연산에 필요한 parameter 수를 줄인다.
Max Pooling

1x1 Convolution

  • kernel size가 1,1인 convolution 연산을 하는것
  • input, output의 W, H는 일정하지만 channel수가 감소한다.
  • WHY?
    • channel 수를 줄여서 차원축소를 시키고, 추후에 연산에 필요한 parameter 수를 줄인다

$$
H_{out} = \left[ \frac{H_{in} + 2 \times \operatorname{padding[0]} - \operatorname{kernel_size[0]}}{\operatorname{stride}[0]} +1 \right]
$$

$$
W_{out} = \left[ \frac{W_{in} + 2 \times \operatorname{padding[1]} - \operatorname{kernel_size[1]}}{\operatorname{stride}[1]} +1 \right]
$$

reference

부스트 캠프 ai tech 4주 1일차 DL Basic (2)


들어가기 전에

Generalization

  • 이 모델이 얼마나 일반적인지를 나타내는 지표
  • 보통 train loss와 test loss간의 차이를 말한다
  • Generalization Gap이 작을수록 일반적인 모델이라고 한다

Overfitting & Underfitting

  • Overfitting
    • 과적합. 학습데이터에 대해서는 잘 예측하지만, test데이터에 대해서는 잘 예측하지 못하는 형태.
  • Underfitting
    • 학습데이터와 test데이터 둘 다 제대로 예측하지 못하는 형태.

Cross Vaildation

  • Cross vaildation
    • train Data를 균등하게 나눠서 학습을 시켜 최적의 hyperparameter를 찾는 방법

Bias & Variance

  • Bias
    • 편향
  • Variance
    • 분산

Boostrapping 기법

  • Bootstrapping
    • 통계학적으로 resampling을 통해 표본들의 추정치를 예측하는 기법
    • train dataset을 다시 sampling을 해서 만든 여러가지 data로 모델들을 학습시키는것을 Bootstrapping이라고 한다
  • Bagging
    • Bootstrapping aggregating
    • 여러 모델들을 bootstrapping을 통하여 학습시키고, 그 나온 결과값의 평균을 내는 방법
    • 일반적으로 Ensemble 이라고 부른다
  • Boosting
    • 여러개의 모델들을 학습시켜서 Sequential하게 이어 예측하는 방법
Bootstrapping

Gradient Descent Methods

  • (Stochastic) gradient descent
    • 하나의 데이터 샘플로 Gradient를 업데이트 하는 방식
  • Minibatch Gradient Descent
    • 일부의 데이터 샘플로 Gradient를 업데이트 하는 방식
  • Batch Gradient Descent
    • 전체의 데이터로 Gradient를 업데이트 하는 방식
  • 데이터의 전체 크기가 커진 현재로써 Batch Gradient는 하드웨어 한계와 연산속도가 Minibatch에 비해 느려서 현재는 대부분 Minibatch 형식으로 학습을 진행한다

Batch Size

  • large batch -> sharp Minimum
  • small batch -> Flat minimun
Batch Size

Optimization

  1. (Stochastic) Gradient descent
    • 일반적인(확률적) 경사하강법
    • $\gamma$ : learning rate
    • $W$ : weight
    • $g$ : gradient
      $$
      W_{t+1} \leftarrow W_{t} - \gamma g_{t}
      $$
  2. Momentum
    • 경사하강법에 관성을 부여한 방법
    • 전에 이동한 정보를 조금 더해서 Gradient를 업데이트 하는 방법
      $$
      \begin{aligned}
      a_{t+1} &\leftarrow \beta a_{t} + g_{t}\\
      W_{t+1} &\leftarrow W_{t} - \gamma a_{t+1}
      \end{aligned}
      $$
  3. Nesterov Accelerate Gradient
    • Momentum과 비슷하지만 순서가 다르다
    • $a$ 방향으로 이동 한 뒤 위치에서 gradient를 계산 후 업데이트한다
    • Momentum 보다 minimum에 수렴하는 속도가 빠르다
      $$
      \begin{aligned}
      a_{t+1} &\leftarrow \beta a_{t} + \nabla\mathcal{L} (W_{t} - \gamma g_{t})\\
      W_{t+1} &\leftarrow W_{t} - \gamma a_{t+1}
      \end{aligned}
      $$
  4. Adagrad
    • parameter의 변한 값에 대해서 영향을 받는다
    • $G_{t}$ : gradient 제곱합
    • 적게 변한 parameter는 크게, 크게변한 parameter는 작게 변환한다
    • $G_{t}$ 가 계속 커지기 때문에 학습이 길어지면 잘 학습되지 않는다
    • $G_{t}$ 또한 계속 저장해야하기 때문에 학습이 길어지면 resource 소모가 크다
      $$
      W_{t+1} \leftarrow W_{t} - \frac{\gamma}{\sqrt{G_{t}+\epsilon}} g_{t}
      $$
  5. Adadelta
    • Adagrad에서 $G_{t}$ 가 무한하게 커지는것을 방지한 학습법
    • Weight에 관여하는 Learning rate가 존재하지 않는다
      • hyperparameter가 적어서 잘 사용되지 않았다
    • $G_{t}$ : EMA of gradient squares
    • $H_{t}$ : EMA of difference squares
    • EMA : Exponential Moving Average 지수이동평균
    • $\alpha$ : ema 가중치

$$
\begin{aligned}
G_{t+1} &\leftarrow \alpha G_{t} + (1-\alpha) g^{2}_{t}\\
W_{t+1} &\leftarrow W_{t} - \frac{\sqrt{H_{t-1}+\epsilon}}{\sqrt{G_{t}+\epsilon}} g_{t}\\
H_{t+1} &\leftarrow \alpha H_{t} + (1-\alpha)(\Delta W_{t})^2
\end{aligned}
$$

  1. RMSprop
    • EMA of gradient squares + Learning rate
    • 해봤는데 잘되었다

$$
\begin{aligned}
G_{t+1} &\leftarrow \alpha G_{t} + (1-\alpha) g^{2}_{t}\\
W_{t+1} &\leftarrow W_{t} - \frac{\gamma}{\sqrt{G_{t}+\epsilon}} g_{t}
\end{aligned}
$$

  1. Adam
    • RMSprop + Momentum
    • 현재 가장 많이 쓰이고있는 계열의 optimizer
    • AdamW, RAdam, AdamL등 여러가지 variation이 존재한다

$$
\begin{aligned}
m_{t+1} &\leftarrow \beta_{1} m_{t} + (1-\beta_{1}) g_{t}\\
v_{t+1} &\leftarrow \beta_{2} m_{t} + (1-\beta_{2}) v_{t}\\
W_{t+1} &\leftarrow W_{t} - \frac{\gamma}{\sqrt{v_{t}+\epsilon}}\frac{\sqrt{1-\beta^{t}_{2}}}{1-\beta_{1}^{t}} g_{t}
\end{aligned}
$$


Regularzation

  • 일반화가 잘 되도록 데이터나 parameter에 규제를 하는 방법
  1. Earlystopping
    • overfitting을 방지하기 위해서 중간에 학습을 멈추는것
    • 모델을 평가하기 위한 vaildation Dataset이 필요하다
  2. Parameter norm penalty
    • 파라미터가 일정이상 커지는것을 방지하는 기법
  3. Data augmentation
    • 데이터 수를 늘리기 위해 하는 기법
    • 데이터에 종류에 따라 augmentation을 잘 선택해서 반영해야한다
  4. Noise robustness
    • 입력 데이터나, weight에 noise를 추가하는 기법
  5. Label smoothing
    • 데이터의 경계를 흐리게 하여 강건성을 높이는 방법
    • Mix-up
      • 두 사진을 섞어서 섞은 비율만큼 다시 라벨링 하는 방법
    • Cutout
      • 일부분을 잘라서 제거하는 방법
    • CutMix
      • 일부분을 자른뒤 다른 label을 추가하는 방법
  6. Dropout
    • 랜덤하게 일부 Neural을 비활성화 하는 방법
  7. Batch normalization
    • 따로 포스팅 예정

reference

부스트 캠프 ai tech 4주 1일차 DL Basic (1)


Linear Neural Networks

  • Data $(x_{i}, y_{i})^{N}_{i=1}$ 가 존재 할 때 $x$에 대해서 $\hat{y}$ 연산하는 선형연산함수
  • $\hat{y}=Wx + b$
  • $x$ : 데이터, $y$ : 라벨
  • 경사하강법으로 y에 가까운 값을 계산하는 $W$와 $b$를 찾는다

Multi Layer Perceptron(MLP)

  • 위의 Neural Network가 여러층에 걸쳐서 쌓여있는 형태
  • Layer 사이에 Non Linear transform을 한다
    • 선형연산을 2번연속으로 하는것은 연산을 한번 하는 것과 똑같다
    • $W_{1}W_{2}x = W_{1,2}x$
  • NonLinear transform의 역활을 해주는것이 Activation Functions이다
  • 최근에는 대부분 ReLU 계열의 Activation Function이 쓰인다
  • 자주 쓰이는 Activation functions
  • Target $y$와 출력물 $\hat{y}$의 차이를 계산하는 loss function을 문제에 따라 잘 선택하여 사용하는 테크닉 또한 필요하다

그 외 내용

  • 이론적으로 1개의 hidden layer로 대부분의 원하는 target값의 근사할 수 있다
    • 라고 하지만 이것은 매우 어렵다
    • 그만큼 Neural Network의 표현력이 좋다라는 뜻으로 받아드리는게 더 좋다.

reference

Activation Function


활성화 함수 Activation Function

  • 실수범위에서 정의된 비선형 함수
  • 딥러닝을 비선형 모델로 만들어주는 결정적인 함수이다

1. softmax

  • 분류 모델에서 많이 사용하는 함수
  • 출력값은 항상 0~1사이로 정규화된다
    • 보통 활성화 함수로는 사용되지 않고 마지막 단계에서 출력을 정규화할때 사용한다.
      $$
      f(x)_{k} = \frac{e^{x_i}}{\sum_{k=1}^{n}e^{x_{k}}}
      $$

2. sigmoid

  • 출력값을 0~1 사이로 변경한다
  • 위의 softmax 함수의 원형
  • 함수의 단점
    • 중심이 0이 아니기 때문에 모든차원이 같은방향으로 이동한다
    • 값이 커질수록 기울기 값이 감소한다
      $$
      \sigma(x) = \frac{1}{1+e^{-x}}
      $$

3. Tanh

  • sigmoid함수의 개량형
  • 중심을 0으로 맞춰서 sigmoid 함수의 단점을 줄였다.
  • 하지만 여전히 기울기 값의 감소에 따른 Gradient vanishing 문제가 존재한다

$$
tanh = 2\times \sigma(2x) -1
$$

4. ReLU

  • 0보다 크면 그대로 넘기고 작으면 0으로 만드는 매우 간단한 함수
  • sigmoid 계열에 비해 연산속도가 매우 빠르다
  • 큰값이 와도 기울기 값이 유지되기 때문에 gradient vanishing이 해소되었다.
  • 단점
    • 큰 값이 연속될 수 있는RNN 계열에서는 Gradient exploring이 발생한다.
    • 0 이하의 값이 무시되기 때문에 음수값만 존재하면 weight가 죽어버리는 Dying ReLU현상이 일어난다

$$
\operatorname{ReLU} = max(0, x)
$$

5. Leaky ReLU

  • Dying ReLU 현상을 해결하기위해 고안된 활성화 함수
  • 0보다 작은값에는 $\alpha$값을 곱한다
  • GAN 계열의 Generator에서 많이 사용된다
  • 단점
    • 여전한 Gradient exploring

$$
\operatorname{Leaky ReLU} = max(\alpha x, x)
$$