でーじデータ

機械学習に関する実験と理論をまとめます。

交差エントロピーに繋がるお話

機械学習でよく使われる損失関数。

  

エントロピー(Entropy)

1948年にShannonによって書かれた論文 (A Mathematical Theory of Communication)

http://people.math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf

10ページに以下の文章が書かれています

f:id:shimaby:20210116200752p:plain

n個の事象(イベント)が起きる確率を$p_1, p_2, ..., p_n$。わかることがそれだけだとする。不確実性を示す尺度を見つけることができるだろうか?

 例えば、

f:id:shimaby:20210116203819p:plain

三つのイベント、(倒産、時間通り出社、遅刻)があり、起きる確率が$(1/10, 7/10, 1/5)$とし、足し合わせると1になります。上記の図は、同等に以下のようにも表現できます

f:id:shimaby:20210116205101p:plain

 倒産をしなかったから時間通りに出社、または遅刻、といった表現もできるので、上記に図に沿って計算すると同じ確率が算出されます

時間通り出社 = (9/10) x (7/9) = 7/10

遅刻 = (9/10) x (2/9) = 1/5

そして、このような同等の表現に不変であるべき尺度を$H$と書きますと、最初の例を

$H(\frac{1}{10}, \frac{7}{10}, \frac{1}{5})$

 2番目の例を

$H(\frac{1}{10}, \frac{9}{10}) + \frac{9}{10} H(\frac{7}{9}, \frac{2}{9})$

 ($\frac{9}{10}$の確率が係数として使われる)

とすると以下の等式

$$H(\frac{1}{10}, \frac{7}{10}, \frac{1}{5}) = H(\frac{1}{10}, \frac{9}{10}) + \frac{9}{10} H(\frac{7}{9}, \frac{2}{9})$$

 を満たす$H$はなんでしょうか。

それが、よく目にするエントロピーの公式

$$H(p_1, p_2, .., p_n) = -\sum_{j = 1}^{n}p_j\log p_j$$

実際に計算をしてみますと、

$$H(\frac{1}{10}, \frac{7}{10}, \frac{1}{5}) = -\frac{1}{10}\log(\frac{1}{10}) - \frac{7}{10}\log(\frac{7}{10}) - \frac{1}{5}\log(\frac{1}{5})$$

 $$H(\frac{1}{10}, \frac{9}{10}) + \frac{9}{10} H(\frac{7}{9}, \frac{2}{9}) = -\frac{1}{10}\log(\frac{1}{10}) - \frac{9}{10}\log(\frac{9}{10}) -\frac{7}{10}\log(\frac{7}{9}) - \frac{1}{5}\log(\frac{2}{9})$$

$$=-\frac{1}{10}\log(\frac{1}{10}) - \log(9/10)^{9/10}(7/9)^{7/10}(2/9)^{1/5}$$

$$=-\frac{1}{10}\log(\frac{1}{10}) - \log(9/10)^{7/10}(7/9)^{7/10}(9/10)^{1/5}(2/9)^{1/5}$$

$$=-\frac{1}{10}\log(\frac{1}{10}) - \log(7/10)^{7/10}(1/5)^{1/5}$$

$$=-\frac{1}{10}\log(\frac{1}{10}) - \frac{7}{10}\log(\frac{7}{10}) - \frac{1}{5}\log(\frac{1}{5}) =H(\frac{1}{10}, \frac{7}{10}, \frac{1}{5})$$

 見事一致します。

結果イベントの確率のみで一意に表現できる尺度になっております。

そして、不確実性を示す量として適していることが以下の例でみられます。

$$H(p) = - p \log p - (1-p) \log(1-p)$$

 $p$はイベントの確率を示しております。グラフにすると

f:id:shimaby:20210116224104p:plain


 $p=1/2$の値で頂点を達しているのがみられます。$p=1/5$の場合は、一番不確実であるとエントロピーの量からもみられます。

異なる確率を比較するための量は?

 カルバック・ライブラー情報量(Kullback-Leibler divergence)

Shannon氏の出版後に、まもなくKullback&Leibler氏が情報量に関して論文を出します。(On Information and Sufficiency)

Kullback , Leibler : On Information and Sufficiency

f:id:shimaby:20210117161733p:plain

 

確率変数$X$が状態$x_j$である確率を$p_j$とし、$\sum_j^np_j = 1$を満たします。一方、別の確率$q_j$も、確率変数$X$が状態$x_j$である確率を$q_j$とし、$\sum_j^nq_j = 1$を満たします。

カルバック・ライブラー情報量とは、確率の差異を測る量になります。

$$\sum_{j=1}^n p_j \log\left(\frac{p_j}{q_j}\right)$$

実際に数値をみてみると

f:id:shimaby:20210117190624p:plain

最小値は$0$で差異がない場合($p={1/2, 1/2}$, $q={1/2, 1/2}$)

最大値は$0.231$で確率の差異が一番大きい場合に起きる事がわかります。

では交差エントロピーとは?

交差エントロピー

 真の確率を$p$とします。推定した確率を$q$とします。交差エントロピーは以下で表現されます。

$$-\sum_{j}^{n}p_j\log(q_j)$$

エントロピーとカルバック・ライブラー (KL) を足し合わせることによって表現出来ます。

[交差エントロピー] = [真の確率pのエントロピー] + [pとqのKL情報量] 

$$-\sum_{j}^{n}p_j\log(q_j) = -\sum_j^np_j\log(p_j) + \sum_j^np_j\log\left(\frac{p_j}{q_j}\right)$$

 [真の確率pのエントロピー]はpの情報量を示しており、交差エントロピーに潜むそもそもの大きさになります。そして、$p$と$q$の差異をカルバック・ライブラー情報量で表現される事が出来ます。

実際に損失関数として使用されている形では、全てのサンプルに交差エントロピーを計算する必要がありますので、以下の形になります。

$$-\frac{1}{N}\sum_{k}^N\sum_{j}^np_{j,k}\log(q_{j, k})$$

$N$がサンプル数を示します。

 

 

 

 

 

 

 

Adamについてのお話

記念すべき第一回目の投稿です。

私、現在データサイエンティストとして、e-commerce系の大手会社で勤めております。

機械学習系のブログや数多くのリソースが増え知見を得ることが簡単になっています。私自身、web上で検索して数多くの知見を得ることができました。例えば、「ランダムフォーレストとは」と検索するだけで、分かりやすく解説をするブログに出会すことがあります。場合によっては、本を見つけて読むよりも、効率的かもしれません。論文を読みつつ、その論文を解釈する誰かのブログを読むことによって、“一緒に”論文を読んでいる気分になったりもしました。私自身ブログを始めるべきかどうか長い間考えた結果、始めることにしました。役に立つアイデア、理論、実験結果など共有したいことがあるからです。またこれからも沢山出てくるはずです。

 

役に立ったと感じた事、基礎的な事、面白いと思った事、を共有していきますのでよろしくお願いいたします!

 

いきなりですが Adamについて。(なぜAdam??ふと、今思ったからです…こんな感じで更新していきます。)

ADAMについて

 深層学習の最適法の一つして発明された手法Adam。2014年12月に投稿されすでに引用数が6万越え(現在2021年1月)。

https://arxiv.org/pdf/1412.6980.pdf

論文に記載されているアルゴリズムの部分

f:id:shimaby:20210110164326p:plain

ハイパーパラメータとなるのは

$\alpha$ : 学習率

$\beta_1, \beta_2$ : 平滑化移動平均のために

$\epsilon$ : ゼロによる分割を防ぐために

そしてモデルのパラメータを$\theta$とすると、最小化したい関数を$f(\theta)$とします。

  1. 初期ステップ$t=0$に変数を初期化 ($\theta_0=0, m_0 =0, v_0 =0$)。また、ランダムにデータをサンプルして、勾配$\nabla_{\theta}f(\theta)$を計算できる状態にします。
  2. ステップのアップデートを行います。$t \rightarrow t + 1$
  3. 勾配の計算$\nabla_{\theta}f_t(\theta_{t-1})$(これを$g_t$をとします)
  4. 次に$m_t$のアップデート。これは$\beta_1$により、$m_{t-1}$と$g_t$の平滑化平均をとります。
  5. 次に$v_t$のアップデート。これは$\beta_2$により、$v_{t-1}$と$g_t^2$の平滑化平均をとります。($g_t^2$とは$g_t$の二乗)
  6. 初期値($m_0=0, v_0=0$)によりゼロにバイアスがかかってしまうので、$\hat{m}_t$と$\hat{v}_t$を計算することによって調節します。結果的に、$t=1$の場合だと、$\hat{m}_1=g_1$となります。
  7. 最後に、パラメータ$\theta_t$のアップデートを行います。
  8. $\theta_t$が収束するまでステップ2~6を繰り返します。

$v_t$は学習率を変化させる役割を担います。例えば、$v_t$が大きい場合、学習率が小さくなり急激な変化を妨げます。一方、$v_t$が小さい場合、学習率が大きくなり変化を大きくします。

 $\beta_1$と$\beta_2$はどうでしょうか。

$\beta_1$が$1$に近い場合、最新の勾配$g_t$の影響が小さいため、$m_t$の変化が激しくないことが予想されます。一方、$\beta_1$が$0$に近い場合、最新の勾配の影響が大きく考慮されるので、$m_t$の変化が激しくなりやすいことが予想されます。

同じ議論が$\beta_2$の場合にも適用することができます。

厳密ではないことを言ってしまいますが、$\beta_1$と$\beta_2$が$1$に近いと、安定した学習を可能とするのではないのでしょうか。

 Tensorflowで実験

TensorflowのAdamでも理論通りパラメータを取り入れます。

opt = keras.optimizers.Adam(learning_rate=0.001,
beta_1=0.9, beta_2=0.999,
epsilon=1e-07)

 MNISTのデータセットで簡単なANN分類器を構築し、二つのパターンの$\{\beta_1=0.9, \beta_2=0.999\}$と$\{\beta_1=0.1, \beta_2=0.1\}$を試した結果。

f:id:shimaby:20210110225819p:plain

今回の場合、青の曲線$\{\beta_1=0.9, \beta_2=0.999\}$の場合の方が良いことが見られました。