이론과 구현이 다르다?

  • logistic regression의 이론 공부를 마치고 나면 아래와 같이 생각이 정리된다.
    • output layer에 softmax layer를 두어 weited sum 의 output을 prob 형태로 변경한다.
    • prob 형태로 나온 output에 대해 실제 정답분포와의 cross entropy loss 를 사용하여 loss를 계산한다.
  • 근데... pytorch로 구현할때는...
    • output layer 에 softmax를 취하지 않고 바로 CrossEntropyLoss 를 적용한다...

왜?

  • pytorch 의 CrossEntropyLoss 안에 Softmax (정확하게는 log_softmax) 가 구현되어 있기 때문이다.

왜 이렇게 구현이..???

  • softmax 함수를 취할때 exp 함수를 적용하며, cross entropy를 계산할때 다시 log를 취한다....
  • 그럼 원래대로 돌아온다...
  • 다시 원복될거 두번할 필요도 없을 뿐더러... 더 중요한 이유가 있는데,
  • softmax를 취하기 위해 exp 함수를 적용하면서 overflow 문제가 발생하는 것이 더 주된 이유이다.
    • exp 함수를 취할때 overflow가 발생하면 log를 취하더라도 이미 값은 유실된 후이다(..... 는 뻘소리였나...)
  • 그래서 softmax가 따로 구현되어있지 않는 것임. 자세한 건 여기를 참조
  • 다 집어치우고, softmax + CrossEntropyLoss 를 합쳐서 구현하면... forward / backward 구현이 개 쉬워진다. 더하기 빼기로 구현되어버림... (당연히 계산량이 엄청 줄어듦...) 이제 진짜 이유. (공신력 있는 자료를 참고하는 습관을 갖자...)

'pytorch' 카테고리의 다른 글

02. model(network) 구현하기  (0) 2020.10.03
01. DataSet  (0) 2020.09.28

+ Recent posts