하이퍼파라미터 튜닝이란?(1)

2021. 5. 23. 02:44민공지능/딥러닝 & 머신러닝

네트워크를 구성할 때 사람이 조정해야 하는 파라미터가 존재한다. 이를 하이퍼파라미터라고 한다.

 

하이퍼파라미터 :

- 은닉층 수, 은닉층의 채널 수 → 예 : model.add(Dense(128)) 

- drop out 비율

-  활성화 함수(activation)

- 학습률(learning rate)

- 최적화 함수(optimizer)

- 오차 함수(loss)

- batch_size

- epoch 수 


은닉층 수, 은닉층의 채널 수

 

네트워크 구조(은닉층 수, 은닉층의 유닛 수)는 자유롭게 설정할 수 있다. 수를 많게 하면 다양한 함수를 표현할 수 있지만 입력층에 가까운 가중치를 적절하게 갱신하기 어렵고 학습이 좀처럼 진행되지 않는다. 또, 중요성이 낮은 특징량을 추출해버려 과학습하기 쉬워질 수 있다. 그래서 적절한 네트워크 구조를 설정할 필요가 있다. 이론을 구축해서 정하기 어렵기 때문에 이미 구현된 유사한 예를 참고하는 등 경험에 근거에 결정하는 경향이 있다.


Drop out

 

drop out은 과학습을 방지하여 모델의 정확도를 높이는 방법 중 하나이다. 유닛의 일부가 학습할 때마다 0으로 덮어쓰기 되어 무작위로 제거된다. 따라서 신경망은 특정 뉴런의 존재에 의존할 수 없게 되어 train data외에도 통용되기 쉬운 특징을 학습한다. 드롭아웃을 사용하는 위치, 인수 rate는 모두 하이퍼파라미터다.

 

drop out은 훈련하는 동안에만 활성화되므로 훈련 손실과 검증 손실을 비교하면 오해를 일으키기 쉽다. drop out을 빼고 훈련 손실을 평가해야 한다. 

 


Activation(활성화 함수)

 

주로 전결합층 뒤에 적용하는 함수로, 뉴런의 발화에 해당한다.

활성화 함수를 사용하지 않을 경우 단일 직선으로 분리할 수 없는(선형 분리가 불가능한) 데이터는 분류할 수 없다.

즉, 모델에 비선형성을 갖게 하여 선형 분리 불가능한 데이터에 대응하기 위해 activation을 사용한다.

 

Sigmoid

https://excelsior-cjh.tistory.com/177

- 시그모이드 함수는 반드시 0과 1사이의 구간에 값이 들어가기 때문에 극단적인 출력값이 적다.

- 리턴 값이 확률 값이기 때문에 결과를 확률로 해석할 때 유용하다.

- 만약 입력값이 모두 양수일 경우 파라미터의 모든 부호는 같게 된다. 이럴 경우 gradient descent시 정확한 방향으로 가지 못하고 지그재그로 발산하는 문제가 발생할 수 있다.(= 학습이 느려진다)

- 음수 값을 0에 가깝게 표현하기 때문에 입력 값이 최종 레이어에서 미치는 영향이 적어지는 Vanishing Gradient Problem이 발생한다. 즉, x의 절대값이 커질수록 미분 값이 소실될 가능성이 크다.

 

Tanh

- 출력은 -1에서 1사이 구간으로 제한된다.

- 중심점을 0으로 옮겨 sigmoid가 갖고 있던 최적화 과정에서 느려지는 문제를 해결했다. 

하지만 Vanishing Gradient Problem은 여전히 남아있다.

- RNN, LSTM 등을 학습시킬 때 사용된다.

 

ReLU(Rectified Linear Unit)

가장 많이 사용되는 activation이다.(가장 먼저 사용해보자)

- 렐루(또는 램프)함수는 출력이 어떤 구간에도 수렴되지 않고, 극단적인 출력값이 생성될 가능성이 있다. 

- Vanishing Gradient Problem 해결하기 위한 함수다.

- sigmoid나 tanh와 비교했을 때 SGD의 optimization 속도가 매우 빠르다.

- relu는 미분값이 0 아니면 1이기 때문에 별다른 비용이 들지 않는다.

단점 : 네트워크를 학습시킬 때 뉴런들이 죽는 경우가 발생한다. 입력값이 0보다 작으면 뉴런이 죽어 더 이상 값의 업데이트가 수행되지 않는다.( 한번 0 활성화 값을 다음 레이어에 전달하면 이후의 뉴런들의 출력값이 모두 0이 되는 현상이 발생한다.)

 

softmax

입력받은 값을 0에서 1사이의 값으로 모두 정규화(normalized)하며, 출력 값이 여러개다. 

다중 클래스 문제에 적용한다.

정규화 기능을 가진다. 

 

 

Leaky ReLU

- relu의 죽는 뉴런 현상을 해결하기 위해 제시된 함수다.

- 작은 기울기(0.01과 같은 매우 작은 값)를 부여한다.

- 입력 값이 음수일 때 완만한 선형 함수를 그려준다.

 

 

 

PReLU

- Leaky ReLU와 거의 유사하지만 새로운 파라미터 α 를 추가해 x가 음수인 영역에서도 기울기를 학습한다.

- 음수에 대한 gradient를 변수로 두고 학습을 통하여 업데이트 시킨다.

 

ELU(Exponential Linear Unit)

- ReLU의 모든 장점을 포함하며 Dying ReLU 문제를 해결했다.

- 출력 값이 거의 zero-centered에 가까우며, 일반적인 ReLU와 다르게 exp 함수를 계산하는 비용이 발생한다.

 

SELU(Scaled ELU)

https://arxiv.org/pdf/1910.01992.pdf
https://hwk0702.github.io/ml/dl/deep%20learning/2020/07/09/activation_function/

 

Maxout

https://velog.io/@hojp7874/%ED%99%9C%EC%84%B1%ED%99%94-%ED%95%A8%EC%88%98

ReLU의 장점을 모두 가지고, Dying ReLU의 문제를 해결했다.

단점 : 계산이 복잡하다.

 

Swish

https://kejdev.tistory.com/19

- 2017년 구글에서 만든 함수

- 시그모이드 함수에 x를 곱한 아주 간단한 형태

- 깊은 레이어를 학습시킬 때 ReLU보다 더 뛰어난 성능을 보여준다.

- ReLU와 달리 Swish는 갑작스러운 동작 또는 정점 변경이 없다.

 

 

GELU(Gaussian Error Linear Unit) 

https://hwk0702.github.io/ml/dl/deep%20learning/2020/07/09/activation_function/

2018년도에 도입되었다.

비선형 함수다.

네트워크가 깊어질수록 잘 작동한다.

GELU는 BERT, ROBERTa, ALBERT 및 기타 상위 NLP 모델과 호환된다.

 


 

 

참고한 블로그 : https://seongkyun.github.io/study/2019/05/01/activations/

 

Activation function 종류 및 특징 · Seongkyun Han's blog

Leaky ReLU와 비슷하나, PReLU는 $\alpha$ 파라미터를 추가하여 $x<0$ 에서의 기울기를 학습시킬 수 있게 함

seongkyun.github.io

https://yeomko.tistory.com/39

 

갈아먹는 딥러닝 기초 [1] Activation Function(활성화 함수) 종류

들어가며 딥 러닝 기초 개념들을 복습하면서 관련 내용들을 정리해보려 합니다. 가장 먼저 각 활성화 함수별로 간단한 특징과 사용처 정도를 짚고 넘어가겠습니다. 자세한 개념들은 직접 검색

yeomko.tistory.com

https://m.blog.naver.com/PostView.naver?blogId=handuelly&logNo=221824080339&proxyReferer=https:%2F%2Fwww.google.com%2F 

 

딥러닝 - 활성화 함수(Activation) 종류 및 비교

# 활성화 함수 딥러닝 네트워크에서 노드에 입력된 값들을 비선형 함수에 통과시킨 후 다음 레이어로 전달...

blog.naver.com

https://excelsior-cjh.tistory.com/177

 

05-1. 심층 신경망 학습 - 활성화 함수, 가중치 초기화

5-1. 심층 신경망 학습 - 활성화 함수, 가중치 초기화 저번 포스팅 04. 인공신경망에서 예제로 살펴본 신경망은 hidden layer가 2개인 얕은 DNN에 대해 다루었다. 하지만, 모델이 복잡해질수록 hidden layer

excelsior-cjh.tistory.com

https://hwk0702.github.io/ml/dl/deep%20learning/2020/07/09/activation_function/

 

활성화 함수

활성화 함수 (Activation Function)

hwk0702.github.io

참고한 책 : [파이썬으로 배우는 딥러닝 교과서]

'민공지능 > 딥러닝 & 머신러닝' 카테고리의 다른 글

하이퍼파라미터 튜닝이란?(3)  (0) 2021.05.23
하이퍼파라미터 튜닝이란?(2)  (0) 2021.05.23
Optuna  (0) 2021.05.22
SVM(Support Vector Machine)  (0) 2021.05.22
EfficientNet  (0) 2021.05.22