0~1사이의 출력값을 갖는 활성화함수.
zero-centerd하지 않아서 zig-zag 수렴을 한다는 것이 무엇일까?
sigmoid는 모든 입력값을 양수로 만든다. 그렇기에 sigmoid를 활성화함수로 사용하면 각 레이어의 입력값이 양수가 되고, 이는 backprop시 모든 가중치의 부호가 동일해진다는 것이다.
만약 가중치 w1, w2가 있고, w1은 작게 w2는 크게 설정하는 것이 최적이라고 할때,
-> w1은 음의 방향으로, w2는 양의 방향으로 업데이트 불가능
-> 대신 w1 작게 +, w2 크게 +++
-> 다음 스텝에서는 w1 크게 ---, w2 작게 - 이런식으로 업데이트하는 것.
=> 이것이 바로 zig-zag현상
즉, 입력이 모두 양수일때 모든 가중치의 그래디언트 부호가 같아지며, zig-zag path로 수렴하게되어 수렴 속도가 느려질 수 있다.
-> sigmoid의 단점 뿐 아니라, 데이터 정규화, batch norm등이 도움되는 이유임
https://velog.io/@ryuni/CS231n-Lec6#1-sigmoid-function
https://gooopy.tistory.com/52?category=824281
추가적인 내용!!!
zero centered가 아닌, 즉 모두 양수로 만드는 sigmoid함수를 사용했을때 모든 가중치의 부호가 같아진다는데, 그럼 그 부호는 누가 정하게 되는 걸까?
물론 단순히 생각하면 얘의 부호를 따라가겠지. 근데 각 가중치가 위치가 다른데 , 즉 ustream gradient의 부호가 같을지 어떻게 안다는 거지?
라는 의문이 들었다.
상세하게 계산해보자
https://wikidocs.net/37406의 구조를 참고하면 이해가 빠르다.
위의 게시물의 구조를 생각한다면 각 뉴런의 아웃풋(, )에 대한 타겟(, )가 있다.
와 의 그래디언트를 계산해보면 서로 다른 부호를 가지는 것을 볼 수 있다.
=> 하지만 위의 상황은 여러 아웃풋에 대한 여러 타겟이 존재하는 상황이기 때문이다.
원래 우리는 아래와 같은 형태를 가지게 된다. 하나의 인풋, 인풋의 계산 결과에 대한 타겟하나
그러므로 upstream gradient의 부호는 맨 뒤의 의 값에 따라 정해진다.