KalelPark's LAB

[ Pytorch ] Logsumexp 활용하기 본문

Python/Pytorch

[ Pytorch ] Logsumexp 활용하기

kalelpark 2023. 1. 5. 14:17

Logsumexp

        - 지정된 차원 dim으로부터, 입력 텐서의 각 행에 대한 합계 지수 로그를 반환합니다.

           이후, 계산은 수치적으로 안정화 됩니다.

 

사용하는 이유?

        - 매우 작은 양수나 매우 큰수를 나타내는 한 가지 방법으로는 Log를 활용하는 것이다.

           하지만, 덧셈은 약간의 trick이 필요하다. (LogSumExp Trick이 필요합니다.)

 

           두 큰 수 Exp(800) 와 Exp(900)을 더하고자 한다.

           문제는, Log에서 덧셈은 곱셈처럼 간단하지 않습니다. (컴퓨터에서 정확하게 나타내는 것이 불가능합니다.)

 

           그리하여, 각각의 큰 2개의 수를 2개의 수 중 최소 값으로 각각의 수를 나누고, 다시 2개의 수를 더한 후
           log를 취한 다음, 이전에 나눈 최소 값을 더해주면 된다.

 

       - 이러한 방식을 활용하면, 매우 큰 수도, 효율적으로 컴퓨터가 연산 가능한 작은 수로 표현하는 것이 가능합니다.

 

a = torch.randn(3, 3)
torch.logsumexp(a, 1)
torch.dist(torch.logsumexp(a, 1), torch.log(torch.sum(torch.exp(a), 1)))

 

참고

https://pytorch.org/docs/stable/generated/torch.logsumexp.html

 

torch.logsumexp — PyTorch 1.13 documentation

Shortcuts

pytorch.org

 

Comments