*강의 영상*: https://www.youtube.com/watch?v=lGbQlr1Ts7w
저번 강의에서 Convolutional 신경망, 아키텍처 구축에 필요한 하드웨어와 소프트웨어에 대해 배웠다. 필수적이지만 기본적인 내용이었기에 블로깅은 스킵했다. Pytorch, Tensorflow 기본 구성요소와 작동방식이 궁금하면 아래 링크를 참고하자.
https://kmiiiaa.tistory.com/29
EECS 498-007 / 598-005 Lecture 9 : Hardware and Software
이번 시간에는 딥러닝에서 쓰이는 하드웨어 - 소프트웨어 순으로 알아볼 것인데, 딥러닝에서의 연산은 CPU와 GPU를 주로 사용한다. 현재 대부분의 GPU는 NVIDIA와 AMD의 GPU가 쓰이고 있으며, 그중에서
kmiiiaa.tistory.com
오늘은 신경망을 효과적으로 Train하기 위해 필요한 여러 요소를 다루고 있다. 주로 신경망의 초기 설정, 훈련 중 고려해야 할 사항들, 훈련 후 모델을 활용하는 방법으로 크게 3 가지 구성으로 이루어져있다.
1. One time setup
2. Train dynamics
3. After training
오늘은 One time setup, 활성화 함수, 데이터처리, weight init, regularization을 다루며, 이 과정에서 필요한 다양한 기법과 그 이유를 알아보자.
활성화 함수(Activation Functions)는 신경망의 각 뉴런이 입력을 받아 출력으로 변환할 때 사용하는 비선형 함수이다. 강의에서 다루는 주요 활성화 함수는 다음과 같다.
Sigmoid: 입력값을 [0, 1] 범위로 압축하는 함수로, 초기 신경망에서 많이 사용되었다. 그러나 기울기 소실 문제와 출력값이 0 중심이 아니라는 단점, 계산 비용이 크다는 문제가 있다.
tanh: 하이퍼볼릭 탄젠트는 Sigmoid와 유사하지만 [-1, 1] 범위로 값을 압축하며 0 중심이어서 일부 개선된 형태이다. 그러나 여전히 기울기 소실 문제가 존재한다.
ReLU (Rectified Linear Unit): 입력이 0 이상이면 그대로 출력하고, 0 미만이면 0을 출력하는 함수이다. 계산이 매우 효율적이며, 훈련이 빠르고 깊은 신경망에서도 잘 작동한다. 그러나 출력값이 0 중심이 아니며, Dead ReLU 문제(모든 입력에 대해 뉴런이 활성화되지 않는 현상)가 발생할 수 있다.
Leaky ReLU: ReLU의 변형으로, 음수 입력에 대해 작은 기울기를 유지하여 Dead ReLU 문제를 완화한다. 아래에 보이는 새로운 하이퍼 파라미터인 alpha를 역전파 때 새롭게 훈련할 수 있는 특성이 있다.
ELU (Exponential Linear Unit) 및 SELU (Scaled Exponential Linear Unit): ReLU의 또 다른 변형으로, 음수 영역에서 지수 함수 형태를 띠며, 계산 비용은 증가하지만 일부 경우 더 나은 성능을 보인다.
CIFAR10 데이터셋을 훈련시킨 정밀도 결과이다. 보면 알겠지만, ReLU의 진화형들은 아주 미세하게 더 정밀할 뿐이다..
강의에서는 ReLU를 기본 활성화 함수로 사용할 것을 권장하며, 특정 상황에서는 다른 활성화 함수를 고려할 수 있다고 언급하고 있다.
데이터 전처리(Data Preprocessing)는 신경망 훈련 전 입력 데이터를 표준화하고 변환하여 모델이 효율적으로 학습할 수 있도록 돕는 과정이다.
이미지 데이터를 평균 이미지로부터 빼거나, 각 채널별로 평균을 빼고 표준 편차로 나누는 방식으로 전처리한다. 이러한 과정은 모델이 데이터에 대해 민감하지 않도록 하고, 훈련의 안정성을 높인다.
이미지 이외의 데이터에서는 주성분 분석(PCA) 및 Whitening을 통해 데이터를 변환할 수 있다. 하지만 image classification에는 많이 사용하지 않는 추세인듯 하다.
다음으로, Weight Initialization는 신경망 훈련의 시작 단계에서 매우 중요한 역할을 한다. 잘못된 init 된 가중치는 모델이 전혀 학습하지 못하게 만들 수 있다.
예를 들어, 다음은 std = 0.01 로 초기값을 지정시킨 구조이다.
처음엔 잘 train 되는듯 하다가 수렴할수록 gradient가 0으로 collapse 하는것을 볼 수 있다.
이를 해결 하기 위해 나온, Xavier Initialization은 입력 차원의 제곱근의 역수를 표준 편차로 사용하는 초기화 방법으로, 신경망의 각 층에서 출력과 입력의 분산을 맞춰준다.
하지만, 위의 Xavier Init 방법은 하이퍼볼릭 탄젠트 활성화 함수를 사용한다. 딥러닝 아키텍처를 구현하려면 ReLU를 사용이 필수적이다.
그렇기 때문에, Kaiming/MSRA Initialization은 ReLU 활성화 함수를 사용하는 경우, Xavier 초기화보다 더 적합한 방법으로, 표준 편차를 sqrt(2/Din)로 설정한다.
또한 Residual Networks에서는 첫 번째 층을 MSRA 방식으로, 두 번째 층을 0으로 초기화하는 방식을 사용한다.
One time setup의 마지막 단계인, 정규화 (Regularization)는 모델의 과적합(overfitting)을 방지하기 위해 사용되는 다양한 기법을 포함한다.
Dropout은 훈련 중 일부 뉴런을 무작위로 제거하여 네트워크가 더욱 견고한 표현을 학습하도록 유도한다. 하지만 이 무작위적 제거로 인해 결국 Everage out 방식으로 합쳤을 때 전체 뉴런의 1/2밖에 남기지 않아, Train time, Test time 둘 중 하나를 두 배로 만들거나, 반 을 삭제 한다. 최근에는 많이 쓰는 방식은 아닌듯 하다.
L2 Regularization: 가중치의 크기를 제한하여 모델이 과적합되는 것을 방지한다.
데이터 증강 (Data Augmentation): 훈련 중 데이터를 무작위로 변환하여 데이터의 다양성을 높이고, 모델이 다양한 상황에 대응할 수 있도록 만든다. 예를 들어, 이미지 회전, 확대, 축소, 색상 왜곡 등이 있다.
또한 전에 배웠던 것처럼, Batch Normalization가 있다. 각 미니 배치 내의 데이터 분포를 정규화하여 훈련 속도를 높이고, 과적합을 줄이는 데 도움을 준다.
이 외에도 Fractional Max Pooling, Stochastic Depth, Cutout, Mixup 등의 다양한 정규화 기법을 소개하며, 현대의 많은 신경망 모델에서는 Batch Normalization과 데이터 증강을 기본적으로 사용한다고 설명하고 있다.
...오늘은 신경망 훈련에 필요한 다양한 설정과 기법들을 다루었다. One time setup의 활성화 함수의 선택, 데이터 전처리 방법, 가중치 초기화, 정규화 기법 등을 알아보았다.
'Computer Vision' 카테고리의 다른 글
[EECS 498-007] lec12. Recurrent Neural Networks (0) | 2024.08.19 |
---|---|
[EECS 498-007] lec11. Training Neural Networks II (0) | 2024.08.17 |
[EECS 498-007] lec8. CNN Architectures (0) | 2024.08.13 |
[EECS 498-007] lec7. Convolutional Networks (0) | 2024.08.12 |
[EECS 498-007] lec6. Backpropagation (0) | 2024.08.08 |