참고 서적
도서명: 모두의 딥러닝 저자 : 조태호 출판 : 길벗 발매 : 2020.01.27 |
신경망에서 딥러닝으로
다층 퍼셉트론이 오차 역전파를 만나 신경망이 되었고, 신경망은 XOR 문제를 가볍게 해결하였다. 따라서 이제 신경망을 차곡차곡 쌓아올리면 마치 사람처럼 생각하고 판단하는 인공지능이 금방이라도 완성될 것처럼 보였지만, 기대만큼 결과가 좋지 않았다. 그 이유는 다음과 같다.
(1) 기울기 소실 문제와 활성화 함수
오차 역전파는 출력층으로부터 하나씩 앞으로 되돌아가며 각 층의 가중치를 수정하는 방법이다. 가중치를 수정하려면 미분 값, 즉 기울기가 필요한데 층이 늘어나면서 역전파를 통해 전달되는 이 기울기의 값이 점점 작아져 맨 처음 층까지 전달되지 않는 기울기 소실(vanishing gradient) 문제가 발생하기 시작했다.
이는 활성화 함수로 사용된 시그모이드 함수의 특성 때문이다. 위의 그림처럼 시그모이드 함수를 미분하면 최대치가 0.3이다. 1보다 작으므로 계속 곱하다 보면 0에 가까워진다. 따라서 여러 층을 거칠수록 기울기가 사라져 가중치를 수정하기가 어려워진다.
이를 해결하고자 활성화 함수를 시그모이드가 아닌 여러 함수로 대체하기 시작했다.
먼저, 시그모이드 함수의 범위를 -1에서 1로 확장한 개념인 하이퍼볼릭 탄젠트(tanh) 함수는 미분한 값의 범위가 함께 확장되는 효과를 가져왔다. 하지만 여전히 1보다 작은 값이 존재하므로 기울기 소실 문제는 사라지지 않는다.
렐루(ReLU) 함수는 시그모이드 함수의 대안으로 떠오르며 현재 가장 많이 사용되는 활성화 함수이다. 렐루는 x가 0보다 작을 때는 모든 값을 0으로 처리하고, 0보다 큰 값은 x를 그대로 사용하는 방법이다. 단순해 보이지만, 이 방법을 쓰면 x가 0보다 크기만 하면 미분 값이 1이 된다. 따라서 여러 은닉층을 거치며 곱해지더라도 맨 처음 층까지 사라지지 않고 남아있을 수 있다.
이 간단한 방법이 여러 층을 쌓을 수 있게 했고, 이로써 딥러닝의 발전에 속도가 붙게 된다. 이후 렐루의 0이 되는 순간을 완화한 소프트플러스(softplus) 함수 등 렐루를 변형한 함수도 개발 중이며, 좀 더 나은 활성화 함수를 만들기 위한 노력이 이어지고 있다.
(2) 고급 경사 하강법
경사 하강법은 정확하게 가중치를 찾아가지만, 한 번 업데이트할 때마다 전체 데이터를 미분해야 하므로 계산량이 매우 많다는 단점이 있다. 이러한 점을 보완한 고급 경사 하강법이 등장하면서 딥러닝의 발전 속도는 더 빨라졌다.
- 확률적 경사 하강법
경사 하강법의 불필요하게 많은 계산량은 속도를 느리게 할 뿐 아니라, 최적 해를 찾기 전에 최적화 과정이 멈출 수도 있다. 확률적 경사 하강법(Stochastic Gradient Descent, SGD)는 경사 하강법의 이러한 단점을 보완한 방법이다. 전체 데이터를 사용하는 것이 아니라, 랜덤하게 추출한 일부 데이터를 사용한다. 일부 데이터를 사용하므로 더 빨리 그리고 자주 업데이트를 하는 것이 가능해졌다.
속도가 확연히 빠르면서도 최적 해에 근사한 값을 찾아낸다는 장점 덕분에 경사 하강법의 대안으로 사용되고 있다.
- 모멘텀
모멘텀(momentum)이란 단어는 '관성, 탄력, 가속도'라는 뜻이다. 모멘텀 SGD란 말 그대로 경사 하강법에 탄력을 더해 주는 것이다. 다시 말해서, 경사 하강법과 마찬가지로 매번 기울기를 구하지만, 이를 통해 오차를 수정하기 전 바로 앞 수정 값과 방향(+, -)을 참고하여 같은 방향으로 일정한 비율만 수정되게 하는 방법이다.
수정 방향이 양수(+) 방향으로 한 번, 음수(-) 방향으로 한 번 지그재그로 일어나는 현상이 줄어들고, 이전 이동 값을 고려하여 일정 비율만큼만 다음 값을 결정하므로 관성의 효과를 낼 수 있다.
딥러닝 구동에 사용되는 고급 경사 하강법 개요 및 활용법은 다음과 같다.
먼저 나온 방법의 단점을 보완하여 다음 방법이 나온 만큼 나중에 나온 고급 경사 하강법이 좋은 성과를 보인다. 맨 마지막에 있는 아담(Adam)은 현재 많이 사용되는 고급 경사 하강법이다.
'공부정리 > 모두의 딥러닝 (교재 정리)' 카테고리의 다른 글
[deeplearning] 모델 설계하기 (2) - Loss function, Metrics (0) | 2022.05.16 |
---|---|
[deeplearning] 모델 설계하기 (1) (0) | 2022.05.16 |
[deeplearning] 신경망의 이해 - 오차 역전파 (0) | 2022.04.29 |
[deeplearning] 신경망의 이해 - 퍼셉트론, 다층 퍼셉트론 (0) | 2022.04.29 |
[deeplearning] 딥러닝의 동작 원리 - 로지스틱 회귀 (0) | 2022.04.14 |