Q. Activation function은 왜 쓰이는건가요? 

Q. Activation function은 왜 이렇게 종류가 다양한건가요?


앞서 Neural Network에 대해서 배워보았습니다. 다시 Neural Network를 살펴볼까요? 아래그림중에 f라고 표시된 activation function이 담당하고 있는 역할이 뭘까요?


<사진1>



본래 뉴런은 여러 경로를 통해 들어온 전기신호의 합이 일정치 이상이 되면 다음 뉴런으로 신호를 전달하게 됩니다. 앞서 언급한 "일정치 이상이 되는 기준"이 Activation function이 되는 것입니다. 예를 들어, 일정 값 이상이 되면 1을 출력하여 다음 뉴런에 값을 전달해 주고, 일정 값 이하가 되면 0을 출력하여 다음 뉴런에 값을 전달해주지 않게 합니다.


사실 굳이 출력 값을 activation function을 통해 0 or 1 값으로 범위를 한정하는 것이 얼마나 큰 의미를 갖고 있는지는 모르겠습니다. 그냥 가중치에 입력값을 곱한 것을 그대로 다음 신경망에 넘겨줘도 되지 않을까요? (물론 값이 굉장히 커지거나 굉장히 작아지는 것 이외에도 우리가 모르는 문제가 생기긴 하겠습니다만 명확하게 그렇게 하면 안되는 이유를 찾긴 힘들어보입니다)


하지만 분명한 사실은 non-linear한 성격을 가진 activation function의 역할이 Multi-Layer Perceptron (MLP)에서 두드러지게 되는데요. 결론부터 이야기하지면 Deep Neural Network에서 layer가 깊어질수록 Wx라는 linear function만으로는 non-linear한 모델을 표현할 수 없기 때문에 문제가 발생하게 됩니다(이 부분은 이해가 안되는게 당연해요! 자세한 내용은 5장 Multi-Layer Perceptron에서 설명하겠습니다)


그래서 Activation function의 존재이유를 5장으로 미루고 이번장에서는 간단히 activation function의 변천과정을 살펴보도록 할께요!



1)Step function


초기에는 뉴런의 특성을 그대로 적용하여 step function을 activation function으로 삼았습니다. 단지 다음 뉴런으로 전기신호를 보내줄지 말지를 결정하는 모델을 본따서 만든 것 같습니다. 그런데, step function이 가지는 가장 큰 단점은 미분이 불가능 하기 때문에 backpropagation을 통한 학습이 불가능해진다는 것 입니다. (Backpropagation 설명은 아래 사이트를 참고해주세요! 아니면 "밑바닥부터 시작하는 딥러닝"이라는 책의 backpropagation 부분을 참고하셔도 됩니다! 좀 더 압축된 내용은 제가 따로 정리한 pdf파일을 올려놓을께요. 그런데 글씨가.. ㅜㅜ)

6. Backpropagation (2).pdf

https://kolikim.tistory.com/46


(아니면 backpropgation관련 아래 영상을 참고하셔도 되요!)




<사진2>




2) Sigmoid function


Backpropagation을 통한 학습이 가능하게 하기 위해서, 미분이 불가능한 step function을 sigmoid function 으로 대체하게 됩니다. 함수가 연속성을 갖고 있기 때문에 모든 구간에서 미분이 가능하게 되죠! 


<사진3>



하지만 sigmoid function에도 문제가 생기게 되는데요. Backpropagation으로 가중치가 업데이트되는 원리를 알고 계신다면 sigmoid function의 치명적인 단점을 볼 수 있게 됩니다. 예를 들어, sigmoid function은 0~1 사이의 값을 도출하게 되는데 sigmoid 그래프를 보면 알 수 있듯이 입력 값들이 점점 위의 그래프 가운데서 멀어지게 되면 미분시 굉장히 작은 값을 도출하게 됩니다.


제가 업로드한 PDF파일을 보시면 알겠지만, backprogation으로 학습하는 방식은 chain rule을 이용하게 되는데, 만약 Wx 값이 아주 크게나오거나 아주 작게 나오게 되는 경우 제일 마지막에 연결된 뉴런에 해당하는 가중치 업데이트가 아래와 같이 이루어지게 됩니다. 


∇W = 0.1x0.4x.0.3x.0.60=0.0072


결과적으로, 제일 뒤에 연결된 뉴런들은 가중치 업데이트를 못하는 상황이 발생하게 되는데요. 이를 Vanishing Gradient 문제라고 합니다. 



<사진4>




 

3) ReLU (Rectifier Liner Unit = ramp function)


Vanishing Gradient 문제를 해결하기 위해서는 어떻게 하면 좋을까요? 시그모이드 함수에서 미분값이 문제가 되었으니 이를 해결해주면 되지 않을까요?


이러한 문제를 해결해주고자 ReLU라는 activation function이 나오게 됩니다. 



위의 수식을 보시면 알겠지만 Activation function을 통해 나온 값을 굳이 0~1 사이로 제한하지 않았네요! 


<사진5>





0이상이면 미분이 항상 일정한 기울기 값이 나오기 때문에, Backpropagation을 통해 학습을 하더라도 맨 뒤에 있는 뉴런까지 학습이 잘 되겠네요! (결과론적이지만 아래 cost function이 최저로 수렴하는 속도를 보더라도 ReLU가 학습이 빠른시간내에 된다는것을 알 수 있습니다!)


<사진6>



그런데 한가지 의아한 부분이 있습니다. x<0 인경우에 그냥 미분값이 0으로 설정되게 했는데, 그렇다면 Wx 값이 0이하에 관련된 weight parameter들은 backpropagation을 통해 업데이트가 이루지지 않게 됩니다. Wx 값이 음수가 나오더라도 음수값이 지니는 의미가 있을테니 이를 잘 활용하여 가중치들을 업데이트 시키면 좋지 않을까요?



4) 기타 사용되는 activation function


위에서 던진 질문을 해결하고자 나온 activation function들은 아래와 같습니다.




제시된 activation function을 보면 모두 음수값을 어떻게든 활용하려는게 보이시죠?


<사진7>



2015년에 나온 논문에는 ELU(Exponential Linear Unit) activation function을 사용했다고 하네요?



<사진8>


다양한 activation function이 나오고 있지만 결과적으로 ReLU와 큰 차이를 보이진 않는다고 해요. Activation function은 x<0 이하의 값들을 어떻게 출력해줄지, 또는 현재 x>=0 인 경우를 어떻게 출력해줄지에 따라서 굉장히 다양한 조합으로 activation function을 만들어 줄 수 있어요 (물론 현재는 x>=0인 경우는 그대로 x를 출력해주는게 보편화 되었지만요).


"하지만 개인적인 생각으로는 가중치의 초기값을 어떻게 설정해주는지에 따라, 또는 초기 가중치 값에 따른 Wx 값들이 어떤 분포를 이루는지 따라서 어떤 activation function을 사용하면 좋을지를 판단하는게 좋을 것 같아요. 물론 이 부분에 있어서 많은 경험적or이론적 연구가 많이 진행되어야겠지만요"


5) Softmax activation function


마지막으로 알아볼 것은 softmax activation function이에요. Softmax는 아래와 같은 수식을 나타내요. 결론적으로 말하자면 Softmax는 최종적인 결과를 확률로 알아보기 위해 사용되요. 우선 아래그림을 살펴볼께요.


아래수식이 그림에 표현된 softmax라는 영역에 다 적용이되요. 아직 Deep Neural Network에 대해서 설명한건 아니지만, Neural Network를 아래와 같이 구성할 수 있어요. 만약 아래와 같이 입력뉴런이 다음 뉴런들에 연결이 되고, 그 연결된 뉴런에서 결과값 z를 얻는다고 해볼께요. 임의로 설정된 z는 k개이고, 이 k라는 인자가 softmax에서 중요한 역할을 해요. 우리는 z라는 뉴런들의 결과들을 확률로써 이해하고 싶다고 해볼께요. 그렇다면 z1~zk의 합은 1이되어야 겠죠? 그리고 z1와 z2의 값이 상대적으로 큰 경우 확률로 변환되었을 때에도 상대적인 차이가 유지되어야겠죠? 

<사진9>


위에있는 설명을 사진하나로 요약하면 아래와 같습니다. 이젠 Softmax가 어떤목적으로 사용되는지 아시겠죠? 다음장에서 Deep Neural Network를 보시면 더 잘 이해가 되시겠지만 Softmax는 마지막 layer가 되는 부분에서 확률적인 결과값을 얻기 위해종종 사용됩니다. (ReLU, Sigmoid 처럼 매번 쓰이는것과는 다르게 마지막 layer에서 한번 사용되는게 일반적이에요~)


<사진10>





지금까지 Activation function을 살펴봤습니다. 사실 이번장에서는 Activation function이 가지는 큰 의미에 대해서 깊게 살펴보지는 못했어요. 하지만 다음장 Multi-Layer Perceptron (MLP)에서 activation function이 지니는 유용성을 알아볼꺼에요 (힌트는 non-linearity 에요!). 




#Activation function    #Step function   #Sigmoid function   #ReLU    #Leaky ReLU     #PReLU    #ELU

#Non-Linearity   #SoftMax function




[사진래퍼런스]

사진4

http://blog.naver.com/PostView.nhn?blogId=ehdrndd&logNo=221406005034&parentCategoryNo=&categoryNo=45&viewDate=&isShowPopularPosts=false&from=postView

사진5

https://en.wikipedia.org/wiki/Rectifier_(neural_networks)

사진6

https://pythonkim.tistory.com/40

사진7

https://seongkyun.github.io/study/2019/05/01/activations/

사진8

https://ml-cheatsheet.readthedocs.io/en/latest/activation_functions.html

사진9

http://rinterested.github.io/statistics/softmax.html

+ Recent posts