見出し画像

Attention Is All You Needを読んだ。

俺はなんの経歴もないAIをやっている者だ。様々な本や動画でAIを勉強している。自分でもかなりの知識がついていると自負しているが、ただやはり本職の人たちと比べるとまだまだだろう。
ただ、昨日、ヤン・ルカン先生の著書「ディープラーニング 学習する機械」を読み、ますます人工知能の面白さに惹かれた。俺はプログラマーをやっているが、仕事でもAIを使えるか日夜画策している。

しかし、そんなことを言っているお前は、原論文を読んだことがあるのかと聞かれるとそんなものはない。学生の時に読んだっきりで俺は今まで論文などひとつも読まずに小説ばかりを読んでいた。

AIをやっている者として、Googleの伝説の論文「Attention Is All You Need」は読むべきだろう。俺はそれを決意した。

この記事では具体的な話はせず、要点メモと所感を書こうと思う。できるだけ確実なことを書くつもりだが、間違って解釈していたらすみません。指摘いただければ修正します。

メモと所感

transfomerは機械翻訳のために作られた自然言語モデルのアーキテクチャ。
これが、今まで主流だったRNNなどのモデルと比べてとても性能が良いことが分かった。

表題の「Attention Is All You Need」とは何か。自然言語処理でattentionと呼ばれる技術が当時使われていたが、それはRNNなどとともに使われていた。ただ、これだとモデルの構造上逐次処理にせざるを得ず、計算に時間がかかってしまう。また、入力長の長さが長くなるほど最初の方を忘れてしまうのでよくない。
ここで登場するのがSelf-attentionとMulti-head Attentionだ。
Self-attentionが、あのK、Q、Vの奴で、この構造を作ることで、入力の全ての情報を考慮することができ、最初を忘れてしまうといったことを防ぐことができる。
Multi-head Attentionは、このSelf-attentionをh個作って、計算するというものだ。ここがかなり重要で、複数作ることで情報の表現の幅が広がり、モデルの性能が向上する。また、これが並列で計算できるので学習もしやすい。
RNNなどで要所で使っていたattentionこそが実は最も重要であり、これを主軸にできたアーキテクチャが、transformerなのである。

また、論文を読む前までなんとなく理解していたPOSITIONAL ENCODINGについても詳しく書かれていてよかった。embeddingで作ったベクトルにトークン位置と次元のインデックスによってつくられる三角関数のベクトルを加算するようだ。

あとは計算量の比較の表があったが、とても分かりやすくてよかった。


所感としてはかなり読みやすかった。
そしてこれはかなりおすすめしたいことだが、GPT4に聞きながら読むのがいい。わからないことは分かるまで聞くことができる。以下に何個か論文について対話をした様子を貼る。こんな感じで聞きまくれるので最高のパートナーだった。俺はGPT4がなければこの論文は読めなかっただろう。ありがとうGPT4。

自分の質問
論文に以下の式があります。このQとKとVは入力だと思うのですが、その場合Q=K=Vとなりますか? MultiHead(Q, K, V ) = Concat(head1, ..., headh)WO where headi = Attention(QWQ i , KW K i , V WV i )

GPTの回答
"Attention Is All You Need" 論文において、Q(Query)、K(Key)、およびV(Value)は、元の入力データから派生したものです。エンコーダのセルフアテンションにおいては、Q, K, Vはすべて同じ入力から生成されます。この場合、Q=K=V です。しかし、デコーダのセルフアテンションやエンコーダとデコーダ間のアテンションにおいては、Q, K, Vは異なる可能性があります。

具体的には:エンコーダのセルフアテンション:各エンコーダ層のセルフアテンションにおいて、Q, K, Vはすべて同じエンコーダ層の入力(または前の層の出力)から生成されます。この場合、Q=K=V です。
デコーダのセルフアテンション:デコーダ層のセルフアテンションにおいても、Q, K, Vはすべて同じデコーダ層の入力から生成されます。この場合、Q=K=V です。
エンコーダ-デコーダ間のアテンション:デコーダの各層には、エンコーダの出力に対するアテンションも存在します。この場合、Qはデコーダの入力から、KとVはエンコーダの出力から生成されます。したがって、この場合 Q≠K=V となります。


このように、Q, K, Vが同じかどうかは、それらがどの部分のアテンションで使用されるかによって異なります。

chat GPT

自分の質問
Label Smoothing とは?

GPTの回答
Label Smoothingは、ディープラーニングの訓練中に正解ラベルを少し「滑らか」にする手法です。これは、モデルが訓練データに過度に適合するのを防ぎ、一般化能力を向上させるための正則化手法の一つとして使用されます。

具体的には、Label Smoothingは、ハードな正解ラベル(例:[0, 1, 0, 0])を少し「柔らかく」して(例:[0.1, 0.8, 0.05, 0.05])、モデルが過度に確信的な予測を避けることを助けます。

Label Smoothingの主な考え方は以下のとおりです
1.正解ラベルの値を少し減少させます。たとえば、1.0のラベルを0.9にします。
2.その差(この例では0.1)を、他のクラスのラベルに均等に分配します。


Label Smoothingの利点は以下のとおりです
過学習の緩和: モデルが訓練データに過度に適合するのを防ぎます。
確信の緩和: モデルが極端に高い信頼度で予測を行うのを防ぐことで、誤った予測に対するペナルティを増加させます。
汎化の向上: Label Smoothingは、モデルの一般化能力を向上させることが示されています。


"Attention Is All You Need"の論文では、Label SmoothingはTransformerモデルの訓練中に使用され、モデルの性能を向上させる役割を果たしています。

chat GPT

あとは、わからないところを、「以下について説明してください」と加えて聞くだけでかなりわかりやすく教えてくれる。chatGPTが学生時代にあれば最高だったな。。。

この記事が気に入ったらサポートをしてみませんか?