Closed eubinecto closed 4 years ago
슬라이드 |
---|
수학적인 정의는 쌍곡함수의 정의에서 부터 시작한다.
Hyperbolic functions: coshx, sinhx, tanhx |
---|
이런 순수 수학적인 부분은 크게 중요하지는 않지만, 그냥 재미로
coshx는 현수선(cartenary)이다.
물리학적인 의미는 그렇다.
이걸 유도를 하는 과정은 paramteric equation으로 그렇게 했던 것으로 기억.
슬라이드 |
---|
sigmoid 정의 |
---|
둘이 그런 관계에 있기 때문에, 코드에서 tanhx를 정의할 때 이전 정의를 해놓은 sigmoid함수를 재사용 하면된다: https://github.com/eubinecto/k4ji_ai/blob/e94a5d01fb0fb59a82e0a32e016356bbc9a75840/eb/src/chap_5/mathutil.py#L38-L39
슬라이드 |
---|
슬라이드 |
---|
sigmoid는 음수 값을 출력하지 않는다. 하지만 tanh은 음수 값을 출력한다.
때문에 tanh를 사용하면, 값의 합산과 함께 감산도 할 수 있는 효과를 기대할 수 있는 것. 이는 순환벡터 정보의 손실을 완화하는데 도움을 줄수 있다.
음.. 근데 그게 다른 모델 중에서도 유독 LSTM에서만 tanhx를 사용하는 이유가 될 수 있나?
DNN도 기울
TFKR에서 LSTM에서는 왜 hyperbolic tangent를 쓰는가? 에 대한 질문을 한 사람이 있다.
질문:
LSTM에서는 왜 sigmoid대신 tanh를 쓴걸까요? 전달함수의 미분식이 시그모이드보다 간단해 연산량을 줄이기 위해? 더 기울기가 큰 중간값 전달특성 때문에??
베댓:
저도 같은 고민을 한적이 있어, 불완전하나마 나름의 결론을 말씀드리면..제 생각엔 tanh의 경우처럼 아웃풋의 평균이 대략 0이 되도록 하는 것이, 동일한 파라메터가 담긴 RNN/LSTM 셀을 "반복적으로", 즉 recurrent의 형태로 쓰는 구조에서 중요하지 않을까 합니다. 만약 sigmoid를 썼다면 0~1 사이의..평균적으로 0.5라는..0이 아닌 아웃풋 값을 낼 경우..이게 "반복적" 네트워크에 의해 그 범위가 점차로 양 혹은 음의 방향으로 쉬프트가 되게 되어 activation function에 들어갈 때 그 펑션의 유의미한 범위로 인풋값을 유지를 못해주기 때문이 아닌가 합니다. 예를 들어 1-dimensional 인풋/아웃풋을 예로 들면..y=3x+0이라고 우리의 모델이 학습됐을 때..인풋이 [-1, 1]의 범위라면 y는 [-3, 3]의 범위가 되고, 이게 tanh를 거쳐서도 대충 [-1.25, 1.25] 사이에 있게 되고, 이 값이 다시 (recurrent하게) y=3x+0 이 변환에 다시 입력으로 들어가게 됩니다. 그럼 [-3.75, +3.75] 범위의 값이 나오고 대충 값의 범위는 더 커지긴 했으나 그래도 tanh 함수 입장에서 볼 때 유의미한 아웃풋 값을 내줄 수 있는 0근처의 값으로는 유지가 된다고 볼수 있습니다. 반면, 첫번째 y=3x+0를 거쳐서 나온 y의 범위인 [-3, 3]이 sigmoid를 거치면 대략 [0.1, 0.9]의 범위가 되고, 이게 다시 y=3x+0를 거치면 [0.3, 2.7]이 되고 이는 벌써 양수 방향으로 값들의 범위가 쉬프트되어, sigmoid의 값이 가장 sensitive해서 유의미한 아웃풋 값을 주는 인풋값의 범위인 0근처에서 멀어지기 시작하게 됩니다. 그럼 timestep을 지남에 따라, 값은 점점더 양수 쪽으로 치우치고, sigmoid는 그냥 saturate된 값인 1만을 내게 되어, 애초에 [-1, 1] 영역에서 가지던 인풋값의 유의미한 정보를 잃어버리게 되겠죠. 그럼 왜 이런 문제가 RNN/LSTM이 아닌, 즉 recurrent 구조가 아닌 fully connected나 conv layer에선 없었느냐 하면, 우리는 다음 레이어에서 바이어스만..즉 위의 경우 y절편인 0에 해당 하는 값만 다른 값으로 바꿔줘도 sigmoid가 양수 방향으로 쉬프트한 값의 범위를 자유로이 0근처로 만들 수 있기 때문입니다. 즉, 다음 레이어에선 우리는 그 전 레이어에서 썼던 값들과는 다른 새로운 가중치를 설정할 수 있기 때문에, sigmoid의 양수로의 쉬프팅은 문제가 안 될 것 같습니다.
쌍곡 탄젠트 함수의 정의
쌍곡 탄젠트 함수와 시그모이드 함수와의 관계
쌍곡 탄젠트 함수의 역할