티스토리 뷰
2. Neural Networks / L3. Training Neural Networks - Other Activation Functions, Batch vs Stochastic Gradient Descent, Learning Rate Decay, Momentum
chrisysl 2018. 7. 17. 22:58Other Activation Functions
- 이전에 gradient descent로는 해결이 안되었던 문제를 해결하려면 sigmoid function이 아닌
- 다른 activation function을 사용하여야한다.
- 바로 "Hyperbolic Tangent" 이다.
- sigmoid function과 유사한 그래프를 보이지만, 기울기가 다르다.
- 이 작은 차이가 neural networks에 엄청난 영향을 미친다.
- 또 다른 activation function으로는 Rectified Linear Unit(ReLU)가 있다.
- 이건 매우 간단하다.
- 만약 positive일 경우 동일한 값을 리턴, negative일 경우 0을 리턴한다.
- 이 방법은 positive의 경우 미분했을때 기울기가 1이기에
- sigmoid function을 대체하여 정확도를 많이 희생하지 않으면서도 머신러닝의 학습을 상당히 진전시킬 수 있다.
- 선형성을 유지하고있는데도, 비선형의 해결책이 될 수 있다는점이 흥미롭다.
- 따라서 ReLU activation function을 사용하면 위의 미분값들을 모두 곱하면
- 그 결과가 gradient descent가 가능한 정도로 나오기 때문에 앞선 문제점을 극복할 수 있다.
- 다층 레이어 구조의 예시이고, 이번엔 hidden layers단에서 ReLU function을 사용하여 처리해보자.
- 주목할점은 마지막 output unit은 여전히 0과 1사이의 값이어야 하기 때문에 sigmoid function 이라는 점이다.
- output layer 단에서도 ReLU function을 사용하게되면 regression models가 되는데, 이는 나중에 따로 다루게 됨.
Batch vs Stochastic Gradient Descent
- 다시한번 gradient descent가 어떤역할을 하는지 되짚어보자.
- error function으로부터 리턴받은 error를 바탕으로 음의 gradient 방향으로 error를 줄여나간다
- 각 step은 epoch라 부른다.
- input을 통해 순방향으로 네트워크를 진행해 나가 output을 도출해낸다.
- 그 다음 다시 weights을 업데이트하기위해 backpropagation을 진행한다.
- 근데 만약 우측의 네트워크 layers들이 엄청난 양의 데이터때문에 그에 비례하게
- 엄청나게 많은 layer들이 존재한다면, 컴퓨터의 연산이 과부화에 걸릴것이다.
- 근데 과연 우린 모든 data를 매번 네트워크에 대입하여 연산하여야할까???
- 만약 특정 데이터들만 뽑아서 그 데이터들을 바탕으로 weights를 수정하며 네트워크를 변경해간다면?
- 연산이 빨라질 것이고, 한번에 처리하는 양도 적어 과부화 걱정도 하지 않아도 된다.
- 이 아이디어가 바로 Stochastic Gradient Descent 이다.
- Stochastic Gradient Descent에서는 전체 데이터중 subset 데이터들을 랜덤하게 뽑아 이를 batch라 부른다.
- 해당 batch를 대상으로 네트워크를 먼저 돌린다.
- 그리고 그 다음 batch를 대상으로 네트워크를 돌리며 새로운 weights를 계속 업데이트 한다.
- 이렇게 얻어진 최종 네트워크 모델은, 최초에 단 한번의 시도로 전체 데이터를 대상으로 네트워크를 돌린것보다
- 정확도는 떨어진다. 하지만 이것이 완벽하게 정확한 네트워크보다 더 낫다는것을 나중에 알게될 것임.
Learning Rate Decay
- learning rate는 무슨역할을 할까?
- 보통 learning rate는 클수록 더 급격하게 error를 줄여나간다.
- 즉, step의 폭이 커서 금방 error의 최저점에 도달하더라도, 여기서 끝내지 않고
- 다시 에러가 커진다거나 하는 오류를 범할 수 있다.
- learning rate가 작게되면 느리지만, 정확하게 우리가 원하는 error의 최저점에 도달할 수 있다.
- 따라서 만약 설계한 네트워크가 적절하게 작동하지 않는다면, learning rate를 줄여보면 된다.
- 가장 이상적인 learning rate는 가파를땐 스텝을 길게, 평평할땐 스텝을 짧게 이동시킨다.
Momentum
- global minimum에 도달하기위한 또 다른 아이디어로는 momentum이 있다.
- momentum이란 local minimum에 도달하더라도 더 앞으로 나아가도록
- 0과 1사이의 상수인 베타를 가중치를 둬서 앞으로 나아가게 해 준다.
- 즉, 최초 시작지점으로부터 local minimum까지의 각 step에 베타를 곱해주는 개념인데,
- local minimum에 도달하기 바로 직전의 step은 1이다.
- 그 전의 step엔 베타를, 그 전의 step엔 베타의 제곱을 곱해줘서 총 합을 고려해서
- 앞으로 나아가게 해준다.
- 만약 global minimum에 도달하게 되더라도 또 앞으로 나아가지만 다시 뒤로 되돌아온다.
- 개념상으로는 애매하지만 실제로 적용해보면 매우 정확하게 들어맞는다.