본문 바로가기

Tensorflow

ReLU (Rectified Linear Unit)

1. Neural Network라는 개념이 재밌지만 사실 몇가지 문제가 있다. 첫번째로는 Neural Network가 느리다는 점이다. 실제로 Neural Network의 학습은 상당히 오래걸리는 편이다. 특히 Unit(Neuron)이 많아지면 점점 더 시간이 늘어난다. (솔직히 언젠가는 이것이 하드웨어적으로 해결되어야 할 문제라고 생각한다.) 


 그리고 또한가지 가장 큰 문제중 하나는 Gradient Vanishing 이라는 문제이다. hidden layer가 한개, 두개일때는 문제가 생기지 않지만 네트워크가 깊어지면 깊어질수록(Deep Learning은 깊은 네트워크를 이용하면 Deep Learning이다. 뭔가 말장난 같지만 장난이 아니라 진짜다.) Gradient Vanishing 문제가 생긴다. Gradient Vanishing 이란 말 그대로 Gradient가 사라지는(0으로 수렴하는) 문제이다. 이런 문제가 생기는 이유는 간단하다. Sigmoid 에서 Gradient는 0 ~ 1사이의 값이 나온다. 근데 Backpropagation을 하면서 layer를 거듭하면 거듭할 수록 계속해서 Gradient를 곱하게 되는데 0.xxxx를 계속 곱하다 보니 값이 점점 작아져서 Gradient가 0에 수렴하게 되는 것이다. 그래서 직접 실험을 해보면 hidden layer가 9개, 10개 정도 되면 네트워크가 잘 작동하지 않는다는 것을 알게된다.



2. Gradient Vanishing 문제의 해결책으로 나온것이 ReLU Function이다. 간단히 표현하면 다음과 같은 함수이다.

    

     f%5Cquad%20%3D%5Cquad%20%5Cbegin%7B%20cases%20%7D%7B%20%5Cquad%20(x%5Cquad%20%3C%5Cquad%200)%5Cquad%20%5Cquad%20%5Cquad%20f(x)%5Cquad%20%3D%5Cquad%200%5C%5C%20%20%7D%5C%5C%7B%20%5Cquad%20(x%5Cquad%20%5Cge%20%5Cquad%200)%5Cquad%20%5Cquad%20%5Cquad%20f(x)%5Cquad%20%3D%5Cquad%20x%20%7D%5Cend%7B%20cases%20%7D%20


 이런 함수를 Sigmoid 대신 이용해서 Gradient Vanishing 문제를 해결했다. 이 함수의 또다른 장점은 Gradient가 0 또는 1이면서 함수 자체도 아주 간단해서 Sigmoid를 계산하면서 걸리던 시간을 단축시킬 수 있다는 점이다. 그래서 Neural Network의 커다란 문제점 두가지를 해결할 수 있다. 근데 실제로 ReLU를 구현해보면 Sigmoid보다 계산 속도가 빠르기도 하지만 훨씬 더 빠르게 수렴한다는 것도 알 수 있을 것이다. 하지만 ReLU가 음수들을 모두 0으로 처리하기 때문에 한번 음수가 나오면 더이상 그 노드는 학습되지 않는다는 단점이 한가지 생긴다. 따라서 간단한 네트워크에 대해서는 오히려 좋지 않은 성능을 낼 수도 있다. (물론 이것 때문에 leaky ReLU나 다른 ReLU 함수들이 있기도 하다.)



3. ReLU는 구현해봤는데 구현하기 쉽기도 하고 아직 제대로 구현해서 여러 데이터들에 적용해보지 않아서 코드는 생략하도록 하겠다. 나중에 여러가지 테스트를 해보고 ReLU가 다른 방법들에 비해 어떤지 확실해 지면 다시 다뤄보겠다.



4. 혹시나 해서 언급하지만 Activation Fuction으로 ReLU를 이용하더라도 마지막 Layer는 Sigmoid(또는 tanh)를 이용한다. 0.5를 기준으로 0 ~ 1사이의 값을 나타내야 정확히 분류를 하는데 좋기 때문이다.


출처: http://zzing0907.blog.me/220693996517


'Tensorflow' 카테고리의 다른 글

ms word python 에서 사용하기  (0) 2017.03.12
네이버 뉴스 크롤링하기 (퍼옴)  (0) 2017.03.05
Tensorflow 소스 코드 분석  (0) 2017.02.18
Machine learning 종류  (0) 2017.02.12
Tensor Flow란  (0) 2017.02.06