Lecture 6: Training Neural Networks 1

2024. 11. 8. 16:03·Stanford CS231n
반응형

Stanford에서 강의하는 CS231n에 대해서 공부하고 정리한 글입니다.

Slide: cs231n_2017_lecture6.pdf

Activation Functions

 

Activation Function은 여러 종류가 있다. 

 

이번 시간은 다양한 종류의 활성화 함수와 Trade-off 에 대해 다뤄본다.

 

 

Sigmoid 함수는 다음과 같다. Sigmoid는 출력의 범위가 [0, 1] 이며, 역사적으로 많이 사용된 활성화 함수중 하나이다.

 

$$\sigma = 1/(1+e^{(-x)})$$

 

그러나, Sigmoid는 몇가지 문제가 존재한다.

 

1) Saturation 현상이 일어난다.

우리는 Backpropagation을 통해 Gradient를 구해 나갈 수 있다. Sigmoid 의 Gradient는 

 

$$ \frac{dL}{dx} = \frac{d\sigma}{dx}\frac{dL}{d\sigma} $$

 

로 구할 수 있으며 이 때 $\frac{d\sigma}{dx}$ 는 sigmoid gate의 local gradient가 된다.

 

이 때, gate의 입력 값이 -10 미만 또는 10 초과의 극단 적인 값이 된다고 생각해보면 gradient는 0이 된다.

 

또한, Backpropagation 되면서 이러한 값들이 계속 곱해지며 앞으로 갈 수록 gradient가 소실된다.

 

이렇게 그래프의 어떠한 구간에서 기울기가 0에 가까워지는 현상을 Saturated라고 한다.

 

2) Sigmoid 함수는 Zero-Centered 하지 않다.

 

Sigmoid 함수의 출력은 모두 양수 이다.

 

그럼, 다음 뉴런의 입력은 항상 양수 일 것이다.

 

Computational graph를 생각해 보자.

 

$wx + b$ 의 노드에서 w에 대한 local gradient는 x가 되고, 이는 항상 양수 이다.

 

upstream gradient는 항상 양수 값과 곱해질 것이고, w의 gradient는 항상 $\frac{dL}{df}$ 의 부호를 따라갈 것이다.

 

$\frac{dL}{df}$ 의 값과 부호는 모르지만, $\frac{dL}{dw_i}$ 는 전부 $\frac{dL}{df}$ 의 부호를 따라가게 된다.

 

따라서 모든 가중치는 같은 방향으로만 업데이트가 되며 그림에서와 같이 두개의 파라미터가 존재한다고 가정했을 때

 

(+, +) 방향이나 (-, -) 방향으로만 업데이트 된다.

 

이 내용은 이해를 바탕으로 작성한 내용이라 정확하지 않습니다. 틀린 내용이 있을 경우 댓글을 달아주세요 :)

 

3. 지수 함수 계산은 expensive 하다.

Sigmoid는 지수함수 계산이므로 계산 비용이 크다.

 

 

이러한 문제점들을 해결하고자 다른 활성화 함수들이 제시된다.

 

 

탄젠트 하이퍼볼릭 함수는 zero centered는 해결했지만, saturated 문제는 해결되지 않는다.

 

 

ReLU 함수는 (Positive 영역에서)Saturated 문제가 해결되며, 단순히 max 연산이므로 계산 속도가 빠르다.

 

실제의 신경과학적인 실험을 통해서 뉴런을 관찰해보면 뉴런의 입/출력값이 Sigmoid보다 ReLU에 가까운 것을 확인했다고 한다.

 

하지만, Zero-centered 하지 않고, Negative 영역에서 값이 모두 0이기 때문에 문제가 발생한다.

 

Negative 영역에서 ReLU의 출력이 모두 0 이기 때문에, Dead ReLU 문제가 발생한다.

 

Negative 영역에서 출력은 모두 0 이고, local gradient가 0 이기 때문에 gradient가 죽는 문제가 발생한다. 이를 Dead ReLU 문제라고 한다.

 

이를 해결하기 위해 여러 수정된 ReLU 버전이 제안되었다.

 

조금 수정된 leaky ReLU 이다.

 

이는 ReLU와 유사하지만, Negative 영역에서 0이 아니다. 따라서 Negative space에서 saturation 문제를 해결하였다.

 

또한 dead ReLU 현상도 일어나지 않는다.

 

Negative space의 기울기를 파라미터로 설정하는 Parametric Rectifier(PReLU) 방법도 있다.

 

 

다른 예시로는 ELU 라는 것도 있다.

 

ELU는 Negative 영역에서 saturation 되는 문제가 다시 발생한다.

 

하지만, ELU는 이런 saturation 문제가 네트워크를 좀 더 robust하게 만들어 줄 수 있다고 한다.

 

이는, saturation문제로 몇몇의 Dead ReLU 가 발생하는 문제가 Dropout과 유사하게 일반화 성능을 올려주는 역할과 같이 본 것으로 생각한다.

 

 

조금은 생소하지만 Maxout Neuron 이라는 것도 있다.

 

Maxout Neuron은 $w_1x+b_1$과 $w_2+b_2$ 두개의 선형 함수를 취해 최대값을 사용하기 때문에 Saturation 문제가 해결되는 장점이 있. 하지만, 두개의 선형함수를 취하기 때문에 뉴런당 파라미터의 수가 두배가 된다는 단점이 존재한다.

 

Data Preprocessing

 

우리는 Original data를 zero-centered data, normalize data로 변환하는 데이터 전처리를 하곤 한다.

 

이는 왜 필요한 것 일까?

 

activation function 파트에서 zero-centering에 대해 다룬 적 있다.

 

입력이 전부 positive인 경우 혹은 negative, 0이면 backpropagation에서 문제가 발생하게 된다.

 

따라서 이러한 문제들을 해결하고자 데이터 전처리 과정을 진행하곤 한다.

 

Computer Vision 에서는 이미지의 전처리로는 zero-centering 정도만 해준다.

 

이미지는 각 차원(RGB) 간에 스케일이 어느정도 맞춰져 있기 때문이다.

Weight Initialization

네트워크의 초기 가중치 세팅은 중요한 문제이다.

 

아래 예시를 통해 확인해보자.

 

 

Activation function 으로 tanh 함수를 사용한 10-layer network가 있고, 

 

가중치는 "임의의 작은 값"으로 초기화 된 상황을 살펴보자.

 

아래 그래프는 각 레이어의 activation 출력 수치를 통계화 한 그래프이다.

 

첫 번째 레이어의 출력은 가우시안과 유사한 분포를 형성하고 있는 것을 알 수 있다.

 

하지만, forward pass를 진행하며 그 값이 0에 가까운 값으로 형성되는 것을 알 수 있다.

 

이는 tanh 함수가 zero-centered 이면서, 레이어를 지나면서 매우 작은 가중치들이 곱해지기 때문이다.

 

Backpropagation 에서도 문제가 발생한다.

 

가중치를 업데이트 하기 위해선 upstream gradient와 local gradient를 곱해주면 된다.

 

$y=wx$를 생각해보면, w의 local gradient는 $x$이며, 이 때 $x$값은 매우 작은 값 이기 때문에 gradient도 작을 것이다.

 

따라서 가중치 업데이트가 잘 일어나지 않는다.

 

 

가중치가 "임의의 큰 값"인 경우도 생각해보자.

 

거의 모든 뉴런의 출력은 -1 또는 1일 것이다. 이는 saturation에 해당하며, gradient는 0이 될 것이다.

 

이렇게 가중치 초기화는 중요한 문제이다.

 

널리 알려진 방법 중 하나는 Xavier initialization 이다.

 

Xavier initialization에 대한 글은 따로 작성해보도록 하겠습니다.

 

Batch Normalization

우리는 앞서 가중치 초기화 에서, forward pass에서 각 layer의 입/출력 데이터 분포가 계속해서 바뀌는 현상을 확인할 수 있었다.

 

이 문제를 해결하기 위해 BN(Batch Normalization)을 사용한다.

 

BN을 각 layer마다 독립적으로 적용해서 미니 배치들이 표준 정규 분포를 따르도록 강제한다.

 

 

 

BN은 FC, ConV layer 이후, nonlinearity layer 이전에서 사용된다.

 

Weight initialization에서 살펴본 Deep neural network에서 activation function의 입/출력 문제는 BN을 통해서 해결된다.

 

레이어가 깊어지면서 지속적으로 W가 곱해지고, activation function 특성에 따라 다양해지는 뉴런 출력 분포를 BN을 통해서 제어된다.

 

 

또한, normalized된 값들을 원상복구 할 수 있도록 $\gamma$와 $\beta$를 학습시켜 BN을 하기 전 값으로 돌아갈 수도 있다.

 

우리는 BN을 통해 tanh의 입력이 가우시안 분포를 따르게 강제했다. 이는 tanh의 입력이 linear한 영역에만 존재하도록 강제하는 것이며 saturation이 발생하지 않게 한다. 하지만, 강의에 의하면 이를 "전혀" 일어나지 않게 강제하는 것 보다, "얼마나" 일어나는지 우리가 조절 할 수 있는게 더 좋은 방법이라고 한다. 따라서 normalized된 값들을 다시 원상복구 하는 파라미터를 학습한다고 한다.

 

 

Test time에서는 Training time에서의 running averages 같은 방법으로 평균과 분산을 계산하여 그 값을 사용한다.

 

Reference

  •   배치 정규화(Batch Normalization)의 설명과 탐구

 

Learning Process

 

 

 

학습 프로세스는 다음과 같다.

 

데이터를 전처리 하고, 모델 네트워크를 선택하며, loss 함수를 선택한다.

 

이 때, 모든 가중치를 0으로 선택하여 loss가 $-log(\frac{1}{C})$ (C: Number of Class) 이며,

 

약간의 샘플 데이터로 학습을 진행하여 Train Loss가 0을 향해 내려가는지 확인하면 모든 준비가 끝났다.

 

실제로 학습하다보면 다음과 같은 일이 발생할 수 있다.

 

Epoch가 진행됨에 따라 loss는 그대로지만, train/val accuracy는 증가하고 있다.

 

loss는 $-log(\frac{1}{C})$ 이며, train/val accuracy는 $\frac{TP + TN}{TP+TN+FP+FN}$ 이다.

 

간단하게 생각해보면, 우리가 학습시키고 있는 네트워크가 학습이 진행되면서 정답을 정답으로 분류하는 확률이 크게 증가하지 않는 것이다.

 

10개의 Class가 있고, 첫 번째 클래스가 정답이라고 가정해보자.

 

초기에는 [10%, 10%, ... 10%] 의 확률을 내놓았다.

 

학습이 진행되고 네트워크는 [10.5%, 9.8%, ... 9.7%] 의 확률을 내놓았다.

 

정답 클래스의 확률이 올라갔기 때문에 loss는 감소한다. 하지만, 증가한 확률 값이 작기 때문에 감소하는 loss도 작을 것이다.

 

반면에, 10%였던 확률이 10.5%가 되면서 분류기의 성능은 크게 바뀌지 않았지만, 우리의 학습/검증 데이터에 한해서 더 잘 분류할 수 있게 되었다.

 

따라서 Train/Valid Accuracy는 크게 증가할 수 있다.

 

이는, 학습이 올바른 방향으로 되고 있지만 learning rate가 너무 작은 문제라고도 볼 수 있다.

Hyperparameter Optimization

 

학습을 진행하며 loss 그래프를 살펴보면 다음과 같은 유형들이 나온다.

 

노란색 선의 경우, loss가 발산한다. learning rate가 너무 높은 경우다.

 

초록색 선의 경우, loss가 가파르게 내려가다가 정체기가 생긴다. 이 또한 learning rate가 높은 경우이다. learning step이 너무 커서 적절한 local optimum에 도달하지 못한 경우다.

 

파란색 선의 경우, loss가 평평(linear) 하게 감소한다. 이는 learning rate가 낮은 경우이다.

 

빨간색 선의 경우, loss가 비교적 가파르게 내려가면서도 지속적으로 잘 내려간다. 최적의 learning rate이다.

 

 

위 와 같은 그래프 양상을 볼 수도 있는데, 이는 가중치 초기화가 잘못된 경우로 생각해 볼 수 있다.

 

gradient가 초기에는 잘 업데이트 되지 않다가 학습이 진행되면서 회복되는 경우이다.

 

 

또한, Train/Val accuracy간의 gap이 크게 발생한다면, 이는 Overfitting일 가능성이 있다.

 

Gap이 없다면, 아직 overfitting 하지 않은 경우이고, capacity를 높힐 수 있는 여유가 있다.

반응형

'Stanford CS231n' 카테고리의 다른 글

Lecture 9: CNN Architectures  (1) 2024.11.11
Lecture 7: Training Neural Networks 2  (1) 2024.11.08
Lecture 5: Image Classification with CNNS  (0) 2024.11.05
Lecture 4: Backpropagation and Neural Networks  (0) 2024.10.30
Lecture 3: Loss Functions and Optimization  (3) 2024.10.28
'Stanford CS231n' 카테고리의 다른 글
  • Lecture 9: CNN Architectures
  • Lecture 7: Training Neural Networks 2
  • Lecture 5: Image Classification with CNNS
  • Lecture 4: Backpropagation and Neural Networks
hangyuwon
hangyuwon
  • hangyuwon
    191
    hangyuwon
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (38)
      • 기타 (1)
      • Stanford CS231n (19)
      • 논문 리뷰 (5)
      • Error (4)
      • 알고리즘 (2)
      • Linux (1)
      • 잡동사니 (2)
      • 딥러닝 (4)
  • 인기 글

  • 태그

    error
    논문 리뷰
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hangyuwon
Lecture 6: Training Neural Networks 1
상단으로

티스토리툴바