나만의 Tensorflow flowchart for feedforward neural networks

지금까지 만들었던 MLP와 CNN의 high level tensorflow 구조도를
한번 깔끔하게 정리해보고 싶었다.



몇 가지 말해보면

1. Batch normalization (BN) 및 Batch re-normalization (BRN) 과 관련된 "bn_param"의 parameters는 gradient descent로 optimize 하는 것이 아니고 그냥 update 만 한다. (assign 이용)

2. "nn_param"의 parameters는 gradient descent로 optimize 한다.
그래서 Tensorflow optimizer를 사용할 때 var_list에 "nn_param"만 넣어주게된다.

3. Feedforward 동작을 train mode와 test mode로 나눠주었다.
Train mode에서는 dropout과 각종 BN 및 BRN이 적용되는 반면에 test mode에서는 BN의 moving average만 적용된다.
그렇기 때문에 "nn_param"을 optimize 한 후 제대로 된 최종 cost를 계산하기 위해서는 test mode의 feedforward와 cost를 활용한다.




Comments

  1. 안녕하세요, 최근 머신러닝과 관련하여 공부를 시작한 학생입니다.

    BN과 BRN의 차이점은 어떤것이 있는지 알 수 있을까요?

    또한 BN을 하였을때 왜 성능이 더욱 좋아지는지도 궁급합니다.

    ReplyDelete
    Replies
    1. 1. BN을 하였을 때 성능이 좋아지는 이유:
      각 layer 마다 보통 tanh나 ReLU function을 activation으로 자주 사용합니다.
      아시다시피 tanh의 경우 input이 너무 크거나 너무 작으면 output이 평평해지는 구간에 있게 되고 나중에 backpropagation을 통해 gradient를 구할 때 gradient가 0에 가까워지는 현상이 발생합니다.
      이렇게 gradient가 너무 작아지면 neural network의 parameter가 update되지 않습니다.
      parameter를 w라고 했을 때 새로운 w_{new}는 w_{new} = w_{old} - \alpha*gradient_{w} 식으로 update 되기 때문입니다.
      ReLU의 경우도 input이 양수로 커지면 상관 없을 수 있지만 음수로 커지면 0이 되기 때문에 이 또한 의미있는 gradient를 얻는 데에 실패할 확률이 큽니다.
      따라서 layer 마다의 input을 normalization을 해줌으로써 평균적으로 0 근처에 있게 만들어주면 좀 더 의미있는 gradient를 얻을 수 있고 parameter update도 더 빨라질 수 있습니다.

      2. BN과 BRN의 차이:
      일반 BN의 경우 train 시 각 batch에 대한 \mu_{batch}와 \sigma_{batch}를 사용해서 normalize를 하게 됩니다.
      따라서 각 batch마다 \mu_{batch}와 \sigma_{batch} 값이 상이하다는 성질이 있습니다.
      그래서 test 할 때는 \mu_{batch}와 \sigma_{batch}의 moving average \mu_{avg}와 \sigma_{avg}를 차용하게 되는데 이 부분에서 train 때에 비해 성능이 저하되는 현상이 일어날 수 있습니다.

      이런 성질을 어느 정도 잡아주고자 batch re-normalization이 소개됐는데 주요 포인트는 각 train 시에도 각 batch만의 \mu_{batch}와 \sigma_{batch} 대신 moving average인 \mu_{avg}와 \sigma_{avg}를 사용해보자는 아이디어입니다.
      물론 초반부터 moving average는 쓰지 않고 서서히 train이 궤도에 올라가면 본격적으로 사용하게 됩니다.
      해당 논문 https://arxiv.org/abs/1702.03275 참조하시면 좋을 것 같습니다.

      Delete

Post a Comment