5-2 Backpropagation in Practice 본문

ML & DL/Coursera-ML

5-2 Backpropagation in Practice

eremo2002 2019. 1. 21. 13:45

뉴럴넷에서 Optimization 사용하기 위해 파라미터를 벡터나 행렬로 사용하는 방법에 대해 알아본다.

















뉴럴넷이 다음과 같을 , 파라미터 θ 행렬을 하나의 벡터에 담을 있다. (Gradient 행렬도 마찬가지)

기존의 θ 행렬은 하나로 만들었던 벡터에서 reshape 통해 추출할 있다.

(θ 행렬이 3 있고, 그림에서 히든 레이어가 1개밖에 없다. 히든 레이어가 2개가 되거나 파라미터 행렬이 2개만 있어야 되는 같은데 오타인지?)









위에서 정의한 방법을 사용하면 뉴럴넷 학습 알고리즘은 다음과 같이 요약할 있다.

  1. 파라미터 θ 행렬을 가지고 있는다.
  2. Optimization 적용하기 위해 초기의 파라미터 θ 행렬을 하나의 벡터로 펼쳐서 넣는다.
  3. 아래의 cost function에선 cost값과 gradientVec 리턴하기 위한 과정
    1. 위에서 정의한  θ 벡터에서 reshape 통해 레이어에 해당하는 파라미터 θ 행렬을 얻을 있음
    2. D1, D2, D3 J(θ) 구하기 위해 forward prop / backward  prop
    3. Backward prop해서 얻은 D1, D2, D3 펼쳐서 다시 하나의 gradientVec return































Cost값이 줄어들면서 Backpropagation 알고리즘이 동작하는 것처럼 보일 있지만 버그가 있을 있기 때문에 검증하는게 필요하다.

그러한 방법 중에 하나인 Gradient checking 대해 알아본다.













Cost function J 다음과 같을 , 임의의 위치 θ에서 기울기를 그려보면 파란 직선처럼 나올 것이다.

그리고 θ 기준으로 θ+입실론θ-입실론의 위치에서 함수값의 지점을 서로 이으면 다른 직선을 구할 있다.

만약 입실론 값이 10^(-4)처럼 매우 작은 값이라면 지점을 이은 빨간 직선이 θ에서의 기울기에 근사할 것이다. 오른쪽 아래와 같은 방법도 있지만 정확도가 다소 떨어지기 때문에 사용하진 않는다.

 

다시 말해, 직접 편미분값을 계산하지 않고도 대략적인 기울기 근사치를 구할 있는 것이다.












파라미터 θ 벡터가 다음과 같을 , 파라미터에 대한 편미분계수 값은 위에서 적용했던 방법을 이용하여 기울기 근사치를 구할 있다.













이러한 방법을 사용하여 Gradient checking 하는 과정은 다음과 같다.

 

  1. Back propagation 알고리즘을 이용하여 Dvec 계산한다.
  2. Numerical gradient check 사용하여 기울기 근사치를 구한다.
  3. Back prop 이용하여 구한 기울기 값과, numerical gradient 이용하여 구한 값을 비교한다.
  4. 만약 차이가 난다면 알고리즘이 뭔가 잘못된 것이고 비교했을 차이가 거의 없이 비슷하다면 알고리즘이 제대로 작동하는 것이므로 학습을 계속 진행한다.

 

-> 이러한 방법을 사용하여 검증을 중요한 것은 두개를 비교해서 이상이 없다면 gradient checking하는 과정을 이상 하지 않도록 만들어줘야 한다.

만약 그대로 내버려두면 매번 비교를 하기 때문에 쓸모 없는 연산을 계속 것이다.






























파라미터 랜덤 초기화에 대해 알아본다.














뉴럴넷으로 gradient descent라던지 다른 optimization method 사용하기 위해 어찌됐건 우선적으로 파라미터 θ 대한 초기화가 이루어져야 한다.













파라미터 θ 모두 0으로 초기화 시키면 다음과 같은 문제가 발생한다.

이전 레이어의 출력 값이 무엇이던지 간에 파라미터가 0이기 때문에 다음 레이어에서 출력되는 모든 unit들의 값이 같은 값을 가지게 된다.

그리고 출력 레이어에서 error 계산한 back prop 했을 때도 특정 레이어의 모든 델타 값은 같은 값을 가지게 된다.

이로 인해 파라미터 θ 대한 기울기 값도 모두 같은 값을 가지게 되고 업데이트 되는 값도 같은 값으로 업데이트 된다.

결과적으로 레이어의 모든 unit 값이 같아지는 대칭성 문제가 생기게 된다.











처음에 웨이트 값을 특정 범위의 랜덤값으로 초기화하여 이러한 Symmetry(대칭성, 균형(?)) 문제를 방지할 있다.






















지금까지 배운 뉴럴넷에 대해 요약 정리한다.













뉴럴넷을 사용할 어떤 뉴럴넷의 구조는 어떻게 선택해야 하는가?

일단 input layer unit수는 우리가 사용하는 data feature x 차원 수가 된다.

Output layer unit 수는 class

여러 개의 Hidden layer 사용할 보통 히든 레이어마다 같은 unit수를 가지게끔 한다. 대개는 unit수가 많을 수록 좋지만 그렇게 되면 계산량이 늘어난다. (unit 많다고 무조건 좋은 아님)















뉴럴넷을 training하는 과정은 6가지로 요약할 있다.

 

  1. 웨이트를 랜덤하게 초기화한다.
  2. Forward propagation으로 input x 뉴럴넷에 넣어 output layer에서 h(x) 구한다.
  3. 위에서 구한 h(x) cost function 넣어 cost 얼마인지 계산한다.
  4. Back propagation 통해 cost function 대해 파라미터의 편미분 값을 구한다.
    1. Forward prop / back prop 과정을 sample m만큼 반복한다.
    2. 과정에서 activation값과 delta 값을 누적하여 구하면서 cost function J 대한 파라미터 θ의 편미분 값을 구한다.
  5. Back propagation 통해 구한 편미분 값과 numerical gradient 통해 구한 기울기 근사값을 비교한다.
    1. 만약 값의 차이가 거의 없고 비슷하다면 back prop 알고리즘이 정상이므로 gradient checking 중지한다.
  6. Gradient descent 다른 optimization 기법과 back propagation 사용하여 cost function J 값이 최소화되는 파라미터 θ를 구해나간다.














파라미터가 두개만 있는 뉴럴넷의 cost function 그림이 다음과 같다고 가정해보자

실제로 뉴럴넷의 파라미터는 굉장히 많기 때문에 엄청나게 고차원인 함수일 것이다. 이러한 고차원 그래프를 시각화하기 힘들기 때문에 단순화시켜 이해해보자

그래프의 파란지점에 해당하는 곳은 cost값이 매우 작기 때문에 가설 h(x) target y 차이가 거의 없을 것이다. 반면 오른쪽 위의 빨간 지점은 cost 값이 크기 때문에 h(x) y 차이가 많이 것이다.












만약 다음과 같은 시작 지점에서 파라미터가 초기화 됐다면 back propagation gradient descent 통해 cost값이 작아지는 지점으로 점점 이동하여 파라미터들이 업데이트 것이다. 그래서 그림과 같은 좋은 local optimum 지점에 도달할 있을 것이다.

















'ML & DL > Coursera-ML' 카테고리의 다른 글

6-2 Bias vs Variance  (0) 2019.01.28
6-1 Evaluating a Learning Algorithm  (0) 2019.01.21
5-1 Cost function and Backpropagation  (0) 2019.01.18
4-3 Applications  (0) 2019.01.16
4-2 Neural Networks  (0) 2019.01.15
Comments