신경망 학습에서 '확률적으로 무작위로 골라낸 데이터'에 대해 수행하는 경사 하강법. 신경망 학습에서는 데이터를 미니배치로 무작위로 선정해서 학습하므로, SGD라 지칭함. 경사법 = Gradient Method 현 위치에서 기울어진 방향으로 일정 거리만큼 이동함. 그 뒤 이동한 부분에서 다시 기울기를 구하고, 또 그 기울어진 방향으로 이동을 반복함. 이런 방법으로 함수의 값을 줄여나가거나(경사 하강법) 늘려나가며(경사 상승법) 기울기가 0인 지점을 찾음. 이 방법의 경우, 복잡한 함수일 때 고원 = plateau 이라는 평평한 곳으로 파고들며 학습이 진행되지 않는 정체기에 빠질 수 있음. 또한 기울기가 0인 곳은 최솟값이나 최댓값 뿐만 아니라 극솟값/극댓값/안장점 이 될 수도 있음. 경사 하강법 = Gradient Descent Method 경사법 중 최솟값을 찾는 방법. 일반적으로 신경망 분야에서는 경사법이 경사 하강법으로 등장함(손실 함수의 최솟값을 찾아야 하므로) 매개변수의 갱신과정은 아래와 같음.($h$,$b$ : 가중치, 편향과 같은 매개변수, $\eta$ : 학습률 = learning rate, $f$ : 손실 함수) $$ w = w - \eta\frac{\partial f}{\partial w} \\ b = h - \eta\frac{\partial f}{\partial b} $$ 여기서 학습률이란 갱신하는 양으로, 한 번의 학습으로 얼마만큼 학습해야 하는지를 정함. 일반적으로 0.01, 0.001과 같이 미리 특정 값으로 정함. 이 학습률이 너무 크거나 작으면 목표하고자 하는 곳에 도달할 수 없음. 파이썬 구현 수치 미분 구현(numerical_gradient 함수)은 이곳 참조. def gradient_descent(f, init_x, lr=0.01, step_num=100): x = init_x x_history = [] # 학습에 따른 변화 정도를 보기위해 값 저장 f
댓글
댓글 쓰기