Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Archives
Today
Total
관리 메뉴

MG

[ML / Andrew Ng] Neural Networks - Backpropagation in Practice 본문

컴퓨터과학/AI_ML강의 (Andrew Ng)

[ML / Andrew Ng] Neural Networks - Backpropagation in Practice

MG# 2022. 5. 17. 02:38

이번 강의에서는 NN을 직접 돌릴때 그 과정이 어떻게 되는지와 컴퓨터 프로그래밍을 위한 몇 가지 방법을 알아볼 것이다.

 

우선 Unrolling parmeters이다. 이는 theta가 더 이상 vector가 아니고 matrix가 되었는데 이를 함수에 넣기 위해 하나의 벡터로 만들어야 한다. 그 때 이를 사용하여 theta1, 2, 3를 하나의 theta로 즉 matrix vector를 만들게 된다. J함수와 J의 편미분함수인 D 또한 마찬가지이다.

우리는 BP를 진행시키며 cost function이 제대로 줄어들고 있는지 갱신은 제대로 되는지 확인하여야 한다. 하지만 NN 특성상 변수가 너무 많고 계산이 어디서부터 틀렸는지 알기가 힘들다. 그렇기에 미분 정의를 활용해 J함수의 편미분함수인 D와 매우 작은 수인 epsilon을 활용한 numerical gradient를 비교해 본다. 이 값이 비슷하다면 진행이 정상적으로 이루어지고 있다는 뜻이다. 이 과정을 gradient checking이라고 한다.

 

주의할 점으로 이를 체크하고 나서 numerical gradient를 활용한 checking을 꺼두어야 한다는 것이다. 이 계산은 많은 반복문을 포함하기에 만약 끄지 않는다면 계산에 시간이 오래 걸리게 된다.

다음으로 weights의 initialization에 관한 내용이다. weights는 delta의 계산에 모두 들어가기에 영향을 많이 끼치게 되는데 만약 a값이 위 그림처럼 같게 된다면 a와 theta의 곱인 delta도 같게 되고 결국 갱신이 원활히 이루어지지 않게 된다. 심지어 0으로 세팅된다면 아예 진행이 안 될 수도 있다.

그러므로 우린 Random initialization을 사용한다. theta의 초기값을 아까 봤단 epsilon의 값 내로 설정하여 계산을 진행한다. 여기서 또 값이 같으면 안되기에 난수와 epsilon값을 곱한 값을 이용하게 된다. 그렇게 하면 갱신이 이루어지지 않는 상황을 방지할 수 있다.

이제 위의 과정들을 가지고 NN의 훈련을 진행시켜본다. 기본적으로 x의 차원을 input의 개수가 되고 output의 개수는 class의 개수가 된다. 그리고 y는 1, 2, 3... 처럼 나타나는게 아닌 해당 class만 1을 가지고 나머지는 0 값을 갖게 된다.

 

그리고 hidden layer는 1개인게 default이다. 만약 그보다 많다면 각 layer의 unit의 개수를 동일하게 맞추는 것이 보통 더 좋은 성능을 가진다. 또한 hidden unit의 개수는 많을수록 더 좋다.

이제 제대로 훈련을 해보면 우선 weights를 무작위로 0이 아닌 값으로 세팅한다. 그리고 FP를 거쳐 어떤 x값에 대한 h함수의 값을 얻는다. 이 값들을 토대로 cost function인 J함수를 구한다. 이제 BP를 진행해 각 weights에 대한 J편미분함수를 구한다.

이제 이 편미분함수들의 값이 맞는지 numerical gradient와 비교를 하는 gradient checking을 진행한다. 그리고 이 계산이 끝난 후 불필요한 계산을 피하기 위해 꼭 gradient checking을 해제한다. 위의 값들을 토대로 이제 gradient descent나 다른 최적화 방법을 적용하여 weigths 또는 bias를 갱신하여 J함수의 optima를 찾는다.

 

위 과정을 요약해 보자면 FP를 이용해 J함수를 구하였고 J편미분함수를 찾기 위해 BP를 진행하였다. 그리고 그 계산의 편의성과 오류를 방지하기 위한 중간과정을 거쳤다.