解答¶
1¶
$$ \begin{cases} \begin{aligned} g(1) &= 1-1=0 & g^{\prime}(1) &= 1-0 = 1\\ h(1) &= \log(1)=0 &h^{\prime}(1)&= \frac{1}{1} = 1 \end{aligned} \end{cases} $$より、接する。実際にグラフを描いて確かめてみる。
In [1]:
import numpy as np
import matplotlib.pyplot as plt
In [2]:
g = lambda x:x-1
h = lambda x:np.log(x)
In [3]:
X = np.linspace(1e-2,5,1000)
In [4]:
plt.plot(X,g(X), color="red", label="$g(x)=x-1$"), plt.scatter(1,g(1),color="red" , s=100, alpha=0.5)
plt.plot(X,h(X), color="blue", label="$h(x)=\log(x)$"), plt.scatter(1,h(1),color="blue", s=100, alpha=0.5)
plt.grid(), plt.xlabel("$x$"), plt.ylabel("$y$"), plt.legend()
plt.show()
2¶
$d(x) = x-1-\log(x)$ は、$1$ で調べたように $x=1$ で $d(1) = 0$ となる。
また、$d^{\prime}(x) = \begin{cases}1-\frac{1}{x} > 0 & (\text{when $x>1$})\\1-\frac{1}{x} \leq 0 & (\text{when $x\leq1$})\end{cases}$ となることから、$d$ は $1>x>0$ で単調減少し、$x>1$ で単調増加することがわかる。
以上より、題意が成立する。ついでにこのグラフも描いてみる。
In [5]:
plt.plot(X,g(X)-h(X), color="green", label="$d(x)=x-1-\log(x)$"),
plt.scatter(1,g(1)-h(1), color="green", label="$x=1$", s=100)
plt.axvspan(1,5,color="red",alpha=0.2), plt.axvspan(0,1,color="blue",alpha=0.2)
plt.grid(), plt.xlabel("$x$"), plt.ylabel("$y$"), plt.legend()
plt.show()
3¶
$p_k>0$ だから、
$$ \begin{aligned} p_kd\left(\frac{q_k}{p_k}\right) &= p_k\left(\frac{q_k}{p_k} - 1 - \log\left(\frac{q_k}{p_k}\right)\right)\\ &= q_k - p_k + p_k\log\left(\frac{p_k}{q_k}\right)\\ &\geq0\quad\left(\text{with equality if and only if $p_k=q_k$}\right)\\ \therefore p_k\log\left(\frac{p_k}{q_k}\right) &\geq p_k-q_k\\ \sum_{k=1}^mp_k\log\left(\frac{p_k}{q_k}\right) &\geq \sum_{k=1}^m\left(p_k-q_k\right)\quad\left(\text{with equality if and only if $p_k=q_k$, giving $k=1,\ldots,m$}\right)\\ \therefore \mathrm{KL}\left(p\|q\right) &\geq 0 \end{aligned} $$4¶
$$
\begin{aligned}
\hat{\boldsymbol{\theta}}
&= \underset{\boldsymbol{\theta}}{\text{argmin}} \mathrm{KL}\left(p_D\|q_{\boldsymbol{\theta}}\right)\\
&= \underset{\boldsymbol{\theta}}{\text{argmin}} \int p_D(x)\log\left(\frac{p_D(x)}{q_{\boldsymbol{\theta}}(x)}\right)dx\\
&= \underset{\boldsymbol{\theta}}{\text{argmin}} \sum_{k=1}^np_D(x_k)\log\left(\frac{p_D(x_k)}{q_{\boldsymbol{\theta}}(x_k)}\right)\\
&= \underset{\boldsymbol{\theta}}{\text{argmin}} \left(-\sum_{k=1}^np_D(x_k)\log\left(q_{\boldsymbol{\theta}}(x_k)\right)\right)\\
&= \underset{\boldsymbol{\theta}}{\text{argmax}} \sum_{k=1}^n\frac{1}{n}\log\left(p\left(x_k|\boldsymbol{\theta}\right)\right)
\end{aligned}
$$
したがって、題意が成り立つ。
これは、
- 「経験分布 $p_D$ に対するモデル分布 $q_{\boldsymbol{\theta}}$ の Kullback-Leibler Divergence の最小化
- 「経験分布 $p_D$ について平均をとったモデル分布 $q_{\boldsymbol{\theta}}$ の対数尤度 の最大化
が等しいことを表す。
KL Divergence¶
以下では、問題と直接関係ないが、いくつかの確率分布で実際にKL-Divergenceを求めてみる。
確率分布名 | scipy クラス |
---|---|
正規分布 | stats.norm |
ベータ分布 | stats.beta |
$\chi$ 二乗分布 | stats.chi2 |
F分布 | stats.f |
ガンマ分布 | stats.gamma |
t分布 | stats.t |
一様分布 | stat.uniform |
In [6]:
from scipy import stats
In [7]:
N = 1000
xmin = -3
xmax = 3
In [8]:
x = np.linspace(xmin,xmax,N)
y = stats.norm.pdf(x)
dXs = np.arange(-1,0.2,0.2)
In [9]:
n_fig = len(dXs)
n_col = 3
n_row = n_fig//n_col if n_fig%n_col==0 else n_fig//n_col+1
In [10]:
def KL_diver(P,Q):
return np.sum([q*np.log(q/p) for p,q in zip(P,Q)])
In [11]:
fig = plt.figure(figsize=(6*n_col, 4*n_row))
for i,dx in enumerate(dXs):
ax = fig.add_subplot(n_row,n_col,i+1)
y_ = stats.norm.pdf(x+dx)
ax.plot(x,y, "b"), ax.fill_between(x,0,y, color="b",alpha=0.3)
ax.plot(x,y_,"r"), ax.fill_between(x,0,y_,color="r",alpha=0.3)
ax.set_title(f"KL Divergence: {KL_diver(y,y_):.2f}")
plt.tight_layout()
plt.show()
In [ ]: