だいぶ前に参加したオンライン講義である。
本当は聞いた当日にでも書こうと思ったのだが、この講義を聞いている途中に体調を崩し、今日ようやくアーカイブを見て最後まで確認することが出来た。
一応、参加者だけにリンクを知らされているようであるので、現状は見れない (晒さない) が、過去の講義も動画化しているので、そのうち表に出るのではないかと思われる。
過去の講義も興味深いのが多いので、チャンネル登録しておいた。
次のイベントでは、RAGなどの話が中心の模様。dblectures.connpass.com
ここでは、31回目の講義の内容について、概要と所感を書く。
概要
- 本講義では、前半は自然言語に関するニューラルネットワークの基礎、後半は最近の大規模言語モデルの動向、またそれらを支える手法やアルゴリズム、ライブラリなどの紹介であった
- 自然言語処理タスクの多くは「分類問題」として扱われる
- テキストを2つのクラス (感情など) に分ける
- 入力に続く次の単語を生成 (様々な単語の中から1つ選ぶ) する
- ニューラルネットワークでは、テキストを「トークンの系列」データとして扱う
- 近年はトークンの最小単位を「バイト」として、未知語を発生させない
- 初期のニューラル自然言語処理では、タスクごとにネットワーク設計を行い正解情報付きのデータセットで学習
- 深層学習で性能は高まったが、データがないと精度が高まらない
- そこで大規模コーパスで事前学習させた「言語モデル」を用意し、そこからタスクごとにファインチューニングで、特化させるようにした
- 自然言語処理のタスクは「自然言語理解 (NLU)」、「自然言語生成 (NLG)」の2つ
- 前者はテキスト分類、感情分析など
- 後者は機械翻訳、要約など
- エンコーダ・デコーダの話
- セルフアテンションが有効なのは、「系列内で遠く離れた単語の関係性も直接考慮できるようになったため」
- RNN・LSTMの欠点は、入力数が多くなればなるほど、初期に入力された単語が参照できないこと
- 言語モデルの大規模化
- BERTの紹介
- 機械読解 ('SQuAD1.1) においいて、人間の質問応答スコアを大きく超える性能を達成
- 事前学習:マスク化言語モデリング
- 入力分の一部をマスクし、予測させる
- BERTのファインチューニング:シンプルな出力層を1層だけ基盤モデルの最上部に追加する
- GPT-3の紹介
- 超大量のテキストデータ (3000億トークン)で事前学習、96層の超巨大なTransformerデコーダに基づく言語モデル
- パラメータ数は175B = 1750億個
- GPT-3は、生成タスクに適したデコーダ (自己回帰) タイプ
- BERTのエンコーダタイプとは異なる
- GPT-3の膨大な事前学習によって、人間のように「少数の例示による学習」が可能になってきた
- 事前学習のテキスト内には、同一タスクの例が繰り返し現れるコンテキストも含まれているため、例示による学習で向上させているのでは
- few-shot学習
- タスク説明と少数の例を与えるだけで、モデルの更新をしなくても問題を解くことが出来る点が注目を集めた
- Scaling laws
- 計算量、学習トークン数、パラメータ数を増やせば増やすほど、性能は良くなる
- 現状も大量の計算機資源を用いて、大量のデータを、大きいモデルで学習すれば良いモデルが出来る
- Chain-of-Thougt
- プロンプトに試行の途中過程を与えてあげると、推論能力が増す現象
- りんご1個を持ってて、そこにりんご1個を与えるとりんごが2個になる、これが1+1=2 という感じ
- ある程度のモデルサイズが必要
- プロンプトに試行の途中過程を与えてあげると、推論能力が増す現象
- Let's think step by step
- プロンプトに「ひとつひとつ考えて」というおまじないを与えると、推論過程を出力し、精度が良くなる
- プロンプトチューニングの大事さを表している顕著な例
- BERTの紹介
- 大規模言語モデルのさらなる発展
- 汎用人工知能がChatGPTにより、遠い夢ではなくなっている
- すでに様々なタスクを1つのモデルが人に近いレベルで行っている
- Instruction-tuning (Flan)
- 指示を与えることで、指示に従った出力が出来るようにチューニング
- 前提文と仮説文の間に含意関係は成り立つますか
- 前提:海の幸が更に盛り付けられています。
- 仮説:色とりどりの野菜がお皿に盛り付けられています。
- 出力は「はい」「いいえ」「どちらでもない」から選んで、その根拠も述べてください
- 上記の入力を与えると、その指示に従った出力を行う
- 例:「いいえ」、野菜は海の幸には含まれません
- 前提文と仮説文の間に含意関係は成り立つますか
- 未知のタスクにも指示に従った応答が可能になる
- 指示を与えることで、指示に従った出力が出来るようにチューニング
- ChatGPT (GPT-3.5)
- GPT-4の紹介
- 言語モデルからマルチモーダルに進化
- 模擬司法試験を上位でパスするレベル
- Geminiの紹介
- 入力:言語、画像、音声、動画
- 出力:テキストと画像
- LLaMA-1,2 によるオープン化
- GPT-4, Geminiでは中身が分からないが、LLaMAは中身を情報を公開している
- そのため、LLaMAを使ってGPT-4のようなモデルを作ろうという技術開発が加速
- モデルに追加したパラメータのみを効率よく学習 (PEFT) する手法で高い効果が得られている
- 代表例はLoRA
- ChatGPT のようなLLMの学習方法の概要
- 事前学習データ
- インストラクションチューニング
- 2段階のチューニングを行った
- 1. Flanチューニングを実施
- 2. 人で作成した高品質・広範囲なインストラクションデータ2.7万件を使って、更にモデルを更新
- helpfulness (有用性) とsafety (安全性)の観点がデータに存在する
- これにより、罵ってほしいなどの入力を回避する、ということを学習させ、有用・安全な回答になるようにチューニングする
- 2段階のチューニングを行った
- 報酬モデリング
- モデルの出力2つを生成し、人がhelpfulness/safetyの基準でどちらが良いか選ぶ
- また各基準で、出力を「採択」するか「棄却」するかを選ぶ
- その回答を教師あり学習として、各基準の報酬モデルについて学習させる
- 強化学習
- PPO (深さ重視) と Rejection Sampling fine-tuning (幅重視) の2種類を併用する
- Rejection Sampling fine-tuning:同じモデルからNサンプル出力し、報酬モデルがベストとした出力を正解として、チューニングする
- PPO:報酬モデルを実際に強化学習として行い、最初のモデルから離れないように報酬を設計し、報酬が高くなるような手法
- 評価すると、LLaMA2 70B がGPT-3.5と匹敵する
- 日本語も理解できるようだが、英語で返ってくる
- 課題としては、ハルシネーション (幻覚)・バイアス
- 質問応答のタスクはハルシネーションが顕著
- 翻訳や要約はあまりない
- 汎用人工知能がChatGPTにより、遠い夢ではなくなっている
- 最近の動向
- Huggingface Open LLM leaderboard
- 複数のベンチマークでLLMの性能を測るリーダーボード
- LoRAの概要
- 学習済みの重みを凍結して、新たにLLMの各層に挿入した適応用の低ランク分解行列のみを学習
- どの層に適用すれば効果的か、という議論が続いている
- Mixture-of-expertsの概要
- DPO: Direct Preference Optimization
- FlashAttention, -V2
- 厳密計算によるAttentionの高速化
- 高速かつメモリ効率が良い計算が可能
- 8k, 16kのような長いcontextを現実的に扱えるようになってきた
- Grouped-Query Attention
- デコーディング時に過去のトークンに対するKVキャッシュを大きく減らすことが出来る
- Sliding Window Attention
- sliding windowにより局所的なアテンション計算を行うことで計算量を大幅に落とせる
- Huggingface Open LLM leaderboard
- マルチモーダルモデル/エージェント
- NTT版大規模言語モデル「tsuzumi」
- 日本語に強い、軽量、柔軟なチューニング、マルチモーダル
- 視覚と言語を結びつけて理解する技術に取り組んでいる
- Next-GPT
- 画像・音声・動画のエンコーダ、LLM、画像・音声・動画のデコーダををつなぐ小さいネットワークのみを学習
- any-to-anyのマルチモーダルモデルの作成
- pix2Act
- 画像から自然言語の指示に従って、行動を生成
- Voyager
- GPT-4/3.5でマインクラフトをプレイするエージェント
- ChatDev
- 仮想のソフトウェア開発会社。エージェントたちが互いにチャットしながらコードやドキュメントを納品する
- ChatEval
- モデルの評価を行う際に複数のエージェントで議論し、どちらのモデルの出力が良いか決める
- NTT版大規模言語モデル「tsuzumi」
- Knowledge Distillation
- Alpaca.self-instruct
- 大型のLLM から小型のLLMへ知識を移すアプローチを行ったモデル
- このモデルにより、上記の流れが流行
- Vicuna
- ユーザーとChatGPT間の対話例7万件を利用して、13BサイズでChatGPTの回答品質の90%を達成
- WizardLM/Evol-instruct
- GPT-3.5 を用いてインストラクションチューニング用のデータをより深く (難しく) ・広く生成する
- より品質のデータを作成する
- GPTによって品質を評価
- Distilling Step-by-Step
- Orca/ Explanation tuning
- Orca-2/ Prompt Erasing
- Zephyr/ Distilled DPO
- インストラクションチューニングだけではなく DPOにおける「人のフィードバック」をGPT-4のフィードバックにしてdistillationを行うことで性能向上
- phi-1
- GPT-4を活用してフィルタリングした高品質のGithubコードと、GPT-3.5 を使って生成した教科書品質のデータを利用
- Alpaca.self-instruct
- Model Merging
- Model soups/ average mergin
- 同じ事前学習モデル由来の複数個のチューニングモデルを単純平均してマージ (一様スープ)
- Held-outデータで良いモデルから逐次的に性能が良くなるものだけをマージして平均を取る (貪欲スープ)
- モデルの平均を取ることで性能を良くする方法
- SLERP (球面線形補間)
- 同じ事前学習モデル由来の2つのファインチューニングモデルをSLERPでマージすると性能が良くなる
- 方法自体は古くからある
- 良くなる理由はわかっていない
- 同じ事前学習モデル由来の2つのファインチューニングモデルをSLERPでマージすると性能が良くなる
- Task arithmetic
- モデルパラメータを一列に並べたベクトルとして考える
- ファインチューニング前後のベクトルを加算・減算すると新たな能力を得たり、タスクを忘れたりすることが出来る
- Ties-mergin:複数のモデルのパラメータを並べて、良いものを取ってマージすることで良い性能のモデルを得られる
- DARE
- タスクベクトルの90%以上をゼロにしてもLL<では性能に大きな影響が出ないことを報告
- スパース化したモデルを加算すれば、タスク間の干渉が減りマージしやすくなる
- Passthrough
- ベースモデルを他のモデルにstackすると何故か性能が向上する
- 出力層に近い部分を付け足すのが実験的にうまくいっている
- Mergin PEFT model
- LoRAアダプタなどのPEFTモジュールに関してもTask arithmeticが効果ある
- LoraHub
- タスクに対し、学習無しで複数個のLoRAアダプターからどのアダプターを組み合わせる
- Model soups/ average mergin
所感
- 2時間と長い内容だったが、基礎的な部分から最近の動向まで幅広く知ることが出来た
- 内容自体は難しい部分もあったと思うのだが、資料が見やすく、聞きやすい説明だったので、概要をすんなりと知ることが出来た
- 最近の動向以降に関する話は、とても興味深く聞くことが出来た
- LLaMAの流れは、GPTと同等のモデルを作りたいというモチベーションからというのは初耳であり、面白く聞けた
- Mixture-of-expertの話も興味深い
- マルチモーダルモデルの動向もGemini/GPT以外の知識もしれた
- 最近流行りの小型モデルで性能を上げる流れも、SNS上で見かけていたが、モデルだけではなく、それを成立させるための手法を知ることが出来て納得した
- プロンプトの話とかも、知っている知識にアップデートされる形でより理解が深まった
- マルチモーダル、大型LLMによる小型LLMの性能向上、モデルマージンは今後も注目すべき分野だと思った
- 個人的にはこれをタダで聞け、リアルタイムでは質問もできる点が凄いと思った
- お金をとっても良いレベルだと個人的には思った
- アーカイブで残るらしいので、いつでも見返せる点も良い