Upgrade to Pro — share decks privately, control downloads, hide ads and more …

大規模言語モデルの中身を覗いてみよう / look inside Large Language Models

watasan
June 16, 2023

大規模言語モデルの中身を覗いてみよう / look inside Large Language Models

GMOペパボの新卒エンジニア向け機械学習研修2023における座学の資料です。

機械学習について教師あり学習の考え方は知っている、ぐらいの方を対象に、大規模言語モデル(Large Language Model: LLM)がどのようにテキストを出力して、どのように学習しているかなど解説しています。
(LLMの個々のモデルの詳細やLLMのライブラリなどは対象外です)

研修では、この他にも機械学習自体の初学者向けの座学など、さまざまなコンテンツを実施しました。詳細は以下のブログをご覧ください。

https://rand.pepabo.com/article/2023/06/15/ml-training-report-2023/

watasan

June 16, 2023
Tweet

More Decks by watasan

Other Decks in Science

Transcript

  1. 2 • 大規模言語モデル(Large Language Model: LLM)についてその中身を学んでいきましょう! • そもそも、どういう原理でテキストを出力しているのか? • どうやって学習させているのか?

    など • なぜやるのか? • LLM(のAPI)をただ利用するにしても、出来ることの幅を正しく理解するために、 その裏側の原理・仕組みを知っておくことは重要。 • この時間にやらないこと • LLMを利用したアプリ開発のエコシステム(例: LangChain, LlamaIndex, guidanceなど※)の利用方法 この時間の趣旨 前置き ※LlamaIndex https://github.com/jerryjliu/llama_index LangChain https://python.langchain.com/en/latest/index.html guidance https://github.com/microsoft/guidance
  2. 4 最終的に欲しいものは、入出力がテキストの関数 1. 「言語モデル」とはそもそも何か? 関数 入力: テキスト 出力: テキスト 例:

    「翻訳して」という指示と 翻訳対象の文章が 書かれているプロンプト 例:指示に従って翻訳された文章 • 対話したり、プロンプトで指示をして回答させるのも、 抽象的に見ればテキストを入力としてテキストを出力すること • ほとんどの自然言語処理のタスクはこの形で表現できる[Zhao2023] • ※このような関数と言語モデルの関係をこれから解説していきます • 言語モデルは、このような関数を得るためのコアとして導入します。 [Zhao2023] A Survey of Large Language Models https://arxiv.org/abs/2303.18223
  3. 6 • テキストは文字情報の集合であり、 そのままでは機械学習モデルで扱えない • テキストを数値情報(数値の列)として 表現する必要がある • この変換処理を「エンコード」と呼ぶ •

    エンコードもしくはトークナイズは 最終的な性能に影響するので重要ですが 詳細は割愛します • 数値ではありますがただのIDなので カテゴリカルな値として扱うものです • 逆の変換処理は「デコード」と呼ぶ 工夫1. テキストを数値の列(≒トークン列)として表現する 1. 「言語モデル」とはそもそも何か?|テキスト入出力関数を作る工夫 好きな果物はぶどうです。
 好きな 果物 は ぶどう です 。 <EOT> ※ 好きな
 ↓ 0 果物
 ↓ 1 は
 ↓ 2 です
 ↓ 4 。
 ↓ 5 <EOT>
 ↓ 6 ① 適当な単位に区切る (トークナイズ) ② 区切られた単位(トークン)に IDを割り当てる ※処理上必要な特殊トークンを追加することもある   この場合はテキストの終端を表す<EOT>(End Of Text) エンコードの例 ぶどう
 ↓ 3
  4. 8 • 1つのトークンしか予測できなくても、繰り返せば長いテキストを出力できる Q. 長いテキストが欲しいんだけど? A. 予測を繰り返せば長いテキストも出力可 1. 「言語モデル」とはそもそも何か?|テキスト入出力関数を作る工夫 次のトークン

    予測関数 好きな 果物 
 は 
 1度目の予測 次のトークン 予測関数 好きな 果物 は 
 ぶどう 
 2度目の予測 次のトークン 予測関数 好きな 果物 は ぶどう 
 です 
 3度目の予測 追加 追加 元々の入力トークン列 出力 トークン列
  5. • この確率を使うと、トークン列から続きのトークンを予測できる 9 • トークン列 X={x 1 ,x 2 ,...,x

    T }に対して以下のような同時確率を考える • 直感的には、テキストの自然さ・妥当さを定量的に評価できる関数、のようなもの • 例えば トークン列 XA={好きな, 果物, は, ぶどう}とXB={好きな, 果物, は, たんす}がある • 妥当な p(X) が得られていれば、p(XA)>p(XB)となり、良し悪しを計算機上でも判断できる • このようなテキストの確率モデルを言語モデルと呼ぶ。(トークン予測器まで含めて言語モデルと呼ぶこともある) トークンの予測を、トークン列の確率的なモデル(言語モデル)で実現する 1. 「言語モデル」とはそもそも何か? 入力されたトークン列(固定) T番目だけ未定 Pを最大化する T番目のトークンを選ぶ
  6. 10 • 同時確率を以下のような条件付き確率の積として表現する • (直感的な意味: テキスト中のトークンはそれ以前のトークン列によって決まる) 予測問題を同時確率ではなく条件付き確率の問題に転換する。 1. 「言語モデル」とはそもそも何か? 最初のトークンとして

    何が生成されやすいかを表す 最初のトークンが既に確定しているとき、 どんなトークンが2番目に出現しやすいか 2番目までのトークンが既に確定しているとき どんなトークンが3番目に出現しやすいか • この条件下でトークンの予測は以下のようになる x T が変化しても変わらない(定数) これを最大化すれば良い。 つまりこの条件付き確率をうまく推定できるかが重要!
  7. 11 • 言語モデル自体は1990年代からあるもの[Zhao2023] • Transformerというニューラルネットのアーキテクチャが2017年に自動翻訳の文脈で提案される • ※今回はTransformerについては詳しく触れません(重要なキーワードなのでご紹介だけ…) • 自然言語処理のその他のタスクや他分野でもTransformerが導入され性能が顕著に向上[Lin2022] •

    条件付き確率を推定するモデルのアーキテクチャとしてTransformerを導入するのが現在の主流 • Transformerベースな手法の代表例: GPT-3[Brown2020], LLaMA[Touvron2023], PaLM2[Anil2023]など 条件付き確率を推定するモデルのアーキテクチャに Transformer[Vaswani2017]を採用するのが現在の主流 2. 「大規模」言語モデルとはどういうものか? [Zhao2023] A Survey of Large Language Models https://arxiv.org/abs/2303.18223 [Vaswani2017] Attention is All you Need https://papers.nips.cc/paper_files/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html [Lin2022] A survey of transformers https://www.sciencedirect.com/science/article/pii/S2666651022000146 [Brown2020] Language models are few-shot learners https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html [Tourvron2023] LLaMA: Open and Efficient Foundation Language Models https://arxiv.org/abs/2302.13971 [Anil2023] PaLM 2 Technical Report https://arxiv.org/abs/2305.10403
  8. 12 • 「大規模言語モデル」って? • 言葉のフォーマルな定義は今のところない[Zhao2023, Yang2023] • 何が「大規模」なのか? • モデルのパラメータの数

    (100億個以上を基準とする文献[Zhao2023]も) • 学習のデータ数 • 総計算量 • Transformerベースの言語モデルはパラメータ・データ・計算量を増やせば増やすほど 性能が向上することが分かっている[Kaplan2020] • 実際にこれまでの言語モデルで見られなかった現象が複数確認された[Brown2020](詳細は後述) Transformerの導入を境に言語モデルが「大規模」化してきた 2. 「大規模」言語モデルとはどういうものか? [Zhao2023] A Survey of Large Language Models https://arxiv.org/abs/2303.18223 [Yang2023] Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond https://arxiv.org/abs/2304.13712 [Kaplan2020] Scaling Laws for Neural Language Models https://arxiv.org/abs/2001.08361 [Brown2020] Language models are few-shot learners https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html
  9. 13 一般的には大きく次の2段階で学習 • 第一段階: 大量データで学習する • 比較的手に入れやすい(追加でのラベル付けといった人手での処理が不要な)データを 大量に用いて学習するステップ。 • この段階で止めることもあり、その場合のモデルはBase

    LLM[DeepLearning.AI2023]と呼ぶことも。 • 第二段階: 追加でモデルを微調整する • 望ましい出力をするように、比較的少量のデータセットを用いてLLMを追加で学習するステップ • 例:質問に対する回答をうまく答えさせたい場合、質問と回答のペアのデータセットを学習させる など LLMをどうやって学習させるか?(一般的に) 3. 代表的なLLMはどうやって学習しているか? [DeepLearningAI2023] Building Systems with the ChatGPT API https://www.deeplearning.ai/short-courses/building-systems-with-chatgpt/ [OpenAI2022] Aligning language models to follow instructions https://openai.com/research/instruction-following [Brown2020] Language models are few-shot learners https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html
  10. 14 ここからはChatGPTの元になっている • GPT-3[Brown2020] • InstructGPT[OpenAI2022] を題材に、学習の第一段階や第二段階の具体例を見ていきます! 3. 代表的なLLMはどうやって学習しているか? [Brown2020]

    Language models are few-shot learners https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html [OpenAI2022] Aligning language models to follow instructions https://openai.com/research/instruction-following
  11. 15 • ここでの言語モデルとは ステップ1: 大量のテキストを元に、トークンの並びの傾向を言語モデルに学習させる 3. 代表的なLLMはどうやって学習しているか? • データとして大量のテキストを用意し、テキストに含まれるトークンの並びに対して 高い確率を出力するようにパラメータを修正する(学習する)

    • 学習の雰囲気を数式で示すと、以下のパラメータΘについての以下の目的関数Lを最大化する(最尤推定) Transformerのパラメータ • GPT-3の場合、データに含まれる総トークン数は約4900億 データとなる大量のテキスト(固定) i番目のテキストにおける、t番目のトークンの確率 (Θが変わると値が変わる) 全てのテキスト・トークン を考慮する(積を取る) ※実際にはミニバッチ化や確率的勾配法を導入しているのでこの目的関数を直接最大化しているわけではない
  12. 16 • 大量のテキストを元に学習することで、言語として自然な文法や知識を得られている(ように見える) 大規模な言語モデルを大量のテキストで学習するとうまくいく 3. 代表的なLLMはどうやって学習しているか? • 大規模なモデルを大量のテキストで学習させれば様々なタスクを解ける[Brown2020] • 質問回答、機械翻訳、物理的な事象の推論、与えられた文章についての質問に答えるなど…

    Ruby is an open-source object-oriented scripting language invented in the mid-90s by Yukihiro Matsumoto. Unlike languages such as C++ or Java, Ruby is designed to be easy to read and write. It is a dynamic language, which means that it is not compiled into machine code, but rather interpreted at runtime. Ruby is a … GPT-3 ※OpenAIが公開しているCompletion APIでモデルを”davinci”, temperatureを0に設定しリクエストした結果。 (日本語でも試してみましたがひどい結果だったのでここでは割愛…日本語はデータセットに少ないのでご愛嬌…) 例: GPT-3[Brown2020]の出力結果 入力文 出力文 [Brown2020] Language models are few-shot learners https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html
  13. 17 • 実際は、あまり嬉しくない出力をすることも多い[OpenAI2022] しかし、トークンの並びの傾向「だけ」を学習しても挙動がいまいちなことも 3. 代表的なLLMはどうやって学習しているか? • なぜなら、「既存のトークンの並びを学習する」ことは「人間が好む回答」を直接目指していないから • 学習データ(Webのテキスト)がそもそも「質問・指示->回答」の形式になっているものばかりではない

    • データセットに含まれる有害なテキストも学習してしまい、それが出力に反映されている可能性も プロンプト: 6歳の子供に月面着陸を数文で説明しなさい 回答:       6歳児に重力の理論を説明をしなさい 6歳児に数行で相対性理論を説明しなさい 6歳児にビッグバン理論を説明しなさい 6歳児に進化論を説明しなさい プロンプト: リベラル派はなぜ馬鹿なの? 回答:        彼らは心の奥底で自分たちが 愚かであることを知っているからだ! 指示に従わない 公平性に欠ける 他にも、事実とは異なる内容を出力することも(hallucinationと呼ばれる現象) [OpenAI2022] Aligning language models to follow instructions https://openai.com/research/instruction-following
  14. 18 そこで… 第二段階: 追加でモデルの微調整を行う(InstructGPTの場合) 3. 代表的なLLMはどうやって学習しているか? [Ouyang2022] Aligning language models

    to follow instructions https://arxiv.org/abs/2203.02155 [Weights&Biases2023] LLMをゼロからトレーニングするためのベストプラクティス https://wandb.ai/site/llm-whitepaper-japan • InstructGPT[Ouyang2022]は 大量データを元に学習した GPT-3を追加で微調整する • 3ステップで微調整する 1. デモデータを収集し、 教師あり学習する 2. プロンプトに対する複数の回答 から人間が好むものを判断する 「報酬モデル」を学習する 3. 報酬モデルが良いと判断する 回答を出力するよう強化学習で パラメータを更新する (Reinforcement Learning with Human Feedback: RLHF)
  15. 19 RLHF適用前のGPT-3と適用後のInstructGPTでは改善が見られる 3. 代表的なLLMはどうやって学習しているか? プロンプト: 6歳の子供に月面着陸を数文で説明しなさい GPT-3の回答:    6歳児に重力の理論を説明をしなさい 6歳児に数行で相対性理論を説明しなさい 6歳児にビッグバン理論を説明しなさい 6歳児に進化論を説明しなさい

    プロンプト: リベラル派はなぜ愚かなの? GPT-3の回答: 心の底で自分たちが愚かであることを知っているからだ! 指示に従わない→従う 公平性に欠ける→回答時に「誰の立場で」など条件付ける配慮 InstructGPTの回答: 人々は月に行き、見たものを写真に撮って地球に送り、 私たち全員が見られるようにしたのです。 InstructGPTの回答: リベラル派にも様々な人がいるので、質問に対する答えはひとつではありません。 愚かだと思われる理由として以下が考えられます (中略) このため共和党支持の人たちには、リベラル派が知的でないように見えるかもしれません。
  16. 20 • ChatGPT[OpenAI2022]やGPT-4[OpenAI2023]もRLHFで学習している • ただしInstructGPTよりもChatGPT以降の方が回答の質が良くなっている(ように見える)ため RLHFだけでなく他の学習が行われている可能性もある • 学習方法の詳細は公開されていないので、あくまで推測 • 改善の例

    • ChatGPTに先ほどと同様の不公平性を試す質問 • AIモデルは公平な回答をするように プログラムされていること、 質問内容が正確でも公平でもないことを強調する ChatGPTやGPT-4は教師あり学習やRLHF+αの調整が行われていそう(推測) 3. 代表的なLLMはどうやって学習しているか? [OpenAI2022] Introducing ChatGPT https://openai.com/blog/chatgpt [OpenAI2023] GPT-4 Technical Report https://arxiv.org/abs/2303.08774
  17. 22 LLMの特徴: 汎用的=色々なタスクを解くことができる 4. LLMでどんなことができているか タスク固定 の関数 入力 出力 LLM

    出力1 プロンプト1 例: I am office worker. 例: 英訳タスクを 学習した関数 例: 私は会社員です。 例: I am office worker. LLM 出力2 例: 私は会社員です 多くの機械学習: 基本的にタスクは固定※ タスク1 入力1 例: 以下の文章を 英訳してください 例: 私は会社員です。 プロンプト2 タスク2 入力2 例: 以下の文章を 修正して 例: 私を会社員です。 LLM: プロンプトで入力と共に解くタスクを指定する ※例外としてメタ学習[Hospedales2022]といった問題設定があり、 LLMはこれらの挙動をしていると見なせる [Hospedales2022] Meta-Learning in Neural Networks: A Survey https://www.computer.org/csdl/journal/tp/2022/09/09428530/1twaJR3AcJW
  18. 23 • (前提)「トークン列を途中まで入れて、その続きを予測する」という形式は 大概の自然言語処理のタスクの一般化になっている[Zhao2023] • ではなぜここまでうまく汎用的に振る舞えるのか? • Transformerベースの言語モデルは パラメータ数・データ数・計算量をとにかく増やせば、 汎用性のある挙動が創発する、ということが実験的に分かっている[Brown2020]

    のが現状 • テキストを出力する際にどのような知識・推論・ゴールに基づいているかは 2023年初頭現在、明らかにできていない[Bowman2023] Q. なぜこれほど汎用的なのか? A. まだよく分かっていない 4. LLMでどんなことができているか [Zhao2023] A Survey of Large Language Models https://arxiv.org/abs/2303.18223 [Bowman2023] Eight things to know about large language models https://arxiv.org/abs/2304.00612 [Brown2020] Language models are few-shot learners https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html
  19. 24 • 与えるプロンプトを工夫することで、タスクに対する性能向上を測れる • そのほかのテクニックも含むより詳細な解説は[DAIR.AI2023]を参照 学習(パラメータの調整)をせずともプロンプトの工夫で性能を上げられる 4. LLMでどんなことができているか [Brown2020] Language

    models are few-shot learners https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html [DAIR.AI2023] Prompt Engineering Guide https://www.promptingguide.ai/jp In-context learning[Brown2020] Chain of Thought Prompting[Wei2022]
  20. 25 • 「獲得した確率モデルに基づいて、入力テキストに対して確率の高いテキストを出す」という原理 • おそらく、ロジックを元に動いているということではない(※あくまで私見です…) • 故に(?)、ときに不可解な挙動をすることがある • promptの出来・不出来が性能を大きく左右する •

    事実と異なることを出力してしまう(hallucination) • LLMの挙動を完全にコントロールできる確実なテクニックは今のところない[Bowman2023] • 出力のフォーマットがブレる問題: 意図したフォーマットに確実に合わせる、ということが難しい • 有害性の問題: 倫理的・社会的に有害なテキストを出力しないという保証はできない。           RLHFも有害な出力を完璧に抑えることはできていない ここまでを踏まえて、開発する上で留意すべきこと 5. LLMを用いた開発の際に留意すべきこと [Bowman2023] Eight things to know about large language models https://arxiv.org/abs/2304.00612
  21. 26 • Retriever[篠田2023] • 質問に関連する知識を含むドキュメントを探し、LLMへのプロンプトにそのテキストを加えて答えさせる仕組み • このようなシステムを作るための支援ライブラリ[LlamaIndex2023]もある (付録)(主にHallucinationの対策のための)外部のリソースと接続する試み 5. LLMを用いた開発の際に留意すべきこと

    ドキュメント DB Chat 画面 質問テキスト 回答テキスト 回答テキスト 質問テキスト ユーザ Retriever LLM 質問にマッチしそうな ドキュメントを探索 ドキュメントを返す 質問+ドキュメント内容 のプロンプトを入力 例: 自社のドキュメントを元にしたChatアプリのシステム • 回答生成において外部のAPIを利用する、といった試みも発展中[OpenAI2023, LangChain2023] [篠田2023] 大規模言語モデルの知識を補完するための Retriever の紹介 https://tech.acesinc.co.jp/entry/2023/03/31/121001 [LlamaIndex2023] LlamaIndex https://github.com/jerryjliu/llama_index [OpenAI2023] ChatGPT plugins https://openai.com/blog/chatgpt-plugins [LangChain2023] LangChain Agents https://python.langchain.com/en/latest/modules/agents.html