「深層学習」読書会 〜第7章〜

2016/07/02 機械学習 名古屋 第5回勉強会

第7章 再帰型ニューラルネット

abstract:

  • RNN(再帰型ニューラルネットワーク)
    • 以下のようなデータの特徴をうまく取り扱うNN:
      • データの長さがサンプルごとにまちまち
      • 系列内の要素の並び(=コンテキスト)に意味がある
    • 例:音声・言語・動画
  • LSTM(長・短期記憶)
    • より長期のコンテキストをモデル化可能
  • CTC(コネクショニスト時系列分類法)
    • 入力系列とは長さの異なる系列を推定(出力)

7.1 系列データの分類

系列データ

  • 個々の要素の順序付き集まりデータ
$$ {\bf x}^1, {\bf x}^2, {\bf x}^3, \dots , {\bf x}^T $$
  • 音声・動画・テキストなど
  • 系列の長さ $T$ は、一般に可変
  • インデックス $t = 1, 2, 3, \dots$ を 時刻と呼ぶ(時間とは言ってない)。

RNN(再帰型ニューラルネット): コンテキストを学習し、分類出来る。

コンテキスト(文脈):系列内の要素の並び、依存関係

要素の例:

  • 文章中の「単語」
  • 音声信号中の「音素」

7.2 RNNの構造

RNN(再帰型ニューラルネット)

  • 内部に(有向)閉路を持つNNの総称
  • 特徴:
    • 情報を一時的に記憶
    • 振る舞いを動的に変化
In [3]:
fig_7_3_a
Out[3]:
fig_7_3_a cluster0 na1 nb1 na1->nb1 nb2 na1->nb2 nb3 j na1->nb3 nb4 na1->nb4 na2 na2->nb1 na2->nb2 na2->nb3 na2->nb4 na3 i na3->nb1 na3->nb2 na3->nb3 na3->nb4 nc1 nc2 nc3 k nb1->nc1 nb1->nc2 nb1->nc3 nb2->nc1 nb2->nc2 nb2->nc3 nb3->nc1 nb3->nc2 nb3->nc3 nb4->nc1 nb4->nc2 nb4->nc3
In [5]:
fig_7_3_b
Out[5]:
fig_7_3_b cluster_1 t-1 cluster_2 t nc11 nc21 nc11->nc21 nc22 nc11->nc22 nc23 j nc11->nc23 nc24 nc11->nc24 nc12 j' nc12->nc21 nc12->nc22 nc12->nc23 nc12->nc24 nc13 nc13->nc21 nc13->nc22 nc13->nc23 nc13->nc24 nc14 nc14->nc21 nc14->nc22 nc14->nc23 nc14->nc24
In [7]:
fig_7_4
Out[7]:
fig_7_4 x x_t A A x->A A->A y y_t A->y A0 A A->A0 = x0 x_0 x0->A0 y0 y_0 A0->y0 A1 A A0->A1 x1 x_1 x1->A1 y1 y_1 A1->y1 A2 A A1->A2 x2 x_2 x2->A2 xt x_t x2->xt y2 y_2 A2->y2 At A A2->At xt->At yt y_t At->yt

誤差関数:(順伝播ネットワークと同様)

$$ E({\bf w}) = - \sum_n \sum_t \sum_k d^t_{nk} \log y^t_k({\bf x}_n; {\bf w}) $$

ただし $d^t_n$:$n$ 番目のサンプル ${\bf x}_n$ に対する、時刻 $t$ での目標出力
($(d^t_{n1}, d^t_{n2}, \dots , d^t_{nk})$ というベクトル)

双方向RNN
データを 順方向 逆方向 両方の入力で与えるRNNを統合したもの。

  • データの数が有限ならば有効
  • オンライン学習には不向き

7.3 順伝播計算

《略》

7.4 逆伝播計算

《略》

7.5 長・短期記憶(LSTM)

7.5.1 RNN の勾配消失問題

※イメージ

In [10]:
gradient_vanishing_image()

7.5.2 LSTM の概要

LSTM(長・短期記憶)
RNNの拡張モデル(の1つ)。
RNNの中間層の各ユニットをメモリユニットと呼ぶ要素で置き換えた構造を持つ。

In [12]:
fig_7_7
Out[12]:
fig_7_7 clusterB cluster1 cluster_main cluster2 x00 xb0 x00->xb0 x0 B B x0->B x01 xb1 x01->xb1 xc0 xb0->xc0 xf xc0->xf xd0 xf->xd0 FG F xf->FG e1 FG->e1 A A FG->A e0 B->e0 c_main c_main->e0 c_main->A IG C e0->IG e0->A IG->A e1->A A->e1 E A->E D0 A->D0 e2 A->e2 OG D A->OG D0->e2 e2->OG y0 e2->y0 x1 xb1->x1 x1->IG xf1 x1->xf1 x2 xf1->x2 x2->OG

TensorFlow には tf.nn.rnn_cell.BasicLSTMCell というクラスが用意されており利用可能。
参照: class tf.nn.rnn_cell.BasicLSTMCell

In [ ]:
cell = tf.nn.rnn_cell.BasicLSTMCell(size, forget_bias=0.5)
(cell_output, new_state) = cell(inputs, old_state)

7.5.3 順伝播計算

《略》

7.5.4 逆伝播計算

《略》

7.6 入出力間で系列長が異なる場合

7.6.1 隠れマルコフモデル

7.6.2 コネクショニスト時系列分類法