꺼내먹는지식 준

Gradient Descent 본문

카테고리 없음

Gradient Descent

알 수 없는 사용자 2022. 2. 12. 22:02

방금까지 약 2,3시간에 걸쳐 작성한 Gradient Descent 글이 완료버튼을 눌렀음에도 소실되었다. (?)

아직까지도 tistory가 안정화가 되지 않은 상태로 보인다. 

 

그런고로 그냥 대충 정리한다. 

 

사용 데이터: MNIST

 

Inference 과정에서 신경망은 weight 와 bias, activation function 를 통해 정답 노드를 inference 한다. 

 

이 과정에서 weight와 bias를 random 으로 초기화하고 inference를 하면 당연히 MNIST의 클래스 개수인 10개에 따라 10%의 정확도를 보일 것이다. 

cost function은 출력 층 모든 뉴런(노드)의 실제 label과 예측 label의 cost의 합을 구하는 것이다. 이 부분을 햇갈리면 안된다. 

수만가지의 학

습 데이터에 대해 이를 수행하고 평균을 얻으면 신경망의 모든 오차를 구할 수 있다. (mini-batch 에서는 이를 모든 데이터에 적용하지 않음)

이 때, cost function을 최소화 하는 것이 바로 우리의 목표이다. 

(현재 약 13,000 개의 parameter가 있다. (weight 784 $\times$ 16 + 16 $\times$ 16 + 16 $\times$ 10 + bias 16 + 16 + 10))

 

 

cost function의 input 값이 1개, output도 한개라고 가정해보자. 일차원에서는 미분 값이 0 이되는 지점을 찾으면 cost function의 최저 값이다. 

그러나 이런 경우에는 최소 값을 찾기 어렵다. 다만, 해당 값에서 미분 값을 이용하여 어디로 움직일 지 정할 수 있다. 미분 값 즉 기울기가 양수이면 오른쪽, 음수이면 왼쪽으로 움직인다. 이를 통해 local minimum을 찾을 수 있다. 

 

다음의 과정을 통해 W, bias 값을 업데이트 한다.

 

왼쪽 그림과 같이 작동하는 것, 즉 숫자의 테두리 파악, 테두리 조합을 통해 원형, 직선 파악, 최종적으로 숫자 파악이 우리가 기대하는 동작 방식이나, 실제로는 두번째 layer 를 출력해보면 weight 에 다음과 같이 영향을 받아 중앙의 약간의 패턴 외에는 규칙을 찾을 수 없다. 즉, 신경망은 자기 만의 local minimum을 찾아 조합하여 잘 예측하는 것이다. 

이로 인해 숫자가 아닌 아무 값만 넣어도 신경망은 예측을 한다. (모든 뉴런이 활성화 안되거나, 활성화 되어 관계 없음을 나타낸다면 문제를 인지하는 것이지만 그렇지 못한다.)

 

결국 신경망을 학습한다는 것은 가중치와 bias 를 구하는 것이다. 

그리고 가중치가 바로 이전 layer에 대해 어떤 neuron이 활성화 되는지를 나타낸다. 

마지막 강조할 것은 오차는 cost function이 가중치 및 bias에 얼마나 민감한지를 보여준다. 



즉, 3.20 이 0.10 보다 32 배 더 민감하다. 즉 기울기가 큰 값은 조금만 조정해도 오차함수의 출력에 큰 변화를 줄 것이다. (0.1 대비 32배)

 

Comments