본문 바로가기
Aiffel/Fundamental

경사하강법(Gradient Descent)

by EDGE-AI 2022. 1. 21.

1차 미분계수를 이용해 함수의 최소값을 찾아가는 방법. 함수 값이 낮아지는 방향으로 독립변수 값을 변형시켜 가면서 최소 함수값을 갖도록 하는 독립 변수 값을 찾는 방법이다.

최소 함수값을 찾는 과정에서 미분계수가 0인 지점을 찾는게 아닌 gradient descent를 이용하는 이유는

  • 실제 분석에서 맞딱드리게 되는 함수들은 닫힌 형태(closed form)가 아니거나 함수의 형태가 복잡해 (가령, 비선형함수) 미분계수와 그 근을 계산하기 어려운 경우가 많다.
  • 실제 미분계수를 계산하는 과정을 컴퓨터로 구현하는 것에 비해 gradient descent는 컴퓨터로 비교적 쉽게 구현할 수 있다.
  • 데이터 양이 매우 큰 경우 gradient descent와 같은 iterative한 방법을 통해 해를 구하면 계산량 측면에서 더 효율적으로 해를 구할 수 있다.

정해진 방향으로 어느정도 이동해서 다시 gradient를 계산할 것인가에 대한 지표는 learning rate를 사용한다. learning rate는 적당한 값을 정하는게 가장 중요하다. 그 이유로는 

  1. Learning Rate가 매우 큰 경우
    • 최소값을 향해 가는 것이 아니라 오히려 큰 값을 향해 나아갈 수 있다.(Overshooting)
  2. Learning Rate가 매우 작은 경우
    • 학습을 진행하는데 엄청난 시간이 소요되며, 시간 제한이 있는 경우 최소값을 찾기도 전에 학습이 종료될 수도 있다.

출발 지점을 어디로 잡는가에 따라 최소값을 찾는 시간이 빨라질 수도 느려질 수도 있다. 초기 가중치 설정 또한 학습에 있어서 중요한 파라미터이다.

초기값 설정으로 인한 문제

1. 초기값을 모두 0으로 설정 한 경우

데이터를 평균 0으로 정규화 시킬 경우, 0으로 가중치를 초기화 한다면 모든 뉴런들이 같은 값을 나타낼 것이고, backpropagation 과정에서 각 가중치에 대한 update가 동일하게 이루어지기 때문에 제대로 학습하기 어렵다.

 

2. 활성화 함수로 sigmoid 사용시 정규분포 사용

sigmoid는 절대값이 커지는 경우 미분값이 소실되는 문제(Vanish Gradient)가 발생한다. 

평균 0 표준편차 1인 정규분포를 따르도록 가중치를 초기화 하는 경우, 표준편차 값이 크기 때문에 학습을 반복할 수록 가중치 값들이 0과 1로 치우친다.

표준편차를 0.01로 줄이는 경우는 가중치 값들이 0.5에 몰리게 되는 문제가 발생한다.

가중치 초기화 방법론

1. LeCun Initialization

 

LeCun은 LeNet의 창시자이며, CNN을 세상에 도입한 사람이다. 효과적인 backpropagation을 위한 초기화 방법으로 2가지를 소개하였다.

 

1. LeCun Normal Initialization(정규분포를 따르는 방법)

n_in  : 이전 layer(input)의 노드 수

2. LeCun Uniform Initialization(균등분포를 따르는 방법)

n_in  : 이전 layer(input)의 노드 수

2. Xavier Initialization

 

 Xavier Initialization은 이전 노드와 다음 노드의 개수에 의존하는 방법이다. 구조는 LeCun방식과 유사하지만, 다음 층의 노드수를 사용하고, 많은 연구를 통해 가장 최적화된 상수값을 찾아냈다.

 

1. Xavier Normal Initialization(정규분포를 따르는 방법)

n_in  : 이전 layer(input)의 노드 수,  n_out  : 다음 layer의 노드 수

2. Xavier Uniform Initialization(균등분포를 따르는 방법)

n_in  : 이전 layer(input)의 노드 수,  n_out  : 다음 layer의 노드 수

Xavier 함수는 비선형함수(ex. sigmoid, tanh)에서 효과적인 결과를 모여주나 ReLU 함수에서 사용시 출력값이 0으로 수렴하게 된다.

 

3. He Initialization

 

He Initialization은 ReLU를 활성화 함수로 사용 시 Xavier 초기값 설정이 비효율적인 결과를 보이는경우 사용하는 초기화 방법이다.

 

1. He Normal Initialization (정규분포를 따르는 방법)

n_in  : 이전 layer(input)의 노드 수

2. He Uniform Initialization (균등분포를 따르는 방법)

n_in  : 이전 layer(input)의 노드 수

 

 

참고자료

https://angeloyeo.github.io/2020/08/16/gradient_descent.html

https://brunch.co.kr/@jaeyuelpark/64

https://aileen93.tistory.com/71

https://reniew.github.io/13/

'Aiffel > Fundamental' 카테고리의 다른 글

Softmax 함수와 Cross Entropy  (0) 2022.01.24
로지스틱 회귀분석(Logistic Regression)  (0) 2022.01.24
손실함수 (Loss Function)  (0) 2022.01.21
활성화 함수 (Activation Function)  (0) 2022.01.21
Parameter, HyperParameter  (0) 2022.01.18

댓글