MindSKKU / NNE

This page is for skku NNE assignment
4 stars 2 forks source link

Gradient 계산하는 과정에서 질문 있습니다. #18

Open wolverine28 opened 6 years ago

wolverine28 commented 6 years ago

현재 TwoLayerNet 클래스 안에서 self.lastLayer를 보면 self.weights을 인풋으로 받아 계산하고 있습니다. 이 self.weights는 regularization term을 계산하기 위해 사용되고 있는데 self.weights에는 bias들이 포함되어 있지 않습니다.

  1. Bias에 regularization penalty를 주지 않는 현재의 방식이 맞는 방식입니까? 맞다면 gradient를 계산할때 Bias들은 신경 쓰지 않아도 되는건가요?

  2. numerical_gradient를 계산할 때 W에 변동을 주면서 최종 loss의 변동이 얼마나 되는지 계산하여 수행하고 있습니다. 이때 loss를계산하는 식 내에 이미 regularization term이 포함되어 있기 때문에 수치미분값에 이미 regularization term의 영향이 포함되어 있다고 볼 수 있는데 Regularization에 대한 Gradient를 따로 다시 구해 주어야 하나요?

MindSKKU commented 6 years ago

좋은 질문 감사드립니다.

  1. 이 부분은 heuristic 한 영역이라 어떻게 하더라도 상관 없긴 합니다. 하지만 bias는 regularization을 하지 않는게 좋다고 알려져있기 때문에 이번 과제에서는 bias를 regularization할 때 제외시켰습니다.

참조문헌 10.1 A recipe for using weight-decay Weight-cost is typically not applied to the hidden and visible biases because there are far fewer of these so they are less likely to cause overfitting. Also, the biases sometimes need to be quite large.

  1. loss값 자체는 backpropagation(chain rule을 이용한 미분값 계산)에 영향을 주지는 않습니다. 힌트를 드리자면 new_loss = loss + f(W) 형태에서 W, h, s, p등을 미분할 때 각각 어떤 형태로 값이 나올지 생각해보시면 좋을 것 같습니다.
wolverine28 commented 6 years ago

Bias의 regularization에 대한 설명 감사합니다.

2번 질문에 추가적인 질문을 하면

물론 backpropagation과정에서 loss 값이 직접적으로 영향을 미치지 않는것은 알고 있습니다. OutputLayer의 backward부분에서 cross entropy의 gradient를 계산하고 있으나(저의 경우), regularization term에 대한 미분은 계산을 안하고 있기에 일반 TwoLayerNet.gradient에서는 regularization term에 대한 미분을 추가해 주어야 하는 것은 알겠습니다.

2번 질문의 요지는 TwoLayerNet.numerical_gradient를 계산할 때는 직접 dw에 따른 dloss 값을 구함으로써 수치편미분을 수행하고 있는데 이때 loss 값을 계산하는 과정에서 regularization term이 계산되고 있기 때문에 regularization term을 따로 다시 계산하지 않아도 될것 같은데 과제에는 그 부분이 있어 질문을 올렸습니다.

MindSKKU commented 6 years ago

Numerical_gradient관련 질문이였군요. 제가 질문을 잘못 봤었습니다. 우선 저희 코드에 실수가 있었습니다. 지적해주셔서 감사합니다. 말씀하신대로 numerical loss는 dL/dW = ( L(x+h) - L(x-h) )/ 2h 로 구하기 때문에 regularization term도 loss 반영이 됩니다. regularization term을 backpropagation할 때 처럼 따로 계산할 필요가 없습니다. 이번 과제 example code에서는 regularization constant가 작아서 오류가 드러나지 않았네요.