네이버 부스트캠프 학습 정리/3주차

[DL basic] Neural Networks / Optimization

AI쟁이J 2023. 3. 21. 21:31

Neural Networks

뉴런

신경 세포() 또는 신경원()은 신경아교세포와 함께 신경계 신경조직을 이루는 기본 단위이다. 신경계의 모든 작용이 신경세포와 신경세포 간의 상호작용으로 인해 이루어진다. 예를 들어, 우리 몸의 내부와 외부에 자극을 가하게 되면 일련의 과정을 통해 뉴런은 자극을 전달하게 되며, 최종적으로 척수  등의 중추신경계로 도달하게 되며 중추신경계에서 처리한 정보를 다시 우리 으로 전달해 명령을 수행한다.

 

인간의 뇌의 일부분으로 이를 이용한 모델을 뉴럴 네트워크라고 부른다. 하지만 인간의 사고에서 역전파와 같은 개념은 사용하지 않는다. 이미 많은 방식으로 딥러닝 모델은 발전해 왔고, 이제는 단순히 인간의 뇌를 모방한 시스템이라기에는 멀리 왔다.

 

인간의 뇌를 모방했다. 라는 설명보다는

'neural networks are function approximators that stack affine transformations followed by nonlinear transformations' 라는 정의가 더 맞다. 즉 어파인 변환을 사용하는 여러 함수들을 쌓아 비선형 근사를 통해 어떤 값을 뽑아내는 함수의 모음이라는 설명이다.

 

Linear Neural Networks

선형 뉴럴 네트워크에서는 데이터를 사용해 선형 모델을 만들고, MSE를 사용한 loss를 구한다.

이후

\(\omega -\eta\frac{\partial loss}{\partial \omega}\)를 통해 가중치를,

\(b -\eta\frac{\partial loss}{\partial b}\)를 통해 편향(bias)를 업데이트 하며 최적의 값을 구한다.

 

이런 선형 뉴럴 네트워크는 matrix 형식의 데이터에도 적용이 가능하다.

\(y = W^Tx + b\) 형식으로 행렬의 곱을 사용해 값을 구할 수 있다.

하지만 이런 방법으로 계속 층을 깊게 쌓는다고 해도 이는 결국 선형회귀에 불과하다. 따라서 선형식이 아닌 활성화 함수를 사용해 값을 비선형으로 변경하는 것이 필요하다.

 

Activation functions

sigmoid

0에서 1의 값을 가지도록 변환해주는 비선형 함수.

 

Relu

0보다 작은 값은 0으로 변환하며 그보다 큰 값은 x를 따르는 함수

 

Hyperbolic Tangent

-1에서 1사이의 값을 가지게 하는 비선형 함수

 

MLP

Multi-Layer Perceptron

이런 비선형 함수를 거쳐 나온 output을 사용해서 다시 다음 뉴럴 네트워크에 전달해 새로운 가중치, 편향을 통해 계속해서 값을 입력/출력해서 층을 쌓는 것을 다층 신경망 네트워크라고 한다. 이를 사용할 때 loss function으로는

Regression Task

하나의 값을 구하는 회귀 문제에서는

\(MSE = \frac{1}{N}\sum_{i=1}^{N}\sum_{d=1}^{D}(y_{i}^{(d)}-\hat{y}_{i}^{(d)})^2\) 를 통해 실제 값 y_i에서 예측값 yhat_i를 뺀 값의 제곱을 모두 더한 MSE로 loss function을 사용한다.

 

Classification Task

분류 문제에서는

\(CE = -\frac{1}{N}\sum_{i=1}^{N}\sum_{d=1}^{D}y_{i}^{(d)}log \hat{y}_{i}^{(d)}\)를 통한 Cross Entropy를 사용한다.

 

Optimization

최적화의 방법에는 여러가지가 있다.

 

Gradient Descent

\(W_{t+1} = W_t - \eta g_t\)

로 \(\eta\)의 learning rate를 \(g_t\)의 Gradient에 곱해가며 함수의 기울기를 낮은 쪽으로 계속 이동시켜 극값에 이를 때까지 반복하는 방법이다.

loss function을 최소화하기 위해 매개변수를 반복적으로 조정한다.

 

Momentum

Gradient Descent가 Local Minimum에 빠지기 쉬운 점때문에 이를 개선하기 위한 다양한 최적화 방법론이 있다.

그 중 하나인 모멘텀은 이전에 이동했던 방향을 기억하며 이전 기울기의 크기를 고려해 어느정도 추가로 이동시킨다. 따라서 Local Minimum에 빠질 수 있는 상황에서 추가적인 관성을 통해 이를 탈출할 수 있다.

\(\alpha_{t+1} = \beta\alpha_t+g_t\) 

\(W_{t+1}=W_t -\eta\alpha_{t+1}\)

여기서 \(\alpha\) 는 학습률 \(\eta\)를 곱한 learning rate를 적용한 accumulation, 누적값이며 \(\beta\)는 momentum값을 의미한다.

 

Nesterov accelerated gradient(NAG)

momentum과 gradient 값이 더해져 실제값을 만드는 모멘텀과 달리 momentum이 적용된 지점에서 gradient값이 계산된다. 따라서 미리 방향을 예측하고 해당 방향으로 얼마나 미리 이동한 뒤 gradient를 계산하는가에 대한 효과를 얻을 수 있다.

 

 

Adagrad

Adaptive Gradient의 약자로, 적응적 기울기라고 부른다. Feature마다 제각각 다른 중요도와 크기를 고려해 각자 다른 learning rate를 적용하는 관점이다.

\(W_{t+1}=W_t-\frac{\eta}{\sqrt{G_t+\epsilon}}g_t\)

\(G_t\)의 기울기를 누적한 값에 계속해서 학습률에 곱해준다. 이 때, \(G_t\)가 0인 경우 값이 무한대로 발산하지 않기 위해 매우 작은 값 \(\epsilon\)을 더한다.

 

RMSprop

Adagrad에서\(G_t\)의 값이 무한히 커지는 것을 방지하고자 제안된 방법으로, 공식 논문이 아닌 강의에서 '이렇게 써보니 좋더라' 라는 방식으로 퍼진 방법론. 지수 이동평균을 사용한 방법이다.

\(G_t=\gamma G_{t-1}+(1-\gamma)g^2_t\)

\(W_{t+1}=W_t-\frac{\eta}{\sqrt{G_t+\epsilon}}g_t\)

여기서의 \(G_t\)는 Adagrad와 다르게 gradient의 값이 EMA(지수이동평균)으로 더해진다.

 

Adam

Momentum과 RMSprop를 합친듯한 방법의 경사 하강법이다.

\(m_t =\beta_1 m_{t-1}+(1-\beta_1)g_t\)

\(v_t =\beta_2 v_{t-1}+(1-\beta_2)g^2_t\)

\(W_{t+1}=W_t-\frac{\eta}{\sqrt{v_t+\epsilon}}\frac{\sqrt{1-\beta^t_2}}{1-\beta^t_1}m_t\)

여기서의 \(v_t\)는 RMSprop의 지수이동평균으로 더해진  gradient의 값이며, \(m_t\)는 momentum의 값이다.

최근의 모델에선 대부분 Adam을 쓰며 이것을 쓰면 보통 결과가 좋다. 라고 알려져있다.

 

Adadelta

Adadelta는 위의 Adagrad, RMSprop, Momentum등 모든 것을 모두 합친 방법론이다.

\(G_t=\gamma G_{t-1}+(1-\gamma)g^2_t\)

\(W_{t+1}=W_t-\frac{\sqrt{H_{t-1}+\epsilon}}{\sqrt{G_t+\epsilon}}g_t\)

\(H_t=\gamma H_{t-1}+(1-\gamma)(\triangle W_t)^2\)

에서 \(G_t\)는 지수이동평균으로 더한  gradient이며 \(H_t\)는  지수이동평균으로 더한 difference squares로 이 값은 \(W_t\)의 변화량에 대한 정보도 가지고 있기에 Adadelta는 learning rate가 없는 것이 특징이다.

 

Regularization

과적합을 방지하기 위해 train data에 지나치게 학습을 진행하지 않도록 학습을 방해하는 방법이다.

 

Early stopping

학습을 validation error 기준으로 중간에 멈춰 loss가 커지는 순간 그 전에 학습을 중단하는 것

 

Parameter Norm Penalty

일반적으로 부드러운 함수일수록 모델의 일반화가 좋을 것이라는 가정하에 loss function을 부드럽게 만들기 위한 정규화를 하는 것

 

Data Augmentation

학습 성능을 높이기 위해 필수적으로 진행하는 과정으로 

딥러닝에서는 데이터의 수가 가장 중요하다. 데이터가 적은 경우는 전통적인 머신러닝 기법이 압도적으로 성능이 좋지만 데이터가 압도적으로 많아질수록 딥러닝의 성능이 압도적으로 성능이 좋아진다.

따라서 같은 데이터를 랜덤으로 돌리거나, 확대, 자르는 등 여러 방법으로 최대한 데이터를 많게 하는 것.

 

Noise Robutness

가중치에 대해 랜덤한 노이즈를 추가하는 것

 

Label smoothing

두 데이터를 섞어서 mix-up을 통해 학습 성능을 높이는 것.

Dropout

뉴런을 랜덤으로 작동하지 않게 만들어 학습 성능을 높이는 것

 

Batch Normalization

작은 데이터 소규모 단위인 배치를 정규화하는 것. 논란이 있는 논문이라고 함