본문 바로가기
Dev/Coursera - Machine Learning

[Coursera ML][5주차] Neural Network : Learning

by 아임웬디 2020. 3. 3.

우와.. 강의 거의 다 들었는데... 컴퓨터가 맘대로 꺼져서필기가 다 날아갔다 ㅠㅠㅠㅠㅠ 저장을 습관화하자^^

앞에는 읽기자료에서 다시 최대한 복기...쒸익...

 

* 5주차 학습 목표 : 주어진 트레이닝 세트 parameter를 fitting하는 학습 알고리즘

 

1. Cost Function and Backpropagation

  • L = total number of layers in the network
  • sl = number of units (not counting bias unit) in layer l
  • K = number of output units/classes

Cost Function :

logistic regression과 다른 점 : bias unit 포함하지 않고 계산, K=1~K output 유닛 별 summation

 

Backpropagation :

 

intution : 

에러가 있는지 나타내는 것입니다. 

즉, aj(l)은 l 레이어에 있는 j유닛의 활성화를 의미하고, 

 

Forward Propagation과 반대로, 뒤의 output layer에서 input layer 방향으로 진행

 

- Algorithm

Step by Step으로 BackPropagation 이해하기 

 

 

2. Backpropagation Practice

1) Unrolling Parameters : advanced optimization 하기 위해서는 unroll('풀다'라는 뜻) 해야 함

ex.

thetaVector = [ Theta1(:); Theta2(:); Theta3(:); ]

Theta1 = reshape(thetaVector(1:110),10,11)

 

2) Gradient Checking : backpropagation의 bug 문제 해결

Red : Two-sided difference / Blue : One-sided difference

-> Red가 좀 더 정확하므로 Red 식 사용

 

- 구현 코드 in Octave

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;

 

- 순서

1. Implement backprop to compute DVec

2. Implement numerical gradient check to compute gradApprox

3. Make sure 1,2 similar values

4. Turn off gradient checking. (Verifying only once) Using backprop code for learning

 

3) Random Initialization : Symmetry breaking

- Zero initialization의 문제점 : hidden unit 값들과 input 값들이 동일해짐 (ex. a1^(2) = a2^(2)), delta 값도 동일해짐, 또한 gradient descent 업데이트 되어도 동일 => 모든 hidden unit이 input에 대해 같은 function 계산으로 redundant presentation

 

- 구현 코드 in Octave

If the dimensions of Theta1 is 10x11, Theta2 is 10x11 and Theta3 is 1x11.

Theta1 = rand(10,11) * (2 * INIT_EPSILON) - INIT_EPSILON;
Theta2 = rand(10,11) * (2 * INIT_EPSILON) - INIT_EPSILON;
Theta3 = rand(1,11) * (2 * INIT_EPSILON) - INIT_EPSILON;

 

4) Putting It Together

Reasonable default : 1 (or >1) hidden layer 모든 레이어에 같은 개수의 히든 유닛 (usually, 많을 수록 좋음)

 

Training a neural network

1. Randomly initialize weights
2. Implement forward propagation to get hΘ(xi)(=y(i)) for any x(i)
3. Implement code to compute cost function
4. Implement backprop to compute partion deriatives - for loop
for i = 1:m,
Perform forward propagation and backpropagation using example (x(i),y(i))
(Get activations a(l) and delta terms d(l) for l = 2,...,L

5. Use gradient checking to compare 4 computed using backprop / numerical estimate of gradient of cost function
Then, disable gradient checking
6. Use gradient descent or advanced optimization method with backprop to minimizee cost function of parameters 

 

 J(Θ) is not convex and thus we can end up in a local minimum instead.

 

 

 

댓글