ラビットチャレンジ - 深層学習 Day3 Section7 Attention Mechanism


0.概要

本記事は日本ディープラーニング協会認定の講座プログラムである「ラビット・チャレンジ」が提供している科目の1つである深層学習のレポートである。
記事タイトルに記載のとおり、Day3 Section7 Attention Mechanismについて以下にまとめる。

1.Attention

Seq2Seqは文章の単語数に関わらず常に固定次元ベクトルで入力しなければならないため、長い文章への対応が難しい。
デコーダの入力はエンコーダの最後の状態を入力とするため最初の方の情報がうまく埋め込まれない。

入力と出力のどの単語が関連しているか関連度を学習する仕組み。
関連度を学習することで関連度が高い部分を抽出して効率的に処理が行える。

入力

私 は ペン を 持って いる

出力

I have a pen

上記のような翻訳の入力と出力があった場合、「私」と「I」、「ペン」と「pen」、「持って」と「have」の関連度が高いと言える。

Query(検索文)、Key(辞書のインデックス)、Value(辞書の本文)で構成され、Queryと近いKeyを探してValueを得るというイメージ。

参考:
https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778#attentionsource-target-attention
https://ksksksks2.hatenadiary.jp/entry/20160430/1462028071

下記はE資格問題集にあったため超ざっくりした概要のみ記載したが十分な理解には遠い…

1.1.Soft Attention

ソフトマックス関数等で確率分布を得て重み付き平均を得る手法。

参考:https://qiita.com/ymym3412/items/c84e6254de89c9952c55#attentionメカニズム-2014

1.2.Hard Attention

Soft Attentionのように重み付け平均せず、重みが最大となるValueを取り出したり、重み行列を確率分布とみなして抽出する手法。

参考:http://yagami12.hatenablog.com/entry/2017/12/30/175113

2.確認テスト

2.1.確認テスト1

RNNとWord2vec、Seq2Seq、Seq2Seq+Attentionの違いを簡潔に述べよ。

回答:
RNNとWord2vec:
RNNはボキャブラリー×ボキャブラリー数だけの重みが必要だが、Word2vecはボキャブラリー数×単語ベクトルの次元数だけの重みのが必要。

Seq2SeqとSeq2Seq+Attention:
Seq2Seqは長い文章に対して対応が難しいが、Attentionを取り入れることで入力と出力の関連度に基づくため長い文章にも対応できる。

3.演習チャレンジ

3.1.トラバース

def traverse(node):
  # node:再帰的な辞書{left: node, right: node} rootが最も外側の辞書
  # W:グローバル変数として定義されている重み
  # bグローバル変数として定義されているバイアス
  if not isinstance(node, dict):
    v = node
  else
    left = traverse(node['left'])
    right = traverse(node['right'])
    v = _activation(W.dot(np.concatenate([left, right])))

  return v

left, rightの隣接単語から内積を取って特徴量とする。

※トラバースはこういった木構造のような枝分かれの構造を全てもれなくたどっていくこと。

X.ラビットチャレンジとは

ラビットチャレンジとは、日本ディープラーニング協会認定の講座プログラムの1つ。
E資格を受験するためにはこのラビットチャレンジ等、いずれかの講座プログラムを修了しなければならない。

ラビットチャレンジの特徴は「現場で潰しが効くディープラーニング講座」の通学講座録画ビデオを編集した教材を使用した自習スタイルであるという点。
サポートは他の講座より少なく、受け身ではなく自主的に学んでいく姿勢でなければ進められないが、その分、他の講座に比べると安価であり、手が出しやすい。
ある程度知識がある人、自力で頑張るぞというガッツのある人向けではないかと感じる。