티스토리 뷰
이전 까지의 내용
이전 글에서는 역전파 알고리즘에 대해 예제를 통해 살펴보았고 Vanishing Gradient 현상에 대해 살펴보았습니다. 이번 글에서는 Vanishing Gradient 현상이 왜 일어나는지, 어떻게 해결해 나가는지에 대해 살펴보겠습니다.
전체 내용은 SlideShare 에서 한번에 보실 수 있으며 youtube 로도 볼 수 있습니다.
Vanishing Gradient 정의 및 원인
Vanishing Gradient 문제는 MLP 를 학습시키는 방법인 Backpropagation 중 Gradient 항이 사라지는 문제 입니다. 이전 글에서 Backpropagation 학습식을 보면 Cost Function 의 Gradient 항이 존재하는 것을 알 수 있습니다. 이 항이 0이나 0에 가까워져 학습이 불가능해지는 현상을 말하는 것입니다.
왜 gradient 항이 사라지는 현상이 발생할까요. 이는 우리가 Activation Function 으로 Sigmoid Function 을 사용했기 때문입니다. Sigmoid Function 에 대해 자세히 살펴보겠습니다.
Sigmoid Function 의 도함수를 살펴보면 최대값이 0.25 인 것을 알 수 있습니다. 다시 말해, 망이 깊어질 수록 Gradient 가 1/4 씩 줄어든다는 의미입니다.
또한 Feed Forward 상황 에서도 Sigmoid 는 문제가 있을 수 있습니다. Sigmoid Function 이 3 번 중첩 되었을 경우에 모든 출력값이 0.659 로 수렴하는 구조를 가지고 있습니다.
더 중요한 부분은 역전파 과정 입니다. 역전파 시의 Gradient 들을 그래프로 그려보면 층이 깊어질 수록 급격히 Gradient 값이 줄어드는 것을 확인할 수 있습니다. 이를 해결하기 위해 새로운 Activation Function 을 사용해보면 어떨까요.
새로운 Activation Function
처음 찾은 새로운 Activation Function 은 Tanh ( 하이퍼볼릭 탄젠트 ) 함수 입니다. 이 함수는 Sigmoid Function 과 동일한 형태를 가지고 있지만 -1 부터 1까지 출력값을 갖습니다. 또한 도함수의 최대값이 1이기 때문에 Vanishing Gradient 현상이 조금은 완화되는 현상을 보입니다.
최근 가장 많이 사용하는 함수인 ReLU (Rectified Linear Unit) 함수 입니다. 도함수가 계단함수 형태인 것을 알 수 있습니다. Sigmoid 나 Tanh 의 도함수는 계산식으로 나오기 때문에 컴퓨팅 자원을 소모해야하지만 ReLU 의 도함수는 0 이나 1 이기 때문에 컴퓨팅 자원측면에서 경제적입니다. 또한 최대값이 1보다 큰 값도 가능하기 때문에 학습이 빠르다는 장점이 있습니다.
하지만 0보다 작은 경우 0 을 반환하고 0 을 반환한 노드의 경우에는 다시 값을 갖기 어렵기 때문에 신경이 죽어버리는 현상이 발생합니다. 그래서 이 ReLU 함수를 개선한 PReLU, Leaky ReLU 등의 함수들이 발표 됩니다만 핵심은 0 이하에서도 작은 값을 갖게 해서 신경이 죽어버리는 현상을 막아보려는 노력입니다. 기타 여러 함수들을 살펴보시고 싶으시다면 이 페이지 를 참고해 주십시오.
기본적으로 Activation Function 에 ReLu 나 Tanh 함수를 사용하면 큰 문제 없습니다.
Vanishing Gradient 현상은 Activation Function 의 변경을 통해 어느정도 보완할 수 있게 되었습니다. 하지만 처음부터 weight 값들이 0 이라면 이 또한 학습이 불가능한 상황일겁니다. 아니면 처음부터 weight 값들이 최적의 값들이라면 gradient 가 작아지더라도 훌륭한 모델이 생성될 수 있겠지요. 또한 처음부터 weight 값들이 최적의 값들이라면 학습횟수가 많지 않아도 훌륭한 모델을 만들 수 있을 것입니다.
다음 글에서는 Weight 를 초기화 하는 방법들에 대해서 살펴보겠습니다.
다음 글 - Part. 6 : 가중치 초기화 ( Weight Initialization )
부족한 블로그에 방문해 주셔서 감사합니다.
잘못된 부분이나 질문이 있으시면
댓글로 말씀해주세요.
금방 확인하고 피드백 드리겠습니다.
좋은 하루 되세요. ^^
'머신러닝' 카테고리의 다른 글
[딥러닝] 뉴럴 네트워크 Part. 7 - 배치 정규화 (0) | 2018.03.28 |
---|---|
[딥러닝] 뉴럴 네트워크 Part. 6 - 가중치 초기화 (2) | 2018.03.27 |
[딥러닝] 뉴럴 네트워크 Part. 4 - 역전파 (backpropagation) (26) | 2018.03.24 |
[딥러닝] 뉴럴 네트워크 Part. 3 - MLP 학습과정 (4) | 2018.03.20 |
[딥러닝] 뉴럴 네트워크 Part. 2 - 멀티 레이어 퍼셉트론 (3) | 2018.03.19 |
- Total
- Today
- Yesterday
- bukhansannationalpark
- Koreancuisine
- 가족캠핑
- 캠핑장추천
- 반려견캠핑
- 가족여행
- 여름휴가추천
- 영월여행
- 글램핑
- 커플여행
- 백준
- python
- 강원도캠핑
- 서울근교캠핑
- 캠핑초보
- 여름휴가
- 여름캠핑
- Oracle
- 알고리즘
- 머신러닝
- sql
- 가평여행
- 강원도여행
- 파이썬
- SeoulTravel
- 계곡캠핑
- 가평캠핑
- 카카오
- 자연힐링
- 영월캠핑
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |