본문 바로가기

NLP/용어정리

[용어정리] LogSumExp

https://gregorygundersen.com/blog/2020/02/09/log-sum-exp/

 

The Log-Sum-Exp Trick

In statistical modeling and machine learning, we often work in a logarithmic scale. There are many good reasons for this. For example, when xxx and yyy are both small numbers, multiplying xxx times yyy may underflow. However, we can work in a logarithmic s

gregorygundersen.com

 

한글 자료 중에서 LogSumExp 의 정의와 사용 이유를 와닿게 작성한 포스팅이 없어서 위 글을 의역하기로 했다. 매우 훌륭하니, 영어를 잘 하신다면 꼬옥 읽어보기를 추천한다.

 


 

왜 저런 걸 해야...해?

import numpy as np

x = np.array([1000, 1000, 1000])
print(np.exp(x))
# array([inf, inf, inf])
  • 필요성을 느끼려면 직접 구해보는 게 최고다.
  • 나한테 벡터 X가 있다. 저 벡터를 softmax 연산을 구하기 위해 exp 를 적용하니까 inf 가 떴다.
  • 컴퓨터가 표현할 수 있는 숫자의 한계를 넘었기 때문이다.
  • 자, 그러면 컴퓨터한테는 이런 연산을 안 시킬 건가? 그럴 순 없다. 그래서 인간들이 이런 경우를 미리 따져둔다.

 

공식을 통해 이해하다

Softmax

  • 매우 유명한 식이지만 간단히 말하자면, 확률 분포로 변경하기 위해 쓰인다.
  • LogSumExp 설명하는데 필요해서 불렀다.

 

LogSumExp

  • LogSumExp 의 정의다.
  • 솔직히 Log 먼저 하고 Sum 하고 마지막에 Exp 할 줄 알았는데, Exp 부터 한다.

 

공식 유도

  • Softmax 공식에서부터 출발한다.
  • 양변에 log 를 취하면 위와 같아진다.

 

  • 좌우항 서로 교환하고 다시 exp 취하다보면 맨 아래 식이 나온다.
  • 이때 확률 p 는 어디서 많이 본 식의 형태로 정리된다.
  • 그렇다, 바로 LSE 공식이 보인다.
  • '아, LSE는 softmax 연산에서 많이 쓰이겠구나.' 정도만 받아들여도 충분하다. 맨날 천날 softmax 계산하는 거야 딥러닝하는 사람이라면 모를 수가 없다.
  • 다만, 제일 위에서 언급했던 것처럼 이제 overflow 나 underflow 가 발생하는 경우를 해결해야 한다. 보통 그런 문제를 해결해야 trick 이라고 불릴 법하니까.

 

LogSumExp Trick

  • LSE의 값을 y 라고 정의하고 식을 이리저리 전개하다보면 마지막에 도달한다
  • 마지막에 C가 등장한다. 그리고 (x - c) 역시 볼 수 있다.

  • 이미 눈치챈 사람도 있겠지만, x 중에서 가장 큰 값을 C로 두면 된다.
  • 그러면 overflow가 발생할 일이 없다. 이걸 trick 이라고 부른다.
  • 결과적으론 값이 동일하게 계산되지만, 오버플로우를 피했다.

 

다시 보는 예제

def logsumexp(x):
    c = x.max()
    return c + np.log(np.sum(np.exp(x - c)))
    
    
>>> logsumexp(x)
1001.0986122886682

>>> np.exp(x - logsumexp(x))
array([0.33333333, 0.33333333, 0.33333333])

 


 

다시 한번 이렇게 좋은 글을 써주신 Gregory Gundersen 에게 감사를 전한다.

 

https://github.com/gwgundersen

 

gwgundersen - Overview

gwgundersen has 82 repositories available. Follow their code on GitHub.

github.com

 

'NLP > 용어정리' 카테고리의 다른 글

[용어정리] self-BLEU  (0) 2024.07.23
[용어정리] Dual Softmax Loss  (0) 2024.02.02
[용어정리] SC: Self-Consistency  (1) 2024.01.09
[용어정리] MSE loss vs Cross Entropy loss  (0) 2023.04.11
[용어정리] reparameterization trick  (0) 2023.01.03