※本記事は、Stanford UniversityのAfshine Amidi氏とShervine Amidi氏による講義「CME295: Transformers and Large Language Models」の第1回(2025年9月26日開講)の内容を基に作成されています。講義の詳細情報およびシラバスは https://cme295.stanford.edu/syllabus/ でご覧いただけます。元の講義動画は https://www.youtube.com/watch?v=Ub3GoFaUcds で視聴可能です。
本記事では、講義の内容を詳細に記述しておりますが、要約や解釈による誤りがある可能性もありますので、正確な情報や文脈については、オリジナルの講義動画をご視聴いただくことをお勧めいたします。
登壇者紹介: Afshine Amidi氏は、Stanford Universityの非常勤講師(Adjunct Lecturer)です。École Centrale Paris卒業後、MITで学び、Uber、Google、Netflixでの勤務を経て、2020年以降はNLPに特化。2021年からワークショップ形式でTransformerとLLMの教育活動を開始し、2024年春からCME295として正式なStanfordコースを担当しています。
Shervine Amidi氏は、Stanford Universityの非常勤講師(Adjunct Lecturer)です。École Centrale Paris卒業後、StanfordのICME修士プログラムで学び、Uber、Google、Netflixでの勤務を経て、兄弟であるAfshine氏とともにLLM分野で活動。2021年から共同で教育活動を展開し、本コースを共同で担当しています。
Stanford大学の大学院プログラムに関する詳細情報は https://online.stanford.edu/graduate- でご確認いただけます。
1. イントロダクション
1.1 講師紹介とコース概要
Afshin: 皆さん、こんにちは。CME 295 Transformersと大規模言語モデルの講義へようこそ。私の名前はAfshinで、後ろにいるShervinと一緒にこのクラスを教えます。まず、授業を始める前に私たち自身を紹介させてください。
私たちは双子の兄弟で、実は非常に似た経歴を持っています。二人ともフランスのÉcole Centrale Parisという学校に通いました。その後、それぞれ別々の道を歩むことになりました。私はMITに進学し、ShervinはスタンフォードのICME修士プログラムに進みました。その後の業界でのキャリアも非常に似通っています。私が最初にUberに入社し、その後ShervinもUberに加わりました。そしてShervinがGoogleに移り、私もGoogleに移りました。そして最近では、私がNetflixに入社し、ShervinもNetflixに加わりました。私たちは大規模言語モデルに取り組んできました。
つまり、私たちは技術的なバックグラウンドを持っており、主にLLMに特化しています。では、なぜこのクラスを開講しているのでしょうか。2020年以降、Shervinと私はNLPに特化してきました。そして私たちは毎年ワークショップ形式でこのクラスを開催してきました。2021年、2022年、2023年、2024年と続けてきました。ご存知の通り、ChatGPTが2022年に登場し、突然LLMへの関心が爆発的に高まりました。そして昨年の春に、私たちはこのクラスをスタンフォードの正式なコースとして提供し始めました。それが現在CME 295と呼ばれているものです。そして今回が2回目の開講となります。
Shervin: その通りです。
Afshin: では、このクラスから何を期待できるでしょうか。まず第一に、LLMは今やあらゆる場所に存在しています。私たちの目標は二つあります。一つ目は、これらすべてを機能させる根底にあるメカニズムについて学ぶことです。Transformerという基盤アーキテクチャを見ていきます。これがすべてを機能させているのです。そして二つ目は、これらのLLMがどのように訓練され、どこに応用されているのかを知ることです。
もしあなたがまだこのクラスが自分に適しているかどうか迷っているなら、私の考えを述べさせてください。このクラスは、この分野に興味を持つ人々にとって素晴らしいものです。それがキャリアの目標である場合でも、研究科学者やML科学者になりたい場合でも、あるいはLLMにある程度依存する個人プロジェクトを開発したい場合でも有用です。何が機能し、何が機能しないのかという注意点を知りたい場合にも役立ちます。または、別の分野にいて、このAI、生成AI、LLM全体がどのように機能し、自分の領域にどのように適用できるかを知りたいだけの場合でも役立ちます。
前提条件について言えば、最低限、機械学習の基礎知識が必要です。基本的には、モデルがどのように訓練されるか、ニューラルネットワークとは何かを知っている必要があります。また、線形代数の基礎も必要です。基本的には、例えば行列がどのように乗算されるかを知っている必要があります。しかし、これらの分野で能力を開発している段階であっても問題ありません。私たちはあなたをサポートするためにここにいます。これが理想的な前提条件のセットだと思います。
1.2 履修要件と成績評価
Afshin: では、引き続きロジスティクスについて説明します。このクラスは毎週金曜日の午後3時30分から5時20分まで開講され、ここで行われます。このクラスは2単位で、Letter gradeまたはCredit/No creditのどちらかを選択できます。
セットアップから分かるように、私たちは基本的にこのクラスを録画しています。もし何らかの理由でこの時間帯に出席できない場合でも、録画を利用できるようにします。毎週金曜日の夜か土曜日には録画を公開するようにします。
成績について説明します。今学期は2回の試験を実施します。1回目は中間試験で、5回目の授業中、10月24日に行われます。そして2回目は期末試験で、12月8日の週に実施されます。日程はまだ未定なので、追ってお知らせします。
Shervin: 確認します。
Afshin: 講義があるたびに、ウェブサイトにスライドと録画を投稿します。もし興味があれば、シラバスもそこにありますので、私たちがどのようなトピックについて話すのかを知ることができます。また、クラスの教科書として「Super Study Guide Transformer LLMs」があります。ここにコピーがありますので、見たい方はどうぞ。このクラスで扱う多くの概念は実際にこの本に含まれていますので、フォローするのに役立つと思います。また、このクラス全体の非常に短く凝縮されたバージョンとして、VIPチートシートと呼ばれるものも作成しました。これはGitHubで入手可能ですので、興味があればご覧ください。また、現在多くの言語に翻訳しています。ちなみに、あなたの言語がそこにない場合は、私たちに知らせてください。一緒に取り組むことを喜んでお手伝いします。
ロジスティクスの最後の部分について説明します。お知らせはCanvasに投稿します。質問がある場合は、もちろん私たちに連絡することができます。しかし、Canvasには「ED」と呼ばれるタブもあります。皆さんはきっとご存知だと思います。そこをクリックして質問を投稿していただければ、Shervinと私が回答します。
私たちに連絡を取るには、このメーリングリストを使うか、私たちは二人だけなので、直接連絡してください。ロジスティクスについて、ここまでで何か質問はありますか。一つ言い忘れたことがあります。このクラスを録画しているため、質問をする場合、視聴者にとってあなたの質問が何であったか必ずしも明確でない可能性があります。ですので、私はあなたの質問を繰り返すように努力します。奇妙に聞こえるかもしれませんが、忘れないようにします。では、ロジスティクスについてここまでで何か質問はありますか。
学生: 試験にコーディングの部分はありますか。
Afshin: 質問は、試験にコーディング部分があるかどうかです。答えはノーです。試験は純粋にクラスで見る概念に焦点を当てます。実際、これはあなたを罠にはめるためのものではありません。クラスをフォローし、スライドを見て、私たちが見る概念を理解していれば大丈夫です。
学生: もしウェイトリストに載っている場合はどうすればいいですか。
Afshin: ああ、そうですね。ウェイトリストに載っている場合の質問ですね。経験上、多くの人がスケジュールを確定させます。何人かはドロップし、何人かはしません。もしまだウェイトリストに載っている場合は、私たちに話しかけてください。しかし、大丈夫だと確信しています。というのも、現在のウェイトリストは6人程度だと思います。ですから、大丈夫だと思います。
学生: スライドはどこにありますか。
Afshin: スライドはウェブサイトにあり、Canvasにもリンクを投稿するようにします。質問は、スライドがどこにあるかでした。
学生: 試験の重み付けはどうなっていますか。
Afshin: 試験の重み付けについての質問ですね。宿題はありません。中間試験が50%、期末試験が50%です。特に他の重みはありません。もしこの時間帯が何かと衝突している場合は、録画していることを覚えておいてください。例えばあるセッションに出席できなくても問題ありません。
学生: 期末試験はクラスの後半部分だけについてですか。
Afshin: すみません、期末試験がクラスの後半についてだけかという質問ですね。まだ試験を作成していませんが、これは私たちが考えていることです。そう、期末試験はおそらくトピックの後半について扱うことになると思います。
要するに、中間試験が50%、期末試験が50%で、これは楽しいクラスです。では、それでは、ゆっくりとクラスを始めさせていただきます。
1.3 授業の進め方とリソース
Afshin: もう一つ言及したかったことがあります。私たちが何かについて話すたびに、スライドの下部にソースが表示されることに気づくでしょう。これは主に、まず私たちが引用しているものをクレジットするためですが、興味があればこれらの資料をもう少し深く掘り下げることができるようにするためでもあります。というのも、週に2時間しかなく、9週間か10週間しかないからです。すべてをカバーするには到底十分な時間がありません。
そして2つ目の免責事項は、この分野は略語でいっぱいだということです。私自身、始めた当初は略語に完全に怖気づいていました。しかし、このクラスの終わりまでには、これらの略語が何を意味するのか、何に対応するのかという心の中のマッピングができることを願っています。クラスの終わりに向けてそのメンタルマッピングができていれば、私たちが良い仕事をしたことが分かります。
では、それでは始めましょう。非常に高いレベルから始めたいと思います。というのも、ゼロから始めると仮定するからです。まず、NLP全般について話します。
NLPは最初の略語です。NLPは自然言語処理(Natural Language Processing)の略で、テキストを操作すること、テキストで計算を行うことに関する分野です。非常に高いレベルで言えば、NLPタスクを基本的に3つのカテゴリーに分類できます。
最初のカテゴリーは分類(Classification)と呼ばれるものです。入力テキストがあり、何かを予測したいのです。一つの例は、映画のレビューがあって、その感情が肯定的か、否定的か、中立的かを予測したいという場合です。それが一つの例です。インテント検出もできます。例えば、人が何をしたいのかを知ることです。例えば「明日のアラームを作成したい」と言ったとします。ここでのインテントは「アラームを作成する」です。
言語を検出することもできます。例えば、フランス語で書いた場合、そのテキストがフランス語であることを検出したいのです。トピックモデリングもあります。
2番目のカテゴリーはマルチ分類(Multi-classification)と呼ばれるものです。まだ入力としてテキストがありますが、今度は複数のものを予測します。このカテゴリーにも多くのタスクがあります。非常に人気のあるものの一つは、固有表現認識(Named Entity Recognition)、別名NERと呼ばれるものです。このタスクが行うことは、入力テキストが与えられたとき、基本的にいくつかの特定の単語にラベルを付けることです。例えば、何かが場所なのか時間なのかなどを識別します。
そして、もう少し言語学的な側面に関する他のタスクもあります。10年前は非常に研究されていましたが、今ではあまり流行していないと思います。品詞タグ付け(Part-of-Speech Tagging)があります。これは、どの単語が名詞か動詞かなどを把握することです。あるいは、依存構造解析や句構造解析などの構文解析関連のタスクもあります。
そして最後のカテゴリーは、最近非常に人気があるもので、生成(Generation)カテゴリーです。入力としてテキストがあり、出力としてもテキストがあります。ここでは長さが可変です。つまり、出力テキストの長さが事前に分からないということです。ここにはいくつかのタスクがあります。例えば機械翻訳があります。英語で何かがあって、それをドイツ語にしたいとします。質問応答もあります。典型的には、ChatGPTやGeminiなどのアシスタントを使っていますよね。質問をして、応答を得ます。
そして他のタスクもあります。要約のように、記事を要約したいとか、何かを生成するというものです。何かというのは、コードを生成する、詩を生成する、いろいろなことができます。
では、これらのタスクを一つずつ見て、人々が通常どのように扱っているかを説明します。最初のカテゴリーである分類カテゴリーから始めます。ここでは感情抽出タスクで説明します。例えば「このテディベアはとてもかわいい」という文があるとします。モデルにこれを肯定的な感情として予測してもらいたいのです。
典型的には、感情抽出データセットに関するデータセットを使用します。映画レビューについて言及しました。これはIMDbの批評ですが、製品に関するレビューもあります。Amazonのレビューやツイート、今ではXと呼ばれていますが、X投稿などです。
こうした出力を評価する方法は、典型的には従来の分類指標を使用します。正確度(Accuracy)があります。これは、正しく予測した観測値の割合です。しかし、2つの重要な指標もあります。全員が知っているか分かりませんので、少し思い出させてください。
一つは適合率(Precision)です。これは、あなたが行ったすべての陽性予測のうち、正しかったものはどれかということです。そして2つ目は再現率(Recall)です。すべての真のラベルのうち、陽性として正しく予測したものはいくつかということです。そして、F1スコアと呼ばれる指標があります。これは基本的に適合率と再現率の調和平均を取って、一つの数値を与えます。
では、なぜこれらすべての指標が必要なのか疑問に思うかもしれません。簡単に答えると、クラスが非常に不均衡なタスクやデータセットがある場合があるからです。例えば、データセットの99%が陽性ラベルで、わずか1%が陰性という場合があります。
ここで正確度のような指標を取ると、非常に誤解を招きます。というのも、すべてを多数派クラスとして予測するモデルがあれば、素晴らしい分類器を持つことになりますが、実際にはそうではないからです。だからこそ、適合率と再現率が本当に役割を果たすのです。これが最初のものです。
では、NLPタスクの2番目のカテゴリーに移りましょう。これはマルチ分類カテゴリーです。入力テキストがあり、複数のものを予測します。そして私が言及したNERタスクでこれを説明します。これは、与えられた単語のカテゴリーを識別することについてです。
例えば、テディベアをエンティティとして識別したいのです。これには分類指標を使用しますが、文レベルではなく、トークンレベルまたはエンティティタイプレベルで使用します。つまり、例えば場所というカテゴリーがあるとして、そのカテゴリーの単語をどれだけうまく予測しているかを知りたいとします。通常、これらの指標をそれに応じて集約します。
では、最後のカテゴリーに行きましょう。これは私が言及したように最も人気のあるものです。これはテキストイン、テキストアウトです。機械翻訳タスクでこれを説明します。これは、ある原言語からターゲット言語にテキストを翻訳することです。ここには英語からフランス語への例があります。「かわいいテディベアが読んでいる」です。
これについては、データセットを取得するのが実は難しいです。というのも、ここではテキストのペアが必要だからです。WMTと呼ばれる非常に人気のあるデータセットがあります。これはWorkshop on Machine Translationの略です。これには、異なる言語のペアになったシーケンスが多数含まれています。例えば、欧州議会のデータセットから得られた英仏、英独などがあります。
さて、これらを評価するには、モデルのパフォーマンスを評価するのは実際にははるかに難しいです。というのも、想像できるように、何かを翻訳する方法は多くあり得るからです。この部屋の多くの人がバイリンガルやトライリンガルだと確信しています。そう、それがこれを難しくしているのです。
過去には、人々はそれを行うためにいくつかのルールベースの指標を使用してきました。聞いたことがあるかもしれないものの一つはBLUEです。BLUEはBilingual Evaluation Understudyの略で、参照テキストに対してあなたの翻訳がどれだけ良いかの尺度です。ROUGEも同様で、実際には指標のスイートですが、異なる方法でそれを捉えます。
ところで、機械学習コミュニティは面白いです。というのも、BLUEはフランス語で青を意味しますが、ROUGEは赤を意味します。彼らはこれにいくらか楽しさを加えようとしたのだと思います。しかし、これらの指標の問題は、常に参照テキストが必要だということです。つまり、基本的にラベルが必要で、実際にはラベルを持つことは非常にコストがかかります。多くの時間、多くのお金がかかります。
そして、クラスの後半で見るように、LLM空間でコミュニティが行った進歩により、実際にこの参照ベースの指標を放棄して、より参照フリーの指標に向かうことができます。これについては後で見ます。
そして最後に、人々が時々使用する指標はパープレキシティ(Perplexity)と呼ばれるものです。パープレキシティはモデルによって出力される確率だけを見ます。基本的に、モデルがその出力にどれだけ驚いているかを定量化します。BLUEとROUGEは高いほど良いです。パープレキシティは低いほど良いです。
LLMは2022年以降ホットなトピックですが、実際にはこの分野はその年よりずっと前に遡ります。80年代には、すぐに見ますが、実際には80年代にも考えられたモデルのクラスがあります。90年代にはLSTMがありました。これもすぐに見ます。しかし、その時代の問題は、インターネットがなく、多くの計算資源がなかったことです。これが、今日のモデルが訓練されるのを妨げた制限要因の一つだったと思います。
そして最近では、いくつかの進歩がありました。Word2Vecは、有意義な埋め込み設定を計算することにおいて、本当に先駆的な研究の一つでした。これもすぐに見ます。そしてもちろん、2017年に発表された論文の一部であるTransformerがありました。これは基本的に、今日見られるモデルの基盤となっています。
そして、これらのモデルは計算量によってスケールアップされただけでなく、訓練に使用されたデータの観点でもスケールアップされました。それがLLMと呼ばれるようになった経緯です。これらはより2020年代のものです。しかし、これらを見ていきます。
ここまでの高いレベルで何か質問はありますか。皆さん、大丈夫ですか。では、最初の質問をしたいと思います。私たちがやりたいことは、テキストを扱うモデルを持つことです。しかし、モデルは数値を理解します。テキストを本当に理解するわけではありません。ですから、モデルが理解できるように、そのテキストで何かをする必要があります。何かをより定量化可能なものにする必要があります。
2. 自然言語処理(NLP)の基礎
2.1 NLPタスクの3つのカテゴリー
Afshin: では、NLP全般について話を始めましょう。NLPは最初の略語となりますが、Natural Language Processingの略で、自然言語処理を意味します。これはテキストを操作すること、つまりテキストで計算を行うことに関する分野です。
非常に高いレベルで見ると、NLPタスクを基本的に3つのカテゴリーに分類することができます。最初のカテゴリーは分類(Classification)と呼ばれるものです。ここでは入力としてテキストがあり、何かを予測したいわけです。
一つの例を挙げると、映画のレビューがあって、その感情が肯定的か、否定的か、中立的かを予測したい場合があります。それが一つの例です。インテント検出もできます。つまり、例えば人が何をしたいのかを知ることです。「明日のアラームを作成したい」と言ったとしましょう。ここでのインテントは「アラームを作成する」ということになります。言語検出もあります。例えば、フランス語で書いた場合、そのテキストがフランス語であることを検出したいのです。トピックモデリングもあります。
2番目のカテゴリーはマルチ分類(Multi-classification)と呼ばれるものです。ここでも入力としてテキストがありますが、今度は複数のものを予測します。このカテゴリーにも多くのタスクがあります。非常に人気のあるものの一つは固有表現認識、別名NER(Named Entity Recognition)と呼ばれるものです。このタスクが行うことは、入力テキストが与えられたとき、基本的にいくつかの特定の単語にラベルを付けることです。例えば、何かが場所なのか時間なのかといったことを識別します。
そして、もう少し言語学的な側面に関する他のタスクもあります。これらは今ではあまり流行していないと思いますが、10年前は非常に研究されていました。品詞タグ付け(Part-of-Speech Tagging)があります。これは、どの単語が名詞か、動詞かなどを把握することです。あるいは、依存構造解析や句構造解析などの構文解析関連のタスクもあります。
そして最後のカテゴリーは、最近非常に人気があるもので、生成(Generation)カテゴリーです。入力としてテキストがあり、出力としてもテキストがあります。ここで重要なのは、長さが可変であるということです。つまり、出力テキストの長さが事前に分からないということです。
ここにはいくつかのタスクがあります。例えば機械翻訳があります。英語で何かがあって、それをドイツ語にしたい場合です。質問応答もあります。典型的には、ChatGPTやGeminiなどのアシスタントを使っていますよね。質問をして、応答を得るわけです。そして他のタスクもあります。要約のように、記事を要約したいとか、あるいは何かを生成するというものです。何かというのは、コードを生成する、詩を生成する、いろいろなことができます。
2.2 分類タスク(Classification)
Afshin: では、これらのタスクを一つずつ見ていき、人々が通常どのように扱っているかを説明しましょう。最初のカテゴリーである分類カテゴリーから始めます。ここでは感情抽出タスクで説明します。
例えば「このテディベアはとてもかわいい」という文があるとします。私たちのモデルにこれを肯定的な感情として予測してもらいたいのです。典型的には、感情抽出に関するデータセットを使用します。映画レビューについて言及しましたが、これはIMDbの批評です。しかし、製品に関するレビューもあります。Amazonのレビューやツイート、今ではXと呼ばれていますが、X投稿などです。
こうした出力を評価する方法は、典型的には従来の分類指標を使用することです。正確度(Accuracy)があります。これは、正しく予測した観測値の割合、つまりパーセンテージです。しかし、2つの重要な指標もあります。全員が知っているか分かりませんので、少し思い出させてください。
一つは適合率(Precision)です。これは、あなたが行ったすべての陽性予測のうち、正しかったものはどれかということです。そして2つ目は再現率(Recall)です。すべての真のラベルのうち、陽性として正しく予測したものはいくつかということです。そして、F1スコアと呼ばれる指標があります。これは基本的に適合率と再現率の調和平均を取って、一つの数値を与えるものです。
では、なぜこれらすべての指標が必要なのか疑問に思うかもしれません。簡単に答えると、時にはクラスが非常に不均衡なタスクやデータセットがあるからです。例えば、データセットの99%が陽性ラベルで、わずか1%のデータセットが陰性という場合があります。
ここで正確度のような指標を取ると、非常に誤解を招くことになります。というのも、すべてを多数派クラスとして予測するモデルがあれば、素晴らしい分類器を持つことになりますが、実際にはそうではないからです。だからこそ、適合率と再現率が本当に役割を果たすのです。これが最初のものです。
2.3 マルチ分類タスク(Multi-classification)
Afshin: では、NLPタスクの2番目のカテゴリーに移りましょう。これはマルチ分類カテゴリーです。入力テキストがあり、複数のものを予測します。そして私が言及したNERタスク、つまり固有表現認識タスクでこれを説明します。
このタスクは、与えられた単語のカテゴリーを識別することについてです。例えば、ここではテディベアをエンティティとして識別したいわけです。これには分類指標を使用すると思いますが、文レベルではなく、トークンレベルまたはエンティティタイプレベルで使用します。
つまり、どういうことかというと、例えば場所というカテゴリーがあるとして、そのカテゴリーの単語をどれだけうまく予測しているかを知りたいとします。通常、これらの指標をそれに応じて集約することになります。つまり、そのカテゴリーを関数として集約するわけです。
2.4 生成タスク(Generation)
Afshin: では、最後のカテゴリーに行きましょう。これは私が言及したように最も人気のあるものです。これはテキストイン、テキストアウトです。機械翻訳タスクでこれを説明します。これは、ある原言語からターゲット言語にテキストを翻訳することです。
ここには英語からフランス語への例があります。「かわいいテディベアが読んでいる」です。これについては、データセットを取得するのが実は難しいです。というのも、ここではテキストのペアが必要だからです。
WMTと呼ばれる非常に人気のあるデータセットがあります。これはWorkshop on Machine Translationの略です。これには、異なる言語のペアになったシーケンスが多数含まれています。例えば、英仏、英独などがありますが、これらは欧州議会のデータセットから得られたものです。
2.5 評価指標(Accuracy、Precision、Recall、F1、BLEU、ROUGE、Perplexity)
Afshin: さて、これらを評価するには、モデルのパフォーマンスを評価するのは実際にははるかに難しいです。というのも、想像できるように、何かを翻訳する方法は多くあり得るからです。この部屋の多くの人がバイリンガルやトライリンガルだと確信しています。そう、それがこれを難しくしているのです。
過去には、人々はそれを行うためにいくつかのルールベースの指標を使用してきました。聞いたことがあるかもしれないものの一つはBLUEです。BLUEはBilingual Evaluation Understudyの略で、参照テキストに対してあなたの翻訳がどれだけ良く成り立っているかの尺度です。ROUGEも同様のストーリーで、実際には指標のスイートですが、異なる方法でそれを捉えます。
ところで、機械学習コミュニティは面白いです。というのも、BLUEはフランス語を知っているか分かりませんが青を意味し、ROUGEは赤を意味します。彼らはこれにいくらか楽しさを加えようとしたのだと思います。
しかし、これらの指標の問題は、常に参照テキストが必要だということです。つまり、基本的にラベルが必要で、実際にはラベルを持つことは非常にコストがかかります。多くの時間、多くのお金がラベルを取得するためにかかります。
そして、クラスの後半で見るように、LLM空間でコミュニティが行った進歩により、実際にこの参照ベースの指標を放棄して、より参照フリーの指標に向かうことができます。これについては後で見ます。
そして最後に、人々が時々使用する指標はパープレキシティ(Perplexity)と呼ばれるものです。パープレキシティはモデルによって出力される確率だけを見ます。基本的に、モデルがその出力にどれだけ驚いているかを定量化します。BLUEとROUGEは高いほど良いです。パープレキシティは低いほど良いです。
3. NLP研究の歴史的発展
Afshin: LLMは2022年以降ホットなトピックとなっていますが、実際にはこの分野はその年よりずっと前に遡ります。80年代には、すぐに見ますが、実際には80年代や90年代にも考えられたモデルのクラスがありました。90年代にはLSTMがありました。これもすぐに見ます。しかし、その時代の問題は、インターネットがなく、多くの計算資源がなかったことです。これが制限要因の一つだったと思います。この制限要因が、今日見られるようなモデルが訓練されるのを妨げていたのです。
そして最近では、いくつかの進歩がありました。Word2Vecは、有意義な埋め込み設定を計算することにおいて、本当に先駆的な研究の一つでした。これもすぐに見ていきます。そしてもちろん、Transformerがありました。これは2017年に発表された論文の一部で、基本的に今日見られるモデルの基盤となっています。
そして、これらのモデルは計算量によってスケールアップされただけでなく、訓練に使用されたデータの観点でもスケールアップされました。それがLLMと呼ばれるようになった経緯です。これらはより2020年代のものだと言えます。しかし、これらを見ていきます。
ここまでの高いレベルで何か質問はありますか。皆さん、大丈夫ですか。
4. トークン化(Tokenization)
4.1 トークン化の必要性
Afshin: では、最初の質問をしたいと思います。私たちがやりたいことは、テキストを扱うモデルを持つことです。しかし、モデルは数値を理解します。テキストを本当に理解するわけではありません。ですから、モデルが理解できるように、そのテキストで何かをする必要があります。何かをより定量化可能なものにする必要があるのです。
例えば文を見てみましょう。「A cute teddy bear is reading(かわいいテディベアが読んでいる)」という文です。まず、この文をどのように切り分けてモデルに渡すかを考える必要があります。この部分はトークン化(Tokenization)と呼ばれ、基本的にはテキストを何らかの任意のテキスト単位に関して切り分けることを意味します。
4.2 単語レベルのトークン化
Afshin: これを行うにはいくつかの方法があります。最初の方法は完全に任意に行うことです。ここでは例えば、「a」が1つのテキスト単位になり、「cute」が別のテキスト単位になり、「bear」がまた別のテキスト単位になる、といった具合です。ちなみに、このテキスト単位はトークンと呼ばれます。だからこそ、この方法はトークン化と呼ばれるのです。
別の方法は、単語ごとに分割することです。しかし、常に長所と短所があると思います。私たちが達成したい目標の一つは、これらのトークンを有意義な方法で表現できるようにすることです。
単語レベルでこれを行うことの欠点の一つは、似ているように見えるが実際には異なるトークンとして扱われる単語が出てきてしまうことです。ここでの制限は、これらの類似しているが異なるトークンに対して埋め込みを計算し、何らかの方法でそれらの埋め込みを類似させる必要があるということです。
例を挙げましょう。「bear」という単語があるとします。そして「bears」という別の単語、複数形があります。これら2つの単語は非常に似ています。一方は単数形で、もう一方は複数形です。単語レベルのトークン化を選択すると、基本的に2つの異なるエンティティとして扱われることになり、それらは異なるものとして考えられるだけです。「run」と「runs」も同様です。動詞の変化形ですね。
4.3 サブワードレベルのトークン化
Afshin: そのような理由から、人々はサブワードトークナイザー(Subword Tokenizers)と呼ばれるトークナイザーのカテゴリーを掘り下げてきました。これは、単語の語根を活用して、これらの単語の中に見つけられる共通の語根は何かを見つけることです。
例えば、「bear」と「bears」の場合、共有される「bear」という部分があります。ですから、利点は単語の語根を活用できることです。しかし、欠点は、シーケンスが長くなることです。そして、なぜこれが欠点なのかは後で見ていきます。少し予告をすることができます。
これらのモデルの複雑性は、シーケンス長の関数でもあります。処理する必要があるトークンが多ければ多いほど、モデルが実行するのに時間がかかります。なぜなら、基本的にこれらすべてのトークンを処理する必要があるからです。それが欠点の一つです。利点は単語の語根を活用することで、欠点はシーケンスが長くなることです。
4.4 文字レベルのトークン化
Afshin: さて、トークン化の最後のカテゴリーがあります。これは文字レベルで行うもので、すべての文字を取るだけです。ここでは、あなたと私がメッセージを書くとき、時々スペルミスをすることがあります。サブワード方式でトークン化すると、スペルミスされた単語を認識できない可能性があります。これは文字レベルのトークナイザーが考慮できるものです。
しかし、ここでの問題は、シーケンス長がはるかに、はるかに長くなることです。これにより、モデルがこのシーケンスを処理するのにはるかに多くの時間がかかることになります。それが一つの欠点です。
そしてもう一つの欠点は、これらの各トークンを表現したいとき、文字の表現が実際に何を意味するのかを知るのが非常に難しいということです。例えば、文字「U」の表現は何を意味するのでしょうか。非常に難しいです。
4.5 各手法の比較とOOV(Out-of-Vocabulary)問題
Afshin: では、簡単に要約しましょう。単語レベルは非常に素朴な方法で、テキストを任意の単位に分割する非常にシンプルな方法です。しかし、問題は、先ほど述べたように単語の語根を活用しないことです。そして、言及していなかったことがありますが、何かを切り分けて、推論時に予測を行いたいときには、訓練時に見たトークンを訓練セットに持っている必要があるという前提条件があります。
問題は、推論時にテキストを単語に切り分けて、訓練時に見ていない単語があったとしましょう。その場合、それを未知(unknown)としてマークする必要があります。これはOOV、Out-of-Vocabularyと呼ばれるものです。
幸いなことに、サブワードレベルのトークナイザーはその問題を軽減します。OOVのリスクが低くなりますが、それでも発生する可能性はあります。そして先ほど述べたように、利点としては単語の語根を活用できることです。
次に文字レベルですが、スペルミスや大文字小文字のエラーに対して頑健です。しかし問題は、計算がはるかに遅くなることです。シーケンスが非常に、非常に長くなり、推論時間もはるかに高くなります。
これで意味が通じますか。これは本当にテキストを扱う方法の基礎です。でも、全体的に理解できましたか。
5. 単語表現(Word Representation)
5.1 One-hotエンコーディングとその限界
Afshin: では、さて、私たちは何をしたかというと、入力テキストを取りました。そして、それを基本的にトークンである部分に切り分けました。モデルがこれらのトークンを理解するためには、それぞれの表現を見つける必要があります。
ここで、これを見ていきましょう。これは単語表現、あるいはより正確に言えばトークン表現と呼ばれるべきものです。これらの各トークンを表現する方法を見つけたいのです。
シンプルで素朴な方法は、各単語または各トークンに対してOne-hotベクトルを割り当てることです。例えば、3つのトークン、book、soft、teddy bearからなる語彙があるとしましょう。softは1、0、0のベクトルになり、teddy bearは0、1、0のベクトルになり、bookは0、0、1のベクトルになります。これはOne-hotエンコーディング(OHE)と呼ばれます。これは典型的に見られるものです。
さて、これはトークンを表現する一つの方法ですが、基本的に人々がやりたいことは、これらのトークンを比較して、どれが他のものとより似ているかを見ることです。人々が使用する一般的な類似度の尺度は、コサイン類似度と呼ばれるものです。聞いたことがあるかどうか分かりません。これは、これらのベクトルがn次元空間でどのような角度を作るかを見ることだと考えることができます。もし同じ方向を向いていれば、おそらく似ているでしょう。もし直交していれば、おそらく独立しているでしょう。そして、完全に反対であれば、おそらく対立しているでしょう。
それが基本的に私たちが持ちたいメンタルモデルです。問題は、トークンをOne-hot方式で表現すると、すべてのベクトルが互いに直交することになります。それが問題です。理想的には、同じか類似したことを意味するトークンには基本的に高い類似度を持たせ、似ていないトークン、つまり異なることについてのトークンには、より直交に近い値を持たせたいのです。
ここでは説明のために、テディベアは柔らかい(soft)です。ですから、teddy bearとsoftは高い類似度を持たせたいわけです。そして、teddy bearとbookは独立しているので、ゼロに近い値を持たせたいのです。それが私たちの望みです。これがOne-hotエンコーディングで得られるものであり、これが私たちが望むものです。
5.2 コサイン類似度による類似性評価
Afshin: さて、コサイン類似度について少し説明しましょう。人々が使用する一般的な類似度の尺度は、コサイン類似度と呼ばれるものです。聞いたことがあるかどうか分かりません。これは、これらのベクトルがn次元空間でどのような角度を作るかを見ることだと考えることができます。
もし同じ方向を向いていれば、おそらく似ているでしょう。もし直交していれば、おそらく独立しているでしょう。そして、完全に反対であれば、おそらく対立しているでしょう。それが基本的に私たちが持ちたいメンタルモデルです。
学生: なぜノルムを気にしないのですか。
Afshin: ああ、なるほど。質問は、なぜノルムを気にするのかということですね。コサイン類似度は実際にはノルムで正規化されています。ですから、内積になります。ああ、なぜここで内積だけを示したのかということですね。なるほど。そしてあなたの質問は、なぜノルムを気にしないのかということですか。
視聴者の皆さんには質問が分かったと思います。これらの尺度は、すべて類似性のようなものを捉えようとする方法です。なぜノルムを気にしないのか。これらの尺度はすべて、そのような類似性を定量化しようとする方法なのです。
なぜノルムを気にしないのか。ベクトルがどのように訓練されるかを見て、ノルムが何かを示すかどうかを確認する必要があると思います。あなたに与えられる最良の答えは、これは一つの尺度だということです。これは完全な尺度ではありません。人々は内積を尺度として使用することもありますが、あなたには素晴らしい答えを持っていません。
しかし、これらのベクトルがどのように向いているか、どのように指し示しているかを捉えている限り、典型的に気にするのはそれらの間の角度です。しかし、通常はノルムを考慮に入れません。
他に質問はありますか。
学生: 語彙のサイズについて、そしてそれが単語、サブワードの選択にどのように影響するか、また言語間でどのように変化するかについて質問があります。
Afshin: ああ、それは素晴らしい質問です。語彙のサイズと、それが単語、サブワードに関する選択にどのように影響するか、そして言語間でどのように変化するかについての質問ですね。素晴らしい質問です。
まず第一に、達成しようとしているタスクに実際に依存すると言えます。タスクが一つの言語だけについてのものであれば、その同じ言語を取ることになります。通常、サブワードトークナイザーを選択します。ここで述べた理由のためです。サブワードは、語根を活用して単語を識別できることと、OOVリスクにあまり遭遇しないこととの間の良いトレードオフです。
サイズに関しては、人々がさまざまなことを試していることは知っています。英語の場合、典型的には数万のオーダーの語彙サイズを目標にすると思います。しかし、今日ではモデルは多言語対応で、コードについても扱います。ですから、語彙サイズが時には数十万のオーダーになることがあります。
中国語に関しては、使用している文字に違いがあります。ラテン文字の場合は、私たち全員が慣れ親しんでいるアルファベットですが、もちろん他の文字の場合は、似たようなものがありますが、対象言語の文字セットで表されます。
単一言語の場合は数万のオーダー、多言語の場合は数十万のオーダーと言えるでしょう。これらが目標とする規模のオーダーです。
5.3 Word2Vecによる埋め込み学習
Afshin: 素晴らしい質問です。どうやってこれらの埋め込みを得るのかという質問ですね。実は、それが次のスライドです。これについて話していきましょう。
さて、One-hotエンコーディングがトークンを表現する良い方法ではないことが分かったので、私たちがやりたいことは、データからこれらの埋め込みを学習することです。2010年代、確か2013年だったと思いますが、Word2Vecと呼ばれる論文が出ました。
これが非常に人気があった理由は、これらの埋め込みを見る非常に直感的で解釈可能な方法を示したからです。彼らは、kingがqueenに対してあるのは、これがそれに対してあるのと同じだ、というようなことを言っていました。ParisがFranceに対してあるのは、BerlinがGermanyに対してあるのと同じだ、というようなことです。基本的に埋め込みを理解する方法があったのです。
では、彼らはどうやってそれを行ったのでしょうか。彼らは、これらの埋め込みを計算する2つの方法を持っていました。1つはContinuous Bag of Words(連続的単語の袋)と呼ばれるものでした。もう1つはSkip-gramと呼ばれるものでした。しかし、これらはすべて同じアイデアに依存しています。つまり、持っているテキストを活用して、文脈に基づいてテキストの一部である何かを予測しようとするのです。
例えば、Continuous Bag of Wordsです。目標は、与えられた対象単語の周りにある単語を考慮して、その対象単語を予測することです。そしてSkip-gramは、その逆のようなものです。対象単語から始めて、その周りにある単語を予測したいのです。
5.4 プロキシタスクの概念
Afshin: このタスクは一般的にプロキシタスク(Proxy Task、代理タスク)と呼ばれています。というのも、結局のところ、この演習で私たちが気にしているのは、必ずしも次の単語を予測することではない、少なくともまだそうではないからです。私たちの目標は、意味のあるこれらの単語の表現を学習することです。
ですから、ここでのアイデアは、何らかの形で次の単語を予測する方法を知っているモデルがあれば、それはモデルが言語の仕組みについてある程度の理解を持っていることを意味します。それが基本的に私たちが望むことです。
私たちが望むのは、言語が何であるかを反映する埋め込みです。つまり、kingとqueen、あるいはParisとFrance、これは首都ですよね、このような関連性を表現に埋め込みたいのです。
5.5 埋め込み学習の実例(次単語予測)
Afshin: では、これがどのようなものかを非常にシンプルな例で見ていきましょう。ここでの例では、プロキシタスクが次の単語を予測することだとしましょう。
ここで取るのは非常にバニラなニューラルネットワークモデルで、基本的にサイズVのベクトルを受け取り、いくつかの乗算とバイアス項を経て隠れ状態を取得し、その後さらに乗算のセットを経て最終的なベクトルを取得します。ですから、ここでは基本的に非常にシンプルなニューラルネットワークです。
入力はサイズVです。隠れ層はサイズDで、これは典型的に語彙サイズよりもはるかに小さいです。語彙は典型的に数万や数十万ですから、Dは典型的に数百です。例えば768が一つの次元の例です。ですから、はるかに小さいのです。
私たちがやろうとしていることは、このプロキシタスクを通じて単語表現を学習することです。そして、やろうとしていることは、単語を入力として考え、次の単語を予測しようとすることです。
では、シーケンスの最初の単語から始めましょう。ちなみに、私はトークンと単語を互換的に使っています。「a」という単語があり、次の単語である「cute」を予測したいとしましょう。
私たちがすることは、単語「a」を取り、One-hotエンコーディング表現を取って、ネットワークに通すことです。ニューラルネットワークに詳しい方なら分かると思いますが、ここには行列とこのベクトルの間の乗算があります。サイズDの隠れ状態表現が得られます。ここではD=2として、例えば2、1.9だとしましょう。そしてここを再び通過します。
ソフトマックスの後、次の単語が何であるかを見ることについての確率のセットを得ます。この例では、語彙サイズは6です。最初の単語は確率0.2で予測され、2番目の単語は0.4、そして他の単語はすべてこの例では0.1です。
語彙の2番目の単語、つまり0.4であるものに対して、私たちの予測を最大化できるようにしたいとしましょう。基本的に予測を0、1、0、0、0、0という2番目の単語の語彙表現と比較し、そして逆伝播を行い、重みを更新します。
全員がその部分に詳しいかどうか分かりませんが、ここでのアイデアは、予測を得たら、損失を計算するということです。典型的には交差エントロピーで、これは真の答えからどれだけ離れているかを決定します。そして、その差に基づいて重みを更新し、予測を真実に近づけるのです。それが私たちのすることです。
そして、そのプロセスを繰り返します。先ほど言ったように語彙の2番目の単語である「cute」という単語を取ったとしましょう。ですから、One-hotエンコーディング表現は0、1、0、0、0、0です。そのネットワークを通過して、この例では0.8、4という隠れ状態ベクトルがあります。そして、これを再び行います。
やりたいことは次のトークンを予測することです。ここでは「teddy bear」です。モデルがこの例で次の単語をほぼ一様に予測していることが分かりますが、「teddy bear」の確率を最大化したいのです。これを再度行い、すべての単語について繰り返します。
結局のところ、次の単語を予測する方法を学習するモデルを得ます。これが基本的にプロキシタスクです。そして、やろうとしていることは、モデルが学習する表現を取ることです。それが緑色のユニットです。
何が起こるかというと、単語があるたびに、それをOne-hotエンコーディング表現として表し、これらの重みと乗算するだけです。そして、緑色の表現を得ます。それがあなたの単語表現になるのです。
理解できましたか。
学生: Vは何を表し、なぜ6つしかないのですか。
Afshin: 素晴らしい質問です。はい、素晴らしい質問です。Vが何に対応するのか、そしてなぜ6つしかないのかという質問ですね。はい、この例では、6つの可能な単語しかありません。これが基本的に語彙サイズです。非常にトイの例のようなものです。というのも、実際にははるかに多くあるからです。
それが言語の課題の一つだと思います。多くの単語のバリエーションを技術的に持つことができ、それが、もし単語レベルでテキストをトークンに分割する方法を取れば、非常に大きな語彙になってしまう理由です。というのも、与えられた単語のすべての変化形を説明する必要があるからです。
もう一つ指摘したいことがあります。語彙サイズが6で、それが訓練時に見た6つの単語だとしましょう。しかし、推論時に訓練時に見ていない単語があったらどうなるでしょうか。その答えとして、典型的に人々がすることは、未知トークン(unknown token)またはOut-of-vocabularyトークンと呼ばれるものの場所を確保することです。これは基本的に、識別できなかったすべてのもののためのバケツのようなものだと考えることができます。
推論時に識別できなかったトークンがあれば、それらはすべてその表現を取ります。それが未知トークン表現です。ちなみに、これは単語レベルのトークナイザーが扱いに困るものの一つです。というのも、Out-of-vocabularyトークンを持つ可能性がはるかに高くなるからです。単語レベルに対して、サブワードレベルはより低い可能性を持ち、文字レベルではその問題はありません。
あなたの質問に答えましたか。
学生: いつ終了すればいいかはどうやって分かるのですか。
Afshin: 素晴らしい、素晴らしい質問です。最初の質問は、いつ終了すればいいかをどうやって知るのかということです。プロキシタスクについて言えば、モデルを訓練するとき、真の目標は実際には学習することではありません。つまり、この場合、次の単語を予測する方法を学習することではなく、目標は意味のある表現を持つことです。
しかし、できることは、追求しているプロキシタスクの損失関数を何らかの形で追跡することです。しかし同時に、これが必ずしも最終目標ではないことを考慮に入れます。
これを行う非常に合理的な方法の一つは、モデルが収束するまで待つことです。ここでやることは、損失をエポックの関数として追跡することです。エポックという用語がありますが、これはモデルが訓練セットを見る回数のことです。これらの異なる曲線を比較して、これが収束したときが、典型的には訓練プロセスを停止して、下流タスクに応じてそれが意味をなすかどうかを確認する良いタイミングです。しかし、それが一つの方法です。
2番目の質問は何でしたか。すみません、2番目の質問を繰り返してもらえますか。
学生: 生成がいつ停止するかをどうやって知るのですか。
Afshin: ああ、素晴らしい質問です。質問は、生成がいつ停止するかをどうやって知るのかということです。そうでなければ停止しませんよね、はい、まさにその通りです。
特別なトークンがあります。典型的にはEnd of Sequence、シーケンス終了があります。ですから、典型的にEnd of Sequenceトークンが生成されたときに停止します。
2番目の質問は、隠れ層のサイズを何が決めるのかでした。トレードオフだと言えます。というのも、埋め込みが下流タスクに対して十分に情報豊かであることを望むからです。
例えば、文の埋め込みを得たいとして、非常に特化したタスクを行いたい場合、非常に多くの異なる結果を持つようなタスクであれば、それを本当に捉える埋め込みが欲しいかもしれません。ですから、より大きなベクトルが欲しいかもしれません。しかし、非常にシンプルなタスクがあれば、より小さなベクトルが理にかなっているかもしれません。
隠れ層のサイズは、その後実行するものの複雑性にも影響します。というのも、もちろん、より長いベクトルがあれば、より多くの計算が必要になります。ですから、推論はおそらくより高価になるでしょう。ですから、多くの要因があると思います。
要約すると、一つはタスクがどれだけ複雑かです。2つ目は、レイテンシー、コストなどにどれだけ敏感かです。ですから、本当にトレードオフですが、外の世界では典型的に数百や数千の埋め込みが見られます。もちろん、これらのモデルは成長しているので、数字は変わるかもしれませんが、それが見ている規模のオーダーです。
学生: これは経験的なものですか。
Afshin: これは確かに経験的です。はい。他の人が見つけたものに頼ることもできますし、それから始めることもできます。はい。しかし、768やこれらの数字は、人々が典型的に取るものです。はい。
学生: 同じスペルだが異なる文脈の単語をどのように区別できますか。
Afshin: 良い質問です。質問は、同じスペルだが異なる文脈の単語をどのように区別できるかということですね。あなたは私よりずっと先を行っています。
これは基本的に基礎であり、これから文中の単語を文脈化するというこれらの問題に取り組むことができる方法を見ていきます。はい、ですから、それを少し後で見ます。
私は時間通りではないので、先に進もうとします。
6. 再帰型ニューラルネットワーク(RNN)
6.1 RNNの基本構造と動作原理
Afshin: さて、私たちが行ったことは、単語またはトークンを表現する方法を見たことです。しかし、文や、テキストの断片の表現も取得したいかもしれません。
それまでに見たものを使った非常に素朴な方法の一つは、単語の平均のようなもの、つまり単語表現の平均を取ることです。しかし、問題は多くの意味を失うことです。順序を失い、文脈を失います。
あなたが非常にうまく指摘したように、私たちが学習する表現は、それらがどこにあるかに関係なく、トークン固有のものです。だからこそ、テキストがどのように現れるかという順序的な性質を捉えることを目的とするモデルのクラスがあるのです。
RNN、つまり再帰型ニューラルネットワーク(Recurrent Neural Network)について話します。RNNが行うことは、単語を一度に一つ処理する代わりに、それまでの文の隠れ表現を保持し、トークンを一度に一つ考慮することです。
先ほど述べたように、この技術は実際にかなり前に導入されました。80年代にも導入されています。このモデルが行うことは、単語が現れる順序、またはトークンが現れる順序を考慮に入れることです。
この例では、文の最初の位置で処理を開始します。典型的にaまたはhと表記されるダミーの隠れ状態があります。これは隠れ状態活性化(hidden state activation)、あるいは文脈ベクトル(context vector)と呼ばれることもあります。
そして、ここまでの隠れ状態と、時刻tの単語を考慮するモジュールのようなものがあります。ここでは時刻1です。ここで行うことは、これまでの文の意味を取り入れ、今起こっている単語を考慮に入れることです。そして、ここで次の単語を予測するために使用できる出力ベクトルを生成します。
例えば、ここには隠れ状態と単語の表現があり、この青いボックスの中でいくつかの行列乗算が行われ、次の単語を予測しようとする出力ベクトルが得られます。そして、この隠れ状態を追跡し続けることでこれを続けます。
この隠れ状態を解釈する方法は、これまでに処理されたシーケンスの表現だということです。
6.2 隠れ状態(Hidden State)の役割
Afshin: では、大まかにどのように機能するか見てみましょう。お気に入りの例があります。「A cute teddy bear is reading」です。
トークン「a」があります。One-hotエンコーディングベクトルを見つけます。ネットワークに通します。隠れ状態を計算します。「cute」を予測しようとします。しかし、その隠れ状態を追跡し続けて、それを別のモジュールに入力します。そして、次の単語も考慮します。
つまり、単語自体だけでなく、これまでの文の隠れ状態も考慮して、次の単語を再び予測しようとします。これを繰り返し続けます。これがRNNです。
6.3 RNNの各タスクへの応用
Afshin: RNNは多くのタスクに使用されてきました。先ほど見たカテゴリーに直接マッピングすると、分類目的の場合、基本的に文の最後の単語の隠れ状態を使用できます。
例えば、レビューの感情、つまりレビューの感情を予測したい場合、基本的にこの最後のベクトルを取り、予測したいラベルの空間に投影しようとします。ですから、例えば肯定的か否定的かを予測したい場合、基本的にそのベクトルをその空間に投影します。
マルチ分類についても、ここで同様にできます。基本的に対象となるトークンの表現を取り、それを投影します。
生成の場合は、基本的にソーステキスト全体を処理し、処理の最後に文脈ベクトル、別名活性化ベクトル、別名隠れ状態を持つことになります。これが出力予測をデコードするために使用されます。
これがRNNをこれらの各タスクにどのように使用するかです。
6.4 RNNの限界:長距離依存性問題
Afshin: 最近RNNについてあまり聞かなくなった理由は、確かに利点もありましたが、多くの欠点があったからです。欠点の一つは、文の意味が基本的にこの隠れ状態だけにカプセル化されていることです。
長距離依存性(long-range dependencies)の問題があります。これは基本的に、モデルが過去に見たものを引用符付きで「記憶する」能力に影響を与えます。
6.5 勾配消失問題(Vanishing Gradient)
Afshin: 文献では、この現象は勾配消失(Vanishing Gradient)と呼ばれています。なぜそう呼ばれるのか、その理由を説明します。時間がなくなってきていますが、この部分だけは説明します。
例えば最後の単語を予測するために、基本的にそれ以前のすべての隠れ状態に依存しています。ここまでは順調です。そして、この予測と実際の予測を一致させるためにモデルの重みを更新したいときに、逆伝播を行う際、ここでの損失値が、この計算だけの問題ではなく、この計算、あるいはこの計算、つまり基本的に順次起こった計算すべてを何らかの形で考慮に入れる必要があります。
ですから、時間を通じて逆伝播しようとするこの現象があります。しかし、実際に式を書き下すと問題が生じます。非常に醜い式ですが、書き下すと、結局のところ多くの量の積になることが分かります。
もしそれが1より大きければ爆発します。もし1より小さければ消失します。というのも、1より小さいものをたくさん掛け合わせると、ゼロになってしまうからです。ですから、更新しようとしているものがゼロになってしまうと、基本的に更新を行うのに苦労することになります。
それが高レベルの直感です。これはこのクラスの焦点ではないので、これらの醜い式の詳細には立ち入りません。しかし、過去のものを記憶するという点では、この順序的な特性のために素晴らしい仕事をしていないということを理解していただければと思います。
理解できましたか。
6.6 LSTM(Long Short-Term Memory)による改善
Afshin: 次のことがもう少し理解できることを願っています。しかし、その前に、これまでに見たことをまとめておきます。
私たちの目標はテキストを表現することです。まず、単語またはトークンを表現することから始めました。それがWord2Vecで行おうとしたことです。そして、プロキシテストを活用してこの表現を学習するのは良い方法だと分かりましたが、多くの制限がありました。
その一つは、先ほど述べられたように文脈を認識しないことでした。また、単語の順序も考慮されませんでした。そこで、単語を考慮に入れることができる別のクラスの方法がありますが、これらはシーケンスが非常に長くなると物事を追跡するのに苦労します。勾配消失または長距離依存性の問題があります。
この用語を見たときは、基本的にそのことを指しています。また、言及していなかったことがもう一つありますが、計算が非常に遅いのです。これらのモデルを訓練時に訓練したい場合、この単語を予測するためには、基本的にその前のすべての隠れ状態を計算する必要があります。ですから、シーケンスが非常に長くなると、非常に長い時間がかかるだけです。
それで、これらすべての理由、私が言ったすべての理由のために、モデルが過去のものを記憶するのに苦労するという事実のために、人々は何かと過去のものとの間により直接的な接続を持つことを試みてきました。これが注意機構(Attention)の背後にあるアイデアです。
そうですね、LSTMについて触れるべきでした。それがこの部分に入っているからです。ですから、RNNに基づく方法の主な問題は、過去にあったものを引用符付きで忘れるというこの問題があることです。
文献では、この現象が勾配消失と呼ばれる理由が分かるでしょう。最後の単語を予測するためには、基本的にその前のすべての隠れ状態に依存しています。
あなたがRNNに基づく方法を改良しようとする別のクラスのモデルがあります。これはLSTM、Long Short-Term Memory(長短期記憶)と呼ばれます。この拡張の目標は、隠れ状態の上に、引用符付きで重要だと記憶すべきことを何らかの形で追跡する方法を持つことです。
ですから、ここにはa(t)があります。これは活性化、基本的にこれまでのシーケンスがそこにエンコードされています。そして、追跡する別の量があり、これはセル状態と呼ばれます。ここではCと表記されています。
このアーキテクチャは、その部分を改善することを目指していましたが、完璧ではなかったと思います。しかし、それがRNNベースの方法の主な問題でした。つまり、過去にあったものを忘れるというこの問題です。
7. 注意機構(Attention Mechanism)
Afshin: それで、これらすべての理由のために、モデルが過去のものを記憶するのに苦労するという事実のために、人々は何かと過去のものとの間により直接的な接続を持つことを試みてきました。これが注意機構(Attention)の背後にあるアイデアです。
注意機構が行うことは、予測しようとしているものと過去の何かとの間に直接的なリンクを持とうとすることです。この例では、英語の文をフランス語の文に翻訳しようとしているとしましょう。
ここでは、入力文は「given」です。隠れ状態を計算しています。単語を一度に一つ処理しています。これは伝統的なRNNです。「A cute teddy bear is reading」です。ここで、デコードしている隠れ状態があります。
そして、翻訳の次の単語を生成したいとき、どの単語を予測しようとしているかが分かれば素晴らしいだろうと想像できます。言い換えれば、入力テキストの特定の領域を覗き見ることができれば素晴らしいでしょう。
ですから、注意機構の背後にあるアイデアは、予測しようとしているものと以前のものとの間に直接的なリンクを持つことです。これが注意機構の背後にあるアイデアです。これは2014年に導入され、再び、これらの長距離依存性の問題を解決しようとするものです。
そして、この概念は実際にこのクラスにとって鍵となるものです。なぜなら、注意機構メカニズムが、すべて、つまりほとんどのことを機能させるものだということを見ることになるからです。これは実際に、Transformerの論文が依拠する主要な原理なのです。
2017年にこの「Attention is All You Need」という論文でTransformerが導入されました。これは、このクラスで見ることになる中核アーキテクチャです。タイトルからも分かるように、著者たちはその部分だけに依拠したいと考えていました。
著者たちが試みたことは、テキストを処理するこの順序的な方法から離れて、代わりにモデルがテキストのすべての部分と一度に直接接続を持つようにすることでした。これは自己注意機構(Self-Attention)と呼ばれます。
彼らは翻訳タスクでこれを試し、素晴らしい結果が得られることに気づきました。まだ使っている例に戻りますが、「A cute teddy bear is reading」です。ここで言いたいことは、トークン「teddy bear」の表現を計算するために、シーケンス内の他のすべてのトークンを一度に、直接リンクで見るということです。
ですから、先ほどの質問に戻ると、ここでは「teddy bear」の表現が、それが含まれる文脈に固有のものになります。ですから、先ほどの「river bank」や「rob a bank」のような「bank」についての質問に戻ると、ここでは「bank」は異なる表現を持つことになります。これがアイデアです。概念的に理解できましたか。そして繰り返しますが、これは自己注意機構メカニズムと呼ばれます。
時間的にはどうですか。遅れています。遅れています。
8. Transformerアーキテクチャ
8.1 "Attention is All You Need"論文(2017年)
Afshin: 2017年にこの「Attention is All You Need」という論文でTransformerが導入されました。これは、このクラスで見ることになる中核アーキテクチャです。タイトルからも分かるように、著者たちはその部分だけに依拠したいと考えていました。
著者たちが試みたことは、テキストを処理するこの順序的な方法から離れて、代わりにモデルがテキストのすべての部分と一度に直接接続を持つようにすることでした。これは自己注意機構(Self-Attention)と呼ばれます。彼らは翻訳タスクでこれを試し、素晴らしい結果が得られることに気づきました。
8.2 Query、Key、Valueの概念
Afshin: さて、これがアイデアです。ここで、もっと用語に関する別のアイデアのセットを紹介します。これは非常に重要になります。何かを他の何かの観点から表現したいとき、私たちはQuery、Key、Value、つまりQ、K、Vという言葉を使います。
この例では、私たちの目標は、Query「teddy bear」が他のどのトークンにより似ているかを把握することです。ですから、ここでの質問は、Queryがあって、どの他のトークンが最も似ているかを見たいということです。そこで、KeyとValueで構成される他のすべてのトークンを見ることになります。
QueryをKeyと比較して、あなたのQueryがその与えられたKeyとどれだけ似ているかを定量化し、対応するValueを取ります。この例でそれを見ていきましょう。
「teddy bear」を他のすべてのものの観点から表現したいとしましょう。やろうとしていることは、Query「teddy bear」を取り、そのQueryを他のすべてのKeyと比較して、どの要素が最も似ているかを見て、より似ているものに重みを付け、それらに関連付けられたValueを取るということです。
それが、これらのものがどのように機能するかについての非常に高いレベルのアイデアです。もちろん、正確にどのように機能するかを見ていきますが、それが一般的なアイデアです。
8.3 エンコーダー(Encoder)の構造
Afshin: さて、QueryとKey、Valueについて話すと、この自己注意機構の計算をシーケンス全体にわたって行列形式で表現できるという利点も見ることになります。そしてGPUは行列が大好きです。ですから、私たちが持っているハードウェアに本当に適しているのです。
ここで述べたことは、QueryとKeyのソフトマックスの形式で表現でき、これは基本的にどのValueがより重要かの重みのようなものを取得する方法です。例えば、あるValueがより重要であれば、より大きな重みを持ちます。別のものはより重要でなければ、より小さな重みを持ちます。そして基本的にそれをValueで乗算します。
心配しないでください。この後、詳細な例を見ていきます。これがどのように機能するかです。
さて、自己注意機構が何であるかについて質問はありますか。
では、非常に高いレベルで、この自己注意機構メカニズムを機能させるために、著者たちは2つの部分で構成されるアーキテクチャを提案しました。左側にあるエンコーダーと、右側にあるデコーダーです。
彼らが持っているアプリケーションは翻訳です。エンコーダーを通過するものは、ソース言語の入力テキストです。デコーダーを通過するものは、予測しているターゲット言語です。
高レベルのアイデアは、エンコーダーを通して入力テキストから有意義な埋め込みを計算し、その自己注意機構メカニズムを適用したいということです。つまり、各トークンの表現を他のトークンの関数として計算したいのです。そして、注意層と呼ばれる層を使用してそれを行います。マルチヘッド注意層ですが、マルチヘッドというのは、この計算を異なる方法で行うだけで、モデルが異なる表現や異なる投影を学習できるようにするものです。
しかし、ここでのアイデアは、入力テキストを入力し、入力テキスト内のすべてのトークンが互いに注意を向けるということです。例えば、「A cute teddy bear is reading」です。このテキスト内のすべてのトークンの表現を、基本的に他のトークンの関数として計算しようとしています。そして、エンコーダーでそれを行います。
マルチヘッド注意を使い、それからフィードフォワード層があります。これは基本的にモデルに別の種類の投影を学習させるためのものです。そして、エンコーディングプロセスの最後に得られるものは、入力文からのトークンの豊かな表現です。
ここまでは順調です。
8.4 デコーダー(Decoder)の構造
Afshin: しかし、今度は実際に入力文を翻訳することが目標です。ですから、やろうとしていることは、文頭トークン(Beginning of Sentence token)で翻訳を開始することです。これが最初のトークンです。そして、次に何を予測するかを把握するために、入力文からのすべての表現を使用しようとしています。
今述べたことがクロスアテンション層(Cross-Attention Layer)です。これは2番目のこの層で、矢印が見えるかどうか分かりませんが、エンコーダーから2本の矢印が来ていて、デコーダーから1本の矢印が来ています。
誰か、デコーダーからの矢印が何を表しているか教えてもらえますか。Query、Key、Valueのどれでしょうか。3つのうち1つなので、33%の確率です。誰か試してみたい人はいますか。Keyですか。
Query、はい。
Afshin: それについて考える方法は、入力のどの単語が重要かを自分自身に尋ねようとしているということです。つまり、基本的に、Queryが与えられたとき、入力のどの要素が重要かを知りたいのです。
ですから、ここでこの矢印は確かにQueryです。なぜなら、これが把握したいものだからです。そして、KeyとValueは実際にはエンコーダーから来ており、基本的に入力シーケンスから来ています。
そして、別の注意層があります。これがこれです。そして、その層は、デコードしている出力文の他のどのトークンが次のトークンを予測するのに役立つかを把握しようとしています。
翻訳を開始して、例えばフランス語で「un」と言ったとしましょう。次の単語を予測するために、基本的にこれまでに翻訳されたトークンのうち、次の単語を予測するのに役立つものはどれかを把握したいのです。これがこの注意層についてのことで、これはマスク付き(masked)と呼ばれます。なぜなら、これまでに翻訳されたトークンだけを見るからです。
翻訳されていないトークンは見ません。なぜなら、もちろん翻訳されていないからです。ですから、予測しようとしているトークンの右側には方法がありません。
8.5 マルチヘッド注意機構(Multi-Head Attention)
Afshin: 非常に高いレベルで言うと、エンコーダーに存在するこの注意層と、デコーダーに存在する注意層がありますが、それらにはいくつかの使用事例があります。
ここでの注意層は、入力文からの埋め込みをそれら自身の関数として計算することを目的としています。そして、デコーダーからのものです。最初のもの、マスク付き自己注意層は、これまでにデコードされたすべてのものの関数として何かを表現することを目的としています。そして2番目のもの、クロスアテンション層は、入力で見られたものの関数として物事を表現しようとします。
ここでは、異なるトークンへの直接リンクを持っているため、順序の感覚がありませんよね。RNNでは、基本的に一度に一つずつ物事を表現していたので、単語順序のある程度の感覚がありました。しかし、ここでは直接リンクのようなものなので、それがないのです。だからこそ、位置エンコーディング(Positional Encodings)があります。これらは、シーケンス内の単語の位置について情報を提供するためにあります。
今日はそれについて詳しく掘り下げるつもりはありませんが、それを指摘したいと思います。
さて、非常に高いレベルで、そして詳細な例でこれを見ていきますが、ソース言語からターゲット言語に文を翻訳するために行うことは、まずテキストをトークン化することです。つまり、任意の単位に分割します。
これらのトークンの埋め込みを学習します。これが入力埋め込みについてのことです。そして、位置に関するエンコーディングを追加する必要があります。今日はそれについて話しませんが、注意すべき点です。そして、エンコーダーを通過します。
エンコーダーは、入力からの他のものの関数として物事をどのように表現するかを把握しようとします。マルチヘッド注意層でそれを行い、次にフィードフォワードニューラルネットワークを通過します。これは、ベクトルを投影して、物事を学習するためのより多くの自由度を持つための方法です。
そして、入力からこれらの表現を得たら、翻訳を開始します。BOSトークンで開始します。そして、やろうとしていることは、次の単語が何かを把握することです。翻訳に役立つ、これまでに翻訳された単語は何かを見ようとします。これがマスク付きマルチヘッド注意層が行うことです。
そして、別の注意層があります。これは、入力にあったものの関数として物事を表現することについてです。それがそこにあるクロスアテンション層です。そして、フィードフォワードニューラルネットワークがあり、再びより多くの自由度を与えます。
そして最終的に、ベクトルがあり、それをソフトマックスに通します。これは基本的に次の単語が何であるかを推測する方法です。語彙サイズのサイズのベクトルがあり、これらの値を使用して次の単語が何かを決定します。
簡単ですよね。これについて質問はありますか。
学生: ヘッド(head)とは何を意味しますか。
Afshin: それは素晴らしい質問です。質問は、ヘッドとは何を意味するかということですね。少し早く進みすぎて、その部分を無視してしまいました。
自己注意機構の計算を行うとき、基本的にQueryをKeyと相互作用させて、対応するValueを取ります。しかし、それを数回行うことを妨げるものは何もありません。
ヘッドという用語は、QueryとKey、Valueを得るために使用する投影行列に与えられます。複数のヘッドがあるとき、やっていることは、モデルに異なる投影を学習させることです。ですから、基本的にモデルがベクトル間の異なる関連性を学習するための追加の自由度なのです。素晴らしい質問です。
ですから、典型的には小文字のh、ヘッドの数として表記されます。これがそれに対応するものです。あなたの質問に答えましたか。
では、議論することがたくさんありますが、実はこのためにスライドを用意していました。これがあなたが言及していたマルチヘッドです。基本的に自己注意機構の計算を並列で数回実行しています。再び、モデルが学習する異なる投影行列を使用しています。
コンピュータビジョンのバックグラウンドがある場合、畳み込みに複数のフィルターを持つことに似ています。非常に似たアイデアですが、ここでは異なります。
学生: 投影は異なるのですか。
Afshin: 素晴らしい質問です。投影が異なるかどうかという質問ですね。通常、物事を制約していません。モデルに学習させているだけですが、実際には同じものを見る異なる方法を学習する傾向があります。
ですから、典型的には制約はありません。もちろん、これを変えたらどうなるかを掘り下げる論文がありますが、典型的には制約はありません。
8.6 位置エンコーディング(Positional Encoding)
Afshin: ここでは、異なるトークンへの直接リンクを持っているため、順序の感覚がありませんよね。RNNでは、基本的に一度に一つずつ物事を表現していたので、単語順序のある程度の感覚がありました。しかし、ここでは直接リンクのようなものなので、それがないのです。
だからこそ、位置エンコーディング(Positional Encodings)があります。これらは、シーケンス内の単語の位置について情報を提供するためにあります。今日はそれについて詳しく掘り下げるつもりはありませんが、それを指摘したいと思います。
8.7 フィードフォワードニューラルネットワーク
Afshin: マルチヘッド注意層でそれを行い、次にフィードフォワードニューラルネットワークを通過します。これは基本的に、ベクトルを投影して、物事を学習するためのより多くの自由度を持つための方法です。
そして、入力からこれらの表現を得たら、翻訳を開始します。BOSトークンで開始します。そして、やろうとしていることは、次の単語が何かを把握することです。翻訳に役立つ、これまでに翻訳された単語は何かを見ようとします。これがマスク付きマルチヘッド注意層が行うことです。
そして、別の注意層があります。これは、入力にあったものの関数として物事を表現することについてです。それがそこにあるクロスアテンション層です。そして、フィードフォワードニューラルネットワークがあり、再びより多くの自由度を与えます。
8.8 Label Smoothing技法
Afshin: もう一つのトリック、Transformerの著者たちが使用した別のトリックについて言及します。これはラベル平滑化(Label Smoothing)と呼ばれます。ここでラベル平滑化について聞いたことがある人はいますか。
さて、ここでの新しいことの一つは、NLPで次に何が来るかを予測したいとき、典型的には複数の方法があるということです。「what a great day」、「what a great lecture」、「what a great book」、「what a great...」など、そのギャップを埋める方法は常に複数あります。
ラベル平滑化は、直感的にそれに対処しようとする技術です。それが行うことは、「この単語を予測する、100%これです、他の単語はありません」と言う代わりに、「この単語を予測するが、この単語ではない可能性がある」と言うのです。
実際には、One-hotエンコーディングを取り、1、0、0を予測する必要があると言う代わりに、実際には1マイナスイプシロン、そしてイプシロンをVマイナス1で割ったものを予測しようとしていると言います。
実際には、これはモデルをより不確実にする傾向がある方法です。この予測についてより確信が持てなくなります。なぜなら、常に「この単語を予測しようとするが、実際にはそれが正しい値ではない可能性がある」と伝えるからです。
しかし実際には、著者たちはこれがBLUEのような指標を改善する傾向があることを確認しています。BLUEは翻訳タスクの一種の代理指標です。
学生: これは何らかの量ですか。
Afshin: はい、これは一般的なNLPの方法だと思います。知っておくべき良い方法です。それでは、Shervinにエンドツーエンドの例を説明してもらいます。
ここで、デルタのようなものと考えることができます。何らかの量です。定義されていません。何らかの量であり、デルタはOne-hotのようなものです。
学生: それは定数ですか。
Afshin: はい、そのようなものです。はい。
学生: 探索と活用(Explore and Exploit)との関連はありますか。
Afshin: 探索と活用との関連があるかという質問ですね。興味深い質問です。ソフトマックスがそれを無料で与えるということですか。しかし、まだそうでした。
結局のところ、やろうとしていることは、ラベルに関して予測を比較することです。ですから、ここでの質問は、1、0、0と比較したいのか、それとも1ではない、0、0ではない何かと比較したいのかということです。ですから、ソフトマックスはそれを正確に行うことを許しません。
学生: これは実際にラベルです。
Afshin: その通りです。これがあまり明確でなかったか分かりませんが、これは実際にラベルです。ですから、予測しようとしているのは1、0、0ではなく、モデルがより確信が持てないように予測するものとして、ラベルを変更するのです。
ありがとうございます。それでは、Shervin、どうぞ。
9. Transformerの詳細な動作例
9.1 入力処理:トークン化と埋め込み
Shervin: ありがとう、Afshin。基本的にTransformerがどのように機能するかを見てきましたが、今度は1つの具体的な例ですべてを組み合わせていきます。
さて、お気に入りの例を再び取りましょう。「A cute teddy bear is reading」です。それでは、各ステップを一緒に見ていきましょう。
まず、トークン化から始めます。述べたように、任意の分解を使用してこれをトークンに分解できます。そして、誰かが言及したように、シーケンスの開始と終了を示す方法が必要です。ですから、典型的にはBOSとEOSトークンでそれを行います。それらを追加します。
では、各トークン表現の構成に焦点を当てましょう。学習された埋め込みがあります。そして、Afshinが言及したように、単語またはトークンがシーケンスの一部としてどの位置にあるかのアイデアを持つために、位置埋め込みの形式でいくつかの追加情報があります。
ここで、元の論文では、表現に加法的に追加される正弦と余弦の慣例を使用しています。ですから、要素ごとの加算のようなものです。
さて、トークンに対して位置を考慮した埋め込みができました。各トークンに対してこれを繰り返します。
では、これらすべての埋め込みを行列の形式で見ることができます。これはサイズD modelで、これは埋め込みのサイズです。そして、もう一つの次元はシーケンスの長さです。典型的にはnです。ここまでは理解できますか。入力について質問はありますか。
素晴らしい。
9.2 エンコーダーでの自己注意機構の計算
Shervin: では、この表現をエンコーダーに送ります。さて、Afshinが言ったように、自己注意機構の概念があります。自己注意機構を実行する方法は、この入力を取って3つの空間に投影することです。
空間WQに投影して、Queryを取得します。同じ埋め込みを空間WKに投影して、Keyを取得します。そして、Valueについても同じことを行います。Valueを取得します。そして、WQ、WK、WVはモデルによって学習されます。これらは基本的に投影行列です。
ここまでは順調です。さて、これらすべてを念頭に置いて、Afshinが言及した自己注意機構の式を適用できます。それは、QKの転置をdkの平方根で割ったもののソフトマックス×Vです。これにより、これらすべてから別の行列が得られます。
では、一瞬立ち止まって、この計算が実際にどのように行われるか、そして各ステップが何を意味するかを見てみましょう。
9.3 注意スコアの計算とスケーリング(√dk)
Shervin: Qを見てみましょう。Qを計算するとき、基本的に埋め込みをその空間に投影します。何が得られるでしょうか。各行が与えられたQueryを表す行列が得られます。
Kの転置と言うとき、これは基本的に同じ種類の行列ですが、転置されたもので、各列が各トークンのKey表現を表します。
では、これらを行列乗算と混ぜ合わせましょう。それぞれを乗算すると、各行がQueryの各Keyへの投影を表すことが分かります。行列乗算を取って、これらすべてのソフトマックスを取得すると、各Queryに対して、Keyへの投影の確率分布が得られます。
各行はこれを持つことになります。そして、dqまたはdkの平方根でスケーリングする理由について誰かが質問したかどうか分かりません。dqでもかまいません。なぜなら、ここでの行列乗算、つまり内積はdqがdkに等しいという事実を強制するからです。
そして、基本的に見られることは、KeyとQueryの次元が大きくなるにつれて、これらの内積も大きくなる傾向があるということです。ですから、この内積を正規化したいのです。それが、Keyの次元の平方根で割る理由です。
さて、これらすべてのソフトマックスがあり、それから行列Vと乗算します。これが、Afshinが説明したように、QueryをKeyの空間に投影し、対応するValueと乗算することです。
ですから、Valueは、投影する対応するKeyの表現です。各Queryに対してValueの重み付き和を得ることになります。
9.4 マルチヘッド注意機構の並列処理
Shervin: そして誰かが尋ねましたが、マルチヘッドのものは何ですか、ということです。その通りです。これは単一の1回だけ行われるものではありません。実際にはh回行われ、得られるのは、これらすべてが並列で行われ、最後にそれぞれのそのような行列を取得するということです。
そして、列に関してそれらを連結します。そして、この最後に、WOと呼ばれる別の投影行列があり、これらすべてを埋め込みの元の次元に投影し直します。
ですから、これはネットワークが基本的に次元不変な方法を持つための方法です。元の次元から元の次元に戻るための方法です。
質問はありますか。
学生: 毎回同じ結果を得ることは可能ですか。それは役に立つのでしょうか。
Shervin: 質問は、hに関してですね。毎回同じ結果を得ることは可能かということです。同じものを連結したら、それは役に立つのでしょうか。質問を正しく理解できましたか。では、何が異なるのか。
それは勾配降下の魔法です。ネットワークは最終的に目的関数を持っています。自由度を持っています。そのインセンティブは、次の単語を学習するのに役立つ表現を構築することです。ですから、同じものをコピーしたり、同じメカニズムを行ったりするインセンティブはありません。
そして、これが実際に、モデルが異なる表現を構築する方向に収束し、それからそれらを連結して、何か有用なものに投影できる理由です。
何がそれを同じものにしないのか。何もありません、制約はありませんが、モデルに持たせる学習の性質が、実際にそれを行わせるのです。
9.5 デコーダーでのマスク付き自己注意機構
Shervin: さて、自己注意機構層を経たので、別のコンポーネントであるFFN(フィードフォワードニューラルネットワーク)があります。入力と出力に関して隠れ層の次元をどのように選択するかについて、ちょうどここで質問がありました。
AfshinがWord2Vecについて言及したとき、典型的には入力と出力よりも小さい次元を持ちますが、ここでは実際に隠れ層は入力と出力よりも大きい次元を持ちます。その理論的根拠は、モデルが有用な表現を学習するのに十分な自由度を持たせたいということです。ですから、学習する特徴を複雑にする方法なのです。
さて、エンコーダーモジュールは1つだけではありません。実際には大文字のNだけあります。元の論文では、これらすべての最後に、エンコードされた文脈を考慮した埋め込みのセットがあります。そして、これらのエンコードされた埋め込みの各セットは、N個のデコーダーに供給されるものになります。
ですから、大文字Nのエンコーダーの積み重ねられた連続があります。大文字Nのデコーダーの積み重ねられた連続があります。そして、エンコーダーの最後の表現が、各デコーダーのクロスアテンションに供給するものです。
これについてはもっと詳しく見ていきます。では、デコーディングプロセスをどのように開始するのでしょうか。
基本的に「次の単語を予測する必要があります、始めましょう」とモデルに言うBOSトークンで開始します。では、最初のBOSトークンはどうなるのでしょうか。
それをデコーダーに供給します。そして、エンコーダーの場合と同様に、自己注意機構層があります。そして、Afshinが言及したように、自己注意機構層はマスク付きです。ですから、注意は同じトークンとそれに先行するトークンに対して行われます。
この最初のBOSトークンでは違いが見られません。なぜなら、それは自分自身にのみ注意を向けるからです。しかし、デコードしたい他のトークンがあるとき、デコーダーに関してどこに注意を向けるかに違いが出てきます。
9.6 クロスアテンション(Cross-Attention)
Shervin: 自己注意機構層を通過し、次にクロスアテンション(Cross-Attention)と呼ばれるものがあります。これは、入力としてKeyとValueとしてこれらのエンコードされた埋め込みを取り、Queryは自己注意機構層から出てくるものです。
さて、このクロスアテンションを行ったら、エンコーダーと同様にFFNコンポーネントがあり、表現をより豊かにします。
9.7 デコーディングプロセスと終了条件
Shervin: そして、最後に、これをN回すべて行った後、デコーディングプロセスの最後に、線形投影とソフトマックス層があり、次の単語の予測を語彙上の確率分布に変換します。
さて、次の単語に対してこれを行う方法を見ました。そして、基本的にこれを何度も繰り返します。次のトークンを見つけました。これは基本的にOne-hotエンコーディングのようなもので、何が欲しいかを示します。そして、その埋め込みを取って、デコーダーに戻し、このプロセスを続けます。
いつ停止するのでしょうか。皆さんへの質問です。
学生: EOSトークンに到達したとき。
Shervin: はい、まさにその通りです。
さて、このプロセスで、基本的に元のランドマークペーパーの著者たちが機械翻訳を行った方法です。これが典型的に提示された使用事例です。
質問はありますか。素晴らしい。それでは、ご清聴ありがとうございました。 (拍手)
Stanford CME295 Transformers & LLMs | Autumn 2025 | Lecture 1 - Transformer
For more information about Stanford’s graduate programs, visit: https://online.stanford.edu/graduate-education September 26, 2025 This lecture covers: • Background on NLP and tasks • Tokenization • Embeddings • Word2vec, RNN, LSTM • Attention mechanism • Transformer architecture To follow along with the course schedule and syllabus, visit: https://cme295.stanford.edu/syllabus/ Chapters: 00:00:00 Introduction 00:03:54 Class logistics 00:09:40 NLP overview 00:22:57 Tokenization 00:30:28 Word representation 00:53:23 Recurrent neural networks 01:06:47 Self-attention mechanism 01:13:53 Transformer architecture 01:29:53 Detailed example Afshine Amidi is an Adjunct Lecturer at Stanford University. Shervine Amidi is an Adjunct Lecturer at Stanford University. View the course playlist: https://www.youtube.com/playlist?list=PLoROMvodv4rOCXd21gf0CF4xr35yINeOy
www.youtube.com