-
Activation Functions | Advanced Learning AlgorithmMachine Learning/Stanford ML Specialization 2024. 3. 24. 13:57
Alternatives to the sigmoid activation
지금까지는 Activation 함수로 Sigmoid 함수를 써왔다. 티셔츠가 얼마나 팔릴지에대한 Demand Prediction을 계산할 때, price, shipping cost, marketing, material등의 값을 이용해서 여러가지 값을 측정한다고 생각해보자. 그 중, awareness(인지도) 값을 0이나 1인 binary가 아니라, 음수가 아닌 0과 1 사이 숫자로 표현해보자. 이전에는 sigmoid 함수를 썼다면, 이번에는 0보다 아래로 갈때는 0으로 가고, 0보다 크다면, z값과 같은 다음과 함수로 계산한다고 해보자.
g(z) - max(0, z)
z값이 0보다 작으면, 0을, 그렇지 않으면 그대로 z값을 사용하게 된다. 이 함수의 이름은 ReLU(Rectified Linear Unit), 렐루함수라고 불린다. 그렇다면 어떤 것들을 고려해서 이 Activation Function을 선택하면 좋을까?
Choosing Activation Functions
Output Layers
다양한 뉴런들에서, 어떤 Activation Functions들을 선택할 수 있을까? 먼저 여러 계층에서 Output Layer를 생각해보자.
만약 Output 레이어 (위 예시에서는 마지막 1개의 노드에서 오는 아웃풋이 된다)에서, 만약 이 문제가 Binary Classification이라면, 0 또는 1이 되는 Sigmoid 함수가 적합할것이다. 만약 Regression 문제라면, 예를들면 내일 주가에 대한 문제라면, Linear Activation Function이 적합할 것이다. 왜냐하면 주가는 등락이 있어서 음수또한 나타내야하기 때문이다. 만약 이 문제가 주택의 가격을 예측하는 모델이라면, 이 가격은 절대 음수로 될 수 없다. (있을수도 있지만, 대부분의 경우, 없다고 가정한다.) 그럴 경우, 절대 음수가 될 수 없는 ReLU함수를 선택하는게 좋을것이다. 즉, 예측하려고 하는 y값이 어떤 값들인지에 따라, Activation을 다르게 선택할 수 있겠다.
Hidden Layers
그렇다면 Hidden Layers는 어떨까? 기존 강의에서는 Sigmoid 함수를 사용했었지만, 가장 많이 쓰이는, Most Common Choice는 ReLU 함수를 사용하고있다. 이에는 몇가지 이유가 있다. 먼저, ReLU 함수의 연산은 Sigmoid보다 훨씬 빠르다. max(0, z)만 계산하면 되기 때문이다. 그리고 더 중요한점은, Sigmoid함수는 2군데 flat한 형태가 나오지만, ReLU 함수는 음수일 경우에만 flat하기 떄문이다. 보통 Gradient Descents(경사 하강법)을 이용해서 뉴럴 네트워크를 트레이닝하는 경우가 많은데, 그럴 경우, flat한 곳이 많을수록 이 방법은 느리게 되고, 제대로 작동하지 않을 경우, 아주 비효율적이게 된다. 여러 연구자료에서 ReLU 함수를 이용하면, 신경망도 더 빨리 학습할 수 있다는 것을 보여준다. 그래서 실제 많은 실무자들은, Hidden Layers에서 ReLU 함수를 많이 선택하고 있다.
Towardsdatascience.com Choosing Activation Summary
요약해보자면 이렇다. 먼저, Output Layer에서 Activation Functions을 고를 때, 대부분 3가지 케이스가 나올 수 있는데,
- Binary Classification - Sigmoid
- Regression, y negative/positive - linear
- Regression, y >= 0 - ReLU
또, Hidden Layers에서는 효율적이면서 성능도 좋은 ReLU함수를 기본 활성화 함수로 구현하면 된다.
Tensorflow Function
위에서 설명한 것을 코드로 나타내면 다음과 같다. 마지막 Output Layer에서는 상황에 맞게 sigmoid, linear, relu중 선택할 수 있다.
from tf.keras.layers import Dense model = Sequential([ Dense(units=25, activation='relu'), Dense(units=15, activation='relu'), Dense(units=1, activation='sigmoid(or linear/relu)') ])
Why do we need Activation Functions?
왜 이런 다양한 Activation Function이 필요할까? Linear Activation만 쓴다면, 커다란 Neural Network는 결국 하나의 Linear Regression과 차이가 없기 때문이다. 신경망을 사용하는 목적이 무산되게 된다.
[이 부분은 태블린으로 복잡한 수식을 작성 후 업데이트 예정]
결국, Linear Activation만을 사용하게 되면, wx+b인 Linear Regression과 다를게 없게된다. 그렇기 떄문에, Hidden Layers에서는 Linear Activation을 사용하지 않는다.
Reference
https://towardsdatascience.com/activation-functions-neural-networks-1cbd9f8d91d6
Activation Functions in Neural Networks
Sigmoid, tanh, Softmax, ReLU, Leaky ReLU EXPLAINED !!!
towardsdatascience.com
고급 학습 알고리즘
머신러닝 전문 과정의 두 번째 과정에서는 다음을 학습합니다: - 다중 클래스 분류를 수행하기 위해 텐서플로로 신경망 구축 및 훈련 - 모델이 실제 세계의 데이터와 작업에 일반화되도록 머신
www.coursera.org
'Machine Learning > Stanford ML Specialization' 카테고리의 다른 글
Multiclass Classification | Neural Network Advanced Optimization (0) 2024.04.02 Multiclass Classification | Advanced Learning Algorithm (0) 2024.03.24 TensorFlow Training Details | Advanced Learning Algorithm (0) 2024.02.11 TensorFlow Implementation | Advanced Learning Algorithm (0) 2024.02.11 Matrix Multiplication Code | Advanced Learning Algorithm (0) 2024.02.10