본문 바로가기
딥러닝

딥러닝에 사용하는 확률분포 함수

by 초특급하품 2020. 3. 30.

모델을 학습시키는 과정에서 필요한 확률 분포 함수 중 자주 사용되는 몇 가지만 정리해본다.

 

Softmax

입력으로 가중치를 받아서 각 가중치를 [0, 1]의 확률로 정규화하는 방법 중 하나이다.

$$ p_{i} = \frac{e^{z_{i}}}{\sum_{j=1}^{N}e^{z_{j}}} $$

입력 크기에 단순히 선형 비례하지 않고, $e^{x}$의 값에 비례한다.

 

def softmax(z):
    e_z = np.exp(z - np.max(z))
    return e_z / e_z.sum()

 

softmax 함수에서 최댓값을 모든 가중치에서 빼고 시작하는데, 이는 지수가 커서 발생하는 부작용을 줄이기 위함이다.
[1, 2, 3]을 입력으로 실행해보면 지수함수 특성상 값이 클수록 가중치가 높아져 [0.09 0.24 0.67] 결과가 나온다.

 

Boltzmann

softmax와 비슷하게 [0, 1]의 확률분포로 정규화시키는데 온도 파라미터 $\tau$가 추가된다.
$$ p_{i} = \frac{e^{Q(i)/\tau}}{\sum_{j=1}^{N}e^{Q(j)/\tau}} $$

온도 파라미터의 의미는 물리학에서 왔다.

맥스웰-볼츠만 분포에서 따왔는데 낮은 온도에서는 분자의 속도가 늦고, 높은 온도에서는 속도가 빠른 분포에서 착안했다. 물리학에서 이런 의미가 있다면 강화 학습에서는 탐험이라고 보면 된다. 강화 학습의 초기에는 높은 온도로 무작위 하게 여러 탐험을 하고, 모델이 안정되면 온도를 낮춰 학습한 방향대로 탐험하게끔 유도한다.

 

def boltzman(z, temperature):
    exponent = np.true_divide(z - np.max(z), temperature)
    return np.exp(exponent) / np.sum(np.exp(exponent))

 

temperature = 1인 상태로 [1, 2, 3]을 실행해보면 softmax와 같은 [0.09 0.24 0.67] 결과가 나온다.
temperature = 0.5로 온도를 더 낮추면 [0.02 0.12 0.87]가 나온다. 입력받은 가중치에 더 집중해서 가장 큰 값의 확률이 더 높아졌다.
temperature = 0.1까지 낮추면 [0. 0. 1.]로 가장 큰 값의 확률만 나온다.

 

반대로 온도를 temperature = 10으로 올리면 탐험의 정도가 커져 입력의 차이가 무뎌지기 때문에 [0.3 0.33 0.37]로 1/3에 수렴해 가는 것을 확인할 수 있다.

'딥러닝' 카테고리의 다른 글

Keras로 CartPole 강화학습  (0) 2019.12.08
Keras로 모델 저장, 불러오기  (0) 2019.11.16
Keras로 간단한 CNN 구현하기  (0) 2019.11.13
알파고의 몬테카를로 방법  (0) 2019.11.10
알파고의 강화학습  (0) 2019.11.03

댓글