「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
自己符号化器(AE:オートエンコーダ)、自己識別機とも呼ばれる。
隠れ層の次元を小さくして情報量を小さくした特徴表現を獲得する。
(入力の情報を圧縮される。→ 学習の結果、重みとして要約される。)
※ EncoderもDecoderもニューラルネットワーク
様々な種類があるもよう。
様々な用途で利用されている。
x をより良く表現する p(X) のパラメータを学習するには、周辺尤度 logp(X) の最大化を考える。
記号 | 説明 |
X | 再構成されるデータ |
p(X) | 再構成されるデータの確率分布 |
z | 潜在変数z |
p(z) | 潜在変数zの確率分布 |
p(X|z) | 潜在変数zが与えられた時のxの確率分布(Decoder) |
q(z|X) | データXが与えられた時のzの確率分布(Encoder) |
Decoderによる誤差
Encoderによる誤差
復元誤差とKLダイバージェンスの展開式を損失関数として利用することでVAEを最適化出来る
※ RNN Encoder-DecoderのAttention機構と同じ目的を達成するが機構は異なる。
RNN Encoder-Decoder(Sequence-to-Sequence)系よりも早くて精度が高い
#ref(): File not found: "Transformer0.png" at page "自己符号化器(AE:オートエンコーダ)" | #ref(): File not found: "Transformer1.png" at page "自己符号化器(AE:オートエンコーダ)" |
https://qiita.com/omiita/items/07e69aef6c156d23c538 |
I | have | cats | |
I | 0.88 | 0.10 | 0.02 |
have | 0.08 | 0.80 | 0.12 |
cats | 0.03 | 0.14 | 0.83 |
#ref(): File not found: "Transformer2.jpg" at page "自己符号化器(AE:オートエンコーダ)" | #ref(): File not found: "Transformer3.jpg" at page "自己符号化器(AE:オートエンコーダ)" | #ref(): File not found: "Transformer4.jpg" at page "自己符号化器(AE:オートエンコーダ)" |
https://nlpillustration.tech/?p=2171 |
Transformer ≒ Transformer Block
#ref(): File not found: "Transformer5.png" at page "自己符号化器(AE:オートエンコーダ)"
https://agirobots.com/multi-head-attention/
Multi-head Attention | Single-Head Attention |
#ref(): File not found: "Transformer6.png" at page "自己符号化器(AE:オートエンコーダ)" | #ref(): File not found: "Transformer7.png" at page "自己符号化器(AE:オートエンコーダ)" |
https://agirobots.com/multi-head-attention/ |
#ref(): File not found: "Transformer8.png" at page "自己符号化器(AE:オートエンコーダ)"
https://agirobots.com/multi-head-attention/ますが本質的なところで言うとこちらです ねソフトマックスの 12:59 ルートDK分の9KTを計算しているに すぎません 13:05 具体的な例を見た方が分かりやすいと思い ますので 具体例を見ていきましょう 13:10 ここではクエリーに任意の単語を表す ベクトルをそして 13:16 キーとバリューには文章を単語ごとに ベクトル化して 並べた行列を入力するということを考え 13:23 たいと思います ちなみに単語のベクトル化においては 13:28 埋め込み層と呼ばれるものを使用すること ができます例えば今回は 13:34 Ihaveapentという単語文章を 単語ごとにトークン化してベクトル化する 13:40 ことを考えてみましょう 単語ごとということですので 13:46 Ihaveapenピリオドですねこの5 つについてベクトル化した時に右のように 13:55 なったとしますそれぞれ 列ベクトルとなっています 14:00 ここではベクトルの値については考えませ んがベクトルの違いというのは色の違いで 14:07 表してやりますここでクエリとしてhas を表すベクトルこちらですねこれを 14:15 与えることとしますそして キーとバリューには 各ベクトルを 14:21 順番に並べた行列そうですねこちらを行列 化したものですねこれ 14:27 これを入力することを考えます この時ソフトマックス関数の入力である 14:35 ルートDK分の9KTこれはどれかという とこちらですねソフトマックス関数はここ 14:42 にあるのでここまでの処理ですちょっと マスクについては後で説明しますがまあ 要するにここですね 14:49 ルートDK分の 9ktということで 14:54 この 計算はクエリのベクトルと入力文章の全 14:59 ベクトルはいクエリーのベクトルと入力 文章の全ベクトルですね 15:06 に関して内積を計算し金の長さこれは トークン数になりますのでここですね 15:14 のルートでスケール化したベクトルとなり ますすなわち 15:19 Ihaveapenを構成するトークン こちらに対してハーブを表すベクトルに 15:25 それぞれのベクトルがどの程度近いのかを 内積を使って 15:31 計算するのです スケール化についてはソフトマックス関数 の兼ね合いで必要になっているという形 15:38 です内積ですのでスケール化しないと 値がものすごく大きくなってしまいます 15:44 値が大きくなるとソフトマックス関数の 性質上 勾配がですねどんどんあまりよろしくない 15:52 わけですよね ですのでその 全体をスケール化してあげて 15:58 その値をソフトマックス関数に入力すると いうことを行っております 16:05 でソフトマックス関数は皆さんクラス分類 の機械学習の出力層とかでよく使うと思う 16:11 んですけれどもこれによってですね 類似している単語ほど1に近く相違して 16:18 いる単語ほどゼロに近くかつ全体の和は1 というような変換を 16:24 施すことができますこの結果を用いて valuと内積を計算するということです 16:31 一言でまとめると スケールドットプロダクトアテンションと 16:37 はクエリーベクトルと キーの各ベクトルの類似性に基づいて 16:43 valuの 各ベクトルの線形結合を計算するという ことになりますここまでの流れを全て図に
https://www.youtube.com/playlist?list=PLcd5jOpoEDGBDqiRMS4eqkfBwl28ixRYc
以下はブログ側