2019年8月アーカイブ

Attention は "Attention is all you need" (Vaswani et al, 2017)で一躍有名になった手法ですが、実はこの論文の前からあった概念です。今回はこのAttentionの技術について、またこの論文について解説していきたいと思います。

1 Attentionの概念

Attentionとは、「注意」とあるように、画像や文章の特定の部分に注意を向けるよう、学習させていく方法です。人間の場合を考えてみましょう。私たちが何かを見るとき、全ての部分を同じように観察しているわけではありません。犬の絵があれば、「犬の顔」「犬の手足」「犬の尻尾」を認識して犬だと識別できるのであって、毛の一本一本や肋骨の形に注目している人は少ないでしょう。これと同じことを機械にさせることができれば、より人間に近い形で画像や文章を認識することができます。これがAttentionの一番の動機であり定義の一つです。

具体的にこれがどのようにモデルに表現されているかを知るには、まずSeq2Seqモデルを少し理解するのが良いと思います。

1-1 Seq2Seq モデル

Seq2Seqモデルは文章解析のために作られたモデルで、Encoderと呼ばれる入力を処理する部分と、Decoderと呼ばれる出力を処理する部分に分かれています (Sutskever, 2014)。従来のニューラルネットワークでは、元となる文章をまとめて機械に取り込むので、画像などの情報は処理できても、文章や会話のような順番(sequence)が重要となる入力に関しては上手く学習することができませんでした。そこで、入力の順番の情報も出力に反映させられうようにSeq2Seqが開発されました。

具体的には、EncoderとDecoderにRNNの一種であるLSTMを使います。詳しくはLSTMの記事を読んで頂けると早いですが、sequenceを処理できるRNNの中でも、多少距離が開いていても対応できるLSTMを使うことで、最大限に入力sequenceの情報を出力に反映させることができます。

attention

1-2 Attentionモデル

しかし、Seq2Seqには大きな限界があります。それは、入力の情報は結局最後には一つにまとめられて、固定された大きさのベクトルとして出力に引き渡される、という点です。これを解決し、さらに柔軟なモデルにするために、Attentionが開発されました(Bahdanau 2015)。言葉では分かりにくいので、具体的に図と数式で見ていきましょう。

attention

まず、従来のSeq2Seqのように各単語ごとにencoder(青)とdecoder(赤)からマシンの状態(state)を出力します。そして、推測したい言葉(target)から計算された出力(ht)を全てのencoder出力(hs)と組み合わせ、関連度(a_t)を算出します。

Alt text

このscoreの出し方は様々あり、後述のtransformerモデルの中では内積が使われています。

次に、この関連度でencoderに重りをつけ、「文脈」(context)を割り出します。

Alt text

そして、もう一度Decoderのtargetと文脈を組み合わせて、decoderの隠れ層の最終出力を決定します。

Alt text

最後に、このdecoderの結果を用いて最終出力を決定します。

Alt text

ここで鍵なのが、attentionの度合いを決定するa_tが毎回更新される、という点で、Seq2Seqにはない柔軟性を取り入れることに成功した、というところです。データのどこにattentionを向けるのか、機械に学習させることで、より早く、高い精度を達成することができます。

2 Attention is all you needのモデル

では、Attention is all you need (Vaswani, 2017)について見ていきましょう。上で触れたように、attention自体はこれ以前からある概念ですが、この論文の革新的なところは、余分な部分を取り除き、attentionのみで学習しても、高い精度がでる、という点でした。以下、論文で実装されているtransformerモデルについて解説したいと思います。

2-1 モデルの仕組み

モデルの中心にあるのはattentionなので、元データ(memory)と検索をかけたい入力(input)の関連度を計算します。 逆に言うと、それしかしません。

下の図で見てみましょう。memoryをkeyとvalueに分けるという工夫以外は、基本的にattention_weightを算出し、valueと組み合わせているだけです。以前のように先にRNNを通したりする必要はないのです。Attentionの仕組み自体は上で解説しているので、数式などは省略しますが、順番に見ていきましょう。

Alt text

2-1-1 input, memory

Alt text

入力はinputとmemoryの二つに分けられています。それぞれtensorで、shapeは[batch_size, length, depth]となっています。例として、

Alt text

というデータがあったとします。この場合inputlength=4, memorylength=3になります。 実際、自然言語等のデータを使う場合、多少の下処理が必要になってきます。

まず、文章をいくつかのトークンに区切り、さらにそれを数値に変換していきます。

Alt text

これでnumpy arrayに変換すれば、処理が可能になります。

2-1-2 query, key, value

Alt text

ここで先ほどの入力がquery, key, valueというattentionの中心になる情報に変換されます。queryはinputからくる、「検索をかけたいもの」になります。上の例でいうと、「猫」というのが検索をかけたいものであり、できればそれと関連する言葉が「結果」として出てきてほしい、ということになります。keyはこの検索をかけるときに、memory内のトークンと検索をかけるqueryがどの程度近いのかを図るための索引のようなものです。そして、keyの索引を参考に、対応する適切なvalueをアウトプットします。

なぜ、わざわざmemoryをkeyとvalueに分けるのでしょうか。元となった論文Miiler et al, 2016 によると、memoryを二つに分けることで、keyとvalueの間の非自明な変換によって高い表現力が得られる、ということです。つまり、keyとvalueの関係性が我々に理解のできないようなものであっても、うまく対応できるのです。

2-1-3 attention weight

上記のqueryとkeyから、attention weightと呼ばれる、関連度を計算していきます。この重みが大きいと、query中の言葉とkey中の言葉の関連度が高い、ということになります。

Alt text

まず、queryとkeyの関連度を取ります。上の図では内積をとっていますが、これは内積注意(Dot-Product Attention)と呼ばれる手法で、Attention is all you need内で使われている手法になります。他にも、加法注意(Additive Attention)と呼ばれるものもあり、その場合はqueryとkeyをFFN(Feed Forward Network)に通してattention weightを求めます。一般的に内積注意の方がFFNのパラメーターを調整する必要がなく、処理も速いと言われています。

次に、内積をsoftmaxにかけます。これは一つのqueryに対してweightの合計が1.0になるようにするためです。Softmax関数は入力に大きな値があるとgradientが0に近くなり、学習が遅れてしまいます。そこで、queryとkeyの次元が大きいほどlogitが大きくなることに注目して、queryの大きさを次元に従って小さくすることが一般的です。具体的には、

Alt text

 と調整します。

2-1-4 output

最後に、このように得られたattention weightをvalueと掛け合わせることで、出力を決定します。

Alt text

以上がこのモデルの基本構造になります。このモデルの要は1-2で触れたquery, key, valueに入力を分け、queryからvalueを導き出す、というところにあります。

2-2 Attentionの種類

Attentionには大きく分けて2種類あります。

1つ目は、inputとmemoryが全く同じデータの場合です。これはSelf-Attentionと呼ばれます。

2つ目は、inputとmemoryで違うデータを使う場合です。これはSourceTarget-Attentionと呼ばれます。

Self-Attentionでその言語の構造を学習した後で、SourceTarget-Attentionで新しい文章に対して予測を行うことができる、というイメージです。なのでTransformerモデルも含め、両方のAttentionを組み合わせているモデルがほとんどです。

2-3 Transformerに付け加えられた工夫

ここからはAttention is all you needで実装されたTransformerモデルを中心に、基本的なAttentionに加えてどのような工夫がなされているのか、解説していきたいと思います。

下図の通り、transformerにはattention以外に様々な要素が加え得られています。左側がdecoderと呼ばれる、self-attentionを主に使い文章自体の構造を学習していく部分で、右側がencoderと呼ばれる、self-attentionとsourcetarget-attentionを組み合わせ、新たなmemoryに対するアウトプットを求める部分になります。

attenntion


Attention Is All You Needより引用

2-3-1 Multi-head Attention

論文では、行くつもの小さなAttentionを並列に繋げると、パフォーマンスが上がったと言われています。それぞれのAttentionをheadと呼ぶので、Multi-head Attentionと呼ばれています。Attention is all you needでは、全体として512次元のtensorが使われていて、この総数はheadの数によりません。head=4ならば各headのデータ次元は128になりますし、head=8ならば64次元になります。

2-3-2 Masking

上でAttention weightの計算方法をご紹介しましたが、maskは特定のkeyに対応するattention weightを0にするために使います。入力にあたるlogitに対し、値を-∞に設定することで、softmax時の値が0になります。

Maskを使う動機は主に

・padを無視したい

・decoderのself-attentionの段階で情報を先読みできないようにするため

の2つがあります。

2-3-2-1 padを無視したい

Inputやmemoryにおいて、batchごとのトークンの数は様々です。例えば、

attention

のように、長さが1, 3, 2 とばらつきがあります。

そこで長さを揃えるためにpadで埋めることになります。

Alt text

しかしattention weightの計算をするとき、padの分は計算から除外したい、と考えます。なぜなら、padの数はbatch内の他の文の長さによって影響されるので、本来干渉するべきでない情報が影響し合うことになるからです。そこで、softmaxの結果を0にして影響を避けよう、というのがmaskの目的です。

2-3-2-2 decoderのself-attentionの段階で情報を先読みできないようにするため

Transformerのdecoderでは、self-attentionが行われる部分があります。しかし、新たなアウトプットを予測する部分ですから、自分自身をmemoryにしてしまうと、先の答えが見えているのと同じになってしまいます。今までに得た情報のみで推論するように、先のattention weightを全て0にしてしまいます。

Alt text

2-3-3 Hopping / Position-wise Feedforward Network

このmulti-head attentionを複数組み合わせたり、FFNを挟むことで、さらに学習精度が上がります。Attention is all you needでは、2048次元の中間層と512次元の出力層からなる2層の全結合ニューラルネットワークを使用しています。

Alt text

2-3-4 Wrapper

TransformerにはLayer Normalization, Attention Dropout, Residual Connectionなどの正規化が行われており、これらをまとめてwrapperとして実装しています。これらの措置は主に学習速度を上げたり、学習精度を高めたりするための措置です。

2-3-5 Positional Encoding

Attentionは、そのままではトークンの順序を情報として学習に使うことができません。このままでは語順が反映されなくなってしまうので、Positional Encodingを足します。Attention is all you need では、

PE(pos, 2i) = sin(pos/1000^{2i/d})

PE(pos, 2i+1) = cos(pos/1000^{2i/d})

としています。その理由として、相対的な位置(PE{pos+k})をPE{pos}の線形代数で表現できるため、学習がしやすいだろうからです。

以上、attention及びtransformerモデルについての解説でした。


アクセルユニバース株式会社(以下当社)では、人が対応している業務を画像認識、音声認識、文字認識等を活用して効率化する機械学習ソリューション開発をおこなっています。
「機械学習について」機械学習とプロセス


また、定期的にメルマガでも情報配信をしています。
ご希望の方は問い合わせページに「メルマガ登録希望」とご連絡ください。

参考文献

Attention Is All You Need

作って理解する Transformer / Attention

ディープラーニングブログ/論文解説 Attention Is All You Need (Transformer)


Twitter・Facebookで定期的に情報発信しています!

クラスタリングとは

 クラスタリングとは、異なる性質を持った多くのデータから類似性を見て自動的に分類する、機械学習の教師なし学習における手法のこと。(複数のコンピュータを連動させることにより、1台のコンピュータとして利用できるようにする技術を言うこともある)
 マーケティングでは、顧客層の特性分析や店舗取り扱い商品の構成分析に利用されており、多くの顧客や商品を分類し、どのような顧客が多いのかを明確にし、ターゲットを決定する。

 クラスタリングとクラス分類は混同しやすいが、別々のものである。大きな違いは、クラスタリングは教師なし学習で、クラス分類は教師あり学習という点である。
教師あり学習であるクラス分類は、どのグループに属するかという"ラベル"がついている既知データが手元にあり、それを用いてモデルを作って、"ラベル"がついていないデータの分類に用いるという手法であることに対し、
教師なし学習であるクラスタリングは、ラベル付きデータがない状態で、あるデータを分類するような手法である。

クラスタリングの手法の種類

 クラスタリングはデータ同士が「似ている」、「似ていない」かを基準に分類する。この「似ているかどうか」という尺度は人間の感覚的な部分があるため、これまで多くの研究者が様々な手法や考え方を提唱してきた。それらは未だ一本化されておらず、ここではその種類を紹介する。

  1. 「階層的クラスタリング」と「非階層的クラスタリング」
  2. 「ハードクラスタリング」と「ソフトクラスタリング」

image

階層的クラスタリング

 階層的クラスタリングとは、 各データを1つのクラスタとして、最も似ている2つのクラスタを合併すること(近いものから順番にくくる)を繰り返していく手法。最終的にクラスタが1つになるまで合併を繰り返す。(※1)

image (※1)

 クラスタの合併をしていくと、樹形図のようなデータの階層構造が得られ、デンドログラムで表現することができる。(※2)

image (※2)

非階層的クラスタリング

 非階層的クラスタリングとは、事前にいくつのクラスタに分けるかを決め、サンプルを決めたクラスタ数に分割していく手法。階層的でないクラスタリングである。そのため、木構造のデンドログラムでは表現されない。階層的クラスタリングでは分類するデータが多いと、計算量が多くなってしまったり、階層構造が複雑になってしまったりする。それに対して非階層的クラスタリングは、分類するデータが多くなってしまう場合でも対応することができる。

 また、非階層的クラスタリングの代表的な手法はk-meansという手法である。

image

ハードクラスタリング

 ハードクラスタリングとは、各データが1つのクラスのみに所属するようなクラスタリング。

 一般的にクラスタリングといえばハードクラスタリングをさす。

image

ソフトクラスタリング

 ソフトクラスタリングとは、各データが複数のクラスタに所属することを許すようなクラスタリング。   image

あとがき

 今回は、クラスタリングとはどんなものなのかについて広く浅く扱ってきた。

 次回は、今回詳しく説明することができなかったk-means、ウォード法、メディアン法など、クラスタリングの手法の種類の一つ一つをより具体的に説明していく。

(2019/11/28 追記)
k-means法について

ニューラルネットワークとは

 ニューラルネットワークとはAI (人工知能)のうちの一つ。また、AIの一つである機械学習のうちの一つでもある。(図1)また、人間の脳内にある神経細胞(ニューロン)とそのつながり、つまり神経回路網を数理モデル化したもの。(図2)

image(図1)

 ニューラルネットワークを構成している最小単位は、パーセプトロン(単純パーセプトロン)という。パーセプトロンとは、複数の入力に対して1つの値を出力する関数のこと。パーセプトロンへの入力値を(X1~Xn)とすると、それぞれの入力に対して重み(W1~Wn)が存在する。また、バイアスW0が存在する。

 f(x)(それぞれの入力値(X1~Xn)に対して重み(W1~Wn)を掛け合わせ、それにW0を足したもの)の値が0より大きい場合は1が出力され、0より小さい場合は0が出力される。(図2)f(x)が0より大きくなり1が出力されることをニューロンの発火という。発火のしやすさはバイアス(W0)によって決まり、バイアス(W0)は発火のしやすさを調整する役割をすると言える。

 図のように1つのパーセプトロンは単純パーセプトロンといい、単純パーセプトロンを複数組み合わせたものを多層パーセプトロンという。単純パーセプトロンを複数組み合わせて多層パーセプトロンにすることで、より複雑な関数近似を行うことができ、出力の精度を高めることができる。   image(図2)

 (図2)において

f(x) < 0 → 1

f(x) = 0 → 0 or 1

f(x) > 0 → 0

のような数式は活性化関数といい、ニューラルネットワークやパーセプトロンで用いられている、モデルを表現するための関数である。活性化関数を用いて変換を行うと様々な値の出力が行え、モデルの表現力を高めることができる。​

 パーセプトロンにおいてはステップ関数、ニューラルネットワークではシグモイド関数が主に使われている。

image(図3)

(シグモイド関数はステップ関数を連続的に表現したもの)

 ここで1つ指摘しておきたいのは、単純パーセプトロンを複数組み合わせてできた多層パーセプトロンはほぼニューラルネットワークと言うが、等しいわけではないということである。多層パーセプトロンはステップ関数を用いているが、ニューラルネットワークはシグモイド関数を用いているという点で違いがある。

ニューラルネットワークの構造

image(図4)

(画像や音声などの情報も数値として入力する)

 ニューラルネットワークは、入力層、中間層、出力層の3つから成り立っている。入力層は人間の脳で言う感覚層、出力層は判別層、中間層は情報の処理を行っている部分に置き換えることができる。

 ニューラルネットワークの入力層と中間層、中間層と出力層の間にはニューロン同士のつながりの強度を示す強度W(重み)というものが存在する。ニューラルネットワークでは、この重みを調節することによって、入力したものに対して望む出力(教師データ)に近づけることができる。

※中間層が2層以上のニューラルネットワークをディープラーニングという​

ニューラルネットワークの種類

 ニューラルネットワークには様々な種類がある。その中でも特によく使われているのが次の3種類である。

  1. RNN(再帰型ニューラルネットワーク)
  2. CNN(畳み込みニューラルネットワーク)
  3. LSTM(Long Short Term Memory)

RNNとLSTMの違い

 (今回は一つ一つを説明することができないため、詳しい内容は別の記事で扱っていく)

 1. RNN(再帰型ニューラルネットワーク)

 再帰型ニューラルネットワーク(Recurrent Neural Network)は主に自然言語処理の分野で使われている。

 それまでのニューラルネットワークでは、入力値は互いに独立したものである必要があった。この場合、画像処理などでは問題ないが言語のように入力値に連続性がある場合は適さない。そこで、RNNでは中間層にループを組み込むことによって前のデータの入力を記憶できるようにした。そのことによって前後のデータが関連付けられるようになり、自然言語処理などの時系列データにも対応できるようになった。RNNは主に、機械翻訳、文章生成、音声認識などに使われている。

image(図5)

 2. CNN(畳み込みニューラルネットワーク)

 畳み込みニューラルネットワーク(Convolutional Neural Network)は一般的なニューラルネットワークと違い、畳み込み層とプーリング層でできている。

 ここでいう畳み込みとは、簡単に言うと画像の特徴を際立たせることである。画像全体から様々な特徴を取り出していき、画像全体をそのまま分析するのではなく、画像より小さなフィルターを画像全体にスライドさせながら、部分部分で分析していく。フィルターを複数枚使って様々な特徴を抽出していく。そして、畳み込み層で抽出した特徴をもとに特徴マップを作成する。

 プーリング層では、特徴マップの要約を行う。特徴マップを小さなウィンドウに区切り、区切ったウィンドウ内の最大値をとっていく。プーリングを行うことによって、特徴の厳密な位置の変化を気にすることなく画像内での特徴を検出することが可能になる。これは、移動普遍性と呼ばれ、画像認識にCNNが向いている大きな理由の一つである。実際のCNNは畳み込み層とプーリング層が何層にも重なってできている。

 プーリング層の後に、多次元のデータを1次元のデータにフラット化していき、ソフトマックス法を用いて分類し、出力していく。​

image(図6)  

 3. LSTM(Long Short Term Memory)

 先ほどのRNNには複雑な構造が故に1つ問題があった。RNNでは入力したデータは全て記憶されてしまい、必要でないデータも記憶してしまうということがあった。そこで、LSTMでは情報を忘れる機能が追加された。それによって、「この情報は必要」と「この情報は必要じゃない」という判断ができるようになった。

 それまでRNNが苦手としていた予測情報と関係情報の距離が長いケースでもLSTMで対処できるようになった。これにより、機械翻訳の精度が飛躍的に向上した。

image(図7)

ニューラルネットワークによって可能になること

 ニューラルネットワークでは、主に以下のことが可能になる。

  1. 画像認識...主にCNNを用いる
  2. 音声認識...主にRNNを用いる
  3. 自然言語処理...主にRNNを用いる
  4. 異常検知...主にCNNを用いる

このアーカイブについて

このページには、2019年8月に書かれた記事が新しい順に公開されています。

前のアーカイブは2019年7月です。

次のアーカイブは2019年10月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。