카테고리 없음

[week5] Backpropagation in Pratice

jhnoru 2019. 10. 4. 13:24

A. Implementaton Note : Unrolling

 

1
2
3
4
5
6
7
8
thetaVector = [ Theta1(:); Theta2(:); Theta3(:); ]
deltaVector = [ D1(:); D2(:); D3(:) ]
 
 
Theta1 = reshape(thetaVector(1:110),10,11)
Theta2 = reshape(thetaVector(111:220),10,11)
Theta3 = reshape(thetaVector(221:231),1,11)
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

1. 프로그래밍에서 Forword Propagation과 Back Propagation을 하기 편하게 만들기 위해서 Theta를 Vector형태로 변환하여 주는 것이 좋다. 위와 같은 형태로 변환하니 실습 때 이용해볼 것.

 

 

 

B. gradient Checking

1
2
3
4
5
6
7
8
9
epsilon = 1e-4;
for i = 1:n,
  thetaPlus = theta;
  thetaPlus(i) += epsilon;
  thetaMinus = theta;
  thetaMinus(i) -= epsilon;
  gradApprox(i) = (J(thetaPlus) - J(thetaMinus))/(2*epsilon)
end;
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" stye="text-decoration:none;color:white">cs

 

1. 우리가 실행하고 있는 백프로파게이션 알고리즘(순간변화율, 미분값을 찾기 위한)이 잘 시행되고 있는가를 확인하기 위해서 Gradient Cheking이 필요하다. 어떻게 하냐고? 배웠던 대로 x축 변화율을 y축변화율로 빼주면 된다.

 

2.  ϵ=104이면, 충분히 확인이 가능하고, 너무 작은 엡실로은 Numericl problem을 가질 수 있다.

 

3. 그라디언트 채킹을 통해, 확인이 된다면, 적정 수준에서 그만둬야 한다. 이건 너무 느려!

1. D하나를 계산하기 위해서 모든 세타를 불러오고, 각각에 대해 연산을 해야 하는 만큼 무척 무거운 연산이다.

 

 

C. Random Initialization

1.  초기 세타를 모두 0으로 설정하는 것은 신경망에서는 허용되지 않는다. 왜냐하면, 가중치가 모두 0이기 때문에, 다음 노드에서 모두 같은 값만 업데이가 되기 때문이다. 그 대신 임의로 세타 값을 설정하는 방법이 위와 같은 방법이다.

 

 

D. Putting it Together

1. 먼저, 뉴럴 네트워크의 아키텍처를 고른다. 신경망 구조가 어떤 형태인지를 고르는 것이다.  여기에서 인풋 유닛의 수(피쳐의 수), 아웃풋 유닛의 수(분류되는 클래스의 수) 히든 레이어의 수(많으면 많을 수록 대게는 좋다)를 골라야 한다.

 

2. 신경망을 학습한다. 가중치를 임의로 설정하고, 피드 포워드를 통해 h(x)를 얻고, y 값과 비교하여 비용함수를 계산한다. 비용함수로 부터, 편미분하며 백프로파게이션을 한다. 이게 잘되었는지 확인하기 위해, 일일이 계산하여 값을 초반 부분만 확인하다. 그리고 경사하강법이나 진보된 형태의 최적화 방법을 사용하여 비용함수를 최소화한다.

 

3. 로컬 미니마(지역 최적해)일 수 있다는 것을 잊지 말자.