でーじデータ

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

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\}$の場合の方が良いことが見られました。