※本記事は、スタンフォード大学のオンラインコース「CS224N: NLP with Deep Learning」の第7回講義「Attention, Final Projects and LLM Intro」の内容を基に作成されています。講義の詳細情報は https://online.stanford.edu/courses/c... でご覧いただけます。コースのスケジュールとシラバスは https://web.stanford.edu/class/archiv... でご確認いただけます。本記事では、講義の内容を要約しております。なお、本記事の内容は原講義を正確に反映するよう努めていますが、要約や解釈による誤りがある可能性もありますので、正確な情報や文脈については、オリジナルの講義動画をご視聴いただくことをお勧めいたします。
登壇者:クリストファー・マニング教授(Christopher Manning) Thomas M. Siebel機械学習教授、言語学・コンピュータサイエンス教授 スタンフォード人工知能研究所(SAIL)所長
スタンフォード大学のオンライン人工知能プログラムについての詳細は https://stanford.io/ai をご覧ください。スタンフォード・オンラインは、スタンフォード大学全体の学校やユニットが提供する学術的・専門的教育のためのポータルで、スタンフォード工学部のグローバル・オンライン教育センター(CGOE)によって運営・管理されています。
1. 機械翻訳とその評価
1.1. BLEU評価指標とその仕組み
機械翻訳を評価するには何らかの方法が必要です。文献を調査すると、何百もの異なる指標が提案されていますが、今日でも最も一般的に使用されている指標は、実質的に最初に提案されたものであるBLEU(Bilingual Evaluation Understudy)です。IBMによって提案されたこの指標が登場するまで、翻訳の評価は主に人間が見て「これはどれだけ良い翻訳か」を判断することに頼っていました。人間による評価は今でもゴールドスタンダードとして広く使われていますが、自動評価指標には様々な偏りや問題があるためです。
しかし、迅速な評価や訓練ループでの使用など、多くの場合自動評価が望ましいこともあります。IBMの研究者たちはBLEU論文で、半ば適切な自動評価方法を考案できるのではないかと提案しました。彼らの提案したアイデアは、テキストに対して1つ以上の参照訳(人間が書いた翻訳)を用意し、自動翻訳を主に参照訳とのn-gram(1語、2語、3語、4語の連続)の重複に基づいてスコア化するというものです。4という数字に特別な意味はなく、3や5でも良かったのですが、4が適切な長さとみなされました。重複が多いほど、より良いスコアが得られます。
BLEUの仕組みを図で示すと、元のアイデアは複数の参照訳を用意し、機械翻訳を得て、その機械翻訳の部分を参照訳の中で見つけるというものでした。例えば、単語「the」は簡単に見つかりますが、「American」は全く見つからないかもしれません。しかし「International Airport」は第二の参照訳に見つかるので、4-gramマッチとしてカウントされます。他の部分も同様に重複を探し、それらを使ってスコアを計算します。
当初の考えでは、可能な翻訳の空間をサンプリングして適切なカバレッジを持つために、常に複数の参照訳を使うべきでした。しかし、最近の実践では、1つの参照訳でこれを行うことも珍しくありません。その場合の論拠は確率的なもので、良い翻訳ほど頻繁にマッチが得られ、したがってスコアが良くなるというものです。
BLEUがなぜ考案され、なぜまだ不完全なのかというと、翻訳には1つの正解がないという問題があります。機械学習で見られるような分類タスク(例えば画像を見せて「これは犬だ」と答える)とは異なり、どんな文でも翻訳する方法は多数あります。翻訳者たちは「このフレーズはあのフレーズより少し良い」などと議論することがありますが、大まかに言えば、様々な方法で文を翻訳できます。
さらに、異なる翻訳方法では語順が異なることがあるため、文を順に確認していくことができません。これが、どこでもn-gramのマッチングをする発想の動機となりました。しかし、それでもかなり粗い方法です。選んだ単語が参照訳と一致しないというだけで、良い翻訳でも低いBLEUスコアになることがあります。また、単語が文中で完全に間違った役割を持っていても、マッチする単語があればポイントが得られます。より大きなnのn-gramマッチングは、単語を正しく使っていないと得るのが難しくなります。
BLEUには短すぎるシステム翻訳にペナルティを与えるというもう一つの工夫があります。そうしないと、難しい部分をすべて省略して簡単な部分だけを翻訳し、翻訳した部分の精度が高くなってしまうからです。
BLEUスコアは理論的には0から100の間ですが、翻訳のバリエーションのため、100に到達することは決してありません。通常、20点台に達し始めると、原文が何についてのものかを理解できるようになります。30点台、40点台になると、翻訳はずっと良くなっていきます。
1.2. 統計的機械翻訳から神経機械翻訳への進化
統計的フレーズベース翻訳は1990年代後半にIBMによって先駆的に開発され、2000年代に再開発されました。これがGoogleが2000年代にGoogle翻訳として立ち上げたものであり、その後の10年間も改良が続けられました。しかし、統計的フレーズベースシステムでの翻訳の進歩は基本的に停滞していたという強い認識がありました。毎年、より多くのデータで従来のn-gram言語モデルを構築できるようになるなどの要因で少しずつ良くなりましたが、数値はほとんど上昇していませんでした。
そのため、2005年から2015年頃(または2014年頃)まで、機械翻訳コミュニティで支配的だった考え方は、構文ベースの機械翻訳によってより良い機械翻訳が得られるというものでした。文の構造を実際に理解し、構文解析すれば、文中での単語の役割を知ることができ、より良い翻訳ができるだろうというものです。このアイデアは特に、翻訳が非常に悪かった言語を見ることで強調されました。
当時、フランス語から英語やスパイン語から英語など、比較的似た欧州言語間の翻訳はある程度うまくいっていましたが、中国語から英語やドイツ語から英語の結果は遥かに悪かったのです。英語はゲルマン語系言語ですが、ドイツ語は英語と非常に異なる語順を持ち、一般に動詞が節の最後に来たり、異なる要素が前に置かれたりします。そこで、文法ベース、構文ベースの統計的機械翻訳の方法に取り組む人々がいました。私も2000年代後半にそれらに取り組んだ一人でしたが、真実は、それはあまりうまくいかなかったのです。
構文ベースの機械翻訳の進歩率は、フレーズベースの機械翻訳よりもわずかに傾斜が大きかったとしても、その傾斜の量はそれほど大きくありませんでした。その後、ニューラル機械翻訳が発明されたとき、状況は完全に一変しました。私が説明したように、最初の試みは2014年で、評価が行われた最初のケースは2015年でした。2015年にはまだ他の最良の機械翻訳方法ほど良くなかったのですが、2016年には良くなり、そして非常に急な傾斜で大幅に良くなっていました。
このグラフは2019年までしか示していませんが、それ以降も上昇し続けています。今日では、ニューラル機械翻訳システムのBLEU数値が50台や60台になることも珍しくありません。これは非常に良いニュースです。
1.3. 翻訳評価における課題と限界
翻訳評価における根本的な問題は、翻訳には1つの正解がないということです。機械学習でよく見られる分類タスク、例えば人に写真を見せてそのオブジェクトのクラスやラブラドールなどの犬種を答えさせるような場合とは異なります。どんな文でも、翻訳する方法は多数存在します。翻訳者が「このフレーズはあのフレーズより少し良い」などと議論することはありますが、大まかに言えば、文はさまざまな方法で翻訳できるのです。
これらの異なる翻訳方法では語順が異なることがあるため、文を下から順に確認して単語をチェックすることは実質的にできません。これがn-gramを文のどこでもマッチングするという考え方の動機であり、適切なマッチに対して合理的なクレジットを得られるようにしています。しかし、それでもかなり粗い方法です。
選んだ単語が参照訳と一致しないという理由だけで、良い翻訳でも低いBLEUスコアになることがあります。また、単語が文中で完全に間違った役割を持っていても、マッチする単語があれば一定のポイントが得られてしまいます。ただし、単語を正しい方法で使用していない限り、より大きなnのn-gramマッチングを得ることは難しくなります。
BLEUには短すぎるシステム翻訳に対するペナルティもあります。そうしないと、難しい部分をすべて省略して簡単な部分だけを翻訳し、翻訳した部分の精度だけで高いスコアを得られてしまうからです。
自動評価と人間による評価の差は依然として大きな課題です。人間による評価は時間とコストがかかりますが、自動評価指標には様々な偏りや制限があります。多くの場合、自動評価の目的は人間の判断を近似することですが、完全に代替することはできません。特に文脈の理解や文化的ニュアンス、流暢さの評価などにおいて、人間による評価が依然として重要な役割を果たしています。
2. Attention(注意機構)
2.1. Attentionの発明と背景
Attentionは今やニューラルシステムにおいて非常に基本的で重要なアイデアとなっています。また、割と最近発明された新しいものであるという点でも興味深いです。これまで扱ってきたニューラルネットワークの要素はすべて、実際には新千年紀の前に発明されていました。基本的なフィードフォワードニューラルネットワーク、再帰型ニューラルネットワーク、LSTM、そして畳み込みニューラルネットワークなど、まだ触れていないものも含めて、すべて前千年紀に発明されていたのです。それらは十分なデータと計算能力が得られるまで、その良さを示すための待機ゲームでした。
しかし、Attentionは2014年にニューラル機械翻訳の起源において実際に発明されたもので、ニューラルネットワークをより強力にするための非常に変革的なアイデアであることが証明されました。Attentionを動機づけたアイデアは、まさに機械翻訳の問題を見ることでした。
私たちはソース文に対してLSTMを実行し、そのあとエンコーダからの隠れ状態を、ターゲット文を生成するジェネレータLSTMに入力する前の隠れ状態として使用していました。これは、この文に関する有用なすべてのものをそのひとつのベクトルに詰め込まなければならないことを意味します。4単語の文ならそれほど難しくはないかもしれませんが、例えば40単語の文があった場合、その文に関するすべてをこの1つの隠れ状態に収めようとするのはあまり合理的ではないようです。
明らかな解決策としては、隠れ状態を大きくしてより多くの表現空間を確保したり、多層LSTMを使用してより多くの表現空間を確保したりすることがありますが、それでもかなり疑問の余地があります。特に、人間はそのようなことをしないのは確かです。人間が文を翻訳する場合、文を読んでその意味を理解していますが、翻訳を始める際には、文の前の部分を振り返り、それを翻訳に利用します。
そこで、ニューラルネットワークも、訳すときにソース内の異なる箇所に注意を払い、文を振り返って必要な情報を得られるようにすべきだという考えが生まれました。これがAttentionのアイデアです。デコーダの各ステップで、エンコーダへの直接接続を挿入し、文中の特定の単語を見ることができるようにします。
Attentionはニューラル機械翻訳の性能を大幅に向上させ、それ以降のほぼすべてのニューラル機械翻訳システムでAttentionが使用されるようになりました。人間に近い方法ですし、ソース文のすべての情報を一つの隠れ状態に詰め込むというボトルネック問題を解決します。また、勾配消失問題の解決にも役立ちます。前回、残差接続について話した際に言及したように、勾配消失問題から抜け出す方法の一つは、物事を直接接続することですが、これはエンコーダのすべての隠れ状態へのショートカット接続を提供します。
さらに素晴らしいことに、Attentionはモデルが何を翻訳しているのかを視覚化できるという解釈可能性も提供します。モデルがどこに注目しているかを見ることで、異なる時点で何を翻訳しているのかを基本的に確認できます。これはシステムを明示的に訓練せずとも、何をどこで翻訳しているのかを見ることができるという点で非常に有用です。
2.2. Encoder-Decoderモデルにおけるボトルネック問題
Attentionを動機づけたのは、機械翻訳におけるEncoder-Decoderモデルの根本的な問題でした。このモデルでは、LSTMをソース文に対して実行し、その隠れ状態を、ターゲット文を生成するジェネレータLSTMの入力として使用します。この設計の問題点は、文に関する有用な情報をすべて1つのベクトルに詰め込まなければならないということです。
4単語の短い文ならそれほど困難ではないかもしれませんが、40単語の長い文の場合、その文に関するすべての情報をこの1つの隠れ状態に収めようとするのは非常に疑問の余地があります。もちろん、この問題に対する単純な解決策はあります。隠れ状態をより大きくして表現空間を増やしたり、多層LSTMを使用してより多くの表現空間を確保したりすることは可能です。しかし、それでもなお、これは非常に疑わしいアプローチであり、特に人間がこのようなことをしないのは明らかです。
人間が文を翻訳する場合、その文を読んで全体の意味をある程度把握しますが、翻訳を始める際には、文の前の部分を振り返り、そこから必要な情報を得て翻訳に利用します。人間は文全体の情報を一度に完全に記憶して訳すのではなく、必要に応じて原文を参照しながら翻訳を進めるのです。
このボトルネック問題は長い文章になるほど深刻になります。単一のベクトルに詰め込める情報量には限界があり、特に複雑な構文や複数の節を持つ長文では、重要な情報が失われたり、誤って解釈されたりする可能性が高くなります。また、文の最初の部分に関する情報は、最後の部分に到達する頃には薄れてしまうかもしれません。
このような問題から、ニューラルネットワークも、翻訳する際にソースの異なる部分に注意を向けることができるようにすべきだという考えが生まれました。文を振り返り、必要な情報をその場で取得するこの能力こそが、Attentionメカニズムの基本的な発想なのです。
2.3. Attentionの計算方法と種類
Attentionの計算方法について、私はいくつかの図を用意しました。まず基本的なフローを説明し、その後に具体的な数式を紹介します。
翻訳を始める時点で、ジェネレータの開始時に隠れ状態があります。この隠れ状態をキーとして使用し、エンコーダを振り返って有用な情報を見つけます。具体的には、この隠れ状態とソース文内の各位置における隠れ状態を比較します。これらの比較に基づいて、注意スコア(Attentionスコア)を計算します。つまり、翻訳の最初の単語を生成している間、ソース文内のどこを見るべきかを決定します。
これらの注意スコアをソフトマックス関数に入力し、文内の異なる位置に対する確率分布または重み付けを得ます。そして、この重み付けを使用して、エンコーダに基づく表現を計算します。これはエンコーダの隠れ状態の加重平均となります。
この具体的な例では、注意出力はほぼ完全にフランス語の「il」(英語で「he」を意味する)の上の最初の単語の表現となります。その後、この注意出力を取り、デコーダの隠れ状態と組み合わせます。両方を一緒に使用して出力ベクトルを生成し、それをソフトマックスに通して翻訳の最初の単語y1を生成します。
そしてこのプロセスを繰り返します。2番目の単語を生成するために、最初の単語を生成した結果をコピーし、2番目の単語の生成を開始します。各位置での注意を計算し、別の注意出力を得て、それを使って別の単語を生成します。各タイムステップで、ソース内の異なる単語を見て、それが文を翻訳するのに役立ちます。
数学的に表現すると、エンコーダの隠れ状態をHと呼び、デコーダの隠れ状態をSと呼びます。それぞれ異なるものです。各点で特定のタイムステップTにいるので、Stを扱うことになります。
タイムステップTのための単語を生成するための注意スコアを計算するために、エンコーダの各位置での注意スコアを計算します。最も簡単な方法(後ほど代替案を説明します)は、エンコーダの隠れ状態と現在のデコーダの隠れ状態の間でドット積を取ることです。これによりスコアが得られますが、それは任意の数値です。
次に、これらのeijスコアをソフトマックス分布に入れて、エンコーダ内の各位置にどれだけの重みを置くかの確率分布を得ます。そして、エンコーダの隠れ状態の加重平均を計算します。これは明らかな式で、注意の重みに基づいてエンコーダの隠れ状態の加重和を取っています。
最後に、注意出力とデコーダの隠れ状態を連結し、二倍の長さのベクトルを得ます。これをデコーダから次の単語を生成するために使用します。通常、そのベクトルを別の行列で乗算し、それをソフトマックスに通して単語の確率分布を得て、最も高い確率の単語を選びます。
2.4. ドット積Attention
先ほど紹介した最も単純なAttentionの形式がドット積Attentionです。この方法では、エンコーダの隠れ状態とデコーダの隠れ状態の間で単純にドット積を取ります。これはある程度機能しますが、実際には完璧ではありません。
LSTMについて前回議論した際に少し触れましたが、LSTMの隠れ状態はその完全なメモリです。そのメモリには多くの情報を様々に保存する必要があります。正しい単語を出力するのに役立つ情報を保存し、将来について、つまり文脈や文法、そして既に言った単語を考慮して言いたい他のことについての情報も保存しなければなりません。様々な種類のメモリを持っているわけです。
したがって、その中の一部は振り返って関連付けるのに役立ち、一部はそれほど役立たないということは理にかなっています。すぐに言いたいことに関連する部分を見つけたいのであって、将来に関する他のすべての部分ではないのです。
このドット積による単純なアプローチでは、隠れ状態全体を均等に扱いますが、これは隠れ状態の中の特定の部分だけが現在の翻訳タスクに関連している可能性があることを考慮していません。実装は簡単でありスピードも速いという利点がありますが、隠れ状態内の情報の質的な違いを捉えるのには限界があります。
例えば、ドット積Attentionでは、単語の意味に関する情報が隠れ状態のある部分に、文法情報が別の部分に格納されている場合、それらの関係を適切に捉えることができない可能性があります。各次元が等しく扱われるため、本当に重要な側面に集中することが難しくなるのです。
この限界を克服するために、より洗練されたAttentionの形式が考案されました。次に説明する乗算的Attention(双線形Attention)はその一つです。
2.5. 乗算的Attention(双線形Attention)
ドット積Attentionの限界を考慮して、2015年にタン・ルオンと私は、バイリニアAttention(私はまだこちらの方が良い名前だと思っていますが、世間では乗算的Attentionと呼ばれるようになりました)を提案しました。このアプローチでは、二つのベクトル間に行列を配置します。この行列のパラメータはニューラルネットワークの他のすべてと同様に学習されます。
実質的に、この行列はジェネレータの隠れ状態のどの部分を使って、エンコーダの隠れ状態のどこを探すべきかを学習できます。特に、各次元が一致している必要はなくなります。例えば、エンコーダが単語の意味に関する情報をここに格納し、デコーダが単語の意味に関する情報をあそこに格納している可能性があります。この行列の適切なパラメータを学習することで、それらを一致させ、注意を払うべき正しい場所を計算できるのです。
これは非常に優れたアプローチに思えました。しかし、一つ疑問に思うかもしれないのは、この行列Wに学習すべきパラメータが多数あることです。私の例では隠れ状態の長さが6しかないため、36個のパラメータしかありませんが、隠れ状態の長さが1000だとすると、その行列Wには100万のパラメータがあることになります。これは問題になる可能性があります。
この問題を解決するために、その後すぐに提案されたのは、中央の大きな行列を低ランク行列として形成することです。低ランク行列を作る簡単な方法は、このような細長い二つの行列(これがピースのランクです)を取り、それらを掛け合わせることです。これにより、前のスライドで示した大きな行列が得られます。これにより、前のスライドのバイリニア注意行列の低パラメータバージョンが得られます。
この時点で、線形代数を少し使うと、この計算は「これら二つのベクトルをそれぞれ取り、この低ランク変換行列を使って低次元空間に射影し、その低次元空間でドット積を取る」と言うのと全く同じです。木曜日にTransformerについて学ぶ際に、Transformerが行っているのはまさにこれだと分かるでしょう。大きなベクトルを取り、それを低次元空間に射影し、その低次元空間でドット積Attentionを取っているのです。
この低ランクアプローチは、パラメータ数を大幅に削減しながらも、バイリニアAttentionの柔軟性の多くを保持します。これはTransformerの設計に重要な影響を与えました。今日、ほとんどのニューラルネットワークモデルで使用されているのはこのタイプのAttentionです。
2.6. 加法的Attention
実は歴史的な順序で言うと、最初に提案されたAttentionの形式は、バダナウらの論文で紹介された加法的Attentionでした。この方法では、注意スコアを計算するために小さなニューラルネットワークを使用します。SとHを取り、両方を行列で掛け、それらを加算してtanhに通し、さらにベクトルを掛けることで数値を得ます。これは、LSTMなど他の場所で使用する計算と同様に見えます。
文献の大部分では、これは加法的Attentionと呼ばれていますが、これも非常に奇妙な名前だと思います。小さなニューラルネットを使用していると言う方が理にかなっているように思えます。彼らはこれを提案して使用しました。
実際、私たちが翌年論文を書いたとき、バイリニア(乗算的)Attentionの方が私たちにとってはより良い結果を出していました。しかし、その後の研究、特にニューラル機械翻訳アーキテクチャの大規模な探索において、適切な種類の良いハイパーパラメータ最適化を行えば、実際にはこの種類(加法的Attention)が最良であり、バイリニアAttentionよりも優れていると主張されました。
しかし、この方法は図の上部にあるものよりもはるかに複雑でかなり遅いです。それが優れているかどうかに関わらず、実際にはほぼ完全に勝利したのは上の方法(乗算的Attentionの低ランク版)であり、これはTransformersやこれらの日に使用されている他のほとんどすべてのニューラルネットが使用しているものです。
加法的Attentionの主な特徴は、複雑な非線形変換を通じてエンコーダとデコーダの隠れ状態間の関係をモデル化できることです。これにより、特定の状況では強力な表現能力を持ちますが、計算コストが高く、特に大規模モデルや長いシーケンスを扱う場合には実用性が制限されます。そのため、多くの現代的なアーキテクチャでは、効率と有効性のバランスが取れた乗算的Attentionの変種が好まれる傾向にあります。
2.7. Attentionの利点と解釈可能性
Attentionの発明は完全に変革的なものでした。最初の現代的なニューラル機械翻訳システムは2014年にGoogleで行われ、当時としては非常に大きく深い8層LSTMを使用していました。彼らは良い結果を得ることができましたが、その直後にモントリオール大学のディミトラ・バダナウ、キョンヒョン・チョ、ヨシュア・ベンジオがAttentionを用いて機械翻訳の第2のバージョンを開発しました。大学で利用できる比較的控えめな計算予算で、Attentionという秘密の武器を使って、より良い結果を得ることができたのです。
Attentionはニューラル機械翻訳の性能を大幅に向上させ、その後のほぼすべての新しい機械翻訳システムでAttentionが使用されるようになりました。これには多くの利点があります。
まず、すでに述べたように、人間に近い方法です。人間が文を翻訳する際には、文を振り返り、翻訳に必要な部分を見るからです。次に、ソース文に関するすべての情報を1つの隠れ状態に詰め込まなければならないというボトルネック問題を解決します。現在では、エンコーディング全体の表現空間を持ち、必要に応じてそれを使用できます。
また、勾配消失問題の解決にも役立ちます。これは、前回残差接続について話したときに言及したことと関連しています。勾配消失問題から抜け出す方法の一つは、物事を直接接続することであり、Attentionはエンコーダのすべての隠れ状態への直接的な接続を提供します。
Attentionがもたらすもう一つの素晴らしい点は、解釈可能性です。モデルがどこに注目しているかを見ることで、異なる時点で何を翻訳しているのかを基本的に確認できます。これはシステムを明示的に訓練せずとも、翻訳の過程を視覚化できるという点で非常に有用です。
例えば、私の小さなサンプル文「if he hit me with a pie」を例にすると、最初の位置では「il」(彼)という最初の単語を見て、それを翻訳しています。フランス語には「entarter」という、英語の「pie」を動詞として使うのと同様に、誰かにパイを投げるという意味の動詞があります。フランス語の単語を一つずつ見ると「il m'a entarté」となり、これは「彼は私にパイを投げた」という意味です。「hit」に当たる部分を翻訳するとき、モデルは既に「pie」の方を見ています。「me」を翻訳するときには「m'」(me)に注目し、「with a pie」の部分を翻訳するときには引き続き「entarté」に注目しています。これは文の単語間で期待される適切なアライメントです。とても素晴らしいことです。
Attentionは解釈可能性を提供するだけでなく、多くの場合、モデルの判断プロセスを人間が理解できる形で示してくれます。これはAIシステムの透明性を高め、信頼性の向上にも寄与します。
2.8. Transformerへの展開
Attentionは非常に一般的な技術です。機械翻訳を改善する素晴らしい方法として最初に発明されましたが、あらゆる種類のニューラルアーキテクチャ、あらゆる目的のためにAttentionを組み込むことができます。一般的な発見は、それが常に結果を改善するということでした。
一般的に、値のベクトル、クエリベクトルがあり、Attentionを使用して値の加重平均を取得し、関連情報を見つけてパフォーマンスを向上させることができるところであれば、どこでもAttentionを使用できます。今すぐ例を挙げようとはしませんが、木曜日にTransformerについて学ぶときに、Transformerの中でのセルフアテンション(自己注意機構)という形でAttentionの別の例をすぐに見ることになります。
RNNベースのAttentionと位置情報の必要性については質問がありました。RNNベースのAttentionでは位置情報は必要なく、それほど重要とは思われませんでした。位置情報が最近あらゆる場所で使用されるようになったのは、Transformerに到達したときに初めて必要になるからです。
その理由は、これらのエンコーダ状態を計算する際、前のエンコーダ状態を考慮して計算しているからです。これは再帰的ニューラルネットワークであるため、この表現は過去について何かを知っています。そのため、それはある程度どの位置にいるかを知っています。別の見方をすれば、この最終的な表現は文の意味の全体的な感覚を与え、振り返る際に必要なのは、類似した意味内容の関連付けマッチングであり、追加の位置情報は本当に必要ではありません。
しかし、Transformerモデルでは、再帰的構造がなくなり、すべての位置が並列に処理されるため、単語の位置情報が明示的に追加されない限り、モデルは単語の順序を理解できなくなります。これがTransformerで位置エンコーディングが重要になる理由です。
位置情報に関するこの違いは、RNNベースモデルとTransformerベースモデルの重要な区別の一つであり、木曜日の講義でTransformerの詳細について学ぶ際にさらに深く理解することになります。
3. 最終プロジェクトの概要
3.1. デフォルトプロジェクトとカスタムプロジェクトの選択肢
このクラスの最終プロジェクトには二つの選択肢があります。デフォルトの最終プロジェクトを選ぶか、独自の最終プロジェクトを考案するかです。後ほど両方について詳しく説明します。
デフォルトの最終プロジェクトは、BERTという有名な初期のTransformerの最小実装を構築し実験するというものになります。これを選択した場合、BERTの実装の一部が提供され、それを完成させ、感情分析を行うためにファインチューニングしてデータ結果を得ることになります。
デフォルトの最終プロジェクトであっても、私たちは学生が異なることをできるオープンエンドなプロジェクトにしたいと考えています。そこで、システムを拡張して改善する方法についての多くのアイデア(パラフレージング、対照学習、低ランク適応など)が提案されています。これらのいずれかを選んで実装することが最終プロジェクトとなります。
なぜデフォルトの最終プロジェクトを選ぶべきでしょうか?研究経験があまりなく、最終プロジェクトで何をしたいか明確なアイデアがない場合や、明確な指針と目標、そしてリーダーボード(デフォルトプロジェクトでは、提供するタスクでのパフォーマンスのリーダーボードを提供します)が欲しい場合は、デフォルトの最終プロジェクトを選ぶとよいでしょう。
正直に言って、多くの人にとって最善の選択肢はデフォルトの最終プロジェクトだと思います。過去の実績では、通常、学生の約半数がデフォルトプロジェクトを選びます。これには、最初は「カスタム最終プロジェクトをやろう」と考えていたものの、数週間後に「これは意味がない、提案していたことはまったくうまくいかない、やめてデフォルトの最終プロジェクトに切り替えよう」と決める専門家も含まれます。
しかし、カスタム最終プロジェクトを選ぶ良い理由もあります。あなたが興奮するような研究アイデアやトピックがある場合(おそらくすでにそれに取り組んでいる場合)や、自分で何か異なることを試してみたい場合、あるいは研究目標を考え出し、必要なデータとツールを見つけ、ゼロから始めるという経験をより多く持ちたい場合(これは非常に教育的ですが、かなり難しいです)、カスタム最終プロジェクトがあなたに適しています。
トピックに関する制限として、CS224nの最終プロジェクトでは、人間の言語とニューラルネットワークの両方を実質的に含むことを要求しています。これはNLPのクラスだからです。人間の言語について何かを知り、学んでほしいのです。
同様のモデルを生物情報学的配列や音楽、レーダーなどに使用できることは十分承知していますが、このクラスでは人間の言語に関することをしてほしいと思います。これは、人間の言語だけに関するものである必要はないという意味です。視覚言語モデルや音楽と言語のようなものに取り組んだ人もいます。つまり、モダリティの組み合わせを持つことはできますが、人間の言語を実質的に(完全に些細ではなく)含める必要があります。もし質問があれば、ぜひ聞いてください。
また、ニューラルネットワークも実質的に含む必要がありますが、これもニューラルネットワークだけに関するものである必要はありません。もし「カーネルマシンを使用して、ニューラルネットワークと同じくらい上手く機能することを示せると思う」などのアイデアがあれば、それも当然良いでしょう。
3.2. チームサイズと期待される成果物の関係
最終プロジェクトに関して、チームサイズは1人から3人まで認めています。一般的に、チームを形成することを奨励しています。より興味深いことができ、モチベーションが高まり、友達を作ることもできるからです。チームは良いものです。
チームに対する期待として、より大きなチームはそれに比例してより多くの作業ができるはずだということです。採点する際には、より大きなチームからはより多くの作業を期待しています。
これがどのように機能するかは、正直に言って少し複雑です。作業量と別に品質の問題があるからです。実際、最も優れたプロジェクトのいくつかは、良いアイデアを持ち、何をしたいのか知っていて、自分一人でそれを行う誰かによる1人のプロジェクトであることがよくあります。しかし、素晴らしい複数人のプロジェクトもあります。
私が言いたいのは、1人のプロジェクトで大量の作業を試みて、その3分の1しか終わらないようなら、最終プロジェクトで良い成績を取るための良い方法ではないということです。どんなプロジェクトでも、何かを完成させて示す必要があります。
それでも、1人で何か興味深いことを示せれば、たとえ私たちの反応が「これが他のモデルよりも優れていることを示していれば、もっと良かっただろう」とか「実験の詳細を解明するために検証実験を実行していれば本当に良かっただろう」であっても、1人だけだったので許して、「でも1人だけだったから」と言うでしょう。
一方、3人チームで、明らかに他のモデルと比較すべきだったり、他のデータセットで実行すべきだったりするのに、それをしていない場合、「3人チームとして、明らかにそれをすべきだった」と感じ、そのためにあまり良いスコアを与えないべきだと感じるでしょう。そのように機能します。
複雑さは、同時に行っている他のことからも生じます。複数のクラスで共有される最終プロジェクトを行うことを許可していますが、期待としては、やはりより多くの作業をするということです。あなたたち2人がこのクラスとCS231nの両方に1つのプロジェクトを使用している場合、それは4人のプロジェクトのようなものであり、多くの作業をすべきです。
他の場合もあります。時にはRAシップを持っていたり、PhD回転学生だったりする人もいます。他の目的でこれを行っている場合は、教えてほしいですし、より多くの作業をすることを期待しています。
最終プロジェクトについて話し合うことを非常に喜んでいますし、すでに多くの人と話し合っていますが、残念ながら私は1人しかいないので、500人全員と最終プロジェクトについて話し合うことは確実にできません。そのため、すべてのTAにも最終プロジェクトについて話し合うことを奨励しています。オフィスアワーのページには、各TAが知っていることについての情報があります。プロジェクトが何についてのものか知っているなら、少なくとも最も役立つTAを見つけようとするか、あるいは単に親しみやすい顔をしたTAを見つけるかもしれません。どのような方法を使うにせよ、最終プロジェクトについてTAと話し合ってください。
3.3. プロジェクト提案書と研究論文レビューの要件
最終プロジェクトで最初にしなければならないのはプロジェクト提案書です。これはチームごとに1つ提出します。つまり、最初のステップはチームを決めることです。プロジェクト提案書の一部は、プロジェクトの詳細を教えることですが、もう一つの重要な部分は、トピックに関する主要な研究論文のレビューを書くことです。
デフォルトの最終プロジェクトでは、いくつかの提案を提供します。プロジェクトを拡張する別のアイデアがあれば、他のものを見つけることもできます。カスタムプロジェクトでは、自分で見つける必要がありますが、研究論文を見て理解し、何をしているのか、何が説得力があるのか、何を考慮していなかったのか、何を達成できなかったのかを理解する練習をしてほしいと思っています。
そこで、研究論文の2ページの要約を書いてほしいと思います。目標は、この研究論文について批判的に考えることです。何が刺激的だったのか、対して何が刺激的だと主張されていたが実際には明らかだったか、あるいは間違っていたかなどを考えてください。
その後、何をする予定かを教えてください。デフォルトの最終プロジェクトでは非常に簡単かもしれませんが、カスタム最終プロジェクトでは本当に重要です。特に、使用する予定の文献と探索する予定のモデルの種類について教えてください。
カスタム最終プロジェクトで私たちが不満を感じる場合、最も一般的な二つの不満は、どのデータを使用するかが明確でないことです。プロジェクト提案書の締め切りまでに、最終プロジェクトで使用できるデータがわかっていない場合、すでに心配しています。また、システムの評価方法を教えてくれないと、成功を測定する方法を知りたいと思います。
今年の新しい要素として、現実世界に展開された場合のあなたの作業の潜在的な倫理的課題と、それをどのように軽減できるかを概説する倫理的考慮事項の段落を含めてほしいと思います。これは現在、多くの会議やグラント申請で要求されていることです。この段落を書くことで少し練習してもらいます。
取り組もうとしていることと、それが多くの倫理的問題を持つか、あるいは比較的単純な質問応答システムであるかによって、話すべきことの量は多少異なりますが、いずれの場合も、この作業の可能な倫理的考慮事項は何かを考えてみてください。
提案書全体は最大4ページです。研究論文の要約については、批判的に考えてください。最悪の要約は、基本的に論文の抄録と序論を言い換えただけのものです。もっと深く考えてほしいのです。論文の新規貢献は何だったのか、異なる種類の問題や異なる方法に使用できるものなのか、それとも1つのデータセットのトリックを利用しただけなのか、彼らが見逃したり、異なる方法でできたり、正しく行われていないと確信できなかったりするものはあるのか、同じトピックを扱う他の論文と類似または独特なのか、論文を超えて拡張できる何かを示唆しているのかなどを考えてください。
これらの最終プロジェクト提案書の採点では、ほとんどのポイントはその論文レビューにあります。プロジェクト計画にもいくつかのポイントがありますが、本当に望んでいるのは、プロジェクト計画に対する形成的なフィードバックと、それが現実的か非現実的かについてのコメントを提供することです。
それにもかかわらず、アイデアを持ち、それをどのように調査できるか、どのように評価できるか、データセット、ベースラインなどについて考えたことを期待しています。適切なベースラインを持つことを強調したいと思います。何をするにしても、比較できるものが必要です。時には、まったく同じことをした以前のシステムかもしれませんが、より新しくて面白いことをしている場合は、同じことをする明白な方法を考え、それよりもうまくできることを証明すべきです。
何をするかによって、それは大きく異なりますが、例えば、二つのテキスト間のテキスト類似性を計算するために複雑なニューラルネットワークを構築している場合、二つのテキスト間のテキスト類似性を計算する簡単な方法は、テキスト内のすべての単語の単語ベクトルを検索し、それらを平均して、それらの平均ベクトル間のドット積を計算することです。あなたの複雑なニューラルネットワークがそれよりも有意に優れていない限り、それはあまり良いシステムとは思えません。常にいくつかのベースラインを持つよう試みるべきです。
3.4. プロジェクトマイルストーンと最終報告書
プロジェクト提案書の後、中間に「プロジェクトマイルストーン」も設けています。これは皆さんが進捗を出し、最終的に良いプロジェクトができるよう、途中で確認するためのものです。ほとんどの最終プロジェクトにおいて、マイルストーンで期待しているのは、セットアップができていて何かを実行できる状態になっていることです。これは単に単語ベクトルを検索するベースラインかもしれませんが、データとフレームワークを用意し、それを実行して数値を出せるという意味です。
その後、最終プロジェクトがあります。最終プロジェクトではコードを提出してもらいますが、何か大きな懸念や問題がない限り、最終プロジェクトはほぼ完全にプロジェクトレポートに基づいて評価されます。プロジェクトレポートは基本的に学会論文のようなものであり、最大8ページまで書くことができます。
何をしているかによって内容は変わりますが、典型的には次のような構成になります。まず要旨と序論があり、関連する他の研究について説明し、使用するモデル、使用するデータ、実験とその結果について説明し、最後に分析と結論で洞察に富んだコメントをいくつか提示します。
プロジェクトレポートは研究成果を伝えるための重要な部分ですので、必ず時間をかけて丁寧に作成してください。このレポートは読み手が研究内容を理解し、その価値を評価するための主要な手段となります。
特に実験結果の部分では、単に数値を提示するだけでなく、その結果が何を意味するのか、どのような発見があったのか、予想と異なる結果が出た場合はなぜそうなったと考えられるのかなど、解釈と議論を含めることが重要です。
また、プロジェクトの制限や将来の改善点について率直に述べることも、良いレポートの特徴です。完璧な結果だけを強調するのではなく、プロセス全体から学んだことや、残された課題についても触れると良いでしょう。
4. 計算リソースの利用
4.1. クラウドコンピューティングの選択肢と制限
正直に告白すると、現在の計算リソースの状況は最近の年と比べると良くありません。すべてOpenAIのせいです...冗談ですが、これまでとは異なる状況です。昨年まで、常にいずれかのクラウドコンピューティングプロバイダーから非常に寛大なクラウドコンピューティングの無償提供を得ることができていました。これにより多くのコンピューティングサポートが提供されていました。
しかし、大規模言語モデルの大成功により現在はGPUの大きな不足が生じています。その結果、クラウドコンピュートプロバイダーは以前ほど寛大ではなくなっています。実際、AWSの担当者が指摘したところによると、私のコースは昨年彼らが提供した無料GPUの単一最大のグラントだったそうです。これが難しくなってきているのです。
そのため、多くの場合、学生の皆さんは自分でリソースをやりくりする必要があります。無料で安価なものを見つける学生の創意工夫に頼ることになります。
Googleは一人あたり$50のGCPクレジットを提供しており、これを課題3、4と最終プロジェクトに使用できます。また、どのクラウドでも、これまでにアカウントを使用したことがない場合、通常は無料のスターター・クレジットが得られますので、それも役立つでしょう。
クラウド上のJupyterノートブックとしては、最も使用されているのはGoogle Colabで、限定的なGPU使用を許可しています。四半期の後半になると使用制限が厳しくなる傾向がありますので、月額10ドルでCollab Proを購入する価値があるかもしれません。これによりGPUへのアクセスが大幅に向上します。
しかし、他の選択肢もあります。AWSはSageMaker Studio Labというジュピターノートブック環境を提供しています。また、同じくGoogleが所有するKaggleは、Kaggleノートブックを提供しています。これらは実際にはGoogle Colabよりも良いGPUアクセスを提供することが多いです。Kaggleノートブックは基本的に素のJupyterノートブックであり、ColabのようなファンシーなUI要素はありません。
他の可能性としては、Modalという低価格のGPUプロバイダーがあり、月に一定量の無料GPU使用を許可しています。これも便利でしょう。Vast AIのような他の低コストGPUプロバイダーも関連性があるかもしれません。
また、大規模言語モデルの登場によって状況が変わってきたことについても触れておきましょう。モデルを自分で構築するのではなく、大規模言語モデルで実験したい、大規模言語モデルでコンテキスト内学習を行いたい、あるいはその種の他のことをしたいという多くのプロジェクトがあります。その場合、必要なのは大規模言語モデルへのアクセスであり、特にAPIアクセスがあると作業を自動化できます。
Together AIの寛大さのおかげで、大規模言語モデルへのAPI利用として$50分を提供することができました。これは実際にかなりの量になりますが、どれだけ大きなモデルを使用するかによって変わってきます。何かを示すために実際にどの程度大きなモデルが必要なのかを考えるべきです。Together上で70億パラメータの言語モデルを実行できる場合、50ドルで膨大な数のトークンを処理できますが、より大きなモデルを実行したい場合、処理できるトークン数は桁違いに少なくなります。
これらのGPUオプションについては、既にEdにたくさんのドキュメントをアップロードしていますので、それらをぜひ確認してください。
4.2. Google Collab、AWS、KegleなどのJupyter環境
クラウド上のJupyterノートブック環境にはいくつかの選択肢があります。最も一般的に使用されているのはGoogle Colaboratoryで、限定的なGPU使用を許可しています。Colabは使いやすいインターフェースと統合機能が特徴ですが、四半期の後半になると使用制限が厳しくなる傾向があります。そのため、ラテを数杯我慢して月額10ドルでCollab Proを購入する価値があるかもしれません。Collab Proを使えば、GPUへのアクセスが大幅に向上します。
しかし、他にも検討すべき選択肢があります。AWSはJupyterノートブック環境としてSageMaker Studio Labを提供しています。これは学術研究用に設計された無料のクラウドベースのサービスで、一定量のコンピューティングリソースにアクセスできます。
また、GoogleはKegleを通じてKegleノートブックも提供しています。興味深いことに、KeggleノートブックはGoogle Colabと同じ会社のものでありながら、実際にはColabよりも良いGPUアクセスを提供することが多いのです。Colabは他の面ではより優れた体験を提供しています。Kegleノートブックは基本的に素のJupyterノートブックであり、Colabにはより洗練されたUI機能が追加されています。
これらのクラウドベースのノートブック環境を使用する際の重要なポイントは、無料枠と有料枠の違いを理解することです。無料版では通常、使用時間やGPUアクセスに制限があります。例えば、無料版のGoogle Colabでは、一定時間使用しないとGPUの接続が切れることがあります。また、連続使用時間にも制限があります。
Colabの場合、無料版ではK80やT4などの古いGPUしか使えないことが多いですが、Collab Proでは新しいA100などの高性能GPUにアクセスできる可能性が高まります。これは複雑なモデルやデータセットを扱う場合に大きな違いをもたらします。
また、Collab ProとCollab Pro+の違いを理解することも重要です。Pro+はさらに高いプランで、より長い実行時間とより優先的なGPUアクセスを提供しますが、もちろん月額料金も高くなります。
AWS SageMaker Studio Labは完全に無料ですが、使用するには申請が必要で、承認されるまで少し時間がかかる場合があります。しかし、一度承認されれば、かなり寛大な計算リソースが提供されます。
Kegleノートブックの利点の一つは、Kegleのデータサイエンスコンペティションに使用される多くの公開データセットに簡単にアクセスできることです。これは特定のデータセットで作業する場合に便利です。
どのプラットフォームを選ぶにしても、使い始める前に、データのバックアップ方法、セッションの中断時に作業を保存する方法、そして各プラットフォームの制限を理解しておくことが重要です。それぞれに独自の長所と短所があるため、プロジェクトの特定のニーズに合わせて選択するとよいでしょう。
4.3. Together AIによるAPIアクセスの提供
大規模言語モデルの登場によって、プロジェクトの取り組み方は大きく変わりました。多くの場合、モデルを自分で構築するのではなく、既存の大規模言語モデルで実験したり、コンテキスト内学習を行ったり、その他の様々な活用方法を探求したりすることがあります。そのような場合、必要なのは大規模言語モデルへのアクセスです。特にAPIアクセスがあると作業を自動化できるため非常に便利です。
Together AIの寛大さのおかげで、学生一人あたり大規模言語モデルへのAPIアクセスとして$50分を提供することができました。これは実際にはかなりの量になります。どれだけ多くのことができるかは、どの程度大きなモデルを使用するかによって大きく変わってきます。
これについて考えるべき重要なポイントは、あなたが示したいことを実証するために、実際にどの程度大きなモデルが必要なのかということです。Together上で70億パラメータの言語モデルを実行できる場合、50ドルで膨大な数のトークンを処理することができます。しかし、より大きなモデルを実行したい場合、処理できるトークン数は桁違いに少なくなります。
例えば、70億パラメータ(7B)モデルと700億パラメータ(70B)モデルでは、同じ$50で処理できるトークン数に大きな差があります。小さいモデルなら数百万トークンを処理できるかもしれませんが、大きいモデルでは数万トークンしか処理できないかもしれません。
そのため、研究の目的を考慮して、本当に必要な最小限のモデルサイズを選ぶことが重要です。多くの場合、より小さなモデルでも十分に興味深い結果を示すことができます。特に特定のタスクやドメインに特化した実験を行う場合は、必ずしも最大のモデルが必要というわけではありません。
また、Together AIのAPIは、様々なオープンソースモデルにアクセスできる点も魅力です。これにより、異なるモデルアーキテクチャや訓練手法の比較などの実験も可能になります。
APIを使用する際は、プロンプトエンジニアリングの効率性にも注意を払うと良いでしょう。効率的なプロンプト設計により、少ないトークン数でより多くの情報を引き出すことができます。また、一部の実験ではバッチ処理を活用することで、APIコールを最適化することも可能です。
Together AIのAPIアクセスは、大規模な言語モデルを使った実験を行いたい学生にとって、非常に価値のあるリソースとなります。
5. 研究トピックの見つけ方
5.1. プロジェクトのタイプと例
カスタムプロジェクトの研究トピックを見つける方法についてお話しします。様々な種類のプロジェクトがあります。基本的な科学の哲学から考えると、通常は「ここに問題があり、それに対して進展を示したい」という出発点か、「ここに理論的手法や何かの変更に関する素晴らしいアイデアがあり、それが他の方法よりも優れていることを示したい」という出発点から始まります。
私たちは様々な種類のプロジェクトを認めています。一般的なプロジェクトの種類の一つは、関心のあるタスクがあり、それを何らかの方法で解決または進展させようとするものです。例えば、国務省の文書から情報を抽出したいとして、ニューラルNLPでどの程度うまくできるかを見るなどです。
二つ目の種類は、ニューラルネットワークで何か異なることをするアイデアがあり、それがどの程度うまく機能するかを確認するというものです。または、現在大規模言語モデルが存在することを考えると、コンテキスト内学習や大規模な言語モデルプログラムを構築することで、大規模言語モデルを使って興味深いことができるかどうかを確認することもあります。
ほとんどのCS224nプロジェクトはこれらの最初の三つのタイプに該当し、最終的には何らかのシステムとデータを持ち、それを評価することになります。しかし、それは100%の要件ではなく、異なる種類のプロジェクトも可能です。
分析または解釈可能性プロジェクトを行うこともできます。例えば、「これらのTransformerモデルがどのように私の言葉を理解し、私の発言に対して正しい答えを与えることができるのか」といった疑問に興味を持ち、ニューラルネットワークの内部を見て何を計算しているのかを調べることもあります。最近、「メカニスティック解釈可能性」や「回路トレーニング」などのタイトルの下でこのトピックに関する多くの研究が行われています。
また、モデルの動作を特定のタスクに関して観察するだけのプロジェクトも可能です。例えば、メタファーの解釈のような言語タスクを取り上げ、どのニューラルネットワークが正しく解釈でき、どれができないか、またはどのような種類のメタファーを解釈できるかなどを調査することもできます。
もう一つの種類は理論的なプロジェクトです。例えば、数年前に実際に行われ、会議論文になった例では、単語ベクトルの推定において、異なるアルゴリズム(word2vecとglove)によって計算された単語ベクトルの安定性を調査し、計算されたベクトルの安定性について証明を伴う結果を導き出すというものがありました。このようなプロジェクトも許可されていますが、あまり多くは見ません。
5.2. タスク指向プロジェクト
タスク指向プロジェクトは、CS224nの最終プロジェクトとして最も一般的なタイプの一つです。このタイプのプロジェクトでは、特定のNLPタスク(問題)があり、それを解決または進展させることを目指します。例えば、国務省の文書から情報を抽出したいとして、ニューラルNLPを使ってどの程度うまくできるかを検証するプロジェクトなどが当てはまります。
タスク指向プロジェクトの主な特徴は、明確に定義された問題に焦点を当て、その問題に対する解決策をニューラルネットワークを使って構築することです。最終的には、システムとデータを持ち、それを評価して結果を得ることになります。
このタイプのプロジェクトでは、成功が明確に測定可能であることが重要です。例えば、精度、F1スコア、BLEU、ROUGEなどの標準的な評価指標を使用して、あなたのシステムがどの程度うまく機能しているかを示すことができます。
また、適切なベースラインを設定することも非常に重要です。例えば、あなたがテキスト間の類似性を計算するための複雑なニューラルネットワークを構築している場合、比較のためのシンプルなベースラインとして、各テキスト内の単語ベクトルを平均化し、その平均ベクトル間のドット積を計算するという方法が考えられます。あなたの複雑なニューラルネットワークがこのシンプルなアプローチよりも有意に優れていない限り、それはあまり良いシステムとは言えません。
タスク指向プロジェクトでのもう一つの重要な側面は、使用するデータセットです。既存の標準的なデータセットを使用するか、あるいは新しいデータセットを収集・作成するかを決める必要があります。新しいデータセットを作成する場合は、それがどのように収集され、どのようにアノテーションされたかを明確に文書化することが重要です。
タスク指向プロジェクトは、実世界の問題を解決するアプローチを学ぶ素晴らしい方法であり、その結果はしばしば実用的な応用に直接つながります。以上が、タスク指向プロジェクトの主な特徴と考慮事項です。
5.3. アーキテクチャ改良プロジェクト
ディープラーニングの復活初期には、研究者がより良いディープラーニングアーキテクチャを見つけることに重点を置いていました。例えば、「これは質問応答システムです。新しい場所にアテンションを追加するアイデアがあります」とか「ニューラルネットワークに新しい層を追加できます」といった内容の論文が多く、それによって性能が向上するというものでした。
このようなアプローチの論文は多く、非常に楽しいものでした。多くの優れたCS224nプロジェクトもこのようなものでした。学生たちはしばしば最先端に近いシステムをゼロから構築することができました。しかし、過去5年間で、これを実現する可能性はかなり低くなってきました。
もし本当に良いアイデアがあり、それが異なる独創的なものであれば、もちろんそれを試みてください。しかし、それは非常に難しいのです。今日では、プロフェッショナルな研究者でさえ、何らかの形で既存の大規模な事前訓練済みモデルを利用することがほとんどです。
そうすると、多くのアーキテクチャの選択肢が固定されてしまいます。なぜなら、大規模な事前訓練済みニューラルネットワークには特定のアーキテクチャがあり、それに従わなければならないからです。興味深いことは、低ランク適応のような方法を使ってモデルを適応させることかもしれませんが、それでも制約があります。
実用的なプロジェクトのほとんどでは、唯一の賢明な選択は「Hugging Face Transformersを使用します」と言うことです。これについては今後チュートリアルがあります。何らかの事前訓練済みモデルを読み込み、テキストに対して実行し、その上や周囲で他にできることを考えます。
自分自身のアーキテクチャを構築することが理にかなうのは、より小規模でアーキテクチャを探索するようなプロジェクトの場合だけです。例えば、「ReLUよりも優れる異なる非線形関数のアイデアがあります。調査してみましょう」というような場合です。そうすれば小規模な実験を行うことができます。
現代のスケールやリソース制約の現実を認識し、実行可能なプロジェクトを計画することが重要です。大企業の研究チームが数十台のA100 GPUを使って何ヶ月も実行するような大規模実験は、ほとんどの学生のプロジェクトでは不可能です。代わりに、既存のモデルを創造的に活用したり、特定の側面を改良したりする方法を考えることが、より現実的なアプローチです。
5.4. 解釈性・分析プロジェクト
解釈性や分析に焦点を当てたプロジェクトも選択肢の一つです。このタイプのプロジェクトでは、新しいシステムを構築するのではなく、既存のモデルがどのように機能しているのかを深く理解することに焦点を当てます。
例えば、「これらのTransformerモデルがどのように私の言葉を理解し、私の発言に対して正しい答えを与えることができるのか」という疑問に興味を持つかもしれません。この場合、ニューラルネットワークの内部を見て、何を計算しているのかを調査します。最近、このトピックに関する多くの研究が「メカニスティック解釈可能性」や「回路トレーニング」などのタイトルの下で行われています。
別のアプローチとして、特定のタスクにおけるモデルの動作を観察するプロジェクトも可能です。例えば、メタファーの解釈のような言語タスクを取り上げ、どのニューラルネットワークが正しく解釈でき、どれができないか、またはどのような種類のメタファーを解釈できるかなどを調査できます。
解釈性プロジェクトの一例としては、注意機構(アテンション)がTransformerモデル内でどのように情報を伝達しているかを視覚化し分析するものがあります。これにより、モデルがどの入力トークンに注目しているか、また異なる層や頭部でどのように情報を統合しているかを理解できます。
また、モデルの特定の層や成分がどのような言語知識や特徴を捉えているかを調査することもできます。例えば、BERTの中間層が構文情報をどのように符号化しているか、あるいは意味的関係をどのように表現しているかといった分析です。
解釈性プロジェクトの利点は、ブラックボックスと見なされがちなディープラーニングモデルの内部動作に光を当てることで、モデルの強みと弱みをより良く理解し、将来のモデル設計に情報を提供できることです。また、モデルのバイアスや盲点も明らかにすることができます。
解釈性・分析プロジェクトはCS224nの最終プロジェクトとして完全に許容され、優れたプロジェクトとなる可能性があります。ただし、明確な研究質問と堅牢な評価方法を持つことが重要です。
5.5. 理論的プロジェクト
理論的プロジェクトは時々行われるもう一つのカテゴリーです。これは数学的な側面が強いプロジェクトで、理論的な証明や形式的な分析を含むことがあります。
例としては、数年前に実際に行われ、その後会議論文になったプロジェクトがあります。これは単語ベクトルの推定において、異なるアルゴリズム(word2vecとglove)によって計算された単語ベクトルの安定性を調査するものでした。このプロジェクトでは、計算されたベクトルの安定性について証明を伴う結果を導き出しました。
理論的プロジェクトでは、アルゴリズムの複雑性、収束特性、最適化問題の形式的分析、あるいはモデルの表現能力についての理論的な限界を探求することがあります。
例えば、特定のニューラルネットワークアーキテクチャが特定の種類の言語パターンを学習できる(あるいはできない)理由について理論的な分析を行うことも可能です。あるいは、注意機構(アテンション)の数学的特性や、その表現能力の限界について調査することもできます。
このようなプロジェクトは許可されていますが、実際にはあまり多く見ません。理論的プロジェクトは、強固な数学的背景と形式的な証明を構築する能力を必要とするため、多くの学生にとってはより挑戦的かもしれません。しかし、理論的な洞察は実践的なモデル開発に貴重な情報をもたらすことができます。
理論的プロジェクトを選択する場合は、証明や分析が単なる数学的な演習にとどまらず、NLPタスクや言語理解に関する具体的な洞察を提供することが重要です。理論と実践の橋渡しをすることで、プロジェクトの価値が大きく高まります。
5.6. 過去のプロジェクト例とインスピレーション源
過去のプロジェクトからアイデアを得ることもできます。CS224nのウェブページでは、過去の年の報告書を見つけることができます。異なる年のレポートを見て、アイデアを得ることができます。
例えば、「Deep Poetry」というプロジェクトでは、単語の連続を生成する言語モデルに加えて、詩のような韻を踏むパターンで韻を踏ませるための追加機能を持つゲート付きLSTMを作成しました。これはかなり面白いプロジェクトでした。
また、以前に発表された論文の再実装を行うこともできます。これは少し古い例ですが、よく覚えています。Transformerが登場する前の時代に、DeepMindはニューラルチューリングマシンや微分可能なニューラルコンピュータに関する興味深い論文を発表していましたが、実装は公開していませんでした。そこでキャロルは独自に微分可能なニューラルコンピュータの実装を書き始めました。これはある意味では少し無謀なことでした。締め切りの数日前まで彼女はまだうまく動かせておらず、完全な失敗に終わる可能性もありましたが、締め切り前にうまく動かすことができ、興味深い結果を得ることができました。
それは素晴らしいことでした。何か興味深いものであれば、それが独創的である必要はなく、興味深いものを再実装することもできるのです。
論文がその後興味深いものとして発表されることもあります。これもまた初期の時代からの例で、比較的シンプルなものでしたが、進展をもたらす新しいものでした。私たちがこれらのRNNを紹介した方法では、下部に単語ベクトルがあり、上部でソフトマックスを計算します。しかし、出力行列を掛けてソフトマックスに入れることを考えると、その出力行列も一連の単語ベクトルのようなものです。各単語に対して列があり、それぞれの出力単語のスコアを得て、それに対してソフトマックスをかけます。
彼らのアイデアは、これら2つのベクトルセットを共有できるのではないか、そうすることで改善が得られるのではないかというものでした。
量子化されたモデルに取り組んだ人もいます。これは一般的なニューラルネットワーク技術に近いものですが、量子化されたベクトルでも良い言語モデリング結果が得られることを示せば、言語を使用していると見なします。
最近では、2024年からの最後の2つの例のように、多くの場合、事前訓練された大規模言語モデル(次の3つの講義で説明します)を使用してプロジェクトを行い、それらを操作しています。パラメータ効率の良いファインチューニング方法やコンテキスト内学習方法などを使用できます。
例えば、コード言語モデルの生成に関する多くの研究がされていますが、これらの研究者たちはFortranの生成を改善することに決めました(おそらく彼らは物理学者かもしれません)。彼らはパラメータ効率の良いファインチューニングを使用して、Fortranを生成するためのコードLLamaを改善できることを示しました。
自然言語はどこにあるのでしょうか?コードには自然言語のコメントがあり、これらのコメントはコードが何をすべきかを説明するのに役立ちます。実質的には、コードが何をすべきかの人間の言語による説明をコードの断片に翻訳していたのです。
別の例では、AIファッション駆動のカタログ作成に関するプロジェクトがあり、画像をテキスト記述に変換しました。これも既存の視覚言語モデルから始めて、それをどのようにファインチューニングするかを検討していました。
5.7. 大規模言語モデルを活用したプロジェクトの可能性
最近では、事前訓練された大規模言語モデル(LLM)を活用したプロジェクトが非常に一般的になっています。これらのモデルは次の3つの講義で詳しく説明しますが、多くの学生がこれらを利用したプロジェクトを行っています。
大規模言語モデルを活用する主な方法としては、以下のようなアプローチがあります:
パラメータ効率の良いファインチューニング(PEFT)は、非常に人気のあるアプローチです。例として先ほど挙げたFortranコード生成の改善プロジェクトがあります。研究者たちはコードLLamaモデルをベースとして、PEFTテクニックを使ってFortranの生成性能を向上させました。このプロジェクトでは、コードに含まれる自然言語コメントが、コードが何をすべきかを説明する翻訳元として機能していました。つまり、人間の言語による説明をコードの断片に翻訳するタスクとなっていたのです。
コンテキスト内学習(In-context Learning)も、APIアクセスを通じて大規模言語モデルを利用する強力な方法です。これはモデルのパラメータを更新せずに、プロンプト内に例を与えることでモデルの動作を調整するテクニックです。このアプローチは計算効率が良く、特定のニッチなタスクやドメインでモデルの性能を向上させるのに効果的です。
マルチモーダルアプリケーションも興味深い可能性を提供します。例えば、AIファッション駆動のカタログ作成に関するプロジェクトでは、画像をテキスト記述に変換していました。これは既存の視覚言語モデルをファインチューニングすることで実現していました。このような画像とテキストを組み合わせたプロジェクトは、大規模言語モデルの能力を拡張する良い例です。
大規模言語モデルの分析も価値のあるプロジェクトになり得ます。これらのモデルが何を「知っている」のか、どのように推論するのか、またどのような種類のバイアスを持っているのかを調査できます。例えば、モデルが特定の種類の質問にどのように対応するかを体系的に調査したり、異なるプロンプト戦略の効果を評価したりするプロジェクトが考えられます。
LLMを用いた特殊なタスク固有ツールの開発も魅力的なプロジェクトの方向性です。例えば、法律文書の分析、医療テキストからの情報抽出、あるいは特定のドメイン(例:化学や金融)に特化した支援ツールなどが考えられます。
重要なのは、単にAPIを呼び出すだけではなく、独自の貢献や新しい知見を提供することです。大規模言語モデルを使用する場合でも、プロジェクトはアカデミックな価値や実用的な価値を持つべきです。例えば、特定のドメインでのモデルの振る舞いを体系的に調査する、新しいプロンプト手法を開発する、あるいはモデルの出力を分析して興味深いパターンを見つけるなどが考えられます。
6. NLP研究の現状と実践的アドバイス
6.1. アーキテクチャ設計からモデル活用への移行
深層学習を用いた自然言語処理の研究において、この10年ほどで何が可能かという点で大きな変化がありました。ディープラーニングの復活初期には、論文の多くは、より良いディープラーニングアーキテクチャを見つけることに重点を置いていました。
「ここに質問応答システムがあります。新しい場所にアテンションを追加するアイデアがあります」とか「ニューラルネットワークに新しい層を追加できます」というような論文が多く、それによって数値が向上するというものでした。このような論文は多く、非常に楽しいものでした。そして多くの優れたCS224nのプロジェクトもそのようなものでした。学生たちはしばしばゼロから構築したシステムで最先端に近いものを作ることができました。
しかし、過去5年間でこれを実現する可能性はかなり低くなりました。本当に良いアイデアがあり、それが異なる独創的なものであれば、もちろんそれを試みてください。しかし、それは非常に難しいのが現実です。
今日では、プロフェッショナルな研究者でさえ、何らかの形で既存の大規模な事前訓練済みモデルを利用することがほとんどです。そうすると、多くのアーキテクチャの選択肢が固定されてしまいます。なぜなら、大規模な事前訓練済みニューラルネットワークには特定のアーキテクチャがあり、それに従わなければならないからです。
低ランク適応のような方法を使って側面から適応させるなど、興味深いことはできるかもしれませんが、それでも制約があります。つまり、何をやりたいにしても、実質的に唯一の賢明な選択は「Hugging Face Transformersを使用します」と言うことです(これについては今後チュートリアルがあります)。そして何らかの事前訓練済みモデルを読み込み、テキストに対して実行し、その上や周囲で他にできることを考えます。
自分自身のアーキテクチャを構築することが理にかなうのは、より小規模でアーキテクチャを探索するようなプロジェクトの場合だけです。例えば、「ReLUよりも優れる異なる非線形関数のアイデアがあります。調査してみましょう」というような場合です。そうすれば小規模な実験を行うことができます。
この移行は、NLP研究の成熟と大規模モデルの成功を反映しています。以前は革新的なアーキテクチャ設計がブレークスルーをもたらしましたが、現在ではそれらの設計原則が確立され、スケールとデータ量が成功の主要な要因となっています。今日の研究はより多く、既存のアーキテクチャの改良や特定のタスクへの適応、またはモデルの動作の理解に焦点を当てています。
6.2. 計算リソース制約下での現実的なアプローチ
現在私たちが抱える問題の一つは、スケールの問題です。人々はDeep MindやGoogle、あるいは他の企業が最新の論文で発表した、グラフ構造の推論検索を使った何か素晴らしいことをしている論文を見て、「自分のプロジェクトでもこれをやりたい」と言ってきます。しかし、論文をさらに読み進めると、彼らは32台のA100 GPUを1ヶ月間使用していたことがわかります。これは、ほとんどすべての状況において、あなたが利用できる規模のコンピュータではありません。
企業からの学生で、そのような計算資源を利用できる場合は別ですが、大多数の人にとっては現実的ではありません。そのため、実用的なプロジェクトを行う必要があります。ただし、この実用性は世界の大多数の人々にとっても同様です。ブログなどを見ると、多くの人々が軽量な方法で作業を行い、その方法を説明しています。
これが、パラメータ効率のよいファインチューニングのような方法が非常に人気がある理由です。軽量な方法で実行できるからです。その例として、ファインチューニングの代わりに、プロンプト工学やin-context learningのような手法を使用することで、大規模モデルの能力を少ないリソースで活用することができます。
また、モデルの量子化やプルーニング(不要なパラメータの削減)を行うことで、メモリ使用量や計算要件を大幅に削減することも可能です。例えば、フルサイズのGPT-3のような巨大なモデルは無理でも、その量子化版や小型版(例:GPT-2)を使用することで、多くの興味深いプロジェクトを実現できます。
データの前処理や特徴工学に注力することも、計算リソースが限られている場合の効果的な戦略です。高品質のデータ処理により、小さなモデルでも良い結果を得られる場合があります。
また、特定のタスクに焦点を絞ることで、よりシンプルなモデルでも競争力のある結果を得られることがあります。例えば、全般的な言語理解ではなく、特定のドメイン(例:法律文書の分類)に特化することで、計算要件を大幅に削減できます。
学術環境での研究では、新しいアーキテクチャの提案よりも、既存のモデルの効率的な活用や特定の側面の改善に焦点を当てることが、より現実的で価値のあるアプローチとなっています。
6.3. API利用と独自貢献のバランス
この点に関連して、GPT-4やGemini Pro、Claude Opusなど、これらのモデルをプロジェクトで使用することは歓迎します。ただし、その場合はAPIの使用になります。自分で大規模モデルをトレーニングすることは不可能です。オープンソースで利用可能なモデルであっても、大規模なモデルに関しては、あなたが持っているようなGPUに単に読み込むことすらできません。おそらくLLaMA 7Bモデルは読み込めるでしょうが、LLAMA 70Bモデルをあなたのように限られたGPUに読み込むことはできません。
そのため、サイズに関して現実的である必要があります。しかし、今ではAPIアクセスを使ってin-context learningやプロンプティングを行い、それらを探索したり、これらの言語モデルコンポーネントの周りに大規模な言語モデルプログラムを構築したりするなど、多くの興味深いことができます。それらを行うことを強く推奨します。
また、「これらのモデルはまだ性差別的で人種差別的なのか」「アナロジーの良い理解を持っているのか」「ラブレターを解釈できるのか」など、あなたの興味のあるトピックに関する分析プロジェクトを行うことも可能です。これらはすべて許可されており、実行可能です。
ただし、私たちはあなたが行った興味深いことに基づいて評価しようとしていることを忘れないでください。あなたのプロジェクトは「これをGPT-4に通したら、素晴らしいドキュメントの要約を作成しました。終わりです」というものであってはなりません。質問は、それに加えて、興味深い研究プロジェクトを持つために何をしたのかということです。
APIを使用する場合、単にモデルに質問を投げかけるだけでなく、何らかの形で独自の貢献を付加することが重要です。例えば、特定のドメインや言語現象に対するモデルの振る舞いを体系的に分析したり、プロンプトエンジニアリングの新しい手法を開発したり、モデルの出力を評価する新しい指標を提案したりすることが考えられます。
また、既存のモデルAPIを特定のアプリケーションに統合し、実世界の問題を解決するシステムを構築することも価値ある貢献となります。例えば、特定の業界の文書を分析するシステムや、教育支援ツール、あるいは特殊なドメイン知識を必要とするタスクのためのインターフェースなどが考えられます。
APIを使用する場合でも、研究的な価値や新しい知見を生み出すことを目指してください。これにより、単なるAPIの利用者から、NLP研究に貢献する研究者へと成長することができます。