---
# System prepended metadata

title: Attention
tags: [' Attention', transformer]

---

---
tags: transformer, Attention
---

# Attention

Attentionが大きく分けて"Self-Attenstion"と"SourceTarget-Attention"というものがあるそうです。また、要素を特徴量にするときにqueryとmemory(key, value)にするみたいなのですが、それぞれは同じもので、それがどうなってそれほど重宝されているのかよくわからないので、調べてみました。

まず、Attentionは、
> '''
　Attentionとは、入力文を単語ごとに分割し、それらの単語を特徴量としてモデルに入力する方法です。そして、出力を生成する際に、どの単語をより重視して考慮するかを、モデル内部で自動的に学習します。これにより、モデルは、入力文中の重要な単語やフレーズを自然に捉えることができるようになります。
　複数の入力を考慮することができるため、複雑な文章の意味や構造を理解することができるようになります。また、他の手法よりも高い精度で言語処理タスクを実行することができるため、現在では様々なタスクに使われています。
> <p style="text-align:right;">- chatGPTより -</p> 

この中で、“単語を特徴量としてモデルに入力する”ことは、入力データの $a_i$ ベクトルに対応するベクトルをメタデータから選びだすということになります。自然言語処理でメタデータを作成するときに、word2vecが使われていました。

```
import numpy as np

T, H = 5, 4
hs: 隠れ状態ベクトル
hs = np.random.randn(T, H)
# 入力データ
a = np.array([0.8, 0.1, 0.03, 0.05, 0.02])

# 5×4の行列にする
ar = a.reshape(5, 1).repeat(4, axis=1)

# 要素ごとの積の計算
t = hs * ar

# 行ごとの合計
c = np.sum(t, axis=0)
```


![Uploading file..._zkbupet4i]()


# memo

- LSTMやそこで出てくる"隠れ状態ベクトルについて"
