2017-02-21 5 views
2

커스와 함께 커스를 사용하여 파이썬에서 신경망을 만들려고 노력 중입니다. 마지막 계층에서 활성화 함수로 시그 모이 드 함수를 사용하고 커스텀 손실이 시작될 때 Sigmoid를 갖는지 여부는 방황하고 있습니다. 아니. 그래서 여기 내가 그 무슨 뜻입니다 :시그 모이 드 함수의 위치가 신경망에서 중요한가?

enter image description here

내가 두 번째 모델의 손실이 계산되는 느낌을 가지고 있지만 그것이 다시 사이가 첫 번째 모델에서 S 상을 통해 전파되지 않습니다. 그게 맞습니까?

+0

사용중인 코드를 제공해 주실 수 있습니까? 실제로 이것은 정말로 흥미 롭습니다. –

답변

3

사실, 두 번째 경우에 백 프로 그레이션은 시그마 이드를 통과하지 않습니다. 손실 함수 내부에서 데이터를 변경하는 것은 정말 나쁜 일입니다.

이렇게하는 것이 나쁜 이유는 네트워크에서 실제로 발생하는 오류가 아닌 출력에 오류를 역 전파하기 때문입니다. 간단한 경우로 자신을 설명하면서

: 당신은 바이너리 형태로 레이블이는 시그 모이 사용자 정의 손실 함수 내부에있는 경우 텐서가 [0, 0, 1, 0] , 당신이 당신의 손실 S 상 변환됩니다이 [-100, 0, 20, 100], 같이 출력이있을 수 있습니다 말한다 이것은 대략 tih와 유사한 것으로 변신합니다 : [0, 0.5, 1, 1] backpropagated 될 오류는 [0, -0.5, 0, -1]입니다. 백 프레젠테이션은 이 아니며은 시그 모이 드를 고려하므로이 오류를 직접 출력에 적용합니다. 오류의 크기가 출력 오류의 모든 크기에 반영되지 않음을 알 수 있습니다. 마지막 값은 100이며 음의 영역이어야하지만 모델은 해당 계층에서 -1의 작은 오류를 역 전파합니다.

요약하면 오류를 백 프레젠테이션 할 때 백 프로 그레이션이 고려해야하기 때문에 시그 모이 드가 네트워크에 있어야합니다.

+0

놀라운! 답변 해 주셔서 감사합니다. 정말 고맙습니다. – DalekSupreme