最近のLLMの学習法 (SFT・RLHF・RAG) をまとめました。 1. 教師ありファインチューニング (SFT : Supervised Fine-Tuning) 2. 人間のフィードバックからの強化学習 (RLHF : Reinforcement Learning from Human Feedback)
![最近のLLMの学習法のまとめ - SFT・RLHF・RAG|npaka](https://cdn-ak-scissors.b.st-hatena.com/image/square/0d9cd7bcbd6bbbd3f57f49a5aeacea3b223dc557/height=288;version=1;width=512/https%3A%2F%2Fassets.st-note.com%2Fproduction%2Fuploads%2Fimages%2F115282527%2Frectangle_large_type_2_ddcad280dc9004abcbbe825597122c03.png%3Ffit%3Dbounds%26quality%3D85%26width%3D1280)
「Streamlit」の使いはじめ方をまとめました。 1. Streamlit「Streamlit」は、機械学習およびデータサイエンスのためのWebアプリケーションフレームを簡単に作成して共有できるPythonライブラリです。 2. HelloWorldの作成HelloWorldの作成手順は、次のとおりです。 (1) Pythonの仮想環境の準備。 (2) パッケージのインストール。 $ pip install streamlit(3) helloworld.pyの作成。 ・helloworld.py import streamlit as st st.text("Hello World!")(4) helloworld.pyの実行。 $ streamlit run helloworld.pyブラウザが自動的に開いて、Webアプリケーションが表示されます。 3. 風船を飛ばすボタンの作成あ
LLMのファインチューニングで何ができて、何ができないのかまとめました。 1. LLMのファインチューニングLLMのファインチューニングの目的は、「特定のアプリケーションのニーズとデータに基づいて、モデルの出力の品質を向上させること」にあります。 OpenAIのドキュメントには、次のように記述されています。 ファインチューニングは、プロンプトに収まるよりも多くの例で学習することで、Few-Shot学習を改善します。一度モデルをファインチューニングすれば、プロンプトにそれほど多くの例を提供する必要がなくなります。これにより、コストを削減し、低レイテンシのリクエストを可能にします。 しかし実際には、それよりもかなり複雑です。 LLMには「大量のデータを投げれば自動的に解決する」ような創発的な特性があるため、ファインチューニングもそのように機能すると人々は考えていますが、必ずしもそうではありませ
OpenAIのファインチューニングAPIによる GPT-4 から GPT-3.5 への蒸留を試したのでまとめました。 1. GPT-4 から GPT-3.5 への蒸留「LlamaIndex」で、OpenAIのファインチューニングAPIによる GPT-4 から GPT-3.5 への蒸留のColabが提供されてたので、それをベースに独自データで試してみました。 具体的には、「GPT-4」で学習データを生成し、「GPT-3.5」でファインチューニングすることで、「GPT-3.5」に「GPT-4」相当の知識を習得させます。 We successfully made gpt-3.5-turbo output GPT-4 quality responses in an e2e RAG system 🔥 Stack: automated training dataset creation in @ll
以下の記事が面白かったので、かるくまとめました。 ・Introducing Code Llama, a state-of-the-art large language model for coding 1. はじめに「Code Llama」は、コードと自然言語の両方からコードとコードに関する自然言語を生成できる最先端のLLMです。研究および商用利用が可能で、無料で利用できます。 「Code Llama」は「Llama 2」ベースで、次の3つのモデルを提供します。 ・Code Llama : 基本的なコード生成モデル。 ・Code Llama - Python : Pythonに特化したコード生成モデル。 ・Code Llama - Instruct : 自然言語の指示を理解できるようにファインチューニングしたモデル。 ベンチマークテストではコードタスクにおいて、公的に入手可能な最先端のLL
1. ファインチューニングの利点ファインチューニングの利点は、次のとおりです。 (1) プロンプトよりも高品質な応答 (2) プロンプトに収まりきらないより多くの例の適用 (3) プロンプトの短縮によるトークン数 (コスト) の節約 (4) プロンプトの短縮による処理時間の短縮 モデルは膨大な量のテキストで事前学習されており、このモデルを効果的に利用するため、プロンプトに手順や応答の例を指定する手法が使われます。この例を使用してタスクの実行方法を示すことを「Few-Shot」と呼びます。 ファインチューニングで、プロンプトに収まりきらないより多くの例で学習することにより、さまざまなタスクでより良い結果を達成できるようになります。プロンプトに多くの例を指定する必要はなくなります。これによりトークン (コスト) が節約され、処理時間も短縮されます。 2. ファインチューニングの使用料金ファイン
「Llama.cpp」のHTTPサーバー機能を試したのでまとめました。 ・Mac M1 1. モデルの準備今回は、「vicuna-7b-v1.5.ggmlv3.q4_K_M.bin」を使います。 ・TheBloke/vicuna-7B-v1.5-GGML ・TheBloke/vicuna-7B-v1.5-16K-GGML ・TheBloke/vicuna-13B-v1.5-GGML ・TheBloke/vicuna-13B-v1.5-16K-GGML 2. ローカルPCでの実行ローカルPCでの実行手順は、次のとおりです。 (1) Llama.cppのインストールとビルド。 $ git clone https://github.com/ggerganov/llama.cpp $ cd llama.cpp $ make(2) modelsフォルダにモデルを配置。 今回は、「vicuna-7b-
「Google Colab」で「Llama 2」を試したので、まとめました。 1. Llama 2「Llama 2」は、Metaが開発した、7B・13B・70B パラメータのLLMです。 2. モデル一覧「Llama 2」は、次の6個のモデルが提供されています。 (hfでないモデルも存在) ・meta-llama/Llama-2-70b-hf ・meta-llama/Llama-2-70b-chat-hf ・meta-llama/Llama-2-13b-hf ・meta-llama/Llama-2-13b-chat-hf ・meta-llama/Llama-2-7b-hf ・meta-llama/Llama-2-7b-chat-hf 3. 利用申請「Llama 2」を利用するには、利用申請が必要です。 (1) 公式のMetaのフォームから利用申請。 数時間後に利用許可のメールがきます。 (
「Llama.cpp」で「Llama 2」を試したので、まとめました。 ・macOS 13.4.1 ・Windows 11 前回 1. Llama.cpp「Llama.cpp」はC言語で記述されたLLMのランタイムです。「Llama.cpp」の主な目標は、MacBookで4bit量子化を使用してLLAMAモデルを実行することです。 特徴は、次のとおりです。 ・依存関係のないプレーンなC/C++実装 ・Appleシリコンファースト (ARM NEON、Accelerate、Metalを介して最適化) ・x86アーキテクチャのAVX、AVX2、AVX512のサポート ・Mixed F16/F32精度 ・4bit、5bit、8bit量子化サポート ・BLASでOpenBLAS/Apple BLAS/ARM Performance Lib/ATLAS/BLIS/Intel MKL/NVHPC/AC
1. GitHub Copilot Labs「GitHub Copilot Labs」は、「GitHub Copilot」の実験的な機能を提供するVSCode拡張です。 以下の機能を提供しています。 ・コードの説明 ・コードを別の言語に翻訳 ・コードの編集 ・読みやすさの向上 ・型の追加 ・バグ修正 ・デバッグコードの追加・削除 ・コードをステップ毎に説明 ・コードの堅牢化 ・コードの分割 ・ドキュメントの追加 ・カスタム ・テストコードの生成 また、「GitHub Copilot Labs」では「GitHub Copilot」とは別の規約が適用されます。より多くの情報を収集する可能性があります。これは、実稼働ではなく、学習を目的として設計されているためになります。 2. GitHub Copilot Labsの開始「GitHub Copilot Labs」の開始手順は、次のとおりです。
「text-generation-webui」で「Rinna」「OpenCALM」「RWKV」を試したので、まとめました。 ・Windows 11 1. text-generation-webui「text-generation-webui」は、大規模言語モデルを実行するためのWeb UIです。テキスト生成の「AUTOMATIC1111」になることを目標としています。 特徴は、次のとおりです。 ・3つのインターフェイスモード (default, notebook, chat) ・モデルバックエンド (transformers, llama.cpp, AutoGPTQ, GPTQ-for-LLaMa, ExLlama, RWKV, FlexGen) ・ドロップダウンメニューによるモデル切り替え ・LoRA (ロード・アンロード・学習) ・プロンプトテンプレート (Alpaca, Vicuna
「OpenAI API」の新機能「Function Calling」を試したので、まとめました。 1. Function Calling「Function Calling」は、開発者が事前に関数の定義を指定しておくことで、モデルが必要に応じて実行する関数とその引数を選択できるようにする機能です。 例えば、「東京の天気は?」という質問は、モデルだけでは現在の天気がわからないため正解を返すことができません。開発者が事前に天気情報の関数の定義を指定しておくことで、モデルは天気の質問があった際にその関数を呼ぶことを選択し、その関数の実行結果を使って正解を返すことができるようになります。 2. Function Callingの処理の流れ「Function Calling」の基本的な処理の流れは、次のとおりです。 (1) ChatCompletionでユーザー入力と関数の定義を送る 必要に応じて、関
以下の記事が面白かったので、簡単にまとめました。 ・StackLLaMA: A hands-on guide to train LLaMA with RLHF 1. はじめにこの記事では、「SFT」「RM」「RLHF」の組み合わせで、「Stack Exchange」の質問に答える「StackLLaMA」の学習の全ステップを紹介します。 ・SFT (Supervised Fine-tuning) : 教師ありファインチューニング ・RM (Reward / preference modeling) : 報酬 / 嗜好モデリング ・RLHF (Reinforcement Learning from Human Feedback) : ヒューマンフィードバックからの強化学習 「StackLLaMA」は、以下でデモを試すことができます。 ベースモデルとして「LLaMA 7B」、データセットとして「
「LlamaIndex v0.6」で大きな変更があったので更新しました。 ・LlamaIndex v0.6 【最新版の情報は以下で紹介】 1. LlamaIndex「LlamaIndex」は、専門知識を必要とする質問応答チャットボットを簡単に作成できるライブラリです。同様のチャットボットは「LangChain」でも作成できますが、「LlamaIndex」は、コード数行で完成してお手軽なのが特徴になります。 2. ドキュメントの準備はじめに、チャットボットに教える専門知識を記述したドキュメントを用意します。 今回は、マンガペディアの「ぼっち・ざ・ろっく!」のあらすじのドキュメントを用意しました。 ・bocchi.txt 3. Colabでの実行Google Colabでの実行手順は、次のとおりです。 (1) パッケージのインストール。 # パッケージのインストール !pip install
以下の記事が面白かったので、軽く要約しました。 ・Illustrating Reinforcement Learning from Human Feedback (RLHF) 1. はじめに言語モデルは、人間の入力プロンプトから多様で説得力のあるテキストを生成することで、ここ数年、目覚ましい成果をあげています。しかし、「良い」テキストかどうかは、主観的で文脈に依存するため、定義することが困難です。 「良い」テキストを生成するための損失関数の設計は難しく、ほとんどの言語モデルは、まだ単純な次のトークン予測損失(クロスエントロピーなど)で学習しています。この損失自体の欠点を補うために、BLEUやROUGEなどの人間の好みをよりよく捉えるように設計された指標も定義されています。しかしこれらは、能力測定において損失関数より適してますが、生成されたテキストを単純なルールで参照比較するため、制限があり
以下の記事が面白かったので、軽く要約しました。 ・Reinforcement Learning for Language Models 1. はじめに「ChatGPT」とそれに続く「大規模言語モデル」(LLM)のリリースに伴い、「RLHF」の重要性が議論されました。しかし、なぜ「強化学習」が「教師あり学習」よりも言語モデルの学習に適しているのか疑問に思いました。「教師あり学習」 (Instructionチューニング) で十分ではないでしょうか? 私は、ある程度納得のいく理論的な議論を思いつきました。そして、特にChatGPTのようなモデルには、強化学習のケースを支持するだけでなく、それを必要とする追加の論拠があることに気がつきました。この追加の議論は、OpenAIのJohn Schulmanによる講演の(前半部分で)綴られています。この投稿は、彼の主張をより多くの言葉で繰り返し、また、明確
以下の記事を元に、「OpenAI API」のファインチューニングの学習データのガイドラインをまとめました。 1. 学習データの書式ファインチューニングするには、単一の入力「プロンプト」とそれに関連する出力 「コンプリーション」 のペアで構成される学習データが必要です。これは、1回のプロンプトで詳細な手順や複数の例を入力するような、ベースモデルの使用方法とは大きく異なります。 「学習データの書式」のガイドラインは、次のとおりです。 ・プロンプトが終了してコンプリーションが開始することをモデルに知らせるため、区切り記号 ("\n\n###\n\n"など) でプロンプトを終了する必要があります。区切り記号は、プロンプトの他の場所で使用されない文字列を指定します。 ・コンプリーションが終了することをモデルに知らせるため、停止記号 ("\n"、"###"など)でコンプリーションを終了する必要がありま
「Google Colab」で「BabyAGI」を試したので、まとめました。 1. BabyAGI「BabyAGI」は、タスク駆動型自律エージェントのフレームワークです。ゴールに基づいてタスクの作成、優先順位付け、および実行を行います。主なアイデアは、前のタスク結果とゴールに基づいてタスクを作成することです。「Task-Driven Autonomous Agent」 (Mar 28, 2023)の簡易版になります。 「BabyAGI」は、次の手順を無限ループすることで機能します。 (1) タスクリストから最初のタスクを取得。 (2) タスクを実行エージェントに送信。実行エージェントは、「OpenAI API」を使用して、タスク結果を取得。 (3) 結果を充実させ、「Pinecone」に保存。 (4) 新しいタスクを作成し、ゴールと前のタスク結果に基づいてタスクリストの優先順位を付け直す。
LLMのデータセットをまとめました。 1. 事前学習データセット1-1. Text・Wikipedia (ja) ・fujiki/wiki40b_ja ・shisa-pretrain-en-ja-v1 (ja) ・augmxnt/shisa-pretrain-en-ja-v1 ・Wikipedia (en) ・Wiki Demo (en) ・RefinedWeb (en) ・RedPajama V2 (en) ・Pile (en) ・SkyPile (zh) ・The Stack 2 (en) ・The Stack (en) ・StarCoder (en) 1-2. Code・The Stack 2 (en) ・The Stack (en) ・StarCoder (en) 2. SFTデータセット2-1. Instruction・ichikara-instruction (ja) ・ich
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く