From 9b3f2b78f58015932cfb750d9bfb6b1f5aa4f092 Mon Sep 17 00:00:00 2001 From: ysit21 Date: Tue, 29 Apr 2025 23:34:03 +0900 Subject: [PATCH 1/5] add day3 contents --- day3/README.md | 99 ++++ day3/ai_engineering_03.ipynb | 953 ++++++++++++++++++++++++++++++ day3/ai_engineering_03_T4.ipynb | 985 ++++++++++++++++++++++++++++++++ day3/data/LLM2024_day4.txt | 235 ++++++++ day3/data/LLM2024_day4_raw.txt | 148 +++++ day3/data/llm04_eng.json | 62 ++ day3/data/llm04_eng_nofix.json | 32 ++ 7 files changed, 2514 insertions(+) create mode 100644 day3/README.md create mode 100644 day3/ai_engineering_03.ipynb create mode 100644 day3/ai_engineering_03_T4.ipynb create mode 100644 day3/data/LLM2024_day4.txt create mode 100644 day3/data/LLM2024_day4_raw.txt create mode 100644 day3/data/llm04_eng.json create mode 100644 day3/data/llm04_eng_nofix.json diff --git a/day3/README.md b/day3/README.md new file mode 100644 index 000000000..48a33182e --- /dev/null +++ b/day3/README.md @@ -0,0 +1,99 @@ +# day3 演習用ディレクトリ + +第3回「機械学習システムの改善」に関する演習用のディレクトリです。 + +# 演習の目的 + +本演習コンテンツでは、技術的な用語や仕組み(例:RAG におけるチャンク処理など)の詳細な理解を目的とするのではなく、AI の性能を向上させるための方法を実際に体験することを主眼としています。 +この体験を通じて、複数のデータソースの扱いや、AI に対する適切な入力・文脈の与え方など、実践的なスキルへの理解を深めることを目的とします。 + +# 演習の内容 +主な演習の流れは以下のようになっています。 + +1. ベースモデルのそのままの状態で質問に回答させる +2. 講義の文字起こしデータを使う +3. チャンク化を行い、文字情報を分割する +4. Rerankにより、質問に関連する内容を取り出せるようにする +5. さらに改善方法を検討する + +演習の詳細はノートブックに記載されています。 + +演習には、「Google Colab」を使うことを想定しています。 + +講義内の演習の時間では、ディレクトリ内の「ai_engineering_03.ipynb」を使用しています。 +このノートブックでは、Google ColabのL4というGPUを使用する想定で作られています。 + +- [Open with Colab(GPU:L4)](https://colab.research.google.com/github/matsuolab/lecture-ai-engineering/blob/master/day3/ai_engineering_03.ipynb) + +## 注意事項 +L4はGoogle Colabの無料利用では選択できない可能性があります。 + +演習として説明を行う都合上、講師の環境では「L4」を使用しますが、受講生の方で「L4」を使用できない場合は、 +無料で利用可能な「T4」向けのノートブック「ai_engineering_03_T4.ipynb」も用意したのでこちらを使用して演習を行なってください。 + +- [Open with Colab(GPU:T4)](https://colab.research.google.com/github/matsuolab/lecture-ai-engineering/blob/master/day3/ai_engineering_03_T4.ipynb) + +演習の大まかな流れはどちらのノートブックでも同じように体験できるように構成していますが、細かい部分で内容が異なる場合がある点はご了承をお願いします。 +(主な違いとしては、T4のノートブックで利用するモデルの方がサイズが小さいことと、演習として実際に試せる内容が少ない(「5. さらに改善方法を検討する」はGPUメモリが不足して実行できない)などの違いがあります。) + +# 事前準備 +事前準備の内容は、L4向けのノートブックと、T4向けのノートブックで異なります。 + +使うノートブックに合わせて事前準備を行なってください。 + +## L4向けのノートブックの場合 +1. Huggingfaceのアクセストークンの取得 + ノートブック内でHugginfaceのアクセストークンを使用します。 + + https://huggingface.co/settings/tokens + +2. Llama3モデルのライセンス + 演習ではLlama3を利用する予定です。ライセンス登録など必要な準備を済ませておいてください。 + + Huggingfaceのアカウントでログインした状態で以下のモデルカードのページにアクセスし、「META LLAMA 3 COMMUNITY LICENSE AGREEMENT」からライセンスへの同意をする。 + + https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct + +## T4向けのノートブックの場合 +1. Huggingfaceのアクセストークンの取得 + ノートブック内でHugginfaceのアクセストークンを使用します。 + + https://huggingface.co/settings/tokens + +2. Gemma2モデルのライセンス + day1で使用したモデルと同じなので、day1で既にライセンスに同意している方は以下の手順はスキップできます。 + + Huggingfaceのアカウントでログインした状態で以下のモデルカードのページにアクセスし、「Access Gemma on Hugging Face」からライセンスへの同意をする。 + + https://huggingface.co/google/gemma-2-2b-jpn-it + +# 演習に関連する参考情報 + +## データを綺麗にするには +- 会話データの場合、文書として書かれたデータよりもデータが扱いにくい場合が多いです。そのため、データをクレンジングすると扱いやすいデータになることが多いです。 + - 演習の内容にもある通り、誤字や文の区切りなどを調整する。 + - 不要な情報を減らす(生成したい内容や目的に合わせて調整する)。 + - 重複した文章の削除する。 + - 表現方法の統一する(少し違う言い回しに変えるなどを会話においては行うことがある)。 + +## データソースを追加するには +- テキスト生成モデルに対してデータソースを使用する場合、データをモデルにプロンプトとして投入する都合により、データを最終的にはテキストデータに変換することになります。 + - そのため、PDFやWeb上のHTML等をテキストに変換(パース)する方法についても調べてみましょう。 + - PDFやWebなどのデータを取得したり、利用したりする際には、データの提供元の利用規約等を確認し、準拠した上で利用するように習慣を作りましょう。 + - PDFの例 + - https://pypi.org/project/PyPDF2/ + - https://pypi.org/project/pdfminer.six/ + - HTMLの例 + - https://docs.python.org/ja/3/library/html.parser.html + - SaaSとしてWebデータをLLMが処理しやすくするAPIを提供している企業もあります。 + - [https://jina.ai](https://jina.ai/) + - 使用したいWebページのURLをAPIに設定してリクエストを投げると、Webページ上のテキスト等をLLMが処理しやすい形に変換してくれたりします(HTMLのパースをする手間を肩代わりしてくれる)。 + +## モデルを変えるとどうなるか +- T4版のノートブックでは、ベースモデルとしてgemma2を使っています。 + - Llama3よりもパラメータ数が少なく、モデルもLlama3と比べ古いので、生成文は少しぎこちない印象はあります。gemma2ではsystemプロンプトを使えないため、推論のさせ方もLlamaと比べて少し異なっています。 +- 埋め込みモデルを変えるという考え方もあります。埋め込み時の結果が変わるので、参考資料としてプロンプトに入ってくる内容が変わることが考えられます。 + +## 発展的な手法にどのようなものがあるか +- RAGという1つのテーマだけでも様々なアプローチがあります。 + - https://github.com/jxzhangjhu/Awesome-LLM-RAG \ No newline at end of file diff --git a/day3/ai_engineering_03.ipynb b/day3/ai_engineering_03.ipynb new file mode 100644 index 000000000..89dc336af --- /dev/null +++ b/day3/ai_engineering_03.ipynb @@ -0,0 +1,953 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "D_6-jdBOXowG" + }, + "source": [ + "# 演習の方針\n", + "\n", + "1. **ベースラインモデル評価** \n", + " 素のモデルで回答を生成し、講義内容との整合性の低さを観察します。これにより、特別な学習なしでのモデルの限界を確認します。\n", + "\n", + "2. **文字起こしデータの活用** \n", + " 講義の文字起こしデータを導入し、モデルが講義内容を参照した回答を生成する傾向を観察します。ただし、Retrieval(情報検索)精度の限界から結果は不安定になる可能性があります。\n", + "\n", + "3. **チャンク化の導入** \n", + " 文字起こしデータをチャンク(小単位)に分割し、より安定して関連コンテンツを取得できるようにします。この段階では文脈理解にまだ課題があることを確認します。\n", + "\n", + "4. **Rerankの適用** \n", + " 検索結果のランク付けを導入し、より的確で安定した回答を目指します。\n", + "\n", + "5. **応用改善手法** \n", + " 文字起こしの品質向上のための編集技術や、メタデータの活用による性能向上手法を探ります。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PPI1pj4mFavt" + }, + "source": [ + "## 扱う質問\n", + "\n", + "「Inference Time Scaling(推論時スケーリング)」に関する質問を取り扱います。これは以下の背景を持つトピックです。\n", + "\n", + "- 2024年8月発表の論文「Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters」で提唱された概念\n", + "- OpenAIのGPT-o1(2024年9月リリース)で実用化され、注目を集めた比較的新しいアプローチ\n", + "- 2024年度LLM講座の第4回講義でも取り上げられた重要テーマ\n", + "\n", + "## 扱うモデル\n", + "\n", + "Meta-Llama-3-8B-Instruct(2024年4月リリース)を使用します。このモデルは、リリース時期の関係上、以下の特徴を持ちます。\n", + "\n", + "- 「Inference Time Scaling」の概念が広まる前に訓練されており、このトピックに関する知識を持たないと想定される\n", + "- この特性を活かし、純粋なベースライン評価から各手法の効果を観察する" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 演習環境の準備" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vM50WAI7GXwC" + }, + "outputs": [], + "source": [ + "!pip install --upgrade transformers\n", + "!pip install google-colab-selenium\n", + "!pip install bitsandbytes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_vs-Ri1Tslqw" + }, + "outputs": [], + "source": [ + "# 演習用のコンテンツを取得\n", + "!git clone https://github.com/matsuolab/lecture-ai-engineering.git" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zXo_kFASXlvp" + }, + "outputs": [], + "source": [ + "# HuggingFace Login\n", + "from huggingface_hub import notebook_login\n", + "\n", + "notebook_login()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dZ_NUIftXwLc" + }, + "outputs": [], + "source": [ + "# CUDAが利用可能ならGPUを、それ以外ならCPUをデバイスとして設定\n", + "import torch\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7eTgV8XBPA90" + }, + "outputs": [], + "source": [ + "import random\n", + "random.seed(0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6tV9mO8oXoaM" + }, + "outputs": [], + "source": [ + "# モデル(Llama3)の読み込み\n", + "\n", + "from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig\n", + "\n", + "model_name = \"meta-llama/Meta-Llama-3-8B-Instruct\"\n", + "tokenizer = AutoTokenizer.from_pretrained(model_name)\n", + "\n", + "bnb_config = BitsAndBytesConfig(\n", + " load_in_4bit=True,\n", + " bnb_4bit_compute_dtype=torch.float16,\n", + " bnb_4bit_quant_type=\"nf4\",\n", + " bnb_4bit_use_double_quant=False,\n", + ")\n", + "\n", + "model = AutoModelForCausalLM.from_pretrained(\n", + " model_name,\n", + " device_map=\"auto\",\n", + " quantization_config=bnb_config,\n", + " torch_dtype=torch.bfloat16,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "piTdVxTfGcc_" + }, + "source": [ + "# 1. ベースラインモデル評価\n", + "**まずはベースモデルがどの程度知識を持っているか確かめる**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NBUZ3o6dhMlC" + }, + "outputs": [], + "source": [ + "messages = [\n", + " {\"role\": \"system\", \"content\": \"質問に回答してください。必ず「日本語で回答」すること。\"},\n", + " {\"role\": \"user\", \"content\": \"LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " # max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4ZXyEnZ3lrBd" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZSCNnRf9pJif" + }, + "source": [ + "## 結果 (ベースモデル)\n", + "\n", + "Meta-Llama-3-8B-Instructは「Inference Time Scaling」について誤った知識を提示しました:\n", + "* モデルは従来の「推論時間の短縮」という文脈でInference Time Scalingを解釈しており、これはLLM分野における最新の「Inference Time Scaling」概念(推論時計算資源の最適配分)とは異なる説明になります。\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "k4R-hiKNGyJd" + }, + "source": [ + "# 2. 文字起こしデータの活用\n", + "## 講義内容をソースとして活用 (RAG導入)\n", + "\n", + "モデルの回答の事実性を向上させるためにRetrieval Augmented Generation (RAG)技術を導入します:\n", + "\n", + "* **知識ソース**: LLM講座第4講における講師の発言内容\n", + "* **目的**: モデルに「Inference Time Scaling」に関する正確な知識と文脈を提供し、事実に基づいた回答を促す\n", + "\n", + "**初期RAG実装(ベーシックアプローチ)**:\n", + "* **ドキュメント処理**: 音声認識モデル(speech2text)で書き起こした生テキストをそのまま使用\n", + "* **分割方法**: 「。」(句点)で区切られた文単位でテキストを分割\n", + "* **検索手法**: シンプルな類似度ベースの検索でクエリに関連する文を抽出\n", + "* **制約条件**: モデルの入力トークン制限に収まるよう関連文のみを選択" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "47GvcceyObAl" + }, + "outputs": [], + "source": [ + "from sentence_transformers import SentenceTransformer\n", + "\n", + "emb_model = SentenceTransformer(\"infly/inf-retriever-v1-1.5b\", trust_remote_code=True)\n", + "# In case you want to reduce the maximum length:\n", + "emb_model.max_seq_length = 8192" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kPwggQfUS5yl" + }, + "outputs": [], + "source": [ + "with open(\"/content/lecture-ai-engineering/day3/data/LLM2024_day4_raw.txt\", \"r\") as f:\n", + " raw_writedown = f.read()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kxzKF6L2THIw" + }, + "outputs": [], + "source": [ + "# ドキュメントを用意する。\n", + "documents = [text.strip() for text in raw_writedown.split(\"。\")]\n", + "print(\"ドキュメントサイズ: \", len(documents))\n", + "print(\"ドキュメントの例: \\n\", documents[250])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nK4cYURzTHIx" + }, + "outputs": [], + "source": [ + "# Retrievalの実行\n", + "question = \"LLMにおけるInference Time Scalingとは?\"\n", + "\n", + "query_embeddings = emb_model.encode([question], prompt_name=\"query\")\n", + "document_embeddings = emb_model.encode(documents)\n", + "\n", + "# 各ドキュメントの類似度スコア\n", + "scores = (query_embeddings @ document_embeddings.T) * 100\n", + "print(scores.tolist())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b_v8gx_tTHIx" + }, + "outputs": [], + "source": [ + "topk = 5\n", + "for i, index in enumerate(scores.argsort()[0][::-1][:topk]):\n", + " print(f\"取得したドキュメント{i+1}: (Score: {scores[0][index]})\")\n", + " print(documents[index], \"\\n\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Ow0wZy6ETHIx" + }, + "outputs": [], + "source": [ + " #回答に役立つ該当の発言はreference[1871]〜に含まれてます。\n", + "references = \"\\n\".join([\"* \" + documents[i] for i in scores.argsort()[0][::-1][:topk]])\n", + "messages = [\n", + " {\"role\": \"system\", \"content\": \"質問に回答してください。必ず「日本語で回答」すること。また、与えられる資料を参考にして回答すること。\"},\n", + " {\"role\": \"user\", \"content\": f\"[参考資料]\\n{references}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " # max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "z_4dkHGKTPr-" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Bn7tih0RTTzr" + }, + "source": [ + "## 結果 (初期RAG実装)\n", + "\n", + "講義内容のドキュメントを追加したにもかかわらず、モデルの回答には依然として以下の問題が見られます:\n", + "* 「高速に推論する」など、従来の一般的な推論最適化と「Inference Time Scaling」を混同した誤った解釈が継続\n", + "* 講義内容を参照しているものの、概念の本質を正確に捉えられていない\n", + "\n", + "### 問題分析\n", + "以下の要因が考えられます:\n", + "1. **ドキュメント品質の問題**: 音声認識による文字起こしの精度不足\n", + "2. **検索精度の課題**: 単純な文単位の分割では文脈が失われ、関連性の高いドキュメント片を適切に取得できていない可能性\n", + "\n", + "### 書き起こしテキストの品質改善\n", + "\n", + "日本語の音声認識(speech2text)モデルは精度に課題があることが知られています。以下に「LLMにおけるInference Time Scalingとは?」に関連する講義内容の書き起こしテキストを比較します:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "q83QyfAIphk6" + }, + "source": [ + "### 講義中の該当発言 (LLM講座Day4後半から抜粋)\n", + "\n", + "\n", + "<修正前>\n", + "---\n", + "\n", + "講義に戻ります。ちょっと練習の時間もあるのであと20分ぐらいで駆け足になりますけど、最後最近のスケールトレンドって話で**生のGENIACLM**の話をして終わろうと思いですねちょっとモチベーションから話すと、ちょっと頭で考えてみてほしいとか見れば一瞬で思うとんですけどバナナの色は何ですかって言われたときと、今日の講義聞いた上で、**ゲームソフトの問題は何だと思いますか**って聞かれたとき、多分あの考えることが違うと思うんですね。**羽の色なんですか**っていうと一瞬黄色ですねもしかしたら緑かもしれないけどぐらいですかね物によるかなみたいなおもちゃだったら違うかもみたいな、だんだんあの、考えていくといろいろ出てくるかもしれないすけど、少なくとも**スケール足の問題なんだと思いますか**って聞かれたときに、今日の話からするとスケール則っていうのはこういうものだからどうだろうこの辺が問題かなみたいな考えとやっぱ思考としては違うってことは何となく思うかなと思います。なんか人間的にはこの二つって全然違うしあの、答えるのに必要な考え方っていうのも違うように思えるわけです。**スケールって言ってる7Gのスケール**って言ってるのはこういった形で、あの簡単なものについては簡単に答えてもいいですし、そうじゃなくて、あの考えなきゃいけない問題に対しては、考える時間を、に計算式を使うというふうにしたときに、これいいことがあるのかっていうような話になってます。二つで、ちょっと順番が前後しますけどこれの仕組みは言語モデルでも効果的ですかっていう話と、これをどう実現できるかっていう、こういう二つの話が最近のトレンドとして出てきています。効果的ですかっていうのが、最近**大湾**と呼ばれる論文が論文じゃないか、モデルが**オペル**から出ましたプレビューとして出てますけどこの法案で注目されていますこれあの**論文にROMってかブログ**にあるとイエスって右側が訓練時の計算資源をスケールさせたときに、初めて何かロジックのベンチマークがあるんですけどこれをがどうなったかで何となくスケールしてると右側がテストTimeコンピュートっていうふうに書いてると思うんすけど、**水温時**に計算資源を増やしたときあるモデルを使うんだけど、簡単に答える方法と深く考えて答える方法みたいでだんだんコース計算式を増やしていったときに、性能がどう変わるかっていうのでこれもスケールしていってるということがわかると思います。こういった形で、要は考える時間をどうやら推論時に使うと計算資源を推論使うのはいいことがありそうだということがわかります。\n", + "\n", + "\n", + "<修正後>\n", + "---\n", + "\n", + "\n", + "講義に戻ります。ちょっと演習の時間もあるのであと20分ぐらいで駆け足になりますけど、最後最近のスケールトレンドってことで**「推論時のスケーリング」**についての話をして終わろうと思います。モチベーションから話すと、ちょっと頭で考えてみてもらえれば一瞬でわかると思うとんですけど、「バナナの色は何ですかって言われたとき」と、今日の講義聞いた上で、**「スケール則の問題は何だと思いますか」**って聞かれたとき、多分あの考えることが違うと思うんですね。\n", + "**「バナナの色なんですか」**っていうと黄色ですね。もしかしたら緑かもしれないけど、物によるかなみたいな、おもちゃだったら違うかもみたいな、だんだんあの、考えていくといろいろ出てくるかもしれないすけど、少なくとも**「スケール則の問題なんだと思いますか」**って聞かれたときに、今日の話からするとスケール則っていうのはこういうものだから「どうだろう」「この辺が問題かな」みたいな考えとはやっぱ思考としては違うってことは何となく思うかなと思います。\n", + "なんか人間的にはこの二つって全然違うしあの、答えるのに必要な考え方っていうのも違うように思えるわけです。**推論時のスケールって言ってるのは**こういった形で、あの簡単なものについては簡単に答えてもいいですし、そうじゃなくて、深く考えなきゃいけない問題に対しては、考える時間に計算資源を使うというふうにしたときに、これいいことがあるのかっていうような話になってます。\n", + "これの仕組みは言語モデルでも効果的ですかっていう話と、これをどう実現できるかっていう、こういう二つの話が最近のトレンドとして出てきています。効果的ですかっていうのが、最近**o1**と呼ばれるモデルが**OpenAI**から出ました。プレビューとして出てますけどこのo1で注目されています。これあのo1の**論文ってかブログ**にある図で、左側が訓練時の計算資源をスケールさせたときに、AIMEというロジックのベンチマークがあるんですけど、accuracyがどうなったかというと、何となくスケールしてる。右側がtest-time computeっていうふうに書いてると思うんすけど、**推論時**に計算資源を増やしたときあるモデルを使うんだけど、簡単に答える方法と深く考えて答える方法みたいでだんだん計算資源を増やしていったときに、性能がどう変わるかっていうので、これもスケールしていってるということがわかると思います。\n", + "こういった形で、要は考える時間をどうやら推論時に使うと、つまり計算資源を推論時に使うのはいいことがありそうだということがわかります。\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qCrp81WzyhYc" + }, + "source": [ + "---\n", + "### 文字起こしの誤り\n", + "\n", + "上記の比較からわかるように、音声認識による書き起こしには重大な誤りが多数含まれています:\n", + "* 「スケール則の問題」→「ゲームソフトの問題」\n", + "* 「o1」→「大湾」\n", + "といった明らかに文脈に合わない単語変換が発生しています。\n", + "\n", + "`LLM2024_day4_raw.txt`の中には、このような誤変換が多数見られます。これらの誤りはRAG性能に直接影響し、モデルの回答精度を低下させる要因となります。\n", + "\n", + "したがって、**ドキュメント品質の改善**を行い、RAG性能の向上を図ります。\n", + "\n", + "## 講義内容をソースとして活用:改善版RAG実装\n", + "\n", + "* **ドキュメント処理**: \n", + " - speech2textによる書き起こしテキストを人手で丁寧に修正\n", + " - 専門用語(Inference Time Scaling、GPT-o1など)の正確な表記を確保\n", + " - 文脈の流れを維持しつつ、文法的に正確な日本語に修正\n", + "\n", + "* **検索手法**: \n", + " - 引き続き「。」(句点)で区切られた文単位でテキストを分割\n", + " - 文単位の検索により、モデルの入力トークン制限内で関連情報を最大化\n", + "\n", + "この改善により、モデルが正確な情報に基づいて「Inference Time Scaling」の概念を理解し、適切な回答を生成することが期待されます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "WNjIC4RnzkNW" + }, + "outputs": [], + "source": [ + "with open(\"/content/lecture-ai-engineering/day3/data/LLM2024_day4.txt\", \"r\") as f:\n", + " raw_writedown = f.read()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f53OojeTzkNW" + }, + "outputs": [], + "source": [ + "# ドキュメントを用意する。\n", + "documents = [text.strip() for text in raw_writedown.split(\"。\")]\n", + "print(\"ドキュメントサイズ: \", len(documents))\n", + "print(\"ドキュメントの例: \\n\", documents[310])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mlduigQ3OfoN" + }, + "outputs": [], + "source": [ + "# Retrievalの実行\n", + "question = \"LLMにおけるInference Time Scalingとは?\"\n", + "\n", + "query_embeddings = emb_model.encode([question], prompt_name=\"query\")\n", + "document_embeddings = emb_model.encode(documents)\n", + "\n", + "# 各ドキュメントの類似度スコア\n", + "scores = (query_embeddings @ document_embeddings.T) * 100\n", + "print(scores.tolist())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FNsGUsnlOoMm" + }, + "outputs": [], + "source": [ + "topk = 5\n", + "for i, index in enumerate(scores.argsort()[0][::-1][:topk]):\n", + " print(f\"取得したドキュメント{i+1}: (Score: {scores[0][index]})\")\n", + " print(documents[index], \"\\n\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MoOCvFW4ltcA" + }, + "outputs": [], + "source": [ + " #回答に役立つ該当の発言はreference[1871]〜に含まれてます。\n", + "references = \"\\n\".join([\"* \" + documents[i] for i in scores.argsort()[0][::-1][:topk]])\n", + "messages = [\n", + " {\"role\": \"system\", \"content\": \"質問に回答してください。必ず「日本語で回答」すること。また、与えられる資料を参考にして回答すること。\"},\n", + " {\"role\": \"user\", \"content\": f\"[参考資料]\\n{references}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " # max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2FbzMLfTtWxx" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vLe0IJPeH97d" + }, + "source": [ + "## 結果 (修正テキストによるRAG)\n", + "\n", + "書き起こしテキストの品質改善により、モデルの回答に部分的な向上が見られました:\n", + "\n", + "### 改善点\n", + "* 「推論時(Inference)に計算資源をスケーリングすることで、モデルがより賢くなり、性能が向上すること」という概念を正確に捉えるようになった\n", + "\n", + "### 問題点\n", + "* 「Inference Time Scalingは、TransformerやLSTMなどのモデルにおいて、パラメータ数を増やすのではなく、推論時計算資源をスケーリングすることで、性能が向上すること...」という記述は講義内容と矛盾している\n", + "\n", + "### 問題分析\n", + "\n", + "モデルが誤った回答を生成する主要因として、**文脈の欠如**が考えられます:\n", + "* 「。」で区切られた短い文単位での検索では、各文の発言背景や関連性が失われる\n", + "* 単独の文から情報を抽出するため、講師の全体的な主張や議論の流れを把握できない\n", + "* 結果として、正しい個別の文でも、その解釈に必要な背景情報が欠如し、誤った文脈で理解される\n", + "\n", + "\n", + "---\n", + "\n", + "# 3. 文脈を考慮したチャンク化の導入\n", + "\n", + "検索結果の品質向上のため、以下の改善を実施します:\n", + "\n", + "* **前後文脈を含むチャンク化**:\n", + " - 検索でマッチした文だけでなく、その前後の複数文も含めてチャンクとして取得\n", + " - 具体的には、マッチした文を中心に前2文、後2文を含む計5文程度のチャンクを構成\n", + " - この「文脈ウィンドウ」により、発言の背景情報や議論の流れが保持される\n", + "\n", + "* **期待される効果**:\n", + " - 講師の主張とその根拠の関係性を正確に把握できる\n", + " - 概念の定義とその適用範囲を正しく理解できる\n", + "\n", + "この改善により、モデルが講義内容の本質をより正確に理解し、一貫性のある事実に基づいた回答を生成することが期待されます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "94uovDFrVOTJ" + }, + "outputs": [], + "source": [ + "# 前後それぞれ2つずつの文章を一つのドキュメントに追加する。(要は5つの文章集合になる)\n", + "references = \"\\n\".join([\"* \" + \"。\".join(documents[max(0, i-2): min(i+2, len(documents))]).strip() for i in scores.argsort()[0][::-1][:topk]])\n", + "messages = [\n", + " {\"role\": \"system\", \"content\": \"質問に回答してください。必ず「日本語で回答」すること。また、与えられる資料を参考にして回答すること。\"},\n", + " {\"role\": \"user\", \"content\": f\"[参考資料]\\n{references}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " # max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SAzYsxVWVdMS" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CD3R54G1WX8B" + }, + "source": [ + "## 結果 (文脈付きチャンク化によるRAG)\n", + "\n", + "文脈を含むチャンク化により、モデルの回答の方向性に明確な改善が見られました:\n", + "\n", + "### 改善点\n", + "* 「推論時の計算をスケールさせる」という概念を据えて回答\n", + "* Inference Time Scalingの基本原理についての理解が向上\n", + "\n", + "### 残存する問題点\n", + "* 質問と関連性の低い情報(ノイズ)が混入する\n", + "\n", + "### 問題分析\n", + "\n", + "文脈付きチャンク化によるアプローチで新たに発生した課題:\n", + "\n", + "1. **情報過多の問題**:\n", + " * ドキュメント量の増加により、モデルに提供される情報総量が大幅に増加\n", + " * 関連情報と非関連情報が混在し、ノイズと重要情報の区別が困難に\n", + "\n", + "2. **情報選択の複雑化**:\n", + " * モデルは単に回答を生成するだけでなく、提供された多様な情報源から関連性の高い情報を選別する作業も担うことになった\n", + " * この二重タスクにより回答生成の難易度が上昇\n", + "\n", + "\n", + "---\n", + "\n", + "# 4. Rerankによる情報品質の向上\n", + "\n", + "検索精度をさらに向上させるため、二段階の検索プロセスを導入します:\n", + "\n", + "* **Rerank手法の導入**:\n", + " - 第一段階: 従来通り基本的な検索アルゴリズムでtop-k個のドキュメントチャンクを取得\n", + " - 第二段階: 取得したチャンクに対してLLMを活用した高度な関連性評価を実施\n", + " - LLMに「このドキュメントは質問『LLMにおけるInference Time Scalingとは?』に対して本当に関連性が高いか」を判断させる\n", + " - 関連性スコアに基づいてランク付けし、真に関連性の高いチャンクのみを選出\n", + "\n", + "* **期待される効果**:\n", + " - 質の高い情報に焦点を絞ることで、ノイズとなる情報を大幅に削減\n", + " - 文脈を保ちながらも、関連性の高い情報のみをモデルに提供\n", + " - モデルのタスクを「多量の情報から選別して回答」から「厳選された情報に基づいて回答」へと単純化\n", + "\n", + "この高度な情報フィルタリングにより、Inference Time Scalingに関する正確で一貫性のある回答生成が期待されます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2HfzJ5EpXGtj" + }, + "outputs": [], + "source": [ + " #回答に役立つ該当の発言はreference[1871]〜に含まれてます。\n", + "references = []\n", + "for ref in [\"。\".join(documents[max(0, i-2): min(i+2, len(documents))]).strip() for i in scores.argsort()[0][::-1][:topk]]:\n", + " messages = [\n", + " {\"role\": \"system\", \"content\": \"与えられた参考資料が質問に直接関連しているか?'yes''no'で答えること。ただし、余計なテキストを生成しないこと。\"},\n", + " {\"role\": \"user\", \"content\": f\"[参考資料]\\n{ref}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + " ]\n", + " input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + " ).to(model.device)\n", + "\n", + " terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + " ]\n", + "\n", + " outputs = model.generate(\n", + " input_ids,\n", + " # max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + " )\n", + "\n", + " response = outputs[0][input_ids.shape[-1]:]\n", + " response = tokenizer.decode(response, skip_special_tokens=True)\n", + " print(\"\\n\\n対象となるドキュメント:\\n\", ref.replace(\"。\", \"。\\n\"))\n", + " print(\"\\n関連しているかどうか: \", response)\n", + "\n", + " if \"yes\" in response.lower():\n", + " references.append(ref)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cLietDaD5I3h" + }, + "outputs": [], + "source": [ + "print(len(references))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Fs74h4ADXj99" + }, + "source": [ + "上記より、上位3件のみが関連しているとわかったので、これらだけをモデルに渡すこととする。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Fu9wBykZXxja" + }, + "outputs": [], + "source": [ + " #回答に役立つ該当の発言はreference[1871]〜に含まれてます。\n", + "messages = [\n", + " {\"role\": \"system\", \"content\": \"質問に回答してください。必ず「日本語で回答」すること。また、与えられる資料を参考にして回答すること。\"},\n", + " {\"role\": \"user\", \"content\": f\"[参考資料]\\n{references}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " # max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "z5kHntvSXxjb" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "elqD2gJt5RCo" + }, + "source": [ + "## 結果 (Rerank導入後)\n", + "\n", + "Rerankの導入により、回答品質に改善が見られました:\n", + "\n", + "### 達成された成果\n", + "* Inference Time Scalingに関する正確な情報を含んだ回答の生成\n", + "* 無関係な情報やノイズの排除\n", + "* 講義内容を反映した説明の実現 🎉\n", + "\n", + "この結果から、RAGパイプラインにおける情報の質と関連性の重要性であり、検索で取得した情報を単に増やすだけでなく、その情報の関連性を精査する方法を学ぶことができました。\n", + "\n", + "---\n", + "\n", + "\n", + "# 5. さらなる改善案: 意味的チャンク化\n", + "\n", + "文単位での分割と前後文脈の追加という現在のアプローチをさらに発展させる手法として、**意味的なチャンク化**が考えられます:\n", + "\n", + "* **意味的チャンク(段落)単位での分割**:\n", + " - 単純な文の区切りではなく、意味的なまとまり(トピック、議論、例示など)に基づいてテキストを分割\n", + " - 人間の主観に基づく意味的な段落分けを活用\n", + " - 各チャンクが「一つの完結した考え」を表現するようにする\n", + "\n", + "* **期待される効果**:\n", + " - より自然な文脈理解が可能に(人間の思考や会話の流れに近い)\n", + " - トピックの開始から結論までの流れを維持できる\n", + " - 概念間の関係性や比較が同一チャンク内に含まれ、より深い理解につなげる\n", + "\n", + "* **検証方法**:\n", + " - 人間が主観的に意味でグループ化したチャンクセットを用意\n", + " - 同じRerank手法を適用し、文単位チャンクとの性能差を比較\n", + " - 回答の正確性、一貫性、網羅性を評価指標として使用\n", + "\n", + "この意味的チャンク化手法は、特に講義のような構造化された発話においては、より自然で効果的な情報検索と理解を可能にすると予想されます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4DNOyPNXAtl3" + }, + "outputs": [], + "source": [ + "# 本来は段落をそのままdocumentsに入れずに一定のサイズに分割した方が良いでしょうが、簡単のために段落をそのまま入れてしまいます。\n", + "documents = [text.replace(\"\\n\", \" \").strip() for text in raw_writedown.split(\"\\n\\n\")]\n", + "print(\"ドキュメントサイズ: \", len(documents))\n", + "print(\"ドキュメントの例: \\n\", documents[30])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FF6wc10RAxuc" + }, + "outputs": [], + "source": [ + "question = \"LLMにおけるInference Time Scalingとは?\"\n", + "\n", + "query_embeddings = emb_model.encode([question], prompt_name=\"query\")\n", + "document_embeddings = emb_model.encode(documents)\n", + "\n", + "scores = (query_embeddings @ document_embeddings.T) * 100\n", + "print(scores.tolist())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "H-FKkAcTA-Sx" + }, + "outputs": [], + "source": [ + "# 簡単のためにtop2でやります。結果を見てもらえれば問題なく関連する項目のみ取得できているのが分かるかと思います。\n", + "topk = 2\n", + "for i, index in enumerate(scores.argsort()[0][::-1][:topk]):\n", + " print(f\"取得したドキュメント{i+1}: (Score: {scores[0][index]})\")\n", + " print(documents[index], \"\\n\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KtC-wsj4BGwn" + }, + "outputs": [], + "source": [ + "reference = \"\\n\".join([\"* \" + documents[i] for i in scores.argsort()[0][::-1][:topk]])\n", + "\n", + "messages = [\n", + " {\"role\": \"system\", \"content\": \"質問に回答してください。必ず「日本語で回答」すること。また、与えられる資料を参考にして回答すること。\"},\n", + " {\"role\": \"user\", \"content\": f\"[参考資料]\\n{reference}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " # max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c27VI95SCzV5" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "L4", + "machine_shape": "hm", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/day3/ai_engineering_03_T4.ipynb b/day3/ai_engineering_03_T4.ipynb new file mode 100644 index 000000000..0cd9ce0ec --- /dev/null +++ b/day3/ai_engineering_03_T4.ipynb @@ -0,0 +1,985 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "D_6-jdBOXowG" + }, + "source": [ + "**注意事項**\n", + "\n", + "このノートブックは、GPU:「T4」に対応させたものです。\n", + "「L4」版のノートブックとはモデル等が異なるため、生成される内容が異なることが考えられます。\n", + "\n", + "生成される内容と、ノートブックに記載されている説明が一致しない場合があることをご了承ください。\n", + "\n", + "生成内容とノートブックの説明をよく見比べ、適宜読み替えながら演習を進めてみてください。\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 演習の方針\n", + "\n", + "1. **ベースラインモデル評価** \n", + " 素のモデルで回答を生成し、講義内容との整合性の低さを観察します。これにより、特別な学習なしでのモデルの限界を確認します。\n", + "\n", + "2. **文字起こしデータの活用** \n", + " 講義の文字起こしデータを導入し、モデルが講義内容を参照した回答を生成する傾向を観察します。ただし、Retrieval(情報検索)精度の限界から結果は不安定になる可能性があります。\n", + "\n", + "3. **チャンク化の導入** \n", + " 文字起こしデータをチャンク(小単位)に分割し、より安定して関連コンテンツを取得できるようにします。この段階では文脈理解にまだ課題があることを確認します。\n", + "\n", + "4. **Rerankの適用** \n", + " 検索結果のランク付けを導入し、より的確で安定した回答を目指します。\n", + "\n", + "5. **応用改善手法** \n", + " 文字起こしの品質向上のための編集技術や、メタデータの活用による性能向上手法を探ります。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PPI1pj4mFavt" + }, + "source": [ + "## 扱う質問\n", + "\n", + "「Inference Time Scaling(推論時スケーリング)」に関する質問を取り扱います。これは以下の背景を持つトピックです。\n", + "\n", + "- 2024年8月発表の論文「Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters」で提唱された概念\n", + "- OpenAIのGPT-o1(2024年9月リリース)で実用化され、注目を集めた比較的新しいアプローチ\n", + "- 2024年度LLM講座の第4回講義でも取り上げられた重要テーマ\n", + "\n", + "## 扱うモデル\n", + "\n", + "「google/gemma-2-2b-jpn-it」を使用します。このモデルは、リリース時期の関係上、以下の特徴を持ちます。\n", + "\n", + "- 「Inference Time Scaling」の概念が広まる前に訓練されており、このトピックに関する知識を持たないと想定される\n", + "- この特性を活かし、純粋なベースライン評価から各手法の効果を観察する" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 演習環境の準備" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vM50WAI7GXwC" + }, + "outputs": [], + "source": [ + "!pip install --upgrade transformers\n", + "!pip install google-colab-selenium\n", + "!pip install bitsandbytes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "V2PStE0uqM03" + }, + "outputs": [], + "source": [ + "# 演習用のコンテンツを取得\n", + "!git clone https://github.com/matsuolab/lecture-ai-engineering.git" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zXo_kFASXlvp" + }, + "outputs": [], + "source": [ + "# HuggingFace Login\n", + "from huggingface_hub import notebook_login\n", + "\n", + "notebook_login()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dZ_NUIftXwLc" + }, + "outputs": [], + "source": [ + "# CUDAが利用可能ならGPUを、それ以外ならCPUをデバイスとして設定\n", + "import torch\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7eTgV8XBPA90" + }, + "outputs": [], + "source": [ + "import random\n", + "random.seed(0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6tV9mO8oXoaM" + }, + "outputs": [], + "source": [ + "# モデル(Gemma2)の読み込み\n", + "\n", + "from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig\n", + "\n", + "model_name = \"google/gemma-2-2b-jpn-it\"\n", + "tokenizer = AutoTokenizer.from_pretrained(model_name)\n", + "\n", + "bnb_config = BitsAndBytesConfig(\n", + " load_in_4bit=True,\n", + " bnb_4bit_compute_dtype=torch.float16,\n", + " bnb_4bit_quant_type=\"nf4\",\n", + " bnb_4bit_use_double_quant=False,\n", + ")\n", + "\n", + "model = AutoModelForCausalLM.from_pretrained(\n", + " model_name,\n", + " device_map=\"auto\",\n", + " quantization_config=bnb_config,\n", + " torch_dtype=torch.bfloat16,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "piTdVxTfGcc_" + }, + "source": [ + "# 1. ベースラインモデル評価\n", + "**まずはベースモデルがどの程度知識を持っているか確かめる**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NBUZ3o6dhMlC" + }, + "outputs": [], + "source": [ + "messages = [\n", + " {\"role\": \"user\", \"content\": \"LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4ZXyEnZ3lrBd" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZSCNnRf9pJif" + }, + "source": [ + "## 結果 (ベースモデル)\n", + "\n", + "「google/gemma-2-2b-jpn-it」は「Inference Time Scaling」について誤った知識を提示しました:\n", + "* モデルは従来の「推論時間の短縮」という文脈でInference Time Scalingを解釈しており、これはLLM分野における最新の「Inference Time Scaling」概念(推論時計算資源の最適配分)とは異なる説明になります。\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "k4R-hiKNGyJd" + }, + "source": [ + "# 2. 文字起こしデータの活用\n", + "## 講義内容をソースとして活用 (RAG導入)\n", + "\n", + "モデルの回答の事実性を向上させるためにRetrieval Augmented Generation (RAG)技術を導入します:\n", + "\n", + "* **知識ソース**: LLM講座第4講における講師の発言内容\n", + "* **目的**: モデルに「Inference Time Scaling」に関する正確な知識と文脈を提供し、事実に基づいた回答を促す\n", + "\n", + "**初期RAG実装(ベーシックアプローチ)**:\n", + "* **ドキュメント処理**: 音声認識モデル(speech2text)で書き起こした生テキストをそのまま使用\n", + "* **分割方法**: 「。」(句点)で区切られた文単位でテキストを分割\n", + "* **検索手法**: シンプルな類似度ベースの検索でクエリに関連する文を抽出\n", + "* **制約条件**: モデルの入力トークン制限に収まるよう関連文のみを選択" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "47GvcceyObAl" + }, + "outputs": [], + "source": [ + "from sentence_transformers import SentenceTransformer\n", + "\n", + "emb_model = SentenceTransformer(\"infly/inf-retriever-v1-1.5b\", trust_remote_code=True)\n", + "# In case you want to reduce the maximum length:\n", + "emb_model.max_seq_length = 4096" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kPwggQfUS5yl" + }, + "outputs": [], + "source": [ + "with open(\"/content/lecture-ai-engineering/day3/data/LLM2024_day4_raw.txt\", \"r\") as f:\n", + " raw_writedown = f.read()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kxzKF6L2THIw" + }, + "outputs": [], + "source": [ + "# ドキュメントを用意する。\n", + "documents = [text.strip() for text in raw_writedown.split(\"。\")]\n", + "print(\"ドキュメントサイズ: \", len(documents))\n", + "print(\"ドキュメントの例: \\n\", documents[250])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nK4cYURzTHIx" + }, + "outputs": [], + "source": [ + "# Retrievalの実行\n", + "question = \"LLMにおけるInference Time Scalingとは?\"\n", + "\n", + "query_embeddings = emb_model.encode([question], prompt_name=\"query\")\n", + "document_embeddings = emb_model.encode(documents)\n", + "\n", + "# 各ドキュメントの類似度スコア\n", + "scores = (query_embeddings @ document_embeddings.T) * 100\n", + "print(scores.tolist())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b_v8gx_tTHIx" + }, + "outputs": [], + "source": [ + "topk = 5\n", + "for i, index in enumerate(scores.argsort()[0][::-1][:topk]):\n", + " print(f\"取得したドキュメント{i+1}: (Score: {scores[0][index]})\")\n", + " print(documents[index], \"\\n\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Ow0wZy6ETHIx" + }, + "outputs": [], + "source": [ + " #回答に役立つ該当の発言はreference[1871]〜に含まれてます。\n", + "references = \"\\n\".join([\"* \" + documents[i] for i in scores.argsort()[0][::-1][:topk]])\n", + "messages = [\n", + " {\"role\": \"user\", \"content\": f\"[参考資料]\\n{references}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "z_4dkHGKTPr-" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Bn7tih0RTTzr" + }, + "source": [ + "## 結果 (初期RAG実装)\n", + "\n", + "講義内容のドキュメントを追加したにもかかわらず、モデルの回答には依然として以下の問題が見られます:\n", + "* 「高速に推論する」など、従来の一般的な推論最適化と「Inference Time Scaling」を混同した誤った解釈が継続\n", + "* 講義内容を参照しているものの、概念の本質を正確に捉えられていない\n", + "\n", + "### 問題分析\n", + "以下の要因が考えられます:\n", + "1. **ドキュメント品質の問題**: 音声認識による文字起こしの精度不足\n", + "2. **検索精度の課題**: 単純な文単位の分割では文脈が失われ、関連性の高いドキュメント片を適切に取得できていない可能性\n", + "\n", + "### 書き起こしテキストの品質改善\n", + "\n", + "日本語の音声認識(speech2text)モデルは精度に課題があることが知られています。以下に「LLMにおけるInference Time Scalingとは?」に関連する講義内容の書き起こしテキストを比較します:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "q83QyfAIphk6" + }, + "source": [ + "### 講義中の該当発言 (LLM講座Day4後半から抜粋)\n", + "\n", + "\n", + "<修正前>\n", + "---\n", + "\n", + "講義に戻ります。ちょっと練習の時間もあるのであと20分ぐらいで駆け足になりますけど、最後最近のスケールトレンドって話で**生のGENIACLM**の話をして終わろうと思いですねちょっとモチベーションから話すと、ちょっと頭で考えてみてほしいとか見れば一瞬で思うとんですけどバナナの色は何ですかって言われたときと、今日の講義聞いた上で、**ゲームソフトの問題は何だと思いますか**って聞かれたとき、多分あの考えることが違うと思うんですね。**羽の色なんですか**っていうと一瞬黄色ですねもしかしたら緑かもしれないけどぐらいですかね物によるかなみたいなおもちゃだったら違うかもみたいな、だんだんあの、考えていくといろいろ出てくるかもしれないすけど、少なくとも**スケール足の問題なんだと思いますか**って聞かれたときに、今日の話からするとスケール則っていうのはこういうものだからどうだろうこの辺が問題かなみたいな考えとやっぱ思考としては違うってことは何となく思うかなと思います。なんか人間的にはこの二つって全然違うしあの、答えるのに必要な考え方っていうのも違うように思えるわけです。**スケールって言ってる7Gのスケール**って言ってるのはこういった形で、あの簡単なものについては簡単に答えてもいいですし、そうじゃなくて、あの考えなきゃいけない問題に対しては、考える時間を、に計算式を使うというふうにしたときに、これいいことがあるのかっていうような話になってます。二つで、ちょっと順番が前後しますけどこれの仕組みは言語モデルでも効果的ですかっていう話と、これをどう実現できるかっていう、こういう二つの話が最近のトレンドとして出てきています。効果的ですかっていうのが、最近**大湾**と呼ばれる論文が論文じゃないか、モデルが**オペル**から出ましたプレビューとして出てますけどこの法案で注目されていますこれあの**論文にROMってかブログ**にあるとイエスって右側が訓練時の計算資源をスケールさせたときに、初めて何かロジックのベンチマークがあるんですけどこれをがどうなったかで何となくスケールしてると右側がテストTimeコンピュートっていうふうに書いてると思うんすけど、**水温時**に計算資源を増やしたときあるモデルを使うんだけど、簡単に答える方法と深く考えて答える方法みたいでだんだんコース計算式を増やしていったときに、性能がどう変わるかっていうのでこれもスケールしていってるということがわかると思います。こういった形で、要は考える時間をどうやら推論時に使うと計算資源を推論使うのはいいことがありそうだということがわかります。\n", + "\n", + "\n", + "<修正後>\n", + "---\n", + "\n", + "\n", + "講義に戻ります。ちょっと演習の時間もあるのであと20分ぐらいで駆け足になりますけど、最後最近のスケールトレンドってことで**「推論時のスケーリング」**についての話をして終わろうと思います。モチベーションから話すと、ちょっと頭で考えてみてもらえれば一瞬でわかると思うとんですけど、「バナナの色は何ですかって言われたとき」と、今日の講義聞いた上で、**「スケール則の問題は何だと思いますか」**って聞かれたとき、多分あの考えることが違うと思うんですね。\n", + "**「バナナの色なんですか」**っていうと黄色ですね。もしかしたら緑かもしれないけど、物によるかなみたいな、おもちゃだったら違うかもみたいな、だんだんあの、考えていくといろいろ出てくるかもしれないすけど、少なくとも**「スケール則の問題なんだと思いますか」**って聞かれたときに、今日の話からするとスケール則っていうのはこういうものだから「どうだろう」「この辺が問題かな」みたいな考えとはやっぱ思考としては違うってことは何となく思うかなと思います。\n", + "なんか人間的にはこの二つって全然違うしあの、答えるのに必要な考え方っていうのも違うように思えるわけです。**推論時のスケールって言ってるのは**こういった形で、あの簡単なものについては簡単に答えてもいいですし、そうじゃなくて、深く考えなきゃいけない問題に対しては、考える時間に計算資源を使うというふうにしたときに、これいいことがあるのかっていうような話になってます。\n", + "これの仕組みは言語モデルでも効果的ですかっていう話と、これをどう実現できるかっていう、こういう二つの話が最近のトレンドとして出てきています。効果的ですかっていうのが、最近**o1**と呼ばれるモデルが**OpenAI**から出ました。プレビューとして出てますけどこのo1で注目されています。これあのo1の**論文ってかブログ**にある図で、左側が訓練時の計算資源をスケールさせたときに、AIMEというロジックのベンチマークがあるんですけど、accuracyがどうなったかというと、何となくスケールしてる。右側がtest-time computeっていうふうに書いてると思うんすけど、**推論時**に計算資源を増やしたときあるモデルを使うんだけど、簡単に答える方法と深く考えて答える方法みたいでだんだん計算資源を増やしていったときに、性能がどう変わるかっていうので、これもスケールしていってるということがわかると思います。\n", + "こういった形で、要は考える時間をどうやら推論時に使うと、つまり計算資源を推論時に使うのはいいことがありそうだということがわかります。\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qCrp81WzyhYc" + }, + "source": [ + "---\n", + "### 文字起こしの誤り\n", + "\n", + "上記の比較からわかるように、音声認識による書き起こしには重大な誤りが多数含まれています:\n", + "* 「スケール則の問題」→「ゲームソフトの問題」\n", + "* 「o1」→「大湾」\n", + "といった明らかに文脈に合わない単語変換が発生しています。\n", + "\n", + "`LLM2024_day4_raw.txt`の中には、このような誤変換が多数見られます。これらの誤りはRAG性能に直接影響し、モデルの回答精度を低下させる要因となります。\n", + "\n", + "したがって、**ドキュメント品質の改善**を行い、RAG性能の向上を図ります。\n", + "\n", + "## 講義内容をソースとして活用:改善版RAG実装\n", + "\n", + "* **ドキュメント処理**: \n", + " - speech2textによる書き起こしテキストを人手で丁寧に修正\n", + " - 専門用語(Inference Time Scaling、GPT-o1など)の正確な表記を確保\n", + " - 文脈の流れを維持しつつ、文法的に正確な日本語に修正\n", + "\n", + "* **検索手法**: \n", + " - 引き続き「。」(句点)で区切られた文単位でテキストを分割\n", + " - 文単位の検索により、モデルの入力トークン制限内で関連情報を最大化\n", + "\n", + "この改善により、モデルが正確な情報に基づいて「Inference Time Scaling」の概念を理解し、適切な回答を生成することが期待されます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "WNjIC4RnzkNW" + }, + "outputs": [], + "source": [ + "with open(\"/content/lecture-ai-engineering/day3/data/LLM2024_day4.txt\", \"r\") as f:\n", + " raw_writedown = f.read()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "f53OojeTzkNW" + }, + "outputs": [], + "source": [ + "# ドキュメントを用意する。\n", + "documents = [text.strip() for text in raw_writedown.split(\"。\")]\n", + "print(\"ドキュメントサイズ: \", len(documents))\n", + "print(\"ドキュメントの例: \\n\", documents[310])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mlduigQ3OfoN" + }, + "outputs": [], + "source": [ + "# Retrievalの実行\n", + "question = \"LLMにおけるInference Time Scalingとは?\"\n", + "\n", + "query_embeddings = emb_model.encode([question], prompt_name=\"query\")\n", + "document_embeddings = emb_model.encode(documents)\n", + "\n", + "# 各ドキュメントの類似度スコア\n", + "scores = (query_embeddings @ document_embeddings.T) * 100\n", + "print(scores.tolist())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FNsGUsnlOoMm" + }, + "outputs": [], + "source": [ + "topk = 5\n", + "for i, index in enumerate(scores.argsort()[0][::-1][:topk]):\n", + " print(f\"取得したドキュメント{i+1}: (Score: {scores[0][index]})\")\n", + " print(documents[index], \"\\n\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MoOCvFW4ltcA" + }, + "outputs": [], + "source": [ + " #回答に役立つ該当の発言はreference[1871]〜に含まれてます。\n", + "references = \"\\n\".join([\"* \" + documents[i] for i in scores.argsort()[0][::-1][:topk]])\n", + "messages = [\n", + " {\"role\": \"user\", \"content\": f\"[参考資料]\\n{references}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2FbzMLfTtWxx" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vLe0IJPeH97d" + }, + "source": [ + "## 結果 (修正テキストによるRAG)\n", + "\n", + "書き起こしテキストの品質改善により、モデルの回答に部分的な向上が見られました:\n", + "\n", + "### 改善点\n", + "* 「推論時(Inference)に計算資源をスケーリングすることで、モデルがより賢くなり、性能が向上すること」という概念を正確に捉えるようになった\n", + "\n", + "### 問題点\n", + "* 「Inference Time Scalingは、TransformerやLSTMなどのモデルにおいて、パラメータ数を増やすのではなく、推論時計算資源をスケーリングすることで、性能が向上すること...」という記述は講義内容と矛盾している\n", + "\n", + "### 問題分析\n", + "\n", + "モデルが誤った回答を生成する主要因として、**文脈の欠如**が考えられます:\n", + "* 「。」で区切られた短い文単位での検索では、各文の発言背景や関連性が失われる\n", + "* 単独の文から情報を抽出するため、講師の全体的な主張や議論の流れを把握できない\n", + "* 結果として、正しい個別の文でも、その解釈に必要な背景情報が欠如し、誤った文脈で理解される\n", + "\n", + "\n", + "---\n", + "\n", + "# 3. 文脈を考慮したチャンク化の導入\n", + "\n", + "検索結果の品質向上のため、以下の改善を実施します:\n", + "\n", + "* **前後文脈を含むチャンク化**:\n", + " - 検索でマッチした文だけでなく、その前後の複数文も含めてチャンクとして取得\n", + " - 具体的には、マッチした文を中心に前2文、後2文を含む計5文程度のチャンクを構成\n", + " - この「文脈ウィンドウ」により、発言の背景情報や議論の流れが保持される\n", + "\n", + "* **期待される効果**:\n", + " - 講師の主張とその根拠の関係性を正確に把握できる\n", + " - 概念の定義とその適用範囲を正しく理解できる\n", + "\n", + "この改善により、モデルが講義内容の本質をより正確に理解し、一貫性のある事実に基づいた回答を生成することが期待されます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "94uovDFrVOTJ" + }, + "outputs": [], + "source": [ + "# 前後それぞれ2つずつの文章を一つのドキュメントに追加する。(要は5つの文章集合になる)\n", + "references = \"\\n\".join([\"* \" + \"。\".join(documents[max(0, i-2): min(i+2, len(documents))]).strip() for i in scores.argsort()[0][::-1][:topk]])\n", + "messages = [\n", + " {\"role\": \"user\", \"content\": f\"[参考資料]\\n{references}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SAzYsxVWVdMS" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CD3R54G1WX8B" + }, + "source": [ + "## 結果 (文脈付きチャンク化によるRAG)\n", + "\n", + "文脈を含むチャンク化により、モデルの回答の方向性に明確な改善が見られました:\n", + "\n", + "### 改善点\n", + "* 「推論時の計算をスケールさせる」という概念を据えて回答\n", + "* Inference Time Scalingの基本原理についての理解が向上\n", + "\n", + "### 残存する問題点\n", + "* 質問と関連性の低い情報(ノイズ)が混入する\n", + "\n", + "### 問題分析\n", + "\n", + "文脈付きチャンク化によるアプローチで新たに発生した課題:\n", + "\n", + "1. **情報過多の問題**:\n", + " * ドキュメント量の増加により、モデルに提供される情報総量が大幅に増加\n", + " * 関連情報と非関連情報が混在し、ノイズと重要情報の区別が困難に\n", + "\n", + "2. **情報選択の複雑化**:\n", + " * モデルは単に回答を生成するだけでなく、提供された多様な情報源から関連性の高い情報を選別する作業も担うことになった\n", + " * この二重タスクにより回答生成の難易度が上昇\n", + "\n", + "\n", + "---\n", + "\n", + "# 4. Rerankによる情報品質の向上\n", + "\n", + "検索精度をさらに向上させるため、二段階の検索プロセスを導入します:\n", + "\n", + "* **Rerank手法の導入**:\n", + " - 第一段階: 従来通り基本的な検索アルゴリズムでtop-k個のドキュメントチャンクを取得\n", + " - 第二段階: 取得したチャンクに対してLLMを活用した高度な関連性評価を実施\n", + " - LLMに「このドキュメントは質問『LLMにおけるInference Time Scalingとは?』に対して本当に関連性が高いか」を判断させる\n", + " - 関連性スコアに基づいてランク付けし、真に関連性の高いチャンクのみを選出\n", + "\n", + "* **期待される効果**:\n", + " - 質の高い情報に焦点を絞ることで、ノイズとなる情報を大幅に削減\n", + " - 文脈を保ちながらも、関連性の高い情報のみをモデルに提供\n", + " - モデルのタスクを「多量の情報から選別して回答」から「厳選された情報に基づいて回答」へと単純化\n", + "\n", + "この高度な情報フィルタリングにより、Inference Time Scalingに関する正確で一貫性のある回答生成が期待されます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2HfzJ5EpXGtj" + }, + "outputs": [], + "source": [ + " #回答に役立つ該当の発言はreference[1871]〜に含まれてます。\n", + "references = []\n", + "for ref in [\"。\".join(documents[max(0, i-2): min(i+2, len(documents))]).strip() for i in scores.argsort()[0][::-1][:topk]]:\n", + " messages = [\n", + " {\"role\": \"user\", \"content\": f\"与えられた[参考資料]が[質問]に直接関連しているかを、'yes''no'で答えること。[参考資料]\\n{ref}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + " ]\n", + " input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + " ).to(model.device)\n", + "\n", + " terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + " ]\n", + "\n", + " outputs = model.generate(\n", + " input_ids,\n", + " # max_new_tokens=128,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + " )\n", + "\n", + " response = outputs[0][input_ids.shape[-1]:]\n", + " response = tokenizer.decode(response, skip_special_tokens=True)\n", + " print(\"\\n\\n対象となるドキュメント:\\n\", ref.replace(\"。\", \"。\\n\"))\n", + " print(\"\\n関連しているかどうか: \", response)\n", + "\n", + " if \"yes\" in response.lower():\n", + " references.append(ref)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cLietDaD5I3h" + }, + "outputs": [], + "source": [ + "print(len(references))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Fs74h4ADXj99" + }, + "source": [ + "上記より、上位4件のみが関連しているとわかったので、これらだけをモデルに渡すこととする。(生成内容が確立的なので、4件でない可能性もあります)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Fu9wBykZXxja" + }, + "outputs": [], + "source": [ + " #回答に役立つ該当の発言はreference[1871]〜に含まれてます。\n", + "messages = [\n", + " {\"role\": \"user\", \"content\": f\"与えられる資料を参考にして回答すること。[参考資料]\\n{references}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "z5kHntvSXxjb" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "elqD2gJt5RCo" + }, + "source": [ + "## 結果 (Rerank導入後)\n", + "\n", + "Rerankの導入により、回答品質に改善が見られました:\n", + "\n", + "### 達成された成果\n", + "* Inference Time Scalingに関する正確な情報を含んだ回答の生成\n", + "* 無関係な情報やノイズの排除\n", + "* 講義内容を反映した説明の実現 🎉\n", + "\n", + "この結果から、RAGパイプラインにおける情報の質と関連性の重要性であり、検索で取得した情報を単に増やすだけでなく、その情報の関連性を精査する方法を学ぶことができました。\n", + "\n", + "---\n", + "\n", + "\n", + "# 5. さらなる改善案: 意味的チャンク化\n", + "\n", + "文単位での分割と前後文脈の追加という現在のアプローチをさらに発展させる手法として、**意味的なチャンク化**が考えられます:\n", + "\n", + "* **意味的チャンク(段落)単位での分割**:\n", + " - 単純な文の区切りではなく、意味的なまとまり(トピック、議論、例示など)に基づいてテキストを分割\n", + " - 人間の主観に基づく意味的な段落分けを活用\n", + " - 各チャンクが「一つの完結した考え」を表現するようにする\n", + "\n", + "* **期待される効果**:\n", + " - より自然な文脈理解が可能に(人間の思考や会話の流れに近い)\n", + " - トピックの開始から結論までの流れを維持できる\n", + " - 概念間の関係性や比較が同一チャンク内に含まれ、より深い理解につなげる\n", + "\n", + "* **検証方法**:\n", + " - 人間が主観的に意味でグループ化したチャンクセットを用意\n", + " - 同じRerank手法を適用し、文単位チャンクとの性能差を比較\n", + " - 回答の正確性、一貫性、網羅性を評価指標として使用\n", + "\n", + "この意味的チャンク化手法は、特に講義のような構造化された発話においては、より自然で効果的な情報検索と理解を可能にすると予想されます。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hU_ttvcNKayo" + }, + "source": [ + "**注意事項**\n", + "\n", + "**ここから先のセルを実行した場合、GPUメモリ不足になる可能性が高いです。**\n", + "\n", + "\n", + "このノートブックでは、GPUはT4を使用しています。\n", + "Colab Pro等を契約し、L4などのよりGPUメモリの大きいものを使用するか、モデルやその設定等を変更するなどの工夫が必要になります。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4DNOyPNXAtl3" + }, + "outputs": [], + "source": [ + "# 本来は段落をそのままdocumentsに入れずに一定のサイズに分割した方が良いでしょうが、簡単のために段落をそのまま入れてしまいます。\n", + "documents = [text.replace(\"\\n\", \" \").strip() for text in raw_writedown.split(\"\\n\\n\")]\n", + "print(\"ドキュメントサイズ: \", len(documents))\n", + "print(\"ドキュメントの例: \\n\", documents[30])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FF6wc10RAxuc" + }, + "outputs": [], + "source": [ + "question = \"LLMにおけるInference Time Scalingとは?\"\n", + "\n", + "query_embeddings = emb_model.encode([question], prompt_name=\"query\")\n", + "document_embeddings = emb_model.encode(documents)\n", + "\n", + "scores = (query_embeddings @ document_embeddings.T) * 100\n", + "print(scores.tolist())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "H-FKkAcTA-Sx" + }, + "outputs": [], + "source": [ + "# 簡単のためにtop2でやります。結果を見てもらえれば問題なく関連する項目のみ取得できているのが分かるかと思います。\n", + "topk = 2\n", + "for i, index in enumerate(scores.argsort()[0][::-1][:topk]):\n", + " print(f\"取得したドキュメント{i+1}: (Score: {scores[0][index]})\")\n", + " print(documents[index], \"\\n\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KtC-wsj4BGwn" + }, + "outputs": [], + "source": [ + "reference = \"\\n\".join([\"* \" + documents[i] for i in scores.argsort()[0][::-1][:topk]])\n", + "\n", + "messages = [\n", + " {\"role\": \"user\", \"content\": f\"[参考資料]\\n{reference}\\n\\n[質問] LLMにおけるInference Time Scalingとは?\"},\n", + "]\n", + "input_ids = tokenizer.apply_chat_template(\n", + " messages,\n", + " add_generation_prompt=True,\n", + " return_tensors=\"pt\"\n", + ").to(model.device)\n", + "\n", + "terminators = [\n", + " tokenizer.eos_token_id,\n", + " tokenizer.convert_tokens_to_ids(\"<|eot_id|>\")\n", + "]\n", + "\n", + "outputs = model.generate(\n", + " input_ids,\n", + " # max_new_tokens=256,\n", + " eos_token_id=terminators,\n", + " do_sample=False,\n", + " # temperature=0.6, # If do_sample=True\n", + " # top_p=0.9, # If do_sample=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c27VI95SCzV5" + }, + "outputs": [], + "source": [ + "response = outputs[0][input_ids.shape[-1]:]\n", + "print(tokenizer.decode(response, skip_special_tokens=True))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "OJVL3u6lCc8k" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/day3/data/LLM2024_day4.txt b/day3/data/LLM2024_day4.txt new file mode 100644 index 000000000..5295774ae --- /dev/null +++ b/day3/data/LLM2024_day4.txt @@ -0,0 +1,235 @@ +早速内容ですけど、目的はタイトルの通りですけど言語モデルスケール則について学ぶってことで、大規模言語モデルっていうふうに呼ばれてますけど、ちょっとスケール則の話とか初回も少ししましたけど、これだけ大きくなっている一つの理由になってますのでそのスケール則ってどういうものなのかとかそれがなぜ重要なのかっていうところ、説明できるようなってもらうというところと、スケール則ってどうやって求めるんでしたっけというところを説明実装できるようになるところについて中心的に話していければと思ってます。 +あのスケールするっていうところではタイトルの通りなんですけど、ちょっとこれスケーリングPretraining回ってなってるんですけれども、ちょっと最近はですね、このPretrainingだけではなくて、推論をスケールさせるというような話も出てきてましてせっかくなのでその最近の話題ということです推論時のスケーリングことで、ちょっとタイトル詐欺が入ってるんですけどPretrainingだけじゃない、スケーリングも扱うということで、ちょっと若干あのタイトル詐欺なんですけども、あの最近の話題ということで推論時のスケジュールについても話していきたいなと思っています。 +演習では2つ目のポイントに近いですけどスケール則を実際に求めるというところでそのコードを実装できるようになってもらうということを目的としています。では早速ですけど中身に入っていきたいと思います。ちなみ余談なんですけどこれ実はDay4が去年から結構変わってまして、去年Day4だったものをDay4とDay4とDay8に分けてるんですけども、分けたはずのDay4がなぜか90枚スライドがあるという状況でしてちょっと若干早口になって申し訳ないんすけど少し資料を補足としてやっていただきながら自学できるようにしてあると思いますんで、何かわかんないとこあったら資料読んでもらえると思います。 + + +目標の通りですけれども大きく四つの話をしたいと思ってます。最初がスケール則とは何かそもそもどういうものだったかっていうところをご説明したいと思ってます。何かっていうのを先に学んだ後に、なんでこれ学ばなきゃいけないのか、これ知ってると何のいいことがあるのっていう意味でスケール則どういうふうに使ってるのか、他にどういうふうに使われてるのかってとこについて、2個目でお話したいと思います。 +三つ目がそれをどうやってまとめるとか、演習に関係するところですね。最後に新しいトレンドっていうことでちょっと時間の関係で若干駆け足なるかもしれないけど、推論時のフィーリングっていう最近のo1とかも出てますけど、その辺で使われている技術について、正確には使われているとされている技術についてちょっとお話したいなと思っています。 + +まずスケール則とは何かっていうところですね。 +あの最初にも言った通りですけれど、スケールっていうのは、その大規模言語モデルを支える一つの大きな要素になってます。言語モデルっていうところがDay3でやりましたけれども、最近はTrasnformerになっていて、Transformerの中にもいろいろ種類があるということで発展的課題がまたコミュニティの方であるってありましたけども、基本的にはこの言語モデルを作る技術について言語ってどういうものですかっていうのをDay3でパターンだかなと思います。 +Day4ではこの大規模っていう側にフォーカスを当てまして、どうスケールさせるのかとか、なんでスケールさせることが有効なのかそれを支えるあのスケール則っていうものについてお話したいと思います。講義全体の位置づけも少しおさらいしておきますとます今日までが行った事前学習と呼ばれるような枠組みの話になります。 +また非常に大規模に学習データで訓練するっていうプロセスです。そっから次回以降はFine-Tuningってことで少しまた違う話をしますので一旦今日までがあの話の区切りだと思ってもらえればいいかなと思います。 + + +中身に入っていきます。こちらのこのスライド初回にもお見せした通りですけれども、大規模言語モデルと呼ばれるものが進展していますということですあのこのサーベイ論文紹介にも紹介した通りですけど2023年の間に13回ぐらい更新されるぐらいモデルがどんどん出てると、2024年だって今年になってもいろいろなモデルが出たり、なんか巷で試されて実はこれは良くないんじゃないかと言われたりいろいろしているというような状況になっています。 +それからこれも最初紹介に示した通りですけども、基本的にこの裏側にはスケール化というのが進んできています。元々2018年ぐらいが117Billonだったのが、2020年には175Billonと1000倍ぐらいです企画なっていてGPT-4は1Billon以上だというふうに言われています。 +このスケールっていうのがやっぱ重要な要素になってきています。 + +こういうスケールしてるわけですけど、何でこんなにスケールしてるのかと、あるいはこのスケールするってどういうことなのかっていうのを今日は話していきたいと思います。 +特にですね背景にあるのが一番よく出てくるのがスケール則と呼ばれる経験則でして、最初の方ではこの二つの論文を中心に説明したいと思います。一つがOpenAIが2020年に出した論文でして、Scaling Laws for Neural Language Modelというような論文になっています。 +これちなみにGPT3が2020年、このスケーリング則がでたあの約半年後ぐらいに出てまして、GPT4の中でもこのスケーリング則の話とか出てくるようなものになってまして基本的にこのGPT3が開発された背景に、こういうスケール則の発見というのがあったというふうに言われています。 +もう一つがこれを少し拡張した形の研究としてTraining Compute-Optimal Language Modelというような研究があります。これ、当時のDeepMind今GoogleDeepMindですけど、が出した論文でしてこのスケール則の考え方を使って、どういうふうなデータと、どういうふうなモデルサイズを用意すれば良いモデルが作れるのかっていうのを検証した論文になってます。 +この辺り中心にいろいろな研究をされながら今日はご説明できればと思ってます。 + +早速スケール則とは何かっていうところについてこのスライド自体は初回に多分お見せしたかなと思いますけれども、どういうものかっていうのをおさらいすると、基本的な計算資源とデータサイズ厳密にtoken数ですね、学習に使っているtokenの数とモデルのパラメータ数っていうのと誤差、その学習に使ってる誤差ですね。 +正確にいうとテストデータにおける誤差の間にある経験則が存在するというようなことを指したあの言葉になってます。どういう経験則かというと、例えばわかりやすいのが右側のパラメータなのでパラメータの方に注目すると、この青い点を打つっていうのが、実際にどれぐらいのパラメータを使ったときに、どれぐらいの損失だったかっていうのを表してますけれども、これをプロットすると、両対数グラフ要は10のN乗みたいな形で書いたときですね、こういった綺麗な直線になるというような法則になってますね。 +これがパラメータだけじゃなくて、データサイズだったり、計算量に対しても、横軸をそれぞれ変えてやったときに、同じように、こういった対数空間上での線形のスケールが成立しますよというような経験則になってます。 +何か細かいことを一応書いてますけど一応これ要は点が実測値になってまして、この実線みたいなのが、予測値に該当してます。これあとは他の2変数は十分に大きいと仮定したときのあの実験結果になってます。 + + +一つ一つ見ていきますと今見たのと同じ順の話ですけどパラメータ数についての図をピックアップしたのがこの図にあります。さっきと同じで10の5乗,10の7乗,10の9乗って形で横軸が対数の対数グラフになってまして、例えばCross-Entropyで対数化された値になっています。 +これを見ていくと非常に綺麗に、ちょっとガタガタ若干してますけど、巨視的に見ると、大体この黒いフィッティングした線と同じになっています。 +それから次の図がデータセットのところについてピックアップしたものですけれど、さっき言った通りデータサイズって言ってるのは基本的なtokenの数だと思ってください。10の8乗tokenとか10の9乗tokenっていう単位これについてもパラメータと同様に点の値をプロットしていって、その間をフィッティングしてると非常に綺麗な関係が見えることがわかるかと思います。 +最後が計算資源でして計算資源だけちょっとわかりにくいんですけどまず横軸がこのPeta FLOPs Daysというのになってます。Peta FLOPs Daysっていうのが何かっていうのを説明しますと、一応補足というか知ってる人は聞き流してもらえばと思いますけど、計算ってのはどれぐらいの浮動小数点演算を行っているかを表してる単位だと思ってください。 + + +浮動小数点演算っていうのはコンピュータしてる人だと分かると思いますけど、パラメータの足し算とか掛け算に該当してまして、細かい話するとディープラーニングの場合だと普通FP32とか1Byteですね、の計算が使われるので1Byte同士の足し算みたいのが1演算、で掛け算も1演算という形で表せるになってます。 +これなんか右下に巨大な巨大な2階建てMLPって書いてますけど、このWをかけるみたいな、これが掛け算に相当しますし、例えばバイアスを足すみたいなもバイアスを足すということで基本的にニューラルネットワークの計算ってのはこの浮動小数点のパラメータを足したりかけたりするというので表すことからできることがわかると思います。 +「紛らわしいか」っていうのちょっといっぱい無視してもらえばいいと思うんすけど、この合計の浮動小数点演算の数を表すものとして、FLOPsというのが使われています。 +さっき横軸がこの要は浮動小数点演算の合計の数になっているというふうに理解いただければと思います。ちなみに「紛らわしい」て書いたのが大文字の「S」のFLOPSっていうのもありましてこれがFloating Points Operation per Secondsっていうものになってまして、1秒間当たりどれぐらい計算できるかっていうのものになってます。 +これあのGPUの仕様書とか見ると、こういう感じでFP64とかFP32で例えばこれ19.5TFLOPSみたいな書いてあるんすけどこれは要は、1秒間当たり何回計算できるか、基本的にはハードウェアの計算能力を表す単位だと思ってもらえばと思います。ちょっと戻りますけど、ちっちゃい小文字のsは全体でどれだけ浮動小数点演算が必要かというものを表すもの。と若干違うということでご理解いただければ。要はあのスケール則を見たときに別に演算能力が上がってるわけではなくて合計で必要な計算量が上がってるというふうに理解いただければいい。 + + +あのスケール則の方に戻りますと、パラメーターの話とパラメータとデータサイズ(token数)の話と若干違うとこがありまして、点じゃなくてこういうなんか曲線が打たれてます。 +あのこの曲線っていうのが、あのこの図では、あの異なるモデルサイズで学習したときの学習曲線をイメージして意味しています。要は横にいくほどだんだん計算量がかかってくるので、学習したときのこの1個1個の学習曲線がこの青いなんか薄い線に対応してると思ってください。 +これ例えばこの特定のパラメータで学習したときの曲線がこの1個の中に該当するということで、あの別のものが違う線、でさらに違うものが、これ例えばN''が一番大きいので計算量が掛かる。N'が真ん中ぐらいでこれぐらいの計算。Nがこれぐらいで計算するっていうような意味合いです。このようにを変えてやったときにこのオレンジの線っていうのはこの一番ベストな条件、この計算量を取ったときに一番いい条件で学習した時の値っていうのがこのオレンジの点線でフィッティングされてるというふうに理解いただければ。これモデルサイズが小さいときは最初早く学習が進むわけですね計算量が少なくても性能が出るので計算量が少ない前提だと、モデルサイズがちっちゃい方がいい。 +逆にモデルサイズが大きいと、なかなか学習が進まないんですけど、最終的な性能が良くなるということでこれが最適なレートみたいのが存在するということです。ちなみにこれは読み方というか使い方に近いですけれど横軸テストロスをある値にしたときに、どういうものが良いモデルかっていうのは、この横をピーっといけば大体わかって、これちょっとパラメータ数がいくつかってのはわからないですけどこれN'ぐらいがいいってことで、めちゃめちゃ大きければいいというわけでも小さければいいわけではないことがわかりますし、自分が計算資源どれぐらい持ってるとき、何かパソコンを何か100台ぐらい持ってますとか何か自分が使える計算量がわかってるときにも、これをぴーっと線をひいてると大体これぐらいのパラメータを取ればいいんだなってことでそれがわかるということになります。 + + +これがあのスケール則の詳細ですね。コンピュートのところ以外は割とわかりやすいですけれど、こういった関係が成立するってのがスケール則と呼ばれているものです。若干細かい補足なんですけれどというかあの、さっきからこの謎の値が書いてあったと思うんすけど一応詳細に見ておくと補足なんで理解した人だけでいいですけれどこれよく見るとこういうべき乗の関係になっていることがあります。 +このLっていうのがロスですね、最適化したりとか小さくしたいもので、ちょっとこれ若干順番が違うんですがX_cっていうのが、この例えば2.3掛け10の8乗みたいな、これがコンピュートの場合ですけど、係数に該当していて、アルファがこのマイナス0.05みたいな対応するということでこれ今コンピュートの図だけ出してますけど、他のものも同じような形をしています。 +これ何で両対数にすると線形になるのかっていうことですけどこれログ取れば明らかで、どっちもログ取るとこういう感じになるので、logX_cがこれ横軸なんで線型の普通の一次の式で、αが傾きの線みたいな感じになることがわかります。αlogX_cが接線みたいなもんですね。そういった形になるので、このスケール則というのはこういうこのべき乗の形で書けるのでスケール則というふうに言われています。 + + +ここまでスケール則の話をしてきましたけど、あのそうですねモデルサイズがまだ小さい状況でのスケール則っていうのを検証してましたけど、さっき半年後ぐらいにGPT3が出ましたよって言いましたけど、GPT3でもこのスケール則ってのを検証しているってことが報告されてます。 +さっきのあの学習のときと同じような図があの論文には載っていて、これ色がそれぞれパラメータの違いに該当しています。黄色が一番大きくて青が一番ちっちゃい、紫かな、ちっちゃいモデルになってます。先行研究、さっきの今まで話してたものより2桁オーダーが大きいモデルにおいても、これ厳密に言うとまだ収束してないように見えるんですけど、おおむねスケール則が成立してるっていうことがGPT3の論文だと報告されています。 + + +あのスケール則についてここまで他の多分一番有名なのが先ほどのから話しているScaling Laws for Neural Language Modelというものなんですけれど、実はこのスケーリングっていうの自体、スケーリング則、スケール則が成立するってこと自体は、もうちょっと前から知られていたというふうに言われています。 +ちょっと僕ももしかしたらもっと昔からあるかもしれないんで僕が知ってる限りですが、少なくとも2017年の論文では検証されているということが言われてます。このDeep Learning Scaling is Predictable Empiricallyという論文があります。 +ちなみにこれ今日話さないんですけど理論的にどういう条件だとスケール則が成立するのかっていうのを議論していたりもするので、もし興味ある人はこの論文化後か、あとはスタンフォードのレクチャーでこの辺触れられていたのでもし興味ある人は見てみると良いと思います。 +少しだけ内容に触れますと、この論文では当然2017年なんでこれTrasnformerがあの出たか出ないかぐらいの時期なのであのTrasnformerのスケール則っていうのはやってなくて、LSTMだったり、RHNというか、リカレントハイウェイネットワークっていうちょっと何ていうか、LSTMの亜種みたいなものをですね、時系列のResidualネットワークみたいなことを使った研究になってます。 +これ見てもらうと横軸がトレーニングデータセットのサイズ、縦軸がロスですね、ログスケールのロスになってまして、さっき見たのと同じような横線の図が広がっているというふうに描かれていることがわかるかと思います。 +厳密に言語モデルじゃなくてMachine Translationの結果だったということです。あとは異なるとして対象モデルが違うってことでTrasnformerじゃないモデルを使ってますよとか規模も全然違うものですけれども、初期的にはこういった結果も知られていました。 +それをスケールアップさせたのが先ほどのOpenAIの研究だというふうに説明できるかなと思います。 + +それから元のOpenAIの論文に戻りますと、今言ったようなLSTMの比較みたいなLSTMにおけるスケール則みたいなことも、この論文でも検証されていまして、左側がモデル構造が違うんですね。 +Trasnformerの場合はスケール則が、パラメータ数が横軸になってますけどこういうふうになると、LSTMの場合には1層2層4層みたいにそれぞれスケール則を解くとこんなふうになりますよということで、Trasnformer以外のスケール則っていうのもあの検証をされている。深さについても検証してまして、これも元のモデルが何だったかちょっと忘れちゃったけど、確かLSTMだったような気がしますけど、層を変えたときにどういうふうな変化するかっていうのをこういった形でプロットするようなことがされてます。 +ポイントはTrasnformer以外でも別にあのスケールするっていうのは成立概念だということです。なんでこんなTrasnformerだけ注目されてるのかってのは後で話します。 + +それからこれは補足に近いですけど、Trasnformerの中でよく知ってる人だと最近はMixture of Expertって呼ばれるモデルがよく使われているということを知ってる人も多いと思いますけど、このMixture of Expertにおいてもスケール則が存在するってことは言われています。 +多分他にもあると思うけど代表的な論文で上が初期で下が最近で、なんかちょっとやり方でスケール則を検証してるものが下になります。例えばこんな感じで点線がうんTrasnformerで実線がこのMixture of Expertと呼ばれるモデルをスケールさせたときにどういう変化をするかというものを見ているものですけど、こういった形でMixture of Expertにおいても、スケール則が成立するとかなり綺麗な関係が成立するということが言われています。 +このMoE自体はちょっと今回の対象ではないのでMoEがどういうモデルかっていうのはDay8を楽しみにしておいてもらえばと思います。ここでポイントはrasnformer以外でも別にこのスケール則というのは、あの成立しているということです。 + + +それから基本的に今までの話は言語modelingなのでnextのtokenを予測するときの損失について縦軸としていましたけれど、それ以外にも他のドメインでもこのスケール則っていうのが整理するよっていうことも報告されています。 +これもOpenAIが出してた論文で、これ左がイメージのモデリングでテキストとイメージとかビデオとか数理計算とかimage2textとか、こういったものが他のドメインでも成立するよということも言われています。 + + +それからもう一つの論文でChinChilla Training Compute Optimalっていうものがあります。ここまでが1変数を制御している、横軸1変数にして、他の二つの変数については際限がないというか無限にあるという前提での経験則でしたけど、2変数を制限した場合の経験則っていうのも知られています。 +それが有名なのがこのTraining Compute Optimal Large Language Modelというものでしてそれが左側の実験結果、右側がPaLMと呼ばれるGoogleが出したモデルのバージョン2のPaLM2というモデルがありますけど、そのときにホワイトペーパーから取ってきたやつになってます。 +どっちも同じような図になってますけれど、これていうのはそれぞれの、例えば左側を見ると、6E-18とか1E-19と書いてますけど、この6E-18とかが使える計算量を意味してると思ってください。なので例えば左上のこの薄いやつ、薄い緑のやつは、それぞれ6E-18の計算量を使って、何かを変化させるというものです。 +その何かっていうのがこのパラメータになってまして、例えばこのなんかどこだろうこの線を見ると、いくつなんだろうわかんない100ミリオンとか、この線を見ると300ミリオンとかぐらいをパラメータに割り当てた場合、ということになってます。 +当然パラメータを増やしたり減らしたりするだけだと、計算量っていうのは変わってしまうので、この場合は学習時間は固定していてtoken数を変更させているっていうなものになってます。なんでこの丸はそれぞれ学習時間とtoken数が変化しているというふうに思ってください。 +これをいろんな計算時間に対して見ていくと、どれも概ねこのUshapeというかの下側に凸な形になっていることがわかると思います。これ要は最適な値がありそうだということですね。ある計算量を考えたときに、めちゃめちゃ巨大なモデルを使うでもなく、めちゃめちゃ小さいモデルを使うのではなく、最適な値がありそうだということがわかると思います。 +右側も同じような結果ですね、あの形は微妙に違いますけど大体同じようなことわかると思います。これがあのChinChillaの論文でして、これの使い方もまた後で話します。 + +ここまでがあのスケール則とは何かのまとめでして、スケール則っていうのは毎回おさらいすると、計算資源とデータセット、パラメータと誤差の間にはこういった経験則がそうですよ。 +こういうべき乗則で書けますよっていうのがスケール則でした。両対数グラフで線形なるのは両対数をとってやるとわかるということも説明しました。それから一番有名なのはTrasnformerで本当のスケール則ですけど、それ以外のモデルでも成立しますし、言語以外のタスクでもスケール則ってのは確認されていますという話をしました。 +それから1変数を制御するのではなくて複数の変数を制御するような経験則も知られていて、有名なのではChinChillaと呼ばれる経験則があります。ChinChilla論文って呼ぶ方が正しいかもしれない。 + +ここまでで計測スケール則の話をしたんですけどChinChillaのところで少しパラメータ数とデータセットサイズ、それぞれいじって計算量を固定しますよって話をしたのでちょっとその補足をしておきたいと思います。 +これよく出てくる式、あの経験則の近似式なんですけど、学習に必要な計算量ってどうやって計算してるんですかっていう話があると思います。これは「6*パラメータ数*token数」っていうふうに、あの計算されることが多いです。 +これ例えばGPTの場合だと175BillonがNに相当します。0.3テラtokenがDに相当する、それに6を掛けたもので3.14*E+23FLOPSというふうに計算できます。 +これ近似って書いてある通りこの6っていうのは近似なんですけど、これは概ねなんでこの6かっていうと、これ興味ある人だけでいいですけど、1層当たり、1パラメータあたりのMLP層における計算が6回あるということに起因しています。 +これアニメーションついてるんすけどアニメーションめっちゃ早いんですけど、基本的には1回MLPを計算するときに、フォワード方向で掛けて足すので2回、Backwardではそれが2回行われる、Backwardで入ってきたときに掛けて足すのと、自分が外に出す値を計算するときに掛けて足すすっていうので、4回あるので、大体1パラメーター当たり6回計算するというのでこの6という数字が使われています。 +これなんかよく謎の式として出てくるので少し補足しておきます。ちなみにこの近似って書いてある通りこれはあの雑な近似ではあります。というか下に「MLP層における」って書いてある通りなんですけどMLP以外の層も当然あるのでそれ以外の層では違う値が実際には厳密には必要になります。 +ただこれ系列長が短い場合だと、ちょっと僕も正確には詳しくないですが、MLPの計算量の方がAttentionより低い、一方で系列が長いとAttentionの計算で大きくなってしまうんですけど、そうじゃない場合基本的にMLPの計算力のがあの膨大なので大体無視できるでしょってことでこういった式が使われているそうです。 +最近はどんどんtoken数伸びてきているので、若干無視できなくなっている傾向があるかなと思います。あと正確な式の例っていうのもありましてこの実装とかだとこういう何かちょっと例えばエンベディングでは2を掛ける。 +Attentionでは2×3×sequence_length×d_model×(key_size×num_head)みたいな、こういった感じで厳密にこういうふうに計算することができます。ただスケール則をやるときにはそのモデル同士の比較ができればいいので、多分そんなに気にしないで適当にこのFLOPSっていうのを計算してるんだと思います。 +はい。ちょっと補足でした。 + +ちなみに補足がてらよく使うので見にくい図というか、考えてみてもらえばということでちょっと答え書いてないんですけど、さっきFLOPS大文字のSの概念と、あの計算量の話GPT3だと例えばこの3.14×10の23乗ありますよって話をしましたけど、これを使うと大体GPT3の学習にどれぐらい計算時間が必要か、A100が1000基あるといったときにどれぐらい必要かっていうのを見積もることができます。 +このFLOPSとかよくこういう計算にも使うので、興味ある人はちょっと計算してみてもらえばと思います。はい。今やらなくて大丈夫、割ればいいだけです。ちなみに言語モデル開発しようと思うと、めちゃめちゃよく使う意識でして、WebLab_10Billonとか開発したときは裏でこういう式とかめちゃめちゃ飛び交ってました。 + + +これは裏話でここまでスケールとは何かについて話しましたがこれは何かっていうのは一旦理解できたと。そういうべき乗の関係にあって両対数すると線形になるんですね。1変数じゃなくて2変数の経験則ってのもあるんですけど、そういったことは理解できたと思いますけれど、それどうやって使うんですかっていう話を次していきたいと思います。 + + +これ同じですねこのべき場の関係が成立しますよというような図です。これがスケール則でした。これどうやって使うんですかっていう説明をするにあたってちょっと使われてる例をいくつかピックアップしました。これGPT-4のテクニカルレポートから取ってきた図ですけれどこの緑が実際のGPT4のパラメータ数だというふうに言われていますこれが1になってます。 +これに対してGPT4では、それより1000分の1ぐらいちっちゃいモデルでのスケール則を測って、推論した結果、これぐらいの性能になるだろうっていうのをプロットして作ったっていうふうに書かれています。要はこれGPT-4例えばいくつかわかんないっていう現実はわかんないすけど、このパラメータを訓練する前にそれより小さいモデルでスケール則を検証して、これぐらいいくんですねと、これしっかりちゃんと性能上がるんですね。 +ちょっと確認したというふうに言われてます。こういった形で自分がモデルを作ろうと思ったときに、モデルを大きくすることに意味があるのかっていうのを見積もることができるようになるわけですよね。これが使い方の一つですね。 +ちなみにこれ公開されてないときにちょっと計算してたんですけど、リーク情報出る前にちょっと計算してるんすけどこれ1で何か左端に100ピココンピュートっていうのが書いてあって、多分普通に計算すると、10の10乗より大きくなって、これが1だとしたときにもGPT推定は10Bになるので、100ピコが例えば10の3乗ぐらいのTrasnformerだとしたら少なくとも1Trillionにならなきゃいけないってことで、何かこれで大体推論できるなと思ってました。 + +その他の使い方としてモデルを、どちらがモデルが良いかっていうのを比較することもできます。これどちらのモデルが良いのかって比較しなければ別に同じパラメータで比較すればいいんじゃないのって思うかもしれないんですけど、もうちょっと厳密に言うと、モデルをスケールさせるとしたらどっちのモデルがいいですかっていうように予測することができるように左側のこの二つの図は最初の前半でも少し話しましたけれど、左側がモデル構造を比較して、右側からパラメータを比較してるものですけど、左側だと例えばTrasnformerの方が、どうやらこれスケールさせてってもずっとよさそうだということがわかります。 +LSTMをスケールさせていってもTrasnformerを逆転することは、どうやらなさそうであるということが何となくわかるかなというふうに思います。右側の例だと層を変えてますけど例えば10^5ぐらいしかパラメータがないときに比較すると、これどんなモデルが良いかわからない、どの層がいいかよくわかんないと思うんすけど、このスケール則を測ってると、どうやらパラメータ数を増やしていける前提だったら6層以上に層を増やしていった方が良さそうだということが予想が立つわけです。 +このポイントは実際にこれを計算する前にフィッティングしてやればちょっとさっきまでわかるということですね。GPT4の場合と一緒ですけどこれGPT4を実際作る前にこの曲線を引くことができるので、そういう形で小さいパラメータをつくっていろんなパラメータを検証してあって、大きいパラメータでどれぐらい、どういう関係になるかってのを予測することができるっていうのが一つの重要なポイントです。 +こうしたやり方はあの研究でもよく使われてまして、これもあのMambaという、研究自体はちょっと紹介しないですけど、あのこのMamba呼ばれる論文から引っ張ってきた図になってます。これ横軸いろいろ書いてるんすけどそれぞれ何か違うモデルですね。 +HyenaとかRWKVとか、TrasnformerとかResNetとかH3++って感じで、これがなんかTrasnformerじゃないやつらで試して作られてるものなんですけど、何が言いたいかというと論文でも実際このスケールをさせたときに、どういうふうになりそうかとスケールさせたときに、この提案手法は勝てるのかっていうのが、実際研究されてたりもします。 +ちなみにこの論文ちょっと若干余談なんですけどTrasnformerとTrasnformer++っていうのがありまして、これ確かTrasnformer++はLlamaで使われる構造で、Trasnformerが元のGPTの構造なんですけど、これ見ると結構スケール則が違うということもわかると思います。薄いオレンジとオレンジで。なので結構構造が大事だよということも実はこの図でわかったりします。 +あとはMambaっていうのがこの紫ってなんか強そうなんですけど、これが何かっていうのは多分Day8でやるんじゃないかなと思ってこれも楽しみにしてもらえばと。 + +それからちょっと似てる話ですけど効率性を、効率的にやろうと思ったときにどうすればいいのかっていうのを知ることもできます。 +左側が横軸がtoken数、縦軸がLoss、色がパラメータに対応しています。これ見ると、例えばこれ若干直感に反することを言ってるところあるんですけど、あるパラメータを固定したときには、基本的にtoken数固定したときには、大きいパラメータのモデルが、サンプル効率がいいロスが下がりやすいということがこの結果からわかったりします。 +それから逆に右側が横軸がコンピュートになっていて、色がモデルサイズであることは変わらないんですけどこれを見ると例えば10のマイナス3乗の計算量があるときには、これぐらいのコンピュータを使えばいいということがわかったりします。 +これ別に大きければいいというわけではないと。この辺の理屈は小さなモデルだと、学習がロスが下がらなくなるというのでちょっとあのスケール則を書いてるときに、なんか1個1個のプロットを説明したと同じような話ですけど、あの計算量が与えられたときに、どうやら、別にパラメータを増やせばいいわけではないいうことはわかりこの計算量が与えられたときにどれぐらいのバジェット、どれぐらいのパラメータ数とtoken数に割り振ればいいのかっていうのを、あの計算しようとしたのが、先ほど出したこの2変数の関係っていうふうに言ったChinChillaと呼ばれる経験則になってます。 + + +ChinChillaはモデルの名前なんですけどなんかChinChilla則って言われたり、ChinChillaケースって言われたりするので、何かその辺を丸ごと足してChinChillaというふうに、大体呼ばれてると思えばと思います。 +左側の図は先ほど見せたのと同じで、それぞれの色が計算量に相当してまして、パラメータ数を変更させた場合です。右側の図が増えてるんですけど、これを各FLOPSで最適なパラメータに直したものっていうのが、この中央でこれを同じようにデータ(token数)に対して、直したものが中央になります。 +例えばこれパラメータ見ると何か例えば3E-21を使えるんだったら、あのこの一番下のやつをピックアップしたやつか、この右側の真ん中の方に行ってきていて、同じように1E-12の場合はぴって引っ張ってくるみたいな、やったときにどういう関係があるかっていうので、これを見てみると何となく大体線形っぽい関係にわかります。 +右側がtokenの場合の同様の例ですね。これをフィッティングしてると、例えばこれ適当な値ですけど10^24よりちょっと低いぐらいの計算量が使えますよっていうときには、パラメータ数は63Billonにすればいいと。同じところが、これ取られてるんすけど、データ数がどれぐらいすればいいかっていうと、1.4Trillion tokenにすればいいということがわかります。テラtokenですねごめんなさい。 +こうして作られたのがChinChillaと呼ばれるモデルになっています。これあのGopherっていうモデルがありまして、GopherがDeepMindがこの前に出してたモデルで、これが280Billonでtoken数が0.3テラtokenというふうになってます。 +要はこいつと比べるとこのChinChillaっていうのはモデルサイズがちっちゃいんだけど、あのトレーニングtokenを増やしたと、それはどうやって決まったかというと先ほど言った通りですけど経験則に基づいてどのぐらいのバジェットをパラメータに割り振ってどれぐらいのバジェットをtokenに割り振るかっていうのを、この経験則によって決めた値を使ってやってやるということをしているものです。 +結果としてはこれで多くのケースより巨大なモデルに勝てるということが実験上示されています。これ左側のやつが実験上の結果じゃないんで、ちょっと実験結果飲みたい人はこの元の論文を見てもらえれば良いと思いますけど、あの巨大なモデルにかかってるということでこの関係性が良さそうだということが示されています。 +ちなみにこれも余談ですけどこのの求め方このChinChilla則ってのは実は何かいくつかの方法で求められてまして、それぞれ大体同じような経験則が出るってことが知られています。この関係式っていうのがよくこれも知られてまして、大体最適なtoken数っていうのが、パラメータ数に20をかけたもの。 +これと同じですね。70Billonを訓練するのに1.4とBillonのtokenを使うということになってますのでこの式の20っていうのも謎のマジックナンバーとしてよく出てくるので覚えておくといいと思います。 +先ほどPaLM2の図を見せましたけど。PaLM2でも同じような経験則が成立しますよということが言われています。 + +ここまで見るともうこのtoken数だけであのパラメータ数を、あるパラメータ数に対してtoken数を決めればいいあるいはtoken数が固定データセットサイズが限られてんだったら、それに対してあるパラメータ数で決めてしまえばいいんじゃないかっていうふうに思うかもしれないけど、これはそんなに簡単ではないということも調べています。 +何のことですかというか今最適な割り振りっていうふうに言ってたじゃないかというふうに思うかもしれないすけど、一つの観点は、さっき話したのは、訓練のバジェットだけを考えていたという点が、現実的ではあまりないということがあります。これ左がのが訓練時のFLOPSをどうするかっていう話で、ChinChilla Optimalで作ったやつ13Billonのモデルが例えばこんな感じのスケールをしたと。もうちょっとちっちゃいモデルを大量のデータで学習させたモデルは、あのこの黒い黒というか、紺色ですかね、みたいな線だとする。 +これロスが同じような値を取るモデルっていうのをピックアップすることができて、この状況で比べるとやっぱり訓練のFLOPSは13Bの方がいいと、ChinChillaOptimalな作り方をする方がいいということが左の図からはわかるんですけど、今度はこの推論するということを考えたのがこの真ん中の図にあります。 +これ当然なんですけど、実際にはこのモデル学習した後に、皆さんGPTとかChatGPTとか使ってると思いますけど、みんなが使うときにも計算量がかかるわけです。この推論のときに使うかかるコストっていうのは当然ちっちゃいモデルの方が、小さい、さっき推論のコストが2回分とか2×NDだっていうふうになんかちらっと言いましたけど、それからするとこのコストが推論時にかかり続けるので、学習のコストだけじゃなくて色も考えると、あの7Billonの方が常にちっちゃいわけです。 +これが例えばこのぐらいのtokenだったときは、このぐらいのサイズのときに、これ要はゆくゆくは絶対推論コストが低い方が逆転するんですよね。この右側足したやつですけど、そうすると、推論時のコストまで考えてやっていいモデルを作った方がいいんじゃないかっていうのが、あの考えてる人もいたりします。 +これがあのBeyond ChinChilla-Optimalというな研究になってる。この論文の結果を一つだけピックアップしましたけど、右上に書いてある数式は6ND_trっていうのが、学習時のtokenに対して6Nさっきのマジックナンバーを掛けたもの。D_infってのがinference時のもので、これに2をかけてるのはバックワードがないので、4回分の計算はないからですね。左の図がなんか綺麗な図が書いてありますけど、Inference tokenを増やしていったときに、ChinChilla係数に対して何倍にしていくかっていうのを、この色が表してます。 +これも当たり前なんですけど推論回数が多くなるほど、ライフタイム全体では、あの学習token増やすと要はケースを大きい方にする方が、あの、あるロスを見たときに、あの一番よくないということがわかります。あるtoken数を見た時に一番良いっていうのは変わっていくよっていうことがわかると思います。 + +こういう考え方もあるねっていう話をしましたけど、これはLlamaとかでも、実際token数を増やすことが多いということにも多分繋がってるっていうふうに言われています。ちょっとさっきの図を持っていましたGopherというのが、DeepMindが元々作ってた巨大なパラメータを少なめのデータセットで学習したものになってまして、ChinChillaっていうのがさっき言った経験則によって学習したものになってます。 +これがあの係数が20このtokenをパラメータで割った値が20。20倍のtokenを利用しましょうということでしたけど、例えばLlama2だと学び7Billonでも70Billonと同じtokenを使ってますけど、7Billonのものに関しては1.8Trillionのtoken使ってるので、285倍の係数と全然違う値を使ってる。70Billonは28.5倍。Llama3に関しても、70Billonが214倍、400Billonの方が37倍ということで、このChinChilla-Optimalが実際に巨大なモデル、巨大なtokenの学習で使っているケースもよくあります。 + + +ここまでのまとめが、スケール則ををどう活用するかって話をしてきました。使い方としては投資するかどうか、大きいモデルを開発するかっていうのを割と予測できるというような使い方もありますし、これが実際GPT4の開発にも繋がったというふうに言われています。 +モデル選択もできるとパラメータを増やしたときに、どっちが良いモデルかっていうのを実際にパラメータを試すことなく、そのモデルの巨大なモデルを作ることなく検証できるってのがいいとこだと。それからどれぐらい計算資源を割り当てるかっていうのでChinChillaを決めるっていうものがあり、そのChinChillaOptimal以外にも推論コストを考えたときの最適なtokenを議論する研究もなされています。 + + +ここまでがスケール則の活用法でしたけど、少しだけ補足をいくつかしておきたいと思います。この予測可能だというふうに言いました。スケール則ってのは先ほど言ったように、あのべき乗の関係で綺麗なフィッティングができるので、ある意味予測可能なわけです。だけど同時にこのサプライズというか予測不可能な部分っていうのもあるっていうふうにも言われています。これがこれAnthropicっていうOpenAIから独立したというか枝わかれした会社がありますけど、その会社が出してる論文で「Predictability and Surprise in Generative Models」って論文で触れられていますけど、この予測不可能だっていうのがEmergent Abilityと呼ばれるなあの現象になっています。 +これ初回で話した通りですけど、例えばパラメータを増やしていったときに、元の計算が突然できるとかそういったものがありますというのが知られています。これ初回でフェアのために何か本当にそうなのかみたいな話を少し言いましたけど、これは実はミラージュ、幻覚なんじゃないかっていうなの研究も出ています。 +何を言ってるかっていうといろいろな反証をしてるんですけど、これ要は性能の測り方に寄るでしょうということを言っています。なんか横軸が対数になっていて、うんそもそも何がそのEmergentって言ってるけど、何が創発なんすかみたいなそういった議論もありますけど、少なくとも何かこういう急に何かできるようになるように見えるということが、起こるという期待もこういった言語モデル開発を加速させる要因の一つなのかなというふうに思います。 + + +それからこれもあんまり本題と関係ないですけど面白い現象としてブGrokkingと呼ばれるものを存在しています。これ言語モデル自体ではないんですけど、Grokkingっていうのはめっちゃ過学習させたモデルをずっと学習させ続けると、突然テスト性能があるというような現象になってます。 +これはなんかa○bって書いてますけど、こういう2項演算の関係を表してて、aとaだったらaとかこういう何か表があってこの穴埋め問題を解くというようなタスクになってます。この赤線がこの訓練の性能で、緑があのテスト性能なんですけど、横軸これオプティマイズのステップになっていて、なんか10^2とかから10^5とか10のN乗のスケールなんですけど、なんか最初めちゃめちゃ解けないのに、過学習させた状態での学習を続けると性能が上がるというふうに報告されています。 +これもある意味予測不能なわけですね計算量を増やし続けると、不思議ことが起こるという現象として知られています。これ何が起こってるのかみたいな研究としてはホットトピックの一つとして知られていて、これなんかrepresentationの学習だっていう、良いrepresentationが学習されると、汎化が起こるんだと。学習し続けるとこういう表現なるんだという研究もありますし、何がこういう良い表現を獲得してるっていうことに繋がってるのかみたいなことも研究されていたりもします。 +個人的には面白い時かなと思ったんすけど、今日の話は少し関係ないのでこのぐらいにしておきます。 + +それから予測不可能な改善という話とも関係するんすけど、実際にはロスを下げたいというよりは何かのダウンストリームの性能を上げたいことが多いと思います。 +そういう意味で下流の性能を見た研究もありまして、これは学習以外のデータに対してのテストロスがどうなるかっていうのを見ています。だから仮タスクというよりはデータ分布が変わったときですね。これ見ると大体オフセットが違う実際のロスは違うんですけど、傾きはどうやらスケールしてとかっていうことがわかると、それからこれもコンピュートを指定したときですね横軸にとったときにパラメータはどのぐらいのパラメータだと一番いいかっていうので、これも大体綺麗な関係があるかわかると思います。 +一方でこういう軽いタスクが絶対性能が上がるのかっていうとEmergentアビリティの話とだいぶ関係がだいぶ違うこと言ってると思うんですけど、実際にはこのいろんな関係があるっていうことも、検証されています。これ多分GPT4の論文でも議論されているものですし、このGPT3の論文でも言われてるものですけど、綺麗に上がるようなタスクもあれば、急に上がるものもあれば全然上がらないものもあるということで、実際には必ず上がるわけじゃないっていうのは注意してもらえばと思います。 +それからこういう何かInverse scaling lawっていうのも知られていて急に悪くなるような、あのタスクも存在するっていうふうに言われていて、去年とかだと何かInverse scaling Prizeっていうことで、スケールさせるほど精度が悪くなるタスクを見つけて賞金が出るみたいな、そういうコンテストも開いていたりします。 + + +具体的な求め方についても話します。 +さっきからチラチラ言ってた通りなんすけど基本的にこれどう図るかっていうと、基本的にはいくつかの条件で実験してフィッティングするって言ってんのは、すごい単純に言ってしまうとそうなります。左側GPT4の論文から取ってきた図で説明したもんですけど、グレーのやつを例えば実験してみて、これぐらいのロスになるんだなっていうので、フィッティングするとこういうカーブになります。 +ちなみにこれ、なんでこれ直線にならないんだっていうのをすぐ説明しなかったですがこれ縦軸が実は普通のロスと違ってBits-per-wordっていうのになってて、多分2乗スケールのロスになってるからだと思います。 +右側も同じですね。この各点について何かいろんな設定で実験してやって、それを結果を見るということをしてますけどよくよく考えるとスケールさせるときにモデルサイズどうすればいいんでしたっけとか、何をどういじるとモデルサイズが大きくなるんでしたっけ、どういうふうに言えばいいんでしたっけとかですね。 +あのモデルサイズ変えたときにハイパーパラメータってどうすんでしたっけそういった細かい問題が出てくる。最初の方ですけどモデルサイズどう変化させるかっていうので、前回やった、こういう図があると思いますけどモデルサイズ変えようと思ったら別にパラメータ、層の数を増やしても、いいわけですし、この埋め込みの次元各tokenの次元を増やしてもいいわけですし、各随所に出てくるこのフィードフォワードネットワークっていうのの中間層の次元を上げてもいいですしヘッドを増やしてもそういうのあのパラメータ自体は上がるということで、これどれをどのぐらいやるんですかっていうのが細かく考えると重要になってきます。 +この辺は元の論文でも一応議論されてまして、これ三つほど出してるんすけど例えば真ん中のがアスペクト比っていう、モデルのエンベディングのサイズですね。dモデルっていうものを層数で割ったもの、アスペクト比という縦横比みたいなもので幅と深さの比率をアスペクト比っていうふうにこの論文では呼んでいますけど。こういったものを変えて実験してみたっていうのが最初の最初じゃないOpenAIのScaling Lawで話されていました。基本的にはこの辺見るとなんかあんまり性能に影響ないっていうふうにこの論文では言ってますけど、この辺を気にしながらモデルスケールすることが多いです。 +気にしながらっていうのの実例を出した方がわかりやすいと思うので、実際にこれ開発者じゃないので、あの結果を見て推論してるだけなんで嘘ついてるかもしれないですけど例えばLlama3の論文を持ってくると8Billon,70Billon,405Billonで層の数、モデルDimension、埋め込みの数次元ですね、フィードフォワードの次元、アテンションの数っていうのを、こういうふうにしたよっていうふうに言われてます。 +これさっき言ったアスペクト比、縦横比がこのモデルdimentionをLayerで割ったものなんで、これそれぞれ見ると128,102.4,130ってことでこれ大体100から130ぐらい、なんかおおむね同じような値になっていることがわかると思います。 +それからモデルとフィードフォワードの次元数ですね、モデル次元数に対しフィードフォワードの次元数は3.5倍になっているということがわかります。これ約3.5かな。ちょっと自信ないですちょっとちゃんと計算したとかいった計算したら、ちょっと違ってたら教えてほしいんすけど大体3.5倍ぐらいあったとアテンションのヘッドはこのFFNの次元数と同様にスケールしたモデルの次元と同様にスケールしているということがわかる。 +こういった感じで幅とかを大体同じような係数で、なるべく伸ばしてくと、ただこれ、指定したパラメータ数にしようと思ったときに、当然どっかは完全には固定できないので、若干変わりますけど大体同じような比率でスケールさせているというようなことがわかると思います。 + + +それからこれCerebrasGPTっていう別の論文ですけどこれの論文を見るとこれちょっとさっきの時Llamaよりだいぶちっちゃいですけど、アスペクト比が大体上から76.8,77.7,85.3,85.3みたいな感じで大体これも同じような値になってて、モデルとFFNの次元がそれぞれ決まっていると、4.0となってて、ヘッドはちょっとこれも論文だとだいぶ規則変化してますけど、大体この辺を揃えているということが経験上わかるかなと。もう一つの話がハイパラをどう変化させるかで、これも同じCerebrasGPTというのを見てみると、例えばこのLR Decayのタイプですね、学習時にDecayをどうするかで、ちっちゃいモデルとlenearにしてんだけど、1.3と2.7はなぜかCosineで6.7はLinearで13BillonはCosineみたいな謎のことをしていることがわかると思う。学習率を見てみると、6.0E-04(6.0掛ける10の-4乗)だったのが1.2*10^-4になってたりこの辺が変化してるということがわかると思います。 +これなんでかっていうと、学習したことは方だったら得られたのと、言語モデルに限らずだと思いますけど、あのモデルのサイズとかによって結構この辺の最適なパラメータ数ってのは変わるっていうのは何となくわかるかなと思ってます。 +左が何かある論文から持ってきた幅を変化させたときの学習率がどのぐらいだといいのか、最適なのかってのをプロットしたものになってます。色が幅に対応していて、横軸が学習率をlogにしたものですね。これ見ると例えば8192の場合だと、このマイナス16ぐらいにいいとこいますし、128の場合だとマイナス10ぐらいということです。 +要は経験則としてモデルサイズを大きくしたとき、大きくしたときには学習率をちっちゃくするってのが大体だということがわかると思います。CerebrasGPTもそうなってます。 + +バッチサイズを大きくするといいってのも経験則としては言われている。この図はちょっと関係ないですけど、そういう形で実際にはそのパラメータをスケールさせたりする必要があるということに注意してください。ちなみにこれある論文って言ったんすけどμTrasferっていう論文でして、この論文は実はこのパラメータを変える必要があるってことを主張してるわけじゃなくて、何かいい感じの方法を使うといい感じってだいぶ大雑把に言いましたけど、この幅によらず最適なこの学習率の値バッチサイズもそうなんすけど、同じできるよってことを主張してる研究だったりします。 +ちょっと面白いので説明したいとこなんすけど興味ある人は、論文見てもらえばと思います。何してるかっていうと簡単に言うと重みの書記官ときとかに、入力の数とかに応じて初期化を変えると思うんですけど、それに似たことを学習率とか、出力のweghtにして掛けてやるとするとこれがweightに対して最適な学習率っていうのがこのケースだけであの最適になるということを示している研究だったりします。 +ちょっと興味ある人は読んでもらえばと思い、これμTransferの何か活用方法だけここに行ってますけど、これμPって書いてあるのが、このさっき言った怪しい怪しくはないんですけどただいい、いい感じの初期化をするということをしたものでして、それやると学習率が変わらなくても、いいよってことがCerebrasGPTの場合だと言われています。 +ちなみにLlamaの場合はなんかちょっと論文見たんですけどちょっと厳密によくわかんなくてなんか参照したよっていうふうに書いてあるんすけど実際learning rateとは何かちょっといじってるみたいなので、この辺どうやってるかっていうの多分論文とかにあると思うのでちょっとモデルを実際興味ある人は見てもらえばと思います。 + + +トレーニングに関するスケール則の話がここまでで終わりです。基本フィッティングすればいいんですけどモデルサイズをスケールさせるときにはハイパラをどうするかっていうところが、あの結構実験的にやられてまして、モデルサイズについては大体なんか幅アスペクトratioみたいなもの、幅と深さの比率みたいなものを維持しながら受けさせますし、学習率とかはスケジュール、徐々に小さくする、大きくしたときに徐々に着するとか、例としてμTrasnferという技術を使ってたりするということをご理解いただければと思います。 + + +講義に戻ります。ちょっと演習の時間もあるのであと20分ぐらいで駆け足になりますけど、最後最近のスケールトレンドってことで「推論時のスケーリング」についての話をして終わろうと思います。モチベーションから話すと、ちょっと頭で考えてみてもらえれば一瞬でわかると思うとんですけど、「バナナの色は何ですかって言われたとき」と、今日の講義聞いた上で、「スケール則の問題は何だと思いますか」って聞かれたとき、多分あの考えることが違うと思うんですね。 +「バナナの色なんですか」っていうと黄色ですね。もしかしたら緑かもしれないけど、物によるかなみたいな、おもちゃだったら違うかもみたいな、だんだんあの、考えていくといろいろ出てくるかもしれないすけど、少なくとも「スケール則の問題なんだと思いますか」って聞かれたときに、今日の話からするとスケール則っていうのはこういうものだから「どうだろう」「この辺が問題かな」みたいな考えとはやっぱ思考としては違うってことは何となく思うかなと思います。 +なんか人間的にはこの二つって全然違うしあの、答えるのに必要な考え方っていうのも違うように思えるわけです。推論時のスケールって言ってるのはこういった形で、あの簡単なものについては簡単に答えてもいいですし、そうじゃなくて、深く考えなきゃいけない問題に対しては、考える時間に計算資源を使うというふうにしたときに、これいいことがあるのかっていうような話になってます。 +これの仕組みは言語モデルでも効果的ですかっていう話と、これをどう実現できるかっていう、こういう二つの話が最近のトレンドとして出てきています。効果的ですかっていうのが、最近o1と呼ばれるモデルがOpenAIから出ました。プレビューとして出てますけどこのo1で注目されています。これあのo1の論文ってかブログにある図で、左側が訓練時の計算資源をスケールさせたときに、AIMEというロジックのベンチマークがあるんですけど、accuracyがどうなったかというと、何となくスケールしてる。右側がtest-time computeっていうふうに書いてると思うんすけど、推論時に計算資源を増やしたときあるモデルを使うんだけど、簡単に答える方法と深く考えて答える方法みたいでだんだん計算資源を増やしていったときに、性能がどう変わるかっていうので、これもスケールしていってるということがわかると思います。 +こういった形で、要は考える時間をどうやら推論時に使うと、つまり計算資源を推論時に使うのはいいことがありそうだということがわかります。 + + +そうすると次の話はどうやって計算資源をスケールするのか計算量スケールするのかって話ですけど実は一番簡単な方法はいくつかもうこの講義でも触れていて一つは例えばChain of Thoughtを使うっていうのもその一つです。 +Chain of Thoughtを使うと出力するtoken数が増えますよね。その思考の過程を自分で出力するので、これってのはある意味計算資源を増やして使っちゃってると。フェアに言うと、直接答えるのと、tokenをいっぱい出して答えるのは違うわけですよね。ありていに言うとかかるお金が違うわけですからそれからMany Shot ICLっていうのも、あのDay2で多分少し話したのかなと思いますけどIn-Context LearningのときにIn-Contextとして入れる集合を、サイズを増やしていくとどうなるかっていうので、これもスケールしますよということが言われてましたけど、こういった形で簡単にこのPromptingのときに出力するtokenだったり、入力するtokenっていうのをいじってやると、計算量を増やすことができるので、なんでこの辺の研究から見ても明らかなんですけど、基本的にうまく考えるのに計算資源が使えれば性能が上がりますよってのは、既にDay3までにも話してた話だと思います。 + + +それからDay3でもDecodingっていう仕組みを、あの話したと思います。このDecodingにもいろんな方法があってGreedy Decodingだと単純に一番いいやつを選んでいく、一番確率が高いやつ選んでいくので、すごい単純ですけど、こういうトップPを取るとかトップKを取るとかして、最後に一番いいやつを選ぶみたいなことをすると、これも結局計算をたくさんしてることになるわけですね。1個選ぶわけじゃないので、次に評価しなきゃいけないものがどんどん増えていくわけなので、こういった形で増やすっていうのも一つのやり方として存在しています。これ何かDecoding方法の一覧ですけどこれ興味ある人いたら言ってください。 + + +どうしようかな。時間も関係あるんでなんか最近の例を一つだけ紹介するとContrastive Decodingというのは例えばいまして、Extrinsicって書いてあるこの表中の軸に相当する方法の一つ、外部のモデル別のモデルを使う方法なんですけどこの研究によると、単純に自分が自分自身のこの出力の確率を使うよりも、なんかしょぼい言語モデルの確率を割ってやったものを使った方が、厳密にはLogの場合には引いたものですね。この方が良い指標になっているということが知られています。これなんか多分僕、なんかよく話しすぎちゃうものやよく出てくるものじゃないものについてエキスパートモデルが高く値を出していた場合、例えば「1961」ってのは普通はあまり出さないわけですけど、しょぼいモデルも出さないんだったら、これをベースラインとして割ってやる(引いてやる)と良いよっていうようなDecoding方法も出てきています。ここでContrastive Decodingの詳細を理解してほしいということよりは、Decodingのときにその他のモデルを使って性能を上げると、要はこのアマチュア(しょぼい)モデルの計算がさらに増えるわけですけど、こういった形の概念として新しい手法も出てきていたりしますということです。 + + +それからここまでのDecodingの話は基本的に次のtokenをどう選ぶかという話をしてましたけど、Decoding、次のtokenをどう決めるかだけじゃなくて、全体(プロセス全体)としてどういうふうな生成を行うかっていうのを一段広く、上から見ましょうというのでMeta Generationという言い方をするような研究も出てきています。このFrom Decoding Meta Generationというのが、6月かな、に出たサーベイでして、推論時の言語モデルで使うアルゴリズムを広くサーベイしたものになってます。この2章がMeta Generationて概念になってますけどちょっとこれがどういうものかについて説明していきたいと思います。そうね三つぐらい種類があるっていうふうに書かれてます。Parallel Search, Step Level Search, Refinementですけど、ちょっとこれ何か説明より具体を見た方がわかりやすいと思うんで、それぞれ具体を説明していきたいと思います。最後にこれを図を振り返ってこういうもんだなと思ってもらえばいいと思います。 +Parallel Searchの方法の一番代表的なのがBest of Nと呼ばれるものです。これ要は、これをtokenだと今までの話と同じなんすけど文を何個か生成してみて一番いいやつを選びましょうっていうのが、このParallel Seacrhの一番簡単なBest of Nっていう方法ですね。一番いいのっていうのがいろいろ考えられて、LLMのスコアを使うっていうのが、これがBeam Searchとかそういう普通のBeam Searchとかに相当するものですけど、valifierと呼ばれるような学習した評価機を使うような研究だったり、GLUEとか機械翻訳のときにGLUEとか、特定の指標を使うみたいに、何かの外部の指標を使って、とりあえずN個生成して、一番いいやつを、後で選びましょうとそういうアプローチになってます。ちょっとMBR Decodingの話しようかと思うんすけど、時間がだいぶ迫ってるかもしれないので簡単に言うと、これがMBR Decodingというのが最近機械翻訳で注目されてる一つの方法らしいんですけど、この例の中で言うとGLUEとかの指標を使っていいものを選ぶというような研究の例になってます。そうですね今言った通りですけどこの何か期待値の中にUて書いてあるけど、このUっていうのが、このさっきこのスライドでのスコアに相当してましてGLUEとかMeteorとか、いろんなものを使っています。これは実際にこれ人間のサンプルを用いたこういう関数が必要なんですけど、これをこのMBRだとやめていてHumanの代わりにモデルから生成したものをサンプリングして期待値を取るみたいなことをやるのがMBR Decodingというやれるやり方になってるんすけど、ちょっと詳細が知りたい人は、だいぶわかりやすい資料が上がってましたのでこのURLから飛んでもらえばと思います。ここではこの、要はスコアを選んでいいものを選ぶというようなやり方でいろいろ発展してきてるんだということを理解していただければいいと思います。 + + +それからBest of Nとはちょっと違う方法として、N個を生成した後に、それらを集約するという意味では、Day2でやったSelf-Consistencyをこの枠組みの一つとして説明されます。Self-Consistencyは下のようなもんですけど推論のCoTを応用したものになってて、言語モデルにCoTでのいろんなReasoning Pathを出させて、"Marginalize out reasoning paths"って書いてあるけどそのreasoning pathを出した後にこの一番よく出てきた答えっていうのを最終的に答えとするというようなやり方になってると思います。 +これもN個の中から1個選んでるわけじゃないんですけどN個出力して、それらを集約する形でこのN個はそれぞれ独立に動く(パラレルに動く)ので、さらに動かして最後集約するという意味でこのParallel Searchの枠組みの一つの代表的な手法になってます。このアグリゲーションどういうふうにこの結果を集約するかだったり、どういうふうにスコアをつけるかっていうので、いろんな手法が知られてましてこれもさっきのサーベイ論文に入っているので興味を引いていけばてもらえればと思います。 + + +ここまでパラレルサーチの中でMajority VotingとBest of Nっていうのが出てきましたけど、これあるタスクこれ確か数学のタスクだと思うんすけどタスクが載ってないんで興味ある人はこの論文見てもらえばと思うんすけど、例えば比較すると、普通にMajority Votingするのがこの黒線で、あの青線がこのBest of N、ORMって書いてあるけど、これOutcome-supervised Reward Modelってもので、要は全体に対して、これが正しいか正しくないかを推定するリワードモデル、結果をすいてするReward Modelってのを用意してあって、Reward Modelにとって一番良かったやつを最後選ぶっていうそういうやり方になってます。Majority VotingはN個出して最大のものを選ぶっていうやり方です。これやると比べると、リワードモデル使った方がいいよと言われています。一応補足なんですがMajority Votingは別にそのリワードモデルとか作る必要ないので簡単な方法であるっていう利点はあって、best of Nの方のORMっていうのは、リワードモデルを別で学習しなきゃいけないってのが欠点としてあることは一応補足しておきます。 + + +それからこのオレンジの線をスルーして話したんですけど実際にはこの論文はこのオレンジのやり方を提案してる論文になってます。それがこのPRMっていうものでして、PRMってのはProcess-Supervised Reward Modelっていうふうに呼ばれています。あるいは論文によってはProcess Reward Modelって普通に読んでるものもあります。これは全体に対して合ってる間違ってるっていうのを予測するんじゃなくて、このプロセスごとに合ってる間違ってるみたいのを予測するモデルを作るというものです。これあの数学の問題みたいなプロセスがわかりやすいですけど、最初に"Let's call the numerator x"みたいな感じでそれぞれのパスが正しいか正しくないかみたいな、これはユーザーが提出してる例ですけど、ユーザーの提出した例を使ってプロセスの正しさを予測してるということをしています。これをやるとさらに性能が上がるっていうことが左の図からわかりまして、これちゃんと説明しなかったですけど横軸がN個なんで生成するものの数になってますけど、これ増やしていくとさらに性能が上がるということがわかります。このPRMみたいなプロセスに対して評価を付けるっていうな説明をしましたけど、こういったやり方をするのがStep Level Searchっていうふうにさっきのサーベイ論文にまとめられています。ごこの一つ前の研究ではこのProcess Reward ModelのRewardを使って、あのBest of Nを選ぶってやり方をしましたけど、Best of N以外にも、このプロセスごとに塊を作って生成していってビームサーチみたいなことをすることもできます。要は最初はこの2個が良さそうだからこの2個を生き残らせて、こいつからまた発生させて2個作ってまた次のステップ3の選んでみたいな。これを繰り返すっていう方法です。これ丸が一つのプロセス、tokenじゃなくてプロセスに対応してましてというのが普通のBeam Searchの違いですけどそういった研究もあります。ちなみにそういった研究もありますって言いましたけどこのTree of SearchっていうのをDay2で多分やったと思うんすけどこれがほぼ似たようなことをしています。みたいなことっていうのはこのリワードモデルっていうの使う代わりに言語モデルで、この状態がいいものか、こっからこれGame of 24の例ですけど、足して24になる数字の作り方をしてくださいっていうときに、あのもう絶対に達成できない場合は、あの言語モデルがFailとするというようなことをしているものですけど、そういった形でやってるっていうのも、言語モデルをあのリワードの評価として使っているステップレベルサーチの例だと思っていただければと思います。これもさっきと同様ですけど探索方法とか検証するステップの違いですね。どこで検証するかとかによっていろんな方法が知られています。これもちょっと時間の関係で全体を割愛しますけど、これもサーベイ論文にあるので読んでもらいたいと思います。 + + +それから全然別のやり方でRefinementと呼ばれるようなやり方もあります。これ概念図だけピックアップしましたけど、右側の黒いのが対象の値でこれを言語モデルが生成したものだとしたときに、これ自身を入れてやって、もっかい生成させるというようなことだったり、あるいはこの生成したものに対してフィードバックを、左側の白いボックスに相当しますけど与えてやって再度生成するみたいな、そういったやり方をする研究もあります。これがリファインメントというようなやり方になってます。このリファイベントの代表的な研究がSelf-Refineと言われるような研究がありまして左が概念図でさっきとほぼ同じですけど、なんか最初タスクを言語モデルに与えましたと、こいつが出力した結果をSelf-Refineという研究だと自分自身で評価して、あとフィードバックを返すと。そのフィードバックを行った結果を使ってもっかいRefineすると、このRefineもこのSelf-Refineでは自分自身でやるんすけど、そういった枠組みの研究があります。右側例えばの生成例で上側のABCが一つの系列になってますけど、ダイアログが与えられたと会話が与えられたときに、このフィードバックって書いてあるのが、この左側の①のプロセスに相当するもの。これも言語モデルが出してるものでこのフィードバックを踏まえてリファインしたのがこの右側のものになります。ちょっと中身は読まないですけどこういった形で最初に生成させ、それ何を変えるべきかっていうのも言語モデル生成して、最後にその何を変えるべきかというのを踏まえてもう一度生成すると。これを何回も何回も繰り返すっていうのはやり方になってます。こんなんで性能上がるのかって思うと思うんですけど、これが何か上がるらしくてですね、最大50%ぐらい上がるような例もあるっていうふうに言われています。結果は結果なので、一旦これぐらいにします。 + + +これでほぼちょうどですけど、最後に少しあの、前半では全体の訓練時のスケーリングをする話を基本的にしましたけど、最近ではこの推論時の計算量っていうのも注目するような研究が増えてきています。代表的なGPT-o1とかですごく注目されてるかなと思いますし、今までやった方法、学んだ方法も結構出てきたと思いますけど、Promptingを工夫するとか、Decodingを工夫するとかいうので、それにも発展的な方法がいろいろ出てきていますし、Meta Generationっていうような枠組みで、DecodingだけじゃなくてそのDecodeした結果を最後どう使うかみたいな含めて、Meta Generationというふうに呼んでますけど、Paralell SearchとかStep Level SearchとかRefinementと言われるような枠組みの研究も出てきていますというような話をしました。 + + +最後に補足して僕のパート終わろうと思いますけど、同じ計算資源のときにパラメータ増やすのよりも推論資源を増やすのが有効なのかっていうのが問いとしてあると思いますけど、o1の場合だと、訓練時のスケールは同じままって推論時のスケールを増やしたら、より賢くなりましたって話でしたけど、どっちにするのがいいのかっていう意味で言うと、GoogleDeepMindが8月に論文としてまして、Scaling LLM Test-Time Comupte Optimally can be more Effective than Scaling More Paremetersっていうことで、良いらしいというふうに言われてます。厳密に言うとこれなんかタスクによって違うということなので、良いとまで言っていいのかちょっと若干誇大広告な気が個人的にはしてますけど、そういったことを検証するような研究も出てきていますので興味ある人は見てもらえばと思います。 \ No newline at end of file diff --git a/day3/data/LLM2024_day4_raw.txt b/day3/data/LLM2024_day4_raw.txt new file mode 100644 index 000000000..28b33f648 --- /dev/null +++ b/day3/data/LLM2024_day4_raw.txt @@ -0,0 +1,148 @@ +早速内容ですけど、目的はタイトルの通りですけど言語モデルスケール3について学ぶってことで、大規模言語モデルっていうふうに呼ばれてますけど、Cちょっとスケール足の話とか初回も少ししましたけど、これだけ大きくなっている一つの理由になってますのでそのスケール則ってどういうものなのかとかそれがなぜ重要なのかっていうところ、説明できるようなってもらうというところと、スケール則ってどうやって求めるんでしたっけというところを説明実装できるようないうところについて中心的に話していければと思ってます。 +あのスケールするっていうところではタイトルの通りなんですけど、ちょっとこれスケーリングPretrainingってなってるんですけれども、ちょっと最近はですね、このPretrainingだけではなくて、推論をスケールさせるというような話も出てきてましてせっかくなのでその最近の話題ということですレンジのスケーリングことでちょっとタイトル詐欺が入ってるんですけどPretrainingだけじゃない、スケーリングを扱うということでちょっと若干あのタイトル詐欺なんですけども、あの最近の話題ということで水土日のスケジュールについても話していきたいなと思っています。 +練習では2のポイントに近いですけどスケール則を実際に求めるというところでその行動を実装できるなってもらうということを目的としています。では早速ですけど中身に入っていきたいと思いますちなみ余談なんですけどこれ実はDay4が去年から結構変わってまして、大変Day4だったものをDay4とDay48に分けてるんですけども、開けたはずのDay4がなぜか90枚スライドがあるという状況でしてちょっと若干早口になって申し訳ないんすけど少し資料を補足としてやっていただきながら自覚できるようにしてあると思いますんで、何かわかんないとこあったら資料読んでもらえると思います。 +目標の通りですけれども大きく四つの話をしたいと思ってます。最初がスケール則とは何かそもそもどういうものだったかっていうところをご説明したいと思ってます。何かっていうのを先に学んだ後に、なんでこれ学ばなきゃいけないのかこれ知ってると何のいいことがあるのっていう意味でスケール則どういうふうに使ってるのか、他にどういうふうに使われてるのかってとこについて、2個目でお話したいと思います。 +三つ目がそれをどうやってまとめるとか、練習に関係するところですね。最後に新しいトレンドっていうことでちょっと時間の関係で若干駆け足なるかもしれないけど解け推論時のフィーリングっていう最近の法案とかも出てますけどその辺で使われている技術について、SEP使われているとされている技術についてちょっとお話したいなと思ってまずスケール則とは何かっていうところですね。 +あの最初にも言った通りですけれど、スケールっていうのは、その大規模言語モデルを支える一つの大きな要素になってます。言語モデルっていうところがDay3でやりましたけれども、最近はTrasnformerになっていてまたNASAの中にもいろいろ種類があるということで発展的課題がまたコミュニティの方であるってありましたけども、基本的にはこの言語モデルを作る技術について言語ってどういうものですかっていうのをDay3でパターンだかなと思います。 +Day4ではこの大規模っていう側にフォーカスを当てまして、どうスケールさせるのかとか、なんでスケールさせることが有効なのかそれを支えるあのスケール則っていうものについてお話したいと思います。講義全体の位置づけも少しおさらいしておきますとます今日までが行った事前学習と呼ばれるような枠組みの話になります。 +また非常に大規模に学習データで訓練するっていうプロセスです。そっから次回以降はFine-Tuningってことで少しまた違う話をしますので一旦今日までがあの話の区切りだと思ってもらえればいいかなと思います。 +あの中身に入っていますこちらのこのスライド初回にもお見せした通りですけれども、第9言語モデルと呼ばれるものが進展していますということですあのこのサーベイ論文紹介にも紹介した通りですけど2023年の間に13回ぐらい更新されるぐらいモデルがどんどん出てると、2024年だって今年になってもいろいろなモデルが出たり、なんか巷で試されて実はこれは良くないんじゃないかと言われたりいろいろしているというような状況になっています。 +それからこれも最初紹介に示した通りですけども、基本的にこの裏側にはスケール化というのが進んできています。元々2018年ぐらいが117Billonだったのが、2020年には175Billonと1000倍ぐらいです企画なっていてGPT-4は1Billon以上だというふうに言われています。 +今年でこのスケールっていうのがやっぱ重要な要素になってきています。こういうスケールしてるわけですけど、何でこんなにスケールしてるのかと、あるいはこのスケールするってどういうことなのかっていうのを今日は話していきたいと思います。 +特にですね背景にあるのが一番よく出てくるのがスケール則と呼ばれる経験則でして、最初の方ではこの二つの論文を中心に説明したいと思います。一つがOpenAIが2020年に出した論文でして、スケーリングを4ニューラルarg1モデルというようなもん論文になっています。 +これちなみにGPT3が2020人、このスケーリング動画でたあの半径約半年後ぐらいに出てまして、GPT法の中でもこのスケーリング論の話とか出てくるようなものになってまして基本的にこのGPT3が開発された背景に、こういうスケール則の発見というのがあったというふうに言われています。 +もう一つがこれを少し拡張した形の研究として取りコンピュートPRRAGモデルというような研究がありますこれ、当時のDeepMind今GoogleDeepMindですけど、が出した論文でしてこのスケール則の考え方を使って、どういうふうなデータと、どういうふうなモデルサイズを用意すれば良いモデルが作れるのかっていうのを検証した論文になってます。 +この辺り中心にいろいろな研究をされながら今日はご説明できればと思ってます。早速スケール則とは何かっていうところについてこのスライド自体は初回に多分お見せしたかなと思いますけれども、どういうものかっていうのをおさらいすると、基本的な計算資源とデータサイズ厳密にtoken数ですね、学習に使っているtokenの数とモデルのパラメータ3LMっていうのに誤差、その学習に使ってるGopherですね。 +学習とかせっかくテストデータにおける誤差の範囲他にこういう経験則がある経験則が存在するというような物差しことを指したあの言葉になってますどういう経験則かというと、例えばわかりやすいのが右側のパラメータなのでパラメータの方に注目すると、この青い点を打つっていうのが、実際にどれぐらいのパラメータを使ったときに、どれぐらいの損失だったかっていうのを表してますけれどもこれをプロットすると、両対数グラフ要は中のN乗みたいな形で書いたときですね、にこういった綺麗な直線になるというのが、要は補足になってますね。 +これがパラメータだけじゃなくて、データサイズだったり、計算量に対しても、横軸をそれぞれ変えてやったときに、同じように、こういった対数空間上での線形のスケールが成立しますよというような経験則になってます。 +何か細かいことを一応書いてますけど一応これ要は前が実測値になってまして、この実線みたいなのが、予測値センタリングですね、が予測値に該当してます。これあとは他の2変数は十分に大きいと仮定したときのあの実験結果になってます。 +一つ一つ見ていきますと今見たのと同じ順の話ですけどパラメータ数についてのピックアップしたのがこの次にあります。さっきと同じ50-50-70の9乗って形で横軸が対数の対数グラフになってまして例えば黒線とBで対数化された値になっています。 +これを見ていくと非常に綺麗にちょっとガタガタ若干してますけど、巨視的に見ると、大体この黒いフィッティングした線と同じオフィスPNGした線がこういう上のような形ですね。ちょっとこれが何の形かあとで説明します。 +それから次の図がデータセットのところについてピックアップしたものですけれど、さっき言った通りデータサイズって言ってるのは基本的なtokenの数だと思ってください。10の8乗tokenとか10の9乗tokenっていう単位これについてもパラメータと同様に点の値をプロットしていって、その間をフィッティングしてると非常に綺麗な関係が見えることがわかるかと思います。 +最後が計算資源でして計算資源だけちょっとわかりにくいんですけどまず横軸がこのPFLOPSDというのになってます。PFLOPSテールっていうのが何かっていうとこのFLOPSというのが必要なLIMAPFLOPSをまず説明しますと一応補足というか知ってる人は聞き流してもらえばと思いますけど、KKさんごめんなさい計算量子計算ってのはどれぐらいの浮動小数点演算を行っているかを表してる単位だと思ってください。 +フードロス天山っていうのはコンピュータしてる人とあると思いますけどパラメータの足し算と掛け算に該当してまして細かい話するとディープラーニングの場合だと普通FP32とか案1、1Byteですね、の計算が使われるので1Byte同士のか、足し算みたいのが、1演算で掛け算は1演算という形で表せるになってます。 +これなんか右下に巨大何か一つMLPって書いてますけど、このWをかけるみたいな、これが掛け算に相当しますし、例えばバイアスを足すみたいなもバイアスを足すということで基本的にニューラルdtypeの計算ってのはこの浮動小数点のパラメータを足したりかけたりするというので払わすことからできることがわかると思います。 +紛らわしいかっていうのちょっといっぱいしてもらえばいいと思うんすけど、この合計の浮動小数点演算の数を表すものとして、FLOPSというのが使われています。ごめんなさいこれまたこれもPが取ってるとおかしいですけどFLOPですね。 +知ったあのフロックの数ということでFLOPSが使われる。さっき横軸がこの要は浮動小数点演算の合計の数になっているというふうに理解いただければと思います。ちなみに紛らわしいって書いたのが大文字のSのFLOPSっていうのもありましてこれがフローティングポイントOperationperSecondsっていうものになってまして、1秒間当たりどれぐらい計算できるかっていうのものになってます。 +これあのGPTの仕様書とか見ると、こういう感じでFP64とかFP32でQ例えばこれ189.5TFLOPSみたいな書いてあるんすけどこれは要は、1秒間当たり何回計算できるから、基本的にはハードウェアのうち、あの計算能力を表す単位だと思ってもらえばと思いますちょっと戻りますけど、ちっちゃい小文字のSは全体でどれだけ不動勝データが必要かというものを表すものといえば若干違うということでご理解いただければ要はあのスケール則を見たときに別に演算能力が上がってるわけではなくて合計必要な計算量が上がってるというふうに理解いただければいいとあのスケール則の方に戻りますと、パラメーターの話とパラメータってデータサイズトップスの話と若干違うとこがありまして県じゃなくてこういうなんか曲線が打たれてます。 +あのこの曲線っていうのが、あのこの図では、あのこともあるValueサイズって、学習したときの学習曲線をイメージして意味しています要は横にいくほどだんだん計算量がかかってくるので、学習したときのこの1個1個の学習曲線がこの青いなんか薄い線に対応してると思ってください。 +これ例えばこの特定のパラメータで学習したときの癖がこの1個の中に該当するということで、あの別のものが違う線でさらに違うものが、これ例えばN-gramN-gramRAGが一番大きいので計算時間計算量が書かれてN-gramが真ん中ぐらいでこれぐらいの計算でメニューがこれぐらいで計算するっていうような意味合いで声を変えてやったときにこのオレンジの線っていうのはこの一番ベストな条件この計算量を取ったときに、一番いい条件で落ちたときの3値っていうのがこのオレンジの点線でピッキングされてるというふうに理解いただければといて、これモデルサイズが小さいときは最初早く学習が進むわけですね計算量が少なくても性能が出るので計算量が少ない前提だと、モデルサイズがちっちゃい方がいい。 +逆にモデルサイズが大きいと、なかなか学習が進まないんですけど、最終的な性能が良くなるということでこれが最適なパレットみたいのが存在するということです。ちなみにこれは読み方というか使い方に近いですけれど横軸テストロスをある値にしたときに、どういうものが良いモデルかっていうのは、この横をコピーといけば大体わかってこれちょっとパラメータ数がいくつかってのはわからないですけどこれN-gramぐらいがいいってことでめちゃめちゃ大きければいいというわけでも小さければいいわけではない。 +ことがわかりますし、自分が計算資源どれぐらい持ってるとき、何かパソコンを何か100台ぐらい持ってますとか何か自分が使える計算量がわかってるときにも、これをPと弾いてると大体これぐらいのパラメータを取ればいいんだなってことでそれがわかるということになります。 +これか。これがあのスケール則の詳細ですねコンピュートのところ以外は割とわかりやすいですけれど、こういった関係が整理するってのがスケール則と呼ばれているものです。若干細かい補足なんですけれどというかあの、さっきからこの謎の値が書いてあったと思うんすけど一応詳細に見ておくと補足なんで理解した人だけでいいですけれどこれよく見るとこういう劇場の関係になっていることがあります。 +超えるっていうのがロスですね、IT化したりとか小さくしたいもので、ちょっとこれ若干順番が違うXCっていうのがこの例えば2.3掛け10の8乗みたいな、これがコンピュータの場合ですけど、計数に該当していて、アルファがこのマイナス0.05みたいな対応するということでこれ今コンピュータの図だけ出してますけど、他のものも同じような形をしています。 +これ何で両対数にすると線形になるのかっていうことですけどこれログ取れば明らかで、どっちもログ取るとこういう感じになるので、logX氏がこれ横軸なんで円形の普通の一時の資金でαが傾きのませんみたいな感じになることがありますαRAGXCが設定みたいなもんですねそういった形になるので、このスケール則というのはどういうこの劇場の形で書けるのでスケール速度というふうに言われています。 +ここまでスケール則の話をしてきましたけど、あのそうですねモデルサイズがまだ小さい状況でマスク不足っていうのを検証してましたけど、さっき半年後ぐらいにGPT3が出ましたよって言いましたけど、GPT3でもこのスケール則ってのを検証しているってことが報告されてます。 +さっきのあの学習のときと同じような図があの論文には載っていて、これ色がそれぞれパラメータの違いに該当しています黄色が一番大きくて青が一番ちっちゃい紫かな。ちっちゃいモデルになってます先行研究、さっきの今まで話しててね、より2桁オーダーが大きいモデルにおいても、これ厳密に言うとまだ収束してないように見えるんですけど、おおむねスケール則が成立してるっていうことがGPT制度の部分だと報告されています。 +あのスケール則についてここまで他の多分一番有名なのが先ほどのから話しているトレーニングじゃないスケーリング方ニューラルスケールの1モデルというものなんですけれど実はこのスケーリングっていうの自体スケーリング則スケール則が成立するってこと自体は、もうちょっと前から知られていたというふうに言われています。 +ちょっと僕ももしかしたらもっと昔からあるかもしれないんでそこが知ってる限り少なくとも1017年の論文では検証されているということが言われてますこのディープラーニングスケーリングREPLUGandREPLUGとなる勾配Qが出してるのと言います。 +ちなみにこれ今日話さないんですけど理論的にどういう条件だとスケール則が成立するのかっていうのを議論していたりもするのでもし興味ある人はこの論文化後スタンフォードのレクチャーでこの辺触れられていたのでもし興味ある人は見てるんだと思います。 +少しだけ内容に触れますと、この論文では当然2017年なんでこれTrasnformerがあの出たか出ないかぐらいの時期なのであのTrasnformerのスケール則っていうのはやってなくて、LSTMだったり、RLHFというか、リカレントハイウェイネットワークっていうちょっと何ていうか、LMのアッシュみたいなものをですね、かなり時系列のデジタルネットワークみたいなことを使った研究になってます。 +これ見てもらうと横軸がトレーニングデータセットのサイズです縦軸がロスですね、ログスケールのロスになってまして、さっき見たのと同じような横線の図が広がっているというふうに描かれていることがわかるかと思います。 +そうですねこれそうですね厳密に言語モデルじゃなくて新トランスレーションの結果だったということです。あとは異なるとして対象モデルが違うってことでTrasnformerじゃないモデルを使ってますよとか規模も全然違うものですけれども、初期的にはこういった結果も知られていました。 +それをスケールアップさせたのが先ほどのプレーンの研究だというふうに説明できるかなと思います。それから野本のプレーのログに戻りますと、今言ったようなLSTMの比較みたいなLMにおける3スケール則みたいなことも、この論文でも検証されていまして、左側がモデル構造が違うんですね。 +Trasnformerの場合はスケール則がごめんなパラメータ数が横軸になってますけどこういうふうになると、LLMの場合の一掃にソヨンそうなのでそれぞれ計測と書くとこんなふうになりますよということで、Trasnformer以外のスケール則っていうのもあの研修をされて、深さについても検証してまして、これも他のモデルが何だったかちょっと忘れちゃったけどリスキーだったような気がしますけどそう変えたときにどういうふうな変化するかっていうのをこういった形でプロットするようなGENIACすることができます。 +ポイントはTrasnformer以外でも別にあのスケールするっていうのは成立概念だということです。なんでこんなTrasnformerだけ注目されてるのかってのは後で話します。それからこれは補足に近いですけど、Trasnformerの中でよく知ってる人だと最近はLlamaMIXWebXBERTって呼ばれるモデルがよく使われているということを知ってる人も多いと思いますけどこのミクスチャーExpertにおいてもスキル不足が存在するってことは言われています。 +多分他にもあると思うけど代表的な論文で上の田上が初期でしたが最近なんかちょっとやり方を変えている足を検証してるものが下にありますけど、例えばこんな感じで実践が、先々がごめんなさい点線がうんTrasnformerで実践がこのミクスチャーGLUEExpertと呼ばれるモデルをスケールさせたときにどういう変化をするかというものを見ているものですけど、こういった形でできちゃうエキスパートにおいても、スケール則が成立するとかなり綺麗な関係が成立するということが言われています。 +このMoE自体はちょっと今日の今回ではないのでMoEがどういうモデルかっていうのはD8を楽しみにしておいてもらえばと思います。ここでポイントはTrasnformer普通単純なTrasnformer以外でも別にこのスケール則というのは、あの整理しているということです。 +それから基本的に今までの話は言語modelingなのでNEX次のtokenを予測するときの損失について縦軸としていましたけれど、それ以外にも他のドメインでもこのスケール則っていうのが整理するよっていうことも報告されています。 +これもオープンAIが出してた論文で、これ左がイメージのモデリングでテキストとイメージとかビデオとか3計算とかイメージっていうテキストとか何かHRAG今までと一緒ですこういったものが他のドメインでも成立するよということも言われています。 +それからもう一つの論文でChinChillaトレイにコンピュータOptimalっていうものがありますけれど、ここまでが1変数を制御している横軸1変数にして、他の二つの変数については際限がないというか無限にあるという前提での経験則でしたけど2変数を制限した場合の経験則っていうのも知られています。 +それが有名なのがこのトレーニングコンピュータOptimalRAGじゃないじゃなく1モデルというものでしてそれが左側の実験結果右側がPaLMと呼ばれるGoogleが出したValueのバージョン2のPaLM2というモデルがありますけど、そのときにホワイトペーパーから取ってきたやつになってます。 +どっちも同じようなふうになってますけれどこれていうのはそれぞれの、例えば左側を見ると、各68とか119と書いてますけど、この618とかが計算量使える計算量を意味してると思ってください。なので例えば左上のこの薄いやつ、薄い緑のやつは、それぞれ6位、18の計算量を使って、何かを変化させるというものです。 +その何かっていうのがこのパラメータになってまして、例えばこのなんかどこだろうこの線を見ると、いくつなんだろうわかんない100ミリオンとか、この線を見ると300ミリオンとかぐらいをパラメータに割り当てた場合、ということになってます。 +当然パラメータを増やしたり減らしたりするだけだと、計算量っていうのは変わってしまうので、この場合は学習時間は固定していてtoken数を変更させているっていうなものになってます。なんでこの丸はそれぞれ学習時間とtoken数が変化しているというふうに思ってください。 +これをいろんな計算時間に対して見ていくと、どれも概ねこのYouTubeというかの下側に凸な形になっていることがわかると思います。これ要は最適な値がありそうだということですね。ある計算量を考えたときに、めちゃめちゃ巨大なモデルを使うでもなく、めちゃめちゃ小さいモデルを使うのではなく、最適な値がありそうだということがわかると思います。 +右側も同じような結果ですね、あの形は微妙に違いますけど大体同じようなことわかると思います。これがあのChinChillaの論文でしてこれの使い方もまた後で話します。ここまでがあのスケール速度は何かのまとめでして、スケール則っていうのは毎回おさらいすると、計算資源とデータセットからMetaと誤差の間にはこういった経験則がそうですよ。 +こういうべき乗則で書けますよっていうのが原則でした。両対数グラフで線形なるなこれを他の業態数取ってやるとわかるということも説明しました。それから一番有名なのはTrasnformerで本当のスケール則ですけど、それ以外のモデルでも成立しますし、言語以外のタスクでもスケール則ってのは確認されていますという話をしました。 +それから1変数を制御するのではなくて複数の変数を制御するような経験則も知られていて有名なBERTChinChillaと呼ばれる経験則がありますChinChilla論文って確かにここまでで計測スケール則の話をしたんですけどChinChillaのところで少しパラメータ数とデータセットサイズ、それぞれいじって計算量を肯定しますよって話をしたのでちょっとその補足をしておきたいと思います。 +これよく出てくる式、あの経験則のケアの近似式なんですけど、学習に必要な計算量ってどうやって計算してるんですかっていう話があると思います。これはどういうかけるパラメータ数掛けるtoken数っていうふうに、あの計算されることが多いです。 +これ例えばGPTの場合だと175BillonがNに相当します。0.3テラとBillon寺川TB寺tokenがDに相当するそれに6を掛けたもので3.1草刈ってますFLOPS23兆FLOPSですねファン.14掛ける10の2030分になるというふうに計算できます。 +これ近似って書いてある通りこの6っていうのは近似なんですけどこれは概ねなんでこの6かっていうと、これ興味ある人だけでいいですけど、いっそ当たり1パラメータあたりのMLP層における計算が6回あるということに起因しています。 +これアニメーションついてるんすけどアニメーションめっちゃ早いんですけど、基本的には1回MLPを計算するときに、フォワード方向でかけて立つので2回でパッカードではそれが乗り換え行われるバックヤードで入ってきたときにかけて出すのと、自分が外に出す値を計算するときにかけて出すっていうので、4回あるので、大体1パラメーター当たり6回計算するというのでこの6という数字が使われています。 +これなんかよく謎の式として出てくるので少し補足しておきます。ちなみにこの近似って書いてある通りこれはあの雑な近似ではありますというか下にMLP層におけるって書いてある通りなんですけどMLP以外の層も当然あるのでそれ以外の層では違う値が実際には厳密には必要になります。 +ただこれ系列長が短い場合だと、ちょっと僕も正確にはEOSMLPの計算量の方が転移より低い系列が長いと転移の計算で大きくなってしまうんですけどそうじゃない場合基本的にMLPの計算力のがあの膨大なので大体無視できるでしょってことでこういった式が使われているそうです。 +最近はどんどんtoken数伸びてきているので、若干無視できなくなっている結構あり、あるかなと思いますしあと正式な正確な式の例っていうのもありましてこの実装とかだとこういう何かちょっと例えばエンベディングにかけるこれは同じですね。 +アテンションにかける3かけるシーケンシャルレングス×2モデルは×KeySize×Llamaヘッドみたいな、こういった感じで厳密にこういうふうに計算することができます。ただスケール則をやるときにはそのモデル同士の比較ができればいいので、多分そんなに気にしないで適当にこのFLOPSっていうのを計算してるんだと思います。 +はい。ちょっと補足でした。ちなみに補足がてらよく使うので見にくい図というか、考えてみてもらえばということでちょっと答え書いてないんですけど、さっきFLOPS大文字のSの概念と、あの計算量の話GPT3だと例えばこの3.14掛ける10の23乗ありますよって話をしましたけど、これを使うと大体GPT3の学習にどれぐらい計算時間が必要か、百選これが1000基あるといったときにどれぐらい必要かっていうのを見積もることができます。 +このFLOPSとかよくこういう計算にも使うので、興味ある人はちょっと計算してみてもらえばと思います。はい。今やらなくて大丈夫、回ればいいだけです。ちなみに言語モデル開発しようと思うと、めちゃめちゃよく使う意識でして、WebLab.Billonとか開発したときは裏でこういうCとかめちゃめちゃ飛び交ってました。 +これは裏話でここまでスケールとは何かについて話しましたがこれは何かっていうのは一旦理解できたとそういうべき乗の関係にあって両対戦すると線形になるんですね。1変数じゃなくて2編成の経験則ってのもあるんですけど、そういったことは理解できたと思いますけれどそれどうやって使うんですかっていう話を次していきたいと思います。 +これ同じですねこの劇場の関係が成立しますよというようなツールです。これがスケールアップでした。これどうやって使うんですかっていう説明をするにあたってちょっと使われてる例をいくつかピックアップしました。これGPT-4のテクニカルレポートから取ってきた図ですけれどこの緑が実際のGPT方のパラメータ数だというふうに言われていますこれが1になってます。 +これに対してGPT法では、それより先輩の1ぐらいちっちゃいモデルでのスケール則を図って、推論した結果、これぐらいの性能になるだろうっていうのをプロットして作ったっていうふうに書かれています。要はこれGPT-4例えばいくつかわかんないっていう現実はわかんないすけど、このパラメータを訓練する前にそれより小さいモデルでスケール則を検証して、これぐらいいくんですねと、これしっかりちゃんと性能上がるんですね。 +ちょっと確認したというふうに言われてます。こういった形で自分が持てる思ってるモデルを作ろうと思ったときに、モデルを大きくすることに意味があるのかっていうのを見積もることができる、あるわけですよね。これが使い方の一つですね。 +ちなみにこれ公開されてないときにちょっと計算してたんですけど、今回リーク情報出る前にちょっと計算してるんすけどこれ1で何か左端に100100ペタコンピュートっていうのがある。100下手だったかな、ピコピコですね。 +パピココンピュータっていうのが書いてあって、多分普通に計算すると、10の10乗より大きく500ってか、機構が確か10の10乗で、これが1だとしたときにもGPT政権はGPTになるので、500ピコが例えば10の3乗ぐらいのTrasnformerだとしたら少なくとも1取れるようにならなきゃいけないってことで、何かこれで大体推論できるなと思ってたにしました。 +しました。これはただの余談ってその他の使い方としてモデルを、どちらがモデルが良いかっていうのを比較することもできます。これどちらのモデルが良いのかって比較しなければ別に同じパラメータで比較すればいいんじゃないのって思うかもしれないんですけど、もうちょっと厳密に言うと、モデルをスケールさせるとしたらどっちのモデルがいいですかっていうように予測することができるように左側のこの二つの図は最初の前半でも少し話しましたけれど、左側がモデル構造を比較して、右側からMetaを比較してるものですけど、左側だと例えばTrasnformerだの方が、どうやらこれスケールさせてってもずっとよさそうだということがわかります。 +LSTMをスケールさせていってもTrasnformerを逆転することは、どうやらなさそうであるということが何となくわかるかなというふうに思います。右側の例だとそう変えてますけど例えば50-50ぐらいしかパラメータがないときに比較すると、これどんどんモデルが良いかわからない、どの層がいいかよくわかんないと思うんすけど、このスケール則を測ってると、どうやらパラメータ数を増やしていける前提だったら6層以上にそう増やしていった方が、そうするとということが予想が立つわけです。 +このポイントは実際にこれを計算する前にフィッティングしてやればあの外装というかちょっとさっきまでわかるということですね。GPT法の場合と一緒ですけどこれGPT実際作る前にこの曲線を引くことができるので、そういう形で小さいパラメータをすくっていろんなパラメータを検証してあって、大きいパラメータでどれぐらい、どういう関係になるかってのを予測することができるっていうのが一つの重要なポイントです。 +こうしたやり方はあの研究でもよく使われてまして、これもあのまんまという研究自体はちょっと紹介しないですけど、あの子のママと呼ばれる論文から引っ張ってきた図になってます。これ横軸って河川がいろいろ書いてるんすけどそれぞれ何か違うモデルですね。 +後から来るとか、Trasnformerとの様ですネットとかH3++ってこれがなんかTrasnformerじゃないやつらって試してる作られてるものなんですけど何が言いたいかというと論文でも実際このスケールをさせたときに、どういうふうになりそうかとスケールさせたときに、この論文兼主砲天和は勝てるのかっていうのが、実際研究されてたりもします。 +ちなみにこの論文ちょっと若干余談なんですけどTrasnformerとTrasnformer+Plusっていうのがありまして、これ確かTrasnformer+バッチのLlamaでLlamaで使われる構造で、Trasnformerが元のGPTの講座なんですけど、これ見ると結構スケール則が違うということもわかると思います薄いオレンジとオレンジでなので結構構造が大事だよということも実はこの部でわかったりします。 +あとは馬場っていうのがこの紫ってなんか強そうなんですけど、これが何かっていうのは多分D8でやるんじゃないかなと思ってこれも楽しみにしてもらえばとそれからちょっと似てる話ですけど効率性を効率的にやろうと思ったときにどうすればいいのかっていうのを話しることもできます。 +左側が横軸がtokenす縦軸がパラメータ数になりますけど、マクロ浅子田地区じゃないごめんなさい色がパラメータにどうしてもこれ見ると、例えばこれ若干直感に反することを言ってるところあるんですけど、あるパラメータを固定したときには、基本的にパラメータ数が大きい5面あるtoken数固定したときには、大きいパラメータのモデルが、サンプル効率がいいロスが下がりやすいということがこの結果からわかったりします。 +それから逆に右側が横軸がコンピュートになっていて、色がモデルサイズであることは変わらないんですけどこれを見ると例えば10のマイナス3乗の生産量があるときには、これぐらいのコンピュータを使えばいいということがわかったりします。 +これ別に大きければいいというわけね。この辺の理屈は小さなモデルだと、学習がロスが下がらなくなるというのでちょっとあのスケール則を書いてるときに、なんか言っこのプロット説明者と同じような話ですけど、あの計算量が与えられたときに、どうやら、別にパラメータを増やせばいいわけではないいうことはわかりこの計算量が与えられたときにどれぐらいのバジェット、どれぐらいのパラメータ数とtoken数に割り振ればいいのかっていうのを、あの計算しようとしたのが、先ほど出したこの2変数の関係っていうふうに言ったChinChillaと呼ばれる経験則になってます。 +現実のChinChillaモデルの名前なんですけどなんかChinChilla則って言われたり、ChinChillaケースって言われたりするので、何かその辺を丸ごと足してChinChillaというふうに、大体呼ばれてると思えばと思います。 +左側の図は先ほど見せたのと同じで、それぞれの点があの色が、あの計算量使ってる計算量に相当してましてパラメータ数を変更させた場合です。右側の図が増えてるんですけど、これを各FLOPSで最適なパラメータに直したものっていうのが、この中央でこれを同じようにデータ数token数に対して、直したものが中央になります。 +っていうのはこれパラメータ見ると何か例えば13のE21を使えるんだったら、あのこの一番下のやつをピックアップしたやつか、この右側の真ん中の方に行ってきていて、同じように1枚、Q2で場合はぴって引っ張ってくるみたいな、やったときにどういう関係があるかっていうので、これを見てみると何となく大体線形っぽい関係にわかります。 +右側がtokenの場合の同様の例ですね。これをフィッティングしてると、例えばこれ貴重な値ですけど10度24錠よりちょっと低いぐらいの計算量が使えますよっていうときには、パラメータ数は63Billonにすればいいと同じように同じところが、これ取られてるんすけど、データ数がどれぐらいすればいいかっていうと、1.4という4tokenにすればいいということがわかります。 +エラtokenですねごめんなさいこうして作られたのがChinChillaと呼ばれるモデルになっています。これあのGopherっていうモデルがありまして、Gopherがこのじゃないごめんなさい、DeepMindが出してた、この前に出してたモデルで、これが280Billonでtoken数が0.3テラtokenというふうに言われてます言われますかというふうになってます。 +要はこいつと比べるとこのChinChillaっていうのはモデルサイズがちっちゃいんだけど、あのトレーニングtokenを増やしたとえそれはどうやって決まったかというと先ほど言った通りですけど経験則に基づいてどのぐらいのバジェットをパラメータに割り振ってどれぐらいのバジェットを遠くに割り振るかっていうのを、この経験則によって決めちゃった値を使ってやってやるということをしているものです。 +結果としてはこれで多くのケースより巨大なモデルに勝てるということが実験上示されています。これ左側のやつが実験で結果じゃないんで、ちょっと実験結果飲みたい人はこの元の6ミリValueだと思いますけど、あの巨大なモデルにかかってるということでこの関係性が良さそうだということが示されています。 +ちなみにこれも余談ですけどこのの求め方このChinChilla則ってのは実は何かいくつかの方法で求められてまして、それぞれ大体同じような経験則が出るってことが知られています。この関係式っていうのがよくこれも知られてまして、大体最適なtoken数っていうのが、パラメータ数に意地をかけたもの。 +これと同じですね。70Billonを訓練するのに1.4とBillonのtokenを使うということになってますのでこの式の20っていうのも謎のマジックナンバーとしてよく出てくるので覚えておくといいと思います。 +先ほどPaLM野津PaLM通の相撲を見せましたけど。普通でも同じような経験するが成立しますよということが言われています。これは同じなので割愛します。ここまで見るともうこのtoken数だけであのパラメータ数を、あるパラメータ数に対してtoken数を決めればいいあるいはtoken数が固定データセットサイズが限られてんだったら、それよりそれに対してあるパラメータ数で決めてしまえばいいんじゃないかっていうふうに思うかもしれないけど、これはそんなに簡単ではないということも調べています。 +って何のことですかというか今最適な割り振りっていうふうに言ってたじゃないかというふうに思うかもしれないすけど一つの観点は、さっき話したのは、訓練のバジェットだけを考えていたという点が、現実的ではあまりない。 +いうことがあります。これ左がのが訓練時のFLOPSをどうするかっていう話で、8日6時までに作ったやつ13Billonのモデルが例えばこんな感じのスキルをしたともうちょっとちっちゃいモデルを大量のデータで学習させたモデルは、あのこの黒い黒というか、若干項目色ですかね、みたいな線だとする。 +私です。これロスが同じような値を取るモデルっていうのをピックアップすることができて、この状況で比べるとやっぱり訓練のFLOPSは13.がいいとChinChillaOptimalな作り方をする方がいいということが左の図からはわかるんですけど今度はこの推論するということを考えたのがこの真ん中の図にあります。 +これ当然なんですけど、実際にはこのモデル学習した後に、皆さんGPTとかChatGPTとか使ってると思いますけど、みんなが使うときにも計算量がかかるわけです。この推論のときに使うかかるコストっていうのは当然ちっちゃいモデルの方が小さいさっき推論のコストが2回分とか22×Bだっていうふうになんかちらっと言いましたけど、それからするとこのコストが推論実にかかり続けるので、学習のコストだけじゃなくて色も考えると、あの名Billonの方が常にちっちゃいわけです。 +これが例えばこのぐらいのtokenだったときは、このぐらいのサイズときにこれ要はゆくゆくは絶対推論コストが低い方が逆転するんですよね。この右側出したやつですけどそうすると、このスピードん時のコストまで考えてやっていいモデルを作った方がいいんじゃないかっていうのが、あの考えてる人もいたりします。 +これがあのBillonとChinChillaLIMAというな研究になってる。この論文の結果を一つだけピックアップしましたけど、右上に書いてある数式は6NDPRっていうのが、学習時の盗掘に対して6Lさっきのマジックナンバーですね。 +おかげでDFってのがインフラ筋のものでこれにかけてる2をかけてなバックワードがないので、4回分の計算はないからですね。左の図がなんか綺麗な図が書いてありますけど、フランスtokenを増やしていったときに、ChinChillaケースに対して何倍にしていくかっていうのを、この色が表してます。 +これも当たり前なんですけど推論回数が多くなるほど、ライフタイム全体では、あの学習token増やすと要はケースを大きい方にする方が、あの、あるロスを見たときに、あの一番よくないということがわかります。あるtokenすですね、いたときに一番良いっていうのは変わっていくよっていうことがわかると思います。 +こういう考え方もあるねっていう話をしましたけど、これはLlamaとかでも、実際token数を増やすことが多いということにも多分繋がってるっていうふうに言われています。ちょっとさっきの図を持っていましたGopherというのが、DeepMindが元々作ってた巨大なパラメータを少なめのデータセットで学習したものになってまして、ChinChillaっていうのがさっき言った経験則によって学習したものになってます。 +これがあの係数が20このtokenをパラメータであった値が、20、20倍のtokenを利用しましょうということでしたけど、例えばLlama2だと学び7Billonでも70Billonと同じtokenを使ってますけど、7Billonのものに関しては1.8とBillonのtoken使ってるので、285倍のケース全然違う値を使ってるDense70Billonは28個Llama3に関しても、21470Billonが214倍、400倍Billonの方が37倍ということで、このChinChillaオプティカル実際に巨大なモデル、巨大なtokenの学習を使っているケースもよくあります。 +ここまでのまとめが透ける方どうかスペースをどう活用するかって話をしてきました。使い方としては投資するかどうか、大きいモデルを開発するかっていうのを割と予測できるというような使い方もありますしこれが実際実際GPT法の開発にも繋がったというふうに言われています。 +モデル選択もできるとパラメータを増やしたときに、どっちが読まれるかっていうのを実際にパラメータを試すことなく、そのモデルの巨大なモデルを作ることなく、その研修ときってのがいいとこだとそれからどれぐらい計算資源を割り当てるかっていうのでChinChillaを決めるっていうものがたり、そのChinChillaOptimal以外にも推論コストを考えたときの最適なtokenを議論する。 +が研究もなされています。ここまでがスケール速度活用法でしたけど少しだけ補足をいくつかしておきたいと思います。この予測不可の予測可能だというふうに言いました。スケール則ってのは先ほど言ったように、あの劇場の関係で綺麗なフィッティングができるので、予測ある。 +ある意味予測可能なわけです。だけど同時にこのサプライズというか予測不可能な部分っていうのもあるっていうふうにも言われていますこれがこれAnthropicっていうオペから独立したというか枝わかれした会社がありますけど、その会社が出してる部分ってPrettyandSurpriseにRAG1MetaRAG1モデルGPTAlignモデル化ブログに触れられていますけどこの予測不可能だっていうのがEmergentビート板、例えばEmergentabilityと呼ばれるなあの現象になっています。 +これ初回で話した通りですけど、例えばパラメータを増やしていったときに、元の計算が突然できるとかそういったものがありますというのが知られています。これ初回でフェアのために何か本当にそうなのかみたいな話を少し言いましたけどこれは実はミラージュ厳格なんじゃないかっていうなの研究も出ています。 +何を言ってるかっていうといろいろな話をしてるんですけど、これ要は性能の測り方に答えよるでしょうということを言ってなんか横軸が大変だってうんそもそも何かそのEmergentって言ってるけど何が創発なんすかみたいなそういった議論もありますけど、少なくとも何かこういうなんてQに何かできることができるようになるように見えるということが、起こるという期待もこういった言語モデル開発を加速させる要因の一つなのかなというふうに思います。 +それからこれもあんまり本題と関係ないですけど面白い現象としてブロッキングと呼ばれるものを存在しています。これ言語モデル自体ではないんですけど、ロッキングっていうのはめっちゃか学習させたモデルをずっと学習させ続けると、突然テスト生の場があるというような現象になってます。 +これはなんかARBって書いてますけどこういうに演算の関係を表しててだったらとかこういう何か表があってこの穴埋め問題を解くというようなタスクになってます。物とか、例えばそういうものをデータ数倍とか、この赤線がこの訓練の性能で、緑があのテスト制度なんですけど、横軸これオプティマイズのステップになっていて、なんか中の2乗とかから10の5乗とか中のスケール、じゅ、中のN乗のスケールなんですけどなんか最初めちゃめちゃ隠しほぼ解けないのに学習させた状態での学習を続けると性能が上がるというふうに報告されています。 +これもある意味予測不能なわけですね計算量を増やし続けると、大きなことが起こるという現象として知られています。これ何が起こってるのかみたいな研究としてはホットトピックの一つとして知られていて、これなんかREPLUGエディションの学習だっていうプレゼンテーションが学習されると、何かが起こるんだったら学生続けるとこういう表現なるんだという研究もありますし、何がどういう良い表現を獲得してるっていうことに繋がってるのかみたいなことも研究されていたりもします。 +個人的には面白い時かなと思ったんすけど、今日の話は少し関係ないねこのぐらいにしておきます。それから予測不可能な改善という話とも関係するんすけど、実際にはロスを下げたいというよりは何かのダウンストリームの性能を上げたいことが多いと思います。 +そういう意味で断3の性能を見た研究もありまして、これは学習以外のデータに対してのテストロスがどうなるかっていうのを見ています。だから仮タスクというよりはデータ分布が変わったときですね。これ見ると大体オフセットが違う実際のロスは違うんですけど、傾きはどうやらスケールしてとかっていうことがわかると、それからこれもコンピュートを指定したときですね横軸にとったときにパラメータはどのぐらいのパラメータだと一番いいかっていうので、これも大体綺麗な関係があるかわかると思います。 +一方でこういう軽い助けてあげるのかっていうとEmergentアビリティの話とだいぶ関係がだいぶ違うこと言ってると思うんですけど、実際にはこのいろんな関係があるっていうことも、検証されています。これ多分GPT法の論文でも議論されているものですしこのGPT3の論文でも言われてるものですけど、綺麗に上がるようなタスクもあれば、急に上がるものもあれば全然上がらないものもあるということで、実際には必ず上がるわけじゃないっていうのは注意してもらえばと思います。 +それからこういう何かインバース経路っていうのも知られていて急に悪くなるような、あのタスクも存在するっていうふうに言われていて、去年とかだと何かインバーススケーリングプライズっていうことで、スケールさせるほど精度が悪くなるタスクを見つける賞金が出るみたいな、そういうコンテストも開いてたりします。 +はいここまでがスペースの使い方ってことで話してきました。ちょっとどうしようかな1回質問に行ってもいいですよちょっとスケール足の話を全体でしてから質疑を受けようかなと思ったんで具体的な求め方についてもずっと話します。 +さっきからチラチラ言ってた通りなんすけど基本的にこれどう図るかっていうと、基本的にはいくつかの条件で実験してフィッティングするって言ってんのは、すごい単純に言ってしまうとそうなります。左側GPTC4の論文年から取ってきた図として説明したもんですけど、グレーのやつを例えば実験してみて、これぐらいのロスになるんだなっていうので、フィッティングするとこういうアプリになります。 +ちなみにこれ、なんでこれ鉛直せん断ないんだっていうのをすぐ説明しなかったですこれ縦軸が実は普通のロスと違ってBits-per-wordっていうのをやってて、多分2条スケールの押すんなってるからだと思います。 +右側も同じですね。この手各店について何かいろんな設定で実験してやって、それを結果を見るということをしてますけどよくよく考えるとスケールさせるときにモデルサイズどうすればいいんでしたっけとか、何をどういじるとモデルサイズが大きくなるんでしたっけ、どういうふうに言えばいいんでしたっけとかですね。 +あのモデルサイズ変えたときにハイパーパラメータってどうすんでしたっけそういった細かい問題が出てくる。最初の方ですけどモデルサイズどう変化させるかっていうので、前回やった、こういう図があると思いますけどモデルサイズ変えようと思ったら別にパラメータあの層の数を増やしても、いいわけですし、この埋め込みの次元各tokenの次元を増やしてもいいわけですし、その各随所に出てくるこのフィードフォワードネットワークっていうのの中間層の人上げてもいいですしヘッドを増やしてもそういうのあのパラメータ自体は上がるということで、これどれをどのぐらいやるんですかっていうのが細かく考えると重要になってきます。 +この辺は元の論文でも一応議論されてまして、これ三つを出してるんすけど例えば真ん中のがアスペクト比っていう、モデルのエンベディングのサイズですね。Tモデルっていうものを頭数で割ったもの、アスペクト比という縦横比みたいなもので幅と深さの比率をアスペクト比っていうふうにこの論文では呼んでいますけどこういったものを変えて実験してみたっていうのが最初の最初じゃないオペのスケーリングLoRA本部ではなさい基本的にはこの辺見るとなんかあんまり性能に影響ないっていうふうにこの論文では言ってますけど、この辺を気にしながらモデルスケールすることが多いです。 +気にしながらっていうのの実例を出した方がわかりやすいと思うので、実際にこれ開発者じゃないので、あの結果を見て推論してるだけなんで嘘ついてるかもしれないですけど例えばLlama3の論文を持ってくると8Billon70Billon405Billonって層の数モデルDimension埋め込みの数次元ですね、フィードフォワードの次元、アテンションの数っていうのを、こういうふうにしたよっていうふうに言われてます。 +これさっき言ったアスペクト比、縦横比がこのモデルイメージをLayerで割ったものなんで、これそれぞれ見ると128102.430ってことでこれ大体100から130ぐらい、なんかおおむね同じような値になっていることがわかると思います。 +それからモデルとフィードカードの事件数ですね、モデルの時限数に対しフィードバード事件数は3.5倍になっているということがわかります。これ約3.5かな。ちょっと自信ないですちょっとちゃんと計算したとかいった計算したら、ちょっと違ってたら教えてほしいんすけど大体3.5倍ぐらいあったとアテンションのヘッドはこのFAの時限数と同様にスケールしたモデルの次元と同様にスケールしているということがわかる。 +こういった感じで幅とかを大体同じようなケースで、なるべく伸ばしてくと、ただこれ、指定したパラメータ数にしようと思ったときに、当然どっかは完全には固定できないので、若干変わりますけど大体同じような比率でスケールさせているというようなことがわかると思います。 +それからこれセレブらすGPTっていう別の論文ですけどこれの論文を見るとこれちょっとさっきの時Llamaよりだいぶちっちゃいですけど、アスペクト比が大体上から76.877.785.385.3みたいな感じで大体これも同じような値になってて、モデルとFN次元がそれぞれ決まっていると、4.0となってて、ヘッドはちょっとこれもLaMDAとだいぶ規則変化してますけど、大体この辺を揃えているということが経験上わかるかなともう一つの話がハイパーをどう変化させるかで、これも同じ3プラスGPTというのを見てみると、例えばこのLRDKのタイプ理系ですね各種時に理系をどうするかで、ちっちゃいモデルとリニアにしてんだけど、1.3と2点弾はなぜかコサインで6.7リニアで小さいBillonはコサインみたいな謎のことをしていることがわかると思う学習率を見てみると、6.0E-野木6.090-4乗だったのが一点に影っていうのマイナス4乗になってたりこの辺が変化してるということがわかると思います。 +これなんでかっていうと、学習したことは方だったら得られたのと、言語モデルに限らずだと思いますけど、あのモデルのサイズとかによって結構この辺の最適なパラメータ数ってのは変わるっていうのは何となくわかるかなと思ってます。 +左が何かある論文から持ってきた幅を変化させたときの学習率がどのぐらいだといいのか、最適なのかってのをプロットしたものになってます。色が幅に対応していて、横軸が学習率を6にしたものですね。これ見ると例えば8192の場合だと、このマイナス16ぐらいにいいとこいますし、128の場合だとマイナス10ぐらいということです。 +要は経験則としてモデルサイズを大きくしたとき、大きくごめんなさい。大きくなってるのが大きい大きくしたときには学生とちっちゃくするってのが大体だということがわかると思います。SalesGPTもそうなってますバッチサイズを大きくするといいってのも経験則としては言われているこの図はちょっと関係ないですけどそういう形で実際にはそのパラメータをスケールさせたりする必要があるということに注意してください。 +ちなみにこれある論文って言ったんすけどμTrasnformerGopherっていう論文でして、この論文は実はこのパラメータを変える必要があるってことを主張してるわけじゃなくて、何かいい感じの方法を使うといい感じってだいぶ大雑把に言いましたけど、この幅によらず最適なこの学習率の値バッチサイドもそうなんすけど、同じできるよってことを主張してる研究だったりします。 +ちょっと面白いので説明したいとこなんすけど興味ある人は、論文見てもらえばと思います何してるかっていうと簡単に言うと、れるじゃないや、あの重みの書記官ときとかに、入力の数とかに応じて初期化を変えると思うんですけど、それにいたことを学習率とか、努力のウエートにして掛けてやるとするとこれがウエイトに対して最適な学習率っていうのがこのケースだけであの最適になるということを示している研究だったりします。 +ちょっと興味ある人は読んでもらえばと思い、これm3の何か活用方法だけここに行ってますけど、これUPって書いてあるのが、このさっき言った怪しい怪しくはないんですけどただいい、いい感じの初期化をするということをしたものでしてそれやると学習室が変わらなくても、いいよってことがSalesGPTの場合だと言われています。 +ちなみにLlamaの場合はなんかちょっと論文見たんですけどちょっと厳密によくわかんなくてなんか参照したよっていうふうに書いてあるんすけど実際ラーニング例とは何かちょっといじってるみたいなので、この辺どうやってるかっていうの多分論文とか図形なモデルによると思うのでちょっとモデルを実際興味ある人は見てもらえばと思います。 +スケール則の話がここまでで終わりなのがトレーニングですけどそこの話終わりますけど、基本フィッティングすればいいんですけどモデルサイズを気にする方モデル再度スケールさせるときにはハイパーどうするかっていうところが、あの結構実験的にやられてまして、ボディサイズについては大体なんか幅アスペクト例集みたいなもの、ぱぱっと深さの比率みたいなものを維持しながら受けさせますし、学習率とかはスケジュール、明日への徐々に小さくする、大きくしたときに徐々に着するとか、ある意味Trasnformerという技術を使ってたりするということをご理解いただければと思います。 +講義に戻ります。ちょっと練習の時間もあるのであと20分ぐらいで駆け足になりますけど、最後最近のスケールトレンドって話で生のGENIACLMの話をして終わろうと思いですねちょっとモチベーションから話すと、ちょっと頭で考えてみてほしいとか見れば一瞬で思うとんですけどバナナの色は何ですかって言われたときと、今日の講義聞いた上で、ゲームソフトの問題は何だと思いますかって聞かれたとき、多分あの考えることが違うと思うんですね。羽の色なんですかっていうと一瞬黄色ですねもしかしたら緑かもしれないけどぐらいですかね物によるかなみたいなおもちゃだったら違うかもみたいな、だんだんあの、考えていくといろいろ出てくるかもしれないすけど、少なくともスケール足の問題なんだと思いますかって聞かれたときに、今日の話からするとスケール則っていうのはこういうものだからどうだろうこの辺が問題かなみたいな考えとやっぱ思考としては違うってことは何となく思うかなと思います。なんか人間的にはこの二つって全然違うしあの、答えるのに必要な考え方っていうのも違うように思えるわけです。スケールって言ってる7Gのスケールって言ってるのはこういった形で、あの簡単なものについては簡単に答えてもいいですし、そうじゃなくて、あの考えなきゃいけない問題に対しては、考える時間を、に計算式を使うというふうにしたときに、これいいことがあるのかっていうような話になってます。二つで、ちょっと順番が前後しますけどこれの仕組みは言語モデルでも効果的ですかっていう話と、これをどう実現できるかっていう、こういう二つの話が最近のトレンドとして出てきています。効果的ですかっていうのが、最近大湾と呼ばれる論文が論文じゃないか、モデルがオペルから出ましたプレビューとして出てますけどこの法案で注目されていますこれあの論文にROMってかブログにあるとイエスって右側が訓練時の計算資源をスケールさせたときに、初めて何かロジックのベンチマークがあるんですけどこれをがどうなったかで何となくスケールしてると右側がテストTimeコンピュートっていうふうに書いてると思うんすけど、水温時に計算資源を増やしたときあるモデルを使うんだけど、簡単に答える方法と深く考えて答える方法みたいでだんだんコース計算式を増やしていったときに、性能がどう変わるかっていうのでこれもスケールしていってるということがわかると思います。こういった形で、要は考える時間をどうやら推論時に使うと計算資源を推論使うのはいいことがありそうだということがわかります。 +そうすると次の話はどうやって計算資源をスケールするのか計算量スケールするのかって話ですけど実は一番簡単な方法はいくつかもうこの講義でも触れていて一つは例えばチェーン相当使うっていうのもその一つです。チャームソフトを使うと出力するプロtoken数が増えますよね。その思考の過程を自分で出力するので、これってのはある意味計算資源を増やして使っちゃってるとフェアに言うと、直接答えるのと、tokenをいっぱい出して使う。答えるのは違うわけですよね。ありていに言うとかかるお金が違うわけですからそれから目にちょっとICLっていうのも、あのDay2で多分少し話したのかなと思いますけどPretrainingときに学習テキストに入れるQを、サイズを増やしていくとどうなるかっていうのでこれもスケールしますよということが言われてましたけどこういった形で簡単にこのPromptingのときに出力するtokenだったり、入力するtokenっていうのをいじってやると、計算量を増やすことができるので、なんでこの辺の研究から見ても明らかなんですけど、本当に間うまく考えるのに計算式が使えれば性能が上がりますよってのは、既にあの子のあのSTまでにも話してた話だと思います。 +それからDay3でもDecodingっていう仕組みを、あの話したと思います。このDecodingにもいろんな方法があってグリーンDecodingだと単純に一番いいやつを選んでいく、一番確率が高いやつ選んでいくので、すごい単純ですけど、こういうトップKeyを取るとかトップ系を取るとかして、最後に一番いいやつを選ぶみたいなことをすると、これも結局計算をたくさんしてることになるわけですね。1個選ぶわけじゃないので、次に評価しなきゃいけないものがどんどん増えていくわけなので、こういった形で増やすっていうのも一つのやり方として存在しています。これ何かDecoding方法の一覧ですけどこれ興味ある人いたら言ってください。 +どうしようかな。時間も関係あるんでなんか最近の例を一つだけ紹介するとコントラスト美Decodingというのは例えばいまして、Xとリップスティックって書いてあるこの軸にそうとする方法の一つ外部のモデル別のモデルを使う方法なんですけどこの研究によると単純に自分が自分自身のこの出力の確率を使うよりも、なんかしょぼい言語モデルの確率を割ってやったものを使った方が、現地ちょっとログで言うと引いたものですね。方が良い指標になっているということが知られています。これなんか多分僕、なんかよくよく話しすぎちゃうのってよく出てくるものじゃないものについてエキスパートモデルが高く値を出していたLlama5161ってのは普通はあまり出さないわけですけどモデル出さないんだったら、このベースラインとして引いてあるっていうか終わってると良いよっていうようなDecoding方法も出てきています。ここで今つらくSteamDecoding詳細を理解してほしいということよりは、Decodingのときにその他のモデルを使って性能を上げると、要はこのアマチュアモデルの計算がさらに増えるわけですけど、こういった形の概念として新しい手法も出てきていたりしますということで、 +それからここまでの実行DINGの話は基本的に次のtokenをどう選ぶかという話をしてましたけど、Decoding、次のtokenをどう決めるかだけじゃなくて、全体プロセス全体としてどういうふうな生成を行うかっていうのを一段広く、維持した上から見ましょうというのでMetaGenerationという言い方をするような研究も出てきています。このfromDecodingMetaGenerationというのが、6月かな、に出たサーベイでして、理論人の言語モデルで使うアルゴリズムを広くサーベイしたものになってます。この衣装がMetaGenerationて会員になってますけどちょっとこれがどういうものかについて説明していきたいと思います。そうね三つぐらい種類があるっていうふうに書かれてますられるサービスSEPVersaceリファインメントですけどちょっとこれ何か説明より具体を見た方がわかりやすいと思うんで、それぞれ具体を説明していきたいと思います。最後にこれをずっと振り返ったこういうもんだなと思ってもらえばいいと思います。 +パレスサーチの方法の一番代表的なのがベストベールと呼ばれるものです。これ要は、これをtokenだと今までの話と同じなんすけど文を何個か生成してみて一番いいやつを選びましょうっていうのが、このパラレルサーチの一番簡単なベストWebっていう方法ですね。一番いいのっていうのがいろいろ考えられて、LLMのスコアを使うっていうのが、これがビール産地とかそういう普通の美味さとかに相当するものですけどベリファイと呼ばれるような学習した評価機を使うような研究だったり、GLUEとか機械翻訳のときにGLUEとか、特定の指標を使うみたいで何かの外部の指標を使って、とりあえずN構成して、一番いいやつを、後で選びましょうとそういうアプローチになってます。ちょっとMBRDecodingの話しようかと思うんすけど時間がだいぶ生BERTかもしれない簡単に言うとこれがMRDecodingというのが最近機械翻訳で注目されてる一つの方法らしいんですけど、この例の中で言うとGLUEとかの指標を使っていいものを選ぶというような研究の例になってます。そうですね伊藤ですけどこの何か期待値の中にいうて書いてあるけど、このUっていうのが、このさっきこのスライドでスコアと、相当してましてGLUEとかMetaとか、いろんなものを使っています。これは実際にこれ人間のサンプルがこういう交換するとこういうコンセプト必要なんですけど、これをこのMBRだとやめていって牝馬の代わりにモデルから生成したものをサンプリングして期待値を取るみたいなことをやるのがMBRDecodingというやれるやり方になってるんすけどちょっと詳細が知りたい人は、だいぶわかりやすい資料が上がってましたのでこのURLから飛んでもらえばと思います。ここではこの、要はスコアを選んでいいものを選ぶというようなやり方でいろいろ発展してきてるんだということを理解していただければいいと思います。 +それからBestBillonとはちょっと違う方法として、N個を生成した後に、それらを集約するという意味では、Day2Day2Falconシステムをこの枠組みの一つとして入り、あの説明されます。セル仕込ん試験紙は下のようなもんですけど推論のことを応用したものになってて、言語モデルにCoTでのいろんなニーズにパスを出させて、まじないずB'zパスって書いてあるけどそのリズムパス出した後にこの一番よく出てきた答えっていうのを最終的にお答えするというようなやり方になってると思います。これもN個の中から1個選んでるわけじゃないんですけどN個出力して、それを集約する形でこのNCoTはそれぞれ独立に動くのでパラレルに動くので、さらに動かして最後集約するという意味でこのペアパラレルサーチの枠組みの一つの代表的な手法になってます。このアグリゲーションどういうふうにこの結果を集約するか、すいません。だったり、どういうふうにスコアをつけるかっていうので、いろんな手法が知られてましてこれもさっきのサーベイ論文に入っているので興味を引いていけばてもらえればと思います。 +今のパラレルサーチの中でマジョリティーコーティングとベストWebっていうのが出てきましたけど、これあるタスクこれ確か米数学のタスクだと思うんすけどタスクが載ってないんで興味ある人はこの論文見てもらえばと思うんすけど、例えば比較すると、普通にマジョリティーコーティングするのがこの黒線で、あの青線がこのベストオブLMで終わるって書いてあるけど、これアウトカムSupervisedリワードモデルってもので要は全体に対して、これが正しいか正しくないかを推定するのリワードモデル結果を水の推計するヤードモデルってのを用意してあって、Value&モデルにとって一番良かったやつは最後選ぶっていうそういうやり方になってます。マジョリティーボディーはN個出して最大のものを選ぶっていうやり方です。これやると比べると、リワードモデル使った方がいいよということが反応だと言われています。一応補足なんすよGPTが別にそのリワードモデルとか作る必要ないので簡単な方法であるっていう利点はあって、ベスト弁の方のRMっていうのは、リワードモデル別で学習しなきゃいけないってのが欠点としてあることは一応補足しておきます。 +それからこのオレンジをスルーして話したんですけど実際この論文はこのオレンジのやり方を提案してる論文になってます。それがこのPRMっていうものでして、PRLってのはプロセスSupervisedリワードモデルっていうふうに呼ばれています。あるいは何かあの論文にあったプロセスリワードモデルって普通に読んでるものもあります。これは全体に対して合ってる間違ってるっていうのを予測するんじゃなくて、このプロセスごとに合ってる間違ってるみたいのを予測するモデルを作る。というものですこれあの数学の問題みたいなプロセスがわかりやすいですけど、最初にレッツコールTheair夢DXみたいな感じでそれぞれのバスが正しいか正しくないかみたいなこれはユーザーが提出してる例ですけど、ユーザーの提出した例を使ってプロセスの正しさを予測してるということをしています。これをやるとさらに性能が上がるっていうことが左の図からわかりまして、これちゃんと説明しなかったですけど横軸がN個なんで生成するものですね数になってますけど、これ増やしていくとさらに性能が上がるということがわかります。このPRみたいなプロセスに対して評価を付けるっていうな説明をしましたけど、こういったやり方をするのがステップレベルサーチっていうふうにさっきのサーベイLaMDAとまとめられています。ごめんなさい。この一つ前の研究ではこのプロセスLayerとモデルのキーワードを使って、あのテスト勉強を選ぶってやり方をしましたけど、ベスト以外にも、このプロセスごとに塊を作って生成していってビームサーチみたいなことをすることもできます。要は最初この2個が良さそうだからこのニコイチに怒らせて、この、こいつからまた発生させて2個作ってまた次のステップ3の選んでみたいな。これを繰り返すっていう方法です。これ丸が一つのプロセスtokenじゃなくてプロセスに対応してましてというのが普通のビルサーチの違いですけどそういった研究もあります。ちなみにそういった研究もありますって言いましたけどこの月Web外っていうのをDay2で多分やったと思うんすけどこれがほぼ似たようなことをしていますみたいなことっていうのはこのリワードモデルっていうの使う代わりに言語モデルで、この状態が戻るいいものかこっからこれゲームを24-0ですけど、達成24になる数字作り方をしてくださいっていうときに、あのもう絶対に達成できない場合は、あの言語モデルがフィールドするというようなことをしているものですけど、そういった形でやってるっていうのも、言語モデルをあのリワードの評価として使っているあの例だとステップレベルサーチのあの例だと、いただければと思います。これもさっきと同様ですけど探索方法とか検証するステップの違いですね。どこですっていう検証するかとかによっていろんな方法が知られています。FSでは先読みしてやるみたいなことです。これもちょっと時間の関係で全体を割愛しますけど、これもさBloomにあるのでやってみようかなと +それから全然別のやり方でリファインメントと呼ばれるようなやり方もあります。これ概念図だけピックアップしましたけど、右側の黒いのが、なんかあの、対象の値ってこれを言語モデルが生成したものだとしたときに、これ自身を入れてやって、もっかい生成させるというようなことだったり、あるいはこの生成したものに対してフィードバックを、右側の左側の広い広いボックスに相当しますけど与えてやって再度生成するみたいな、そういったやり方をする研究もありますこれがリファインメントというようなやり方になってます。このリファイベントの代表的な研究がセルフリファインと言われるような研究がありまして左が概念図でさっきとほぼ同じですけど、なんか最初タスクを言語モデルに与えましたとこいつが出力した結果をあのモデル自分自身のこのセリフは研究だと自分自身で評価して、あとフィードバックを返すとそのフィードバックを行った結果を使ってもっかいリファインすると、このリファもこのセリフに入ると自分自身でやるんすけど、そういった枠組みの研究があります。右側例えば政令で上側のABCが一つの系列になってますけど、ダイアログが与えられたと会話が与えられたときに、このフィードバックって書いてあるのが、この左側の①のプロセスに相当するこれも言語モデルが出してるものでこのフィードバックを踏まえてリファインしたのがこの右側のものになります。ちょっと中身は呼ばないですけどこういった形で最初に生成させそれ何を変えるべきかっていうのも言語モデル生成して、最後にその何を変えるべきかというのを踏まえても改正するとこれを何回も何回も繰り返すっていうのはやり方になってます。こんなんで性能上がるのかって思うと思うんですけどこれが何か上がるらしくてですね、最大50パーぐらい上がるような例もあるっていうふうに言われています。結果は結果なので、一旦これぐらいしか +これでほぼちょうどですけど、最後に少しあの、前半では全体の訓練時のスケーリングをする話を基本的にしましたけど、最近ではこの推論値の計算量っていうのも注目するような研究が増えてきています。代表的なGPT法案とかですごく注目されてるかなと思いますし、今までやった方法までを学んだ方法も結構出てきたと思いますけど、Promptingを工夫するとか、Decodingを工夫するとかいうので、それにも発展的な方法がいろいろ出てきていますし、まめちMetaGenerationっていうような枠組みで、Decodingだけじゃなくてそのレコードした結果を最後どう使うかみたいな含めて、GENERATIONSMetaGenerationというふうに呼んでますけど、ただヴェルサーチとかステップでVersaceとかリファインメントと言われるような枠組みの研究も出てきていますというような話をしました。 +最後に二つ補足しておくのパートだろうと思いますけど同じ計算資源のときにパラメータ増やすのよりの推論資源を増やすのが有効なのかっていうのが問いとしてあると思いますけどオープンあの場合だと、訓練時のスケールは同じままっていうのちょっとスケールを増やしたら、より賢くなりましたって話でしたけど、どっちにするのがいいのかっていう意味で言うと、GoogleDeepMindか。1月に論文としてまして、スケーリングLLMthisTimeコンピュート口真理ちゃん日は増えてるっていうことで、良いらしいというふうに言われてます。厳密に言うとこれなんかタスクによって違うということなので、良いとまで言っていいのかちょっと若干誇大広告な気が個人的にはしてますけどそういったことを検証するような研究も出てきていますので興味ある人は見てもらえばと思います。 \ No newline at end of file diff --git a/day3/data/llm04_eng.json b/day3/data/llm04_eng.json new file mode 100644 index 000000000..7b1cfc09d --- /dev/null +++ b/day3/data/llm04_eng.json @@ -0,0 +1,62 @@ +[ + { + "content": "それからこれCerebrasGPTっていう別の論文ですけどこれの論文を見るとこれちょっとさっきの時Llamaよりだいぶちっちゃいですけど、アスペクト比が大体上から76.8,77.7,85.3,85.3みたいな感じで大体これも同じような値になってて、モデルとFFNの次元がそれぞれ決まっていると、4.0となってて、ヘッドはちょっとこれも論文だとだいぶ規則変化してますけど、大体この辺を揃えているということが経験上わかるかなと。もう一つの話がハイパラをどう変化させるかで、これも同じCerebrasGPTというのを見てみると、例えばこのLR Decayのタイプですね、学習時にDecayをどうするかで、ちっちゃいモデルとlenearにしてんだけど、1.3と2.7はなぜかCosineで6.7はLinearで13BillonはCosineみたいな謎のことをしていることがわかると思う。学習率を見てみると、6.0E-04(6.0掛ける10の-4乗)だったのが1.2*10^-4になってたりこの辺が変化してるということがわかると思います。" + }, + { + "content": "これなんでかっていうと、学習したことは方だったら得られたのと、言語モデルに限らずだと思いますけど、あのモデルのサイズとかによって結構この辺の最適なパラメータ数ってのは変わるっていうのは何となくわかるかなと思ってます。" + }, + { + "content": "左が何かある論文から持ってきた幅を変化させたときの学習率がどのぐらいだといいのか、最適なのかってのをプロットしたものになってます。色が幅に対応していて、横軸が学習率をlogにしたものですね。これ見ると例えば8192の場合だと、このマイナス16ぐらいにいいとこいますし、128の場合だとマイナス10ぐらいということです。" + }, + { + "content": "要は経験則としてモデルサイズを大きくしたとき、大きくしたときには学習率をちっちゃくするってのが大体だということがわかると思います。CerebrasGPTもそうなってます。バッチサイズを大きくするといいってのも経験則としては言われている。この図はちょっと関係ないですけど、そういう形で実際にはそのパラメータをスケールさせたりする必要があるということに注意してください。ちなみにこれある論文って言ったんすけどμTrasferっていう論文でして、この論文は実はこのパラメータを変える必要があるってことを主張してるわけじゃなくて、何かいい感じの方法を使うといい感じってだいぶ大雑把に言いましたけど、この幅によらず最適なこの学習率の値バッチサイズもそうなんすけど、同じできるよってことを主張してる研究だったりします。" + }, + { + "content": "ちょっと面白いので説明したいとこなんすけど興味ある人は、論文見てもらえばと思います。何してるかっていうと簡単に言うと重みの書記官ときとかに、入力の数とかに応じて初期化を変えると思うんですけど、それに似たことを学習率とか、出力のweghtにして掛けてやるとするとこれがweightに対して最適な学習率っていうのがこのケースだけであの最適になるということを示している研究だったりします。" + }, + { + "content": "ちょっと興味ある人は読んでもらえばと思い、これμTransferの何か活用方法だけここに行ってますけど、これμPって書いてあるのが、このさっき言った怪しい怪しくはないんですけどただいい、いい感じの初期化をするということをしたものでして、それやると学習率が変わらなくても、いいよってことがCerebrasGPTの場合だと言われています。" + }, + { + "content": "ちなみにLlamaの場合はなんかちょっと論文見たんですけどちょっと厳密によくわかんなくてなんか参照したよっていうふうに書いてあるんすけど実際learning rateとは何かちょっといじってるみたいなので、この辺どうやってるかっていうの多分論文とかにあると思うのでちょっとモデルを実際興味ある人は見てもらえばと思います。" + }, + { + "content": "スケール則の話がここまでで終わりなのがトレーニングですけどそこの話終わりますけど、基本フィッティングすればいいんですけどモデルサイズをスケールさせるときにはハイパラをどうするかっていうところが、あの結構実験的にやられてまして、モデルサイズについては大体なんか幅アスペクトratioみたいなもの、幅と深さの比率みたいなものを維持しながら受けさせますし、学習率とかはスケジュール、徐々に小さくする、大きくしたときに徐々に着するとか、例としてμTrasnferという技術を使ってたりするということをご理解いただければと思います。" + }, + { + "content": "講義に戻ります。ちょっと演習の時間もあるのであと20分ぐらいで駆け足になりますけど、最後最近のスケールトレンドってことで「推論時のスケーリング」についての話をして終わろうと思います。モチベーションから話すと、ちょっと頭で考えてみてもらえれば一瞬でわかると思うとんですけど、「バナナの色は何ですかって言われたとき」と、今日の講義聞いた上で、「スケール則の問題は何だと思いますか」って聞かれたとき、多分あの考えることが違うと思うんですね。「バナナの色なんですか」っていうと黄色ですね。もしかしたら緑かもしれないけど、物によるかなみたいな、おもちゃだったら違うかもみたいな、だんだんあの、考えていくといろいろ出てくるかもしれないすけど、少なくとも「スケール則の問題なんだと思いますか」って聞かれたときに、今日の話からするとスケール則っていうのはこういうものだから「どうだろう」「この辺が問題かな」みたいな考えとはやっぱ思考としては違うってことは何となく思うかなと思います。なんか人間的にはこの二つって全然違うしあの、答えるのに必要な考え方っていうのも違うように思えるわけです。推論時のスケールって言ってるのはこういった形で、あの簡単なものについては簡単に答えてもいいですし、そうじゃなくて、深く考えなきゃいけない問題に対しては、考える時間に計算資源を使うというふうにしたときに、これいいことがあるのかっていうような話になってます。これの仕組みは言語モデルでも効果的ですかっていう話と、これをどう実現できるかっていう、こういう二つの話が最近のトレンドとして出てきています。効果的ですかっていうのが、最近o1と呼ばれるモデルがOpenAIから出ました。プレビューとして出てますけどこのo1で注目されています。これあのo1の論文ってかブログにある図で、左側が訓練時の計算資源をスケールさせたときに、AIMEというロジックのベンチマークがあるんですけど、accuracyがどうなったかというと、何となくスケールしてる。右側がtest-time computeっていうふうに書いてると思うんすけど、推論時に計算資源を増やしたときあるモデルを使うんだけど、簡単に答える方法と深く考えて答える方法みたいでだんだん計算資源を増やしていったときに、性能がどう変わるかっていうので、これもスケールしていってるということがわかると思います。こういった形で、要は考える時間をどうやら推論時に使うと、つまり計算資源を推論時に使うのはいいことがありそうだということがわかります。" + }, + { + "content": "そうすると次の話はどうやって計算資源をスケールするのか計算量スケールするのかって話ですけど実は一番簡単な方法はいくつかもうこの講義でも触れていて一つは例えばChain of Thoughtを使うっていうのもその一つです。Chain of Thoughtを使うと出力するtoken数が増えますよね。その思考の過程を自分で出力するので、これってのはある意味計算資源を増やして使っちゃってると。フェアに言うと、直接答えるのと、tokenをいっぱい出して答えるのは違うわけですよね。ありていに言うとかかるお金が違うわけですからそれからMany Shot ICLっていうのも、あのDay2で多分少し話したのかなと思いますけどIn-Context LearningのときにIn-Contextとして入れる集合を、サイズを増やしていくとどうなるかっていうので、これもスケールしますよということが言われてましたけど、こういった形で簡単にこのPromptingのときに出力するtokenだったり、入力するtokenっていうのをいじってやると、計算量を増やすことができるので、なんでこの辺の研究から見ても明らかなんですけど、基本的にうまく考えるのに計算資源が使えれば性能が上がりますよってのは、既にDay3までにも話してた話だと思います。" + }, + { + "content": "それからDay3でもDecodingっていう仕組みを、あの話したと思います。このDecodingにもいろんな方法があってGreedy Decodingだと単純に一番いいやつを選んでいく、一番確率が高いやつ選んでいくので、すごい単純ですけど、こういうトップPを取るとかトップKを取るとかして、最後に一番いいやつを選ぶみたいなことをすると、これも結局計算をたくさんしてることになるわけですね。1個選ぶわけじゃないので、次に評価しなきゃいけないものがどんどん増えていくわけなので、こういった形で増やすっていうのも一つのやり方として存在しています。これ何かDecoding方法の一覧ですけどこれ興味ある人いたら言ってください。" + }, + { + "content": "どうしようかな。時間も関係あるんでなんか最近の例を一つだけ紹介するとContrastive Decodingというのは例えばいまして、Extrinsicって書いてあるこの表中の軸に相当する方法の一つ、外部のモデル別のモデルを使う方法なんですけどこの研究によると、単純に自分が自分自身のこの出力の確率を使うよりも、なんかしょぼい言語モデルの確率を割ってやったものを使った方が、厳密にはLogの場合には引いたものですね。この方が良い指標になっているということが知られています。これなんか多分僕、なんかよく話しすぎちゃうものやよく出てくるものじゃないものについてエキスパートモデルが高く値を出していた場合、例えば「1961」ってのは普通はあまり出さないわけですけど、しょぼいモデルも出さないんだったら、これをベースラインとして割ってやる(引いてやる)と良いよっていうようなDecoding方法も出てきています。ここでContrastive Decodingの詳細を理解してほしいということよりは、Decodingのときにその他のモデルを使って性能を上げると、要はこのアマチュア(しょぼい)モデルの計算がさらに増えるわけですけど、こういった形の概念として新しい手法も出てきていたりしますということです。" + }, + { + "content": "それからここまでのDecodingの話は基本的に次のtokenをどう選ぶかという話をしてましたけど、Decoding、次のtokenをどう決めるかだけじゃなくて、全体(プロセス全体)としてどういうふうな生成を行うかっていうのを一段広く、上から見ましょうというのでMeta Generationという言い方をするような研究も出てきています。このFrom Decoding Meta Generationというのが、6月かな、に出たサーベイでして、推論時の言語モデルで使うアルゴリズムを広くサーベイしたものになってます。この2章がMeta Generationて概念になってますけどちょっとこれがどういうものかについて説明していきたいと思います。そうね三つぐらい種類があるっていうふうに書かれてます。Parallel Search, Step Level Search, Refinementですけど、ちょっとこれ何か説明より具体を見た方がわかりやすいと思うんで、それぞれ具体を説明していきたいと思います。最後にこれを図を振り返ってこういうもんだなと思ってもらえばいいと思います。" + }, + { + "content": "Parallel Searchの方法の一番代表的なのがBest of Nと呼ばれるものです。これ要は、これをtokenだと今までの話と同じなんすけど文を何個か生成してみて一番いいやつを選びましょうっていうのが、このParallel Seacrhの一番簡単なBest of Nっていう方法ですね。一番いいのっていうのがいろいろ考えられて、LLMのスコアを使うっていうのが、これがBeam Searchとかそういう普通のBeam Searchとかに相当するものですけど、valifierと呼ばれるような学習した評価機を使うような研究だったり、GLUEとか機械翻訳のときにGLUEとか、特定の指標を使うみたいに、何かの外部の指標を使って、とりあえずN個生成して、一番いいやつを、後で選びましょうとそういうアプローチになってます。ちょっとMBR Decodingの話しようかと思うんすけど、時間がだいぶ迫ってるかもしれないので簡単に言うと、これがMBR Decodingというのが最近機械翻訳で注目されてる一つの方法らしいんですけど、この例の中で言うとGLUEとかの指標を使っていいものを選ぶというような研究の例になってます。そうですね今言った通りですけどこの何か期待値の中にUて書いてあるけど、このUっていうのが、このさっきこのスライドでのスコアに相当してましてGLUEとかMeteorとか、いろんなものを使っています。これは実際にこれ人間のサンプルを用いたこういう関数が必要なんですけど、これをこのMBRだとやめていてHumanの代わりにモデルから生成したものをサンプリングして期待値を取るみたいなことをやるのがMBR Decodingというやれるやり方になってるんすけど、ちょっと詳細が知りたい人は、だいぶわかりやすい資料が上がってましたのでこのURLから飛んでもらえばと思います。ここではこの、要はスコアを選んでいいものを選ぶというようなやり方でいろいろ発展してきてるんだということを理解していただければいいと思います。" + }, + { + "content": "それからBest of Nとはちょっと違う方法として、N個を生成した後に、それらを集約するという意味では、Day2でやったSelf-Consistencyをこの枠組みの一つとして説明されます。Self-Consistencyは下のようなもんですけど推論のCoTを応用したものになってて、言語モデルにCoTでのいろんなReasoning Pathを出させて、'Marginalize out reasoning paths'って書いてあるけどそのreasoning pathを出した後にこの一番よく出てきた答えっていうのを最終的に答えとするというようなやり方になってると思います。これもN個の中から1個選んでるわけじゃないんですけどN個出力して、それらを集約する形でこのN個はそれぞれ独立に動く(パラレルに動く)ので、さらに動かして最後集約するという意味でこのParallel Searchの枠組みの一つの代表的な手法になってます。このアグリゲーションどういうふうにこの結果を集約するかだったり、どういうふうにスコアをつけるかっていうので、いろんな手法が知られてましてこれもさっきのサーベイ論文に入っているので興味を引いていけばてもらえればと思います。" + }, + { + "content": "ここまでパラレルサーチの中でMajority VotingとBest of Nっていうのが出てきましたけど、これあるタスクこれ確か数学のタスクだと思うんすけどタスクが載ってないんで興味ある人はこの論文見てもらえばと思うんすけど、例えば比較すると、普通にMajority Votingするのがこの黒線で、あの青線がこのBest of N、ORMって書いてあるけど、これOutcome-supervised Reward Modelってもので、要は全体に対して、これが正しいか正しくないかを推定するリワードモデル、結果をすいてするReward Modelってのを用意してあって、Reward Modelにとって一番良かったやつを最後選ぶっていうそういうやり方になってます。Majority VotingはN個出して最大のものを選ぶっていうやり方です。これやると比べると、リワードモデル使った方がいいよと言われています。一応補足なんですがMajority Votingは別にそのリワードモデルとか作る必要ないので簡単な方法であるっていう利点はあって、best of Nの方のORMっていうのは、リワードモデルを別で学習しなきゃいけないってのが欠点としてあることは一応補足しておきます。" + }, + { + "content": "それからこのオレンジの線をスルーして話したんですけど実際にはこの論文はこのオレンジのやり方を提案してる論文になってます。それがこのPRMっていうものでして、PRMってのはProcess-Supervised Reward Modelっていうふうに呼ばれています。あるいは論文によってはProcess Reward Modelって普通に読んでるものもあります。これは全体に対して合ってる間違ってるっていうのを予測するんじゃなくて、このプロセスごとに合ってる間違ってるみたいのを予測するモデルを作るというものです。これあの数学の問題みたいなプロセスがわかりやすいですけど、最初にLet's call the numerator xみたいな感じでそれぞれのパスが正しいか正しくないかみたいな、これはユーザーが提出してる例ですけど、ユーザーの提出した例を使ってプロセスの正しさを予測してるということをしています。これをやるとさらに性能が上がるっていうことが左の図からわかりまして、これちゃんと説明しなかったですけど横軸がN個なんで生成するものの数になってますけど、これ増やしていくとさらに性能が上がるということがわかります。このPRMみたいなプロセスに対して評価を付けるっていうな説明をしましたけど、こういったやり方をするのがStep Level Searchっていうふうにさっきのサーベイ論文にまとめられています。ごこの一つ前の研究ではこのProcess Reward ModelのRewardを使って、あのBest of Nを選ぶってやり方をしましたけど、Best of N以外にも、このプロセスごとに塊を作って生成していってビームサーチみたいなことをすることもできます。要は最初はこの2個が良さそうだからこの2個を生き残らせて、こいつからまた発生させて2個作ってまた次のステップ3の選んでみたいな。これを繰り返すっていう方法です。これ丸が一つのプロセス、tokenじゃなくてプロセスに対応してましてというのが普通のBeam Searchの違いですけどそういった研究もあります。ちなみにそういった研究もありますって言いましたけどこのTree of SearchっていうのをDay2で多分やったと思うんすけどこれがほぼ似たようなことをしています。みたいなことっていうのはこのリワードモデルっていうの使う代わりに言語モデルで、この状態がいいものか、こっからこれGame of 24の例ですけど、足して24になる数字の作り方をしてくださいっていうときに、あのもう絶対に達成できない場合は、あの言語モデルがFailとするというようなことをしているものですけど、そういった形でやってるっていうのも、言語モデルをあのリワードの評価として使っているステップレベルサーチの例だと思っていただければと思います。これもさっきと同様ですけど探索方法とか検証するステップの違いですね。どこで検証するかとかによっていろんな方法が知られています。これもちょっと時間の関係で全体を割愛しますけど、これもサーベイ論文にあるので読んでもらいたいと思います。" + }, + { + "content": "それから全然別のやり方でRefinementと呼ばれるようなやり方もあります。これ概念図だけピックアップしましたけど、右側の黒いのが対象の値でこれを言語モデルが生成したものだとしたときに、これ自身を入れてやって、もっかい生成させるというようなことだったり、あるいはこの生成したものに対してフィードバックを、左側の白いボックスに相当しますけど与えてやって再度生成するみたいな、そういったやり方をする研究もあります。これがリファインメントというようなやり方になってます。このリファイベントの代表的な研究がSelf-Refineと言われるような研究がありまして左が概念図でさっきとほぼ同じですけど、なんか最初タスクを言語モデルに与えましたと、こいつが出力した結果をSelf-Refineという研究だと自分自身で評価して、あとフィードバックを返すと。そのフィードバックを行った結果を使ってもっかいRefineすると、このRefineもこのSelf-Refineでは自分自身でやるんすけど、そういった枠組みの研究があります。右側例えばの生成例で上側のABCが一つの系列になってますけど、ダイアログが与えられたと会話が与えられたときに、このフィードバックって書いてあるのが、この左側の①のプロセスに相当するもの。これも言語モデルが出してるものでこのフィードバックを踏まえてリファインしたのがこの右側のものになります。ちょっと中身は読まないですけどこういった形で最初に生成させ、それ何を変えるべきかっていうのも言語モデル生成して、最後にその何を変えるべきかというのを踏まえてもう一度生成すると。これを何回も何回も繰り返すっていうのはやり方になってます。こんなんで性能上がるのかって思うと思うんですけど、これが何か上がるらしくてですね、最大50%ぐらい上がるような例もあるっていうふうに言われています。結果は結果なので、一旦これぐらいにします。" + }, + { + "content": "これでほぼちょうどですけど、最後に少しあの、前半では全体の訓練時のスケーリングをする話を基本的にしましたけど、最近ではこの推論時の計算量っていうのも注目するような研究が増えてきています。代表的なGPT-o1とかですごく注目されてるかなと思いますし、今までやった方法、学んだ方法も結構出てきたと思いますけど、Promptingを工夫するとか、Decodingを工夫するとかいうので、それにも発展的な方法がいろいろ出てきていますし、Meta Generationっていうような枠組みで、DecodingだけじゃなくてそのDecodeした結果を最後どう使うかみたいな含めて、Meta Generationというふうに呼んでますけど、Paralell SearchとかStep Level SearchとかRefinementと言われるような枠組みの研究も出てきていますというような話をしました。" + }, + { + "content": "最後に補足して僕のパート終わろうと思いますけど、同じ計算資源のときにパラメータ増やすのよりも推論資源を増やすのが有効なのかっていうのが問いとしてあると思いますけど、o1の場合だと、訓練時のスケールは同じままで推論時のスケールを増やしたら、より賢くなりましたって話でしたけど、どっちにするのがいいのかっていう意味で言うと、GoogleDeepMindが8月に論文としてまして、Scaling LLM Test-Time Comupte Optimally can be more Effective than Scaling More Paremetersっていうことで、良いらしいというふうに言われてます。厳密に言うとこれなんかタスクによって違うということなので、良いとまで言っていいのかちょっと若干誇大広告な気が個人的にはしてますけど、そういったことを検証するような研究も出てきていますので興味ある人は見てもらえばと思います。" + } +] \ No newline at end of file diff --git a/day3/data/llm04_eng_nofix.json b/day3/data/llm04_eng_nofix.json new file mode 100644 index 000000000..d5d26d330 --- /dev/null +++ b/day3/data/llm04_eng_nofix.json @@ -0,0 +1,32 @@ +[ + { + "content": "それからこれセレブらすGPTっていう別の論文ですけどこれの論文を見るとこれちょっとさっきの時Llamaよりだいぶちっちゃいですけど、アスペクト比が大体上から76.877.785.385.3みたいな感じで大体これも同じような値になってて、モデルとFN次元がそれぞれ決まっていると、4.0となってて、ヘッドはちょっとこれもLaMDAとだいぶ規則変化してますけど、大体この辺を揃えているということが経験上わかるかなともう一つの話がハイパーをどう変化させるかで、これも同じ3プラスGPTというのを見てみると、例えばこのLRDKのタイプ理系ですね各種時に理系をどうするかで、ちっちゃいモデルとリニアにしてんだけど、1.3と2点弾はなぜかコサインで6.7リニアで小さいBillonはコサインみたいな謎のことをしていることがわかると思う学習率を見てみると、6.0E-野木6.090-4乗だったのが一点に影っていうのマイナス4乗になってたりこの辺が変化してるということがわかると思います。これなんでかっていうと、学習したことは方だったら得られたのと、言語モデルに限らずだと思いますけど、あのモデルのサイズとかによって結構この辺の最適なパラメータ数ってのは変わるっていうのは何となくわかるかなと思ってます。左が何かある論文から持ってきた幅を変化させたときの学習率がどのぐらいだといいのか、最適なのかってのをプロットしたものになってます。色が幅に対応していて、横軸が学習率を6にしたものですね。これ見ると例えば8192の場合だと、このマイナス16ぐらいにいいとこいますし、128の場合だとマイナス10ぐらいということです。要は経験則としてモデルサイズを大きくしたとき、大きくごめんなさい。大きくなってるのが大きい大きくしたときには学生とちっちゃくするってのが大体だということがわかると思います。SalesGPTもそうなってますバッチサイズを大きくするといいってのも経験則としては言われているこの図はちょっと関係ないですけどそういう形で実際にはそのパラメータをスケールさせたりする必要があるということに注意してください。ちなみにこれある論文って言ったんすけどμTrasnformerGopherっていう論文でして、この論文は実はこのパラメータを変える必要があるってことを主張してるわけじゃなくて、何かいい感じの方法を使うといい感じってだいぶ大雑把に言いましたけど、この幅によらず最適なこの学習率の値バッチサイドもそうなんすけど、同じできるよってことを主張してる研究だったりします。ちょっと面白いので説明したいとこなんすけど興味ある人は、論文見てもらえばと思います何してるかっていうと簡単に言うと、れるじゃないや、あの重みの書記官ときとかに、入力の数とかに応じて初期化を変えると思うんですけど、それにいたことを学習率とか、努力のウエートにして掛けてやるとするとこれがウエイトに対して最適な学習率っていうのがこのケースだけであの最適になるということを示している研究だったりします。ちょっと興味ある人は読んでもらえばと思い、これm3の何か活用方法だけここに行ってますけど、これUPって書いてあるのが、このさっき言った怪しい怪しくはないんですけどただいい、いい感じの初期化をするということをしたものでしてそれやると学習室が変わらなくても、いいよってことがSalesGPTの場合だと言われています。ちなみにLlamaの場合はなんかちょっと論文見たんですけどちょっと厳密によくわかんなくてなんか参照したよっていうふうに書いてあるんすけど実際ラーニング例とは何かちょっといじってるみたいなので、この辺どうやってるかっていうの多分論文とか図形なモデルによると思うのでちょっとモデルを実際興味ある人は見てもらえばと思います。" + }, + { + "content": "スケール則の話がここまでで終わりなのがトレーニングですけどそこの話終わりますけど、基本フィッティングすればいいんですけどモデルサイズを気にする方モデル再度スケールさせるときにはハイパーどうするかっていうところが、あの結構実験的にやられてまして、ボディサイズについては大体なんか幅アスペクト例集みたいなもの、ぱぱっと深さの比率みたいなものを維持しながら受けさせますし、学習率とかはスケジュール、明日への徐々に小さくする、大きくしたときに徐々に着するとか、ある意味Trasnformerという技術を使ってたりするということをご理解いただければと思います。" }, + { + "content": "講義に戻ります。ちょっと練習の時間もあるのであと20分ぐらいで駆け足になりますけど、最後最近のスケールトレンドって話で生のGENIACLMの話をして終わろうと思いですねちょっとモチベーションから話すと、ちょっと頭で考えてみてほしいとか見れば一瞬で思うとんですけどバナナの色は何ですかって言われたときと、今日の講義聞いた上で、ゲームソフトの問題は何だと思いますかって聞かれたとき、多分あの考えることが違うと思うんですね。羽の色なんですかっていうと一瞬黄色ですねもしかしたら緑かもしれないけどぐらいですかね物によるかなみたいなおもちゃだったら違うかもみたいな、だんだんあの、考えていくといろいろ出てくるかもしれないすけど、少なくともスケール足の問題なんだと思いますかって聞かれたときに、今日の話からするとスケール則っていうのはこういうものだからどうだろうこの辺が問題かなみたいな考えとやっぱ思考としては違うってことは何となく思うかなと思います。なんか人間的にはこの二つって全然違うしあの、答えるのに必要な考え方っていうのも違うように思えるわけです。スケールって言ってる7Gのスケールって言ってるのはこういった形で、あの簡単なものについては簡単に答えてもいいですし、そうじゃなくて、あの考えなきゃいけない問題に対しては、考える時間を、に計算式を使うというふうにしたときに、これいいことがあるのかっていうような話になってます。二つで、ちょっと順番が前後しますけどこれの仕組みは言語モデルでも効果的ですかっていう話と、これをどう実現できるかっていう、こういう二つの話が最近のトレンドとして出てきています。効果的ですかっていうのが、最近大湾と呼ばれる論文が論文じゃないか、モデルがオペルから出ましたプレビューとして出てますけどこの法案で注目されていますこれあの論文にROMってかブログにあるとイエスって右側が訓練時の計算資源をスケールさせたときに、初めて何かロジックのベンチマークがあるんですけどこれをがどうなったかで何となくスケールしてると右側がテストTimeコンピュートっていうふうに書いてると思うんすけど、水温時に計算資源を増やしたときあるモデルを使うんだけど、簡単に答える方法と深く考えて答える方法みたいでだんだんコース計算式を増やしていったときに、性能がどう変わるかっていうのでこれもスケールしていってるということがわかると思います。こういった形で、要は考える時間をどうやら推論時に使うと計算資源を推論使うのはいいことがありそうだということがわかります。" }, + { + "content": "そうすると次の話はどうやって計算資源をスケールするのか計算量スケールするのかって話ですけど実は一番簡単な方法はいくつかもうこの講義でも触れていて一つは例えばチェーン相当使うっていうのもその一つです。チャームソフトを使うと出力するプロtoken数が増えますよね。その思考の過程を自分で出力するので、これってのはある意味計算資源を増やして使っちゃってるとフェアに言うと、直接答えるのと、tokenをいっぱい出して使う。答えるのは違うわけですよね。ありていに言うとかかるお金が違うわけですからそれから目にちょっとICLっていうのも、あのDay2で多分少し話したのかなと思いますけどPretrainingときに学習テキストに入れるQを、サイズを増やしていくとどうなるかっていうのでこれもスケールしますよということが言われてましたけどこういった形で簡単にこのPromptingのときに出力するtokenだったり、入力するtokenっていうのをいじってやると、計算量を増やすことができるので、なんでこの辺の研究から見ても明らかなんですけど、本当に間うまく考えるのに計算式が使えれば性能が上がりますよってのは、既にあの子のあのSTまでにも話してた話だと思います。" + }, + { + "content": "それからDay3でもDecodingっていう仕組みを、あの話したと思います。このDecodingにもいろんな方法があってグリーンDecodingだと単純に一番いいやつを選んでいく、一番確率が高いやつ選んでいくので、すごい単純ですけど、こういうトップKeyを取るとかトップ系を取るとかして、最後に一番いいやつを選ぶみたいなことをすると、これも結局計算をたくさんしてることになるわけですね。1個選ぶわけじゃないので、次に評価しなきゃいけないものがどんどん増えていくわけなので、こういった形で増やすっていうのも一つのやり方として存在しています。これ何かDecoding方法の一覧ですけどこれ興味ある人いたら言ってください。" }, + { + "content": "どうしようかな。時間も関係あるんでなんか最近の例を一つだけ紹介するとコントラスト美Decodingというのは例えばいまして、Xとリップスティックって書いてあるこの軸にそうとする方法の一つ外部のモデル別のモデルを使う方法なんですけどこの研究によると単純に自分が自分自身のこの出力の確率を使うよりも、なんかしょぼい言語モデルの確率を割ってやったものを使った方が、現地ちょっとログで言うと引いたものですね。方が良い指標になっているということが知られています。これなんか多分僕、なんかよくよく話しすぎちゃうのってよく出てくるものじゃないものについてエキスパートモデルが高く値を出していたLlama5161ってのは普通はあまり出さないわけですけどモデル出さないんだったら、このベースラインとして引いてあるっていうか終わってると良いよっていうようなDecoding方法も出てきています。ここで今つらくSteamDecoding詳細を理解してほしいということよりは、Decodingのときにその他のモデルを使って性能を上げると、要はこのアマチュアモデルの計算がさらに増えるわけですけど、こういった形の概念として新しい手法も出てきていたりしますということで、" }, + { + "content": "それからここまでの実行DINGの話は基本的に次のtokenをどう選ぶかという話をしてましたけど、Decoding、次のtokenをどう決めるかだけじゃなくて、全体プロセス全体としてどういうふうな生成を行うかっていうのを一段広く、維持した上から見ましょうというのでMetaGenerationという言い方をするような研究も出てきています。このfromDecodingMetaGenerationというのが、6月かな、に出たサーベイでして、理論人の言語モデルで使うアルゴリズムを広くサーベイしたものになってます。この衣装がMetaGenerationて会員になってますけどちょっとこれがどういうものかについて説明していきたいと思います。そうね三つぐらい種類があるっていうふうに書かれてますられるサービスSEPVersaceリファインメントですけどちょっとこれ何か説明より具体を見た方がわかりやすいと思うんで、それぞれ具体を説明していきたいと思います。最後にこれをずっと振り返ったこういうもんだなと思ってもらえばいいと思います。" }, + { + "content": "パレスサーチの方法の一番代表的なのがベストベールと呼ばれるものです。これ要は、これをtokenだと今までの話と同じなんすけど文を何個か生成してみて一番いいやつを選びましょうっていうのが、このパラレルサーチの一番簡単なベストWebっていう方法ですね。一番いいのっていうのがいろいろ考えられて、LLMのスコアを使うっていうのが、これがビール産地とかそういう普通の美味さとかに相当するものですけどベリファイと呼ばれるような学習した評価機を使うような研究だったり、GLUEとか機械翻訳のときにGLUEとか、特定の指標を使うみたいで何かの外部の指標を使って、とりあえずN構成して、一番いいやつを、後で選びましょうとそういうアプローチになってます。ちょっとMBRDecodingの話しようかと思うんすけど時間がだいぶ生BERTかもしれない簡単に言うとこれがMRDecodingというのが最近機械翻訳で注目されてる一つの方法らしいんですけど、この例の中で言うとGLUEとかの指標を使っていいものを選ぶというような研究の例になってます。そうですね伊藤ですけどこの何か期待値の中にいうて書いてあるけど、このUっていうのが、このさっきこのスライドでスコアと、相当してましてGLUEとかMetaとか、いろんなものを使っています。これは実際にこれ人間のサンプルがこういう交換するとこういうコンセプト必要なんですけど、これをこのMBRだとやめていって牝馬の代わりにモデルから生成したものをサンプリングして期待値を取るみたいなことをやるのがMBRDecodingというやれるやり方になってるんすけどちょっと詳細が知りたい人は、だいぶわかりやすい資料が上がってましたのでこのURLから飛んでもらえばと思います。ここではこの、要はスコアを選んでいいものを選ぶというようなやり方でいろいろ発展してきてるんだということを理解していただければいいと思います。" }, + { + "content": "それからBestBillonとはちょっと違う方法として、N個を生成した後に、それらを集約するという意味では、Day2Day2Falconシステムをこの枠組みの一つとして入り、あの説明されます。セル仕込ん試験紙は下のようなもんですけど推論のことを応用したものになってて、言語モデルにCoTでのいろんなニーズにパスを出させて、まじないずB'zパスって書いてあるけどそのリズムパス出した後にこの一番よく出てきた答えっていうのを最終的にお答えするというようなやり方になってると思います。これもN個の中から1個選んでるわけじゃないんですけどN個出力して、それを集約する形でこのNCoTはそれぞれ独立に動くのでパラレルに動くので、さらに動かして最後集約するという意味でこのペアパラレルサーチの枠組みの一つの代表的な手法になってます。このアグリゲーションどういうふうにこの結果を集約するか、すいません。だったり、どういうふうにスコアをつけるかっていうので、いろんな手法が知られてましてこれもさっきのサーベイ論文に入っているので興味を引いていけばてもらえればと思います。" }, + { + "content": "今のパラレルサーチの中でマジョリティーコーティングとベストWebっていうのが出てきましたけど、これあるタスクこれ確か米数学のタスクだと思うんすけどタスクが載ってないんで興味ある人はこの論文見てもらえばと思うんすけど、例えば比較すると、普通にマジョリティーコーティングするのがこの黒線で、あの青線がこのベストオブLMで終わるって書いてあるけど、これアウトカムSupervisedリワードモデルってもので要は全体に対して、これが正しいか正しくないかを推定するのリワードモデル結果を水の推計するヤードモデルってのを用意してあって、Value&モデルにとって一番良かったやつは最後選ぶっていうそういうやり方になってます。マジョリティーボディーはN個出して最大のものを選ぶっていうやり方です。これやると比べると、リワードモデル使った方がいいよということが反応だと言われています。一応補足なんすよGPTが別にそのリワードモデルとか作る必要ないので簡単な方法であるっていう利点はあって、ベスト弁の方のRMっていうのは、リワードモデル別で学習しなきゃいけないってのが欠点としてあることは一応補足しておきます。" }, + { + "content": "それからこのオレンジをスルーして話したんですけど実際この論文はこのオレンジのやり方を提案してる論文になってます。それがこのPRMっていうものでして、PRLってのはプロセスSupervisedリワードモデルっていうふうに呼ばれています。あるいは何かあの論文にあったプロセスリワードモデルって普通に読んでるものもあります。これは全体に対して合ってる間違ってるっていうのを予測するんじゃなくて、このプロセスごとに合ってる間違ってるみたいのを予測するモデルを作る。というものですこれあの数学の問題みたいなプロセスがわかりやすいですけど、最初にレッツコールTheair夢DXみたいな感じでそれぞれのバスが正しいか正しくないかみたいなこれはユーザーが提出してる例ですけど、ユーザーの提出した例を使ってプロセスの正しさを予測してるということをしています。これをやるとさらに性能が上がるっていうことが左の図からわかりまして、これちゃんと説明しなかったですけど横軸がN個なんで生成するものですね数になってますけど、これ増やしていくとさらに性能が上がるということがわかります。このPRみたいなプロセスに対して評価を付けるっていうな説明をしましたけど、こういったやり方をするのがステップレベルサーチっていうふうにさっきのサーベイLaMDAとまとめられています。ごめんなさい。この一つ前の研究ではこのプロセスLayerとモデルのキーワードを使って、あのテスト勉強を選ぶってやり方をしましたけど、ベスト以外にも、このプロセスごとに塊を作って生成していってビームサーチみたいなことをすることもできます。要は最初この2個が良さそうだからこのニコイチに怒らせて、この、こいつからまた発生させて2個作ってまた次のステップ3の選んでみたいな。これを繰り返すっていう方法です。これ丸が一つのプロセスtokenじゃなくてプロセスに対応してましてというのが普通のビルサーチの違いですけどそういった研究もあります。ちなみにそういった研究もありますって言いましたけどこの月Web外っていうのをDay2で多分やったと思うんすけどこれがほぼ似たようなことをしていますみたいなことっていうのはこのリワードモデルっていうの使う代わりに言語モデルで、この状態が戻るいいものかこっからこれゲームを24-0ですけど、達成24になる数字作り方をしてくださいっていうときに、あのもう絶対に達成できない場合は、あの言語モデルがフィールドするというようなことをしているものですけど、そういった形でやってるっていうのも、言語モデルをあのリワードの評価として使っているあの例だとステップレベルサーチのあの例だと、いただければと思います。これもさっきと同様ですけど探索方法とか検証するステップの違いですね。どこですっていう検証するかとかによっていろんな方法が知られています。FSでは先読みしてやるみたいなことです。これもちょっと時間の関係で全体を割愛しますけど、これもさBloomにあるのでやってみようかなと" }, + { + "content": "それから全然別のやり方でリファインメントと呼ばれるようなやり方もあります。これ概念図だけピックアップしましたけど、右側の黒いのが、なんかあの、対象の値ってこれを言語モデルが生成したものだとしたときに、これ自身を入れてやって、もっかい生成させるというようなことだったり、あるいはこの生成したものに対してフィードバックを、右側の左側の広い広いボックスに相当しますけど与えてやって再度生成するみたいな、そういったやり方をする研究もありますこれがリファインメントというようなやり方になってます。このリファイベントの代表的な研究がセルフリファインと言われるような研究がありまして左が概念図でさっきとほぼ同じですけど、なんか最初タスクを言語モデルに与えましたとこいつが出力した結果をあのモデル自分自身のこのセリフは研究だと自分自身で評価して、あとフィードバックを返すとそのフィードバックを行った結果を使ってもっかいリファインすると、このリファもこのセリフに入ると自分自身でやるんすけど、そういった枠組みの研究があります。右側例えば政令で上側のABCが一つの系列になってますけど、ダイアログが与えられたと会話が与えられたときに、このフィードバックって書いてあるのが、この左側の①のプロセスに相当するこれも言語モデルが出してるものでこのフィードバックを踏まえてリファインしたのがこの右側のものになります。ちょっと中身は呼ばないですけどこういった形で最初に生成させそれ何を変えるべきかっていうのも言語モデル生成して、最後にその何を変えるべきかというのを踏まえても改正するとこれを何回も何回も繰り返すっていうのはやり方になってます。こんなんで性能上がるのかって思うと思うんですけどこれが何か上がるらしくてですね、最大50パーぐらい上がるような例もあるっていうふうに言われています。結果は結果なので、一旦これぐらいしか" }, + { + "content": "これでほぼちょうどですけど、最後に少しあの、前半では全体の訓練時のスケーリングをする話を基本的にしましたけど、最近ではこの推論値の計算量っていうのも注目するような研究が増えてきています。代表的なGPT法案とかですごく注目されてるかなと思いますし、今までやった方法までを学んだ方法も結構出てきたと思いますけど、Promptingを工夫するとか、Decodingを工夫するとかいうので、それにも発展的な方法がいろいろ出てきていますし、まめちMetaGenerationっていうような枠組みで、Decodingだけじゃなくてそのレコードした結果を最後どう使うかみたいな含めて、GENERATIONSMetaGenerationというふうに呼んでますけど、ただヴェルサーチとかステップでVersaceとかリファインメントと言われるような枠組みの研究も出てきていますというような話をしました。" }, + { + "content": "最後に二つ補足しておくのパートだろうと思いますけど同じ計算資源のときにパラメータ増やすのよりの推論資源を増やすのが有効なのかっていうのが問いとしてあると思いますけどオープンあの場合だと、訓練時のスケールは同じままっていうのちょっとスケールを増やしたら、より賢くなりましたって話でしたけど、どっちにするのがいいのかっていう意味で言うと、GoogleDeepMindか。1月に論文としてまして、スケーリングLLMthisTimeコンピュート口真理ちゃん日は増えてるっていうことで、良いらしいというふうに言われてます。厳密に言うとこれなんかタスクによって違うということなので、良いとまで言っていいのかちょっと若干誇大広告な気が個人的にはしてますけどそういったことを検証するような研究も出てきていますので興味ある人は見てもらえばと思います。" } +] \ No newline at end of file From bd4bbc2fd39e71ebfe5efa4ef8e6131bbcbcbee0 Mon Sep 17 00:00:00 2001 From: ysit21 Date: Wed, 14 May 2025 02:16:26 +0900 Subject: [PATCH 2/5] add day5 contents --- .github/workflows/test.yml | 41 + day5/.gitignore | 1 + day5/README.md | 145 +++ day5/requirements.txt | 7 + .../data/Titanic.csv" | 892 ++++++++++++++++++ "day5/\346\274\224\347\277\2221/main.py" | 123 +++ .../models/titanic_model.pkl" | Bin 0 -> 3308604 bytes "day5/\346\274\224\347\277\2221/pipeline.py" | 177 ++++ .../\346\274\224\347\277\2222/black_check.py" | 7 + .../data/Titanic.csv" | 892 ++++++++++++++++++ .../data/Titanic_error.csv" | 892 ++++++++++++++++++ "day5/\346\274\224\347\277\2222/main.py" | 287 ++++++ .../models/titanic_model.pkl" | Bin 0 -> 2418666 bytes .../data/Titanic.csv" | 892 ++++++++++++++++++ .../models/titanic_model.pkl" | Bin 0 -> 2379709 bytes .../tests/test_data.py" | 131 +++ .../tests/test_model.py" | 173 ++++ 17 files changed, 4660 insertions(+) create mode 100644 .github/workflows/test.yml create mode 100644 day5/.gitignore create mode 100644 day5/README.md create mode 100644 day5/requirements.txt create mode 100644 "day5/\346\274\224\347\277\2221/data/Titanic.csv" create mode 100644 "day5/\346\274\224\347\277\2221/main.py" create mode 100644 "day5/\346\274\224\347\277\2221/models/titanic_model.pkl" create mode 100644 "day5/\346\274\224\347\277\2221/pipeline.py" create mode 100644 "day5/\346\274\224\347\277\2222/black_check.py" create mode 100644 "day5/\346\274\224\347\277\2222/data/Titanic.csv" create mode 100644 "day5/\346\274\224\347\277\2222/data/Titanic_error.csv" create mode 100644 "day5/\346\274\224\347\277\2222/main.py" create mode 100644 "day5/\346\274\224\347\277\2222/models/titanic_model.pkl" create mode 100644 "day5/\346\274\224\347\277\2223/data/Titanic.csv" create mode 100644 "day5/\346\274\224\347\277\2223/models/titanic_model.pkl" create mode 100644 "day5/\346\274\224\347\277\2223/tests/test_data.py" create mode 100644 "day5/\346\274\224\347\277\2223/tests/test_model.py" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..da32a6164 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,41 @@ +name: ML Pipeline CI + +on: + # push: + # branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pytest great_expectations pandas scikit-learn flake8 black mypy pytest-cov + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + + - name: Lint with flake8 + run: | + flake8 day5/演習3 --count --select=E9,F63,F7,F82 --show-source --statistics + flake8 day5/演習3 --count --exit-zero --max-complexity=10 --max-line-length=88 --statistics + + - name: Format check with black + run: | + black --check day5/演習3 + + - name: Run data tests + run: | + pytest day5/演習3/tests/test_data.py -v + + - name: Run model tests + run: | + pytest day5/演習3/tests/test_model.py -v \ No newline at end of file diff --git a/day5/.gitignore b/day5/.gitignore new file mode 100644 index 000000000..a857edf4d --- /dev/null +++ b/day5/.gitignore @@ -0,0 +1 @@ +mlruns \ No newline at end of file diff --git a/day5/README.md b/day5/README.md new file mode 100644 index 000000000..59559d039 --- /dev/null +++ b/day5/README.md @@ -0,0 +1,145 @@ +# day5 演習用ディレクトリ + +第3回「MLOps」に関する演習用のディレクトリです。 + +# 演習の目的 + +本演習コンテンツでは、技術的な用語や仕組み(例:高度な実験管理や複雑なパイプライン処理など)の詳細な理解を目的とするのではなく、モデルの管理やAIシステムを継続的に取り扱うための方法を実際に体験することを主眼としています。 + +この体験を通じて、AIを継続的に扱うための仕組みや考え方を学び、実践的なスキルへの理解を深めることを目的とします。 + +# 演習概要 +主な演習の流れは以下のようになっています。 + +1. 機械学習モデルの実験管理とパイプライン +2. 整合性テスト +3. CI(継続的インテクレーション) + +本演習では、GPUを使用しないため、実行環境として「Google Colab」を前提としません。ご自身のPC等でPythonの実行環境を用意していただき、演習を行なっていただいて問題ありません。 + +# 事前準備 +GitHubを使用した演習となるため、GitHubの「fork」、「clone」、「pull request」などの操作を行います。 +GitHubをご自身の演習環境上で使用できるようにしておいてください。 + +「fork」、「clone」したスクリプトに対してgitコマンドで構成管理を行います。 +また、講師の環境ではGitHub CLIを使用する場合があります。 +必須ではありませんが、GitHub CLIを使えるようにしておくとGitHubの操作が楽に行える場合があります。 + +- GitHub CLIについて +[https://docs.github.com/ja/github-cli/github-cli/about-github-cli](https://docs.github.com/ja/github-cli/github-cli/about-github-cli) + +## 環境を用意できない方向け +「Google Colab」上でも演習を行うことは可能です。 +演習内でMLflowというソフトウェアを使いUIを表示する際に、Google Colab上ではngrokを使用することになります。 + +GitHubを「Google Colab」上で使用できるようにするのに加え、day1の演習で使用したngrokを使用してMLflowのUIを表示しましょう。 + +### 参考情報 +- Google Colab上でGitHubを使う + [https://zenn.dev/smiyawaki0820/articles/e346ca8b522356](https://zenn.dev/smiyawaki0820/articles/e346ca8b522356) +- Google Colab上でMLflow UIを使う + [https://fight-tsk.blogspot.com/2021/07/mlflow-ui-google-colaboratory.html](https://fight-tsk.blogspot.com/2021/07/mlflow-ui-google-colaboratory.html) + +# 演習内容 +演習は大きく3つのパートに分かれています。 +- 演習1: 機械学習モデルの実験管理とパイプライン +- 演習2: 整合性テスト +- 演習3: CI(継続的インテクレーション) + +演習1と演習2は、day5フォルダ直下の「演習1」と「演習2」フォルダを使用します。 + +演習3は、リポジトリ直下の「.github」フォルダと、day5フォルダ直下の「演習3」フォルダを使用します。 + +演習に必要なライブラリは、day5フォルダ直下の「requirements.txt」ファイルに記載しています。各自の演習環境にインストールしてください。 + +## 演習1: 機械学習モデルの実験管理とパイプライン + +### ゴール +- scikit-learn + MLflow + kedro を使用して、学習 → 評価 → モデル保存までのパイプラインを構築。 +- パイプラインを動かす。 + +### 演習ステップ +1. **データ準備** + - Titanic データを使用 + - データの取得 → 学習用・評価用に分割 + +2. **学習スクリプトの実装** + - ランダムフォレストによる学習処理 + - 評価処理(accuracy)を関数化して構成 + +3. **モデル保存** + - MLflow を用いて学習済みモデルをトラッキング・保存 + +4. **オプション** + - MLflow UI による可視化 + - パラメータ変更や再実行による再現性の確認・テスト + +5. **パイプライン化** + - kedro を使って処理を Node 化して組み立て + +#### 演習1で使用する主なコマンド +```bash +cd 演習1 + +python main.py +mlflow ui + +python pipeline.py +``` + +--- + +## 演習2: 整合性テスト + +### ゴール +- データの整合性チェック +- モデルの動作テスト + +### 演習ステップ +1. **データテスト** + - pytest + great_expectations を使用 + - データの型・欠損・値範囲を検証 + +2. **フォーマットチェック** + - black, flake8, などで静的コードチェックを実施 + +#### 演習2で使用する主なコマンド +```bash +cd 演習2 + +python main.py +pytest main.py + +black main.py +``` + +## 演習3: CI(継続的インテクレーション) + +### ゴール +- Python コードの静的検査・ユニットテストを含む CI 構築 + +1. **CI ツール導入** + - GitHub Actions を使用 + - `.github/workflows/test.yml` を作成 + +1. **CI 結果確認** + - プルリクエスト時に自動でチェックを実行 + +#### 演習3で使用する主なコマンド +GitHub CLIを使用した場合のプルリクエストの流れ + +```bash +git branch develop +git checkout develop +gh pr create +``` + +# 宿題の関連情報 +## CIでのテストケースを追加する場合のアイディアサンプル + +1. **モデルテスト** + - モデルの推論精度(再現性)や推論時間を検証 + +2. **差分テスト** + - 過去バージョンと比較して性能の劣化がないか確認 + - 例: `accuracy ≥ baseline` diff --git a/day5/requirements.txt b/day5/requirements.txt new file mode 100644 index 000000000..d37edb49b --- /dev/null +++ b/day5/requirements.txt @@ -0,0 +1,7 @@ +kedro +scikit-learn +mlflow +pandas +pytest +great_expectations +black \ No newline at end of file diff --git "a/day5/\346\274\224\347\277\2221/data/Titanic.csv" "b/day5/\346\274\224\347\277\2221/data/Titanic.csv" new file mode 100644 index 000000000..3d2e1547e --- /dev/null +++ "b/day5/\346\274\224\347\277\2221/data/Titanic.csv" @@ -0,0 +1,892 @@ +PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked +1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S +2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C +3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S +4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S +5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S +6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q +7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S +8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S +9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S +10,1,2,"Nasser, Mrs. Nicholas (Adele Achem)",female,14,1,0,237736,30.0708,,C +11,1,3,"Sandstrom, Miss. Marguerite Rut",female,4,1,1,PP 9549,16.7,G6,S +12,1,1,"Bonnell, Miss. Elizabeth",female,58,0,0,113783,26.55,C103,S +13,0,3,"Saundercock, Mr. William Henry",male,20,0,0,A/5. 2151,8.05,,S +14,0,3,"Andersson, Mr. Anders Johan",male,39,1,5,347082,31.275,,S +15,0,3,"Vestrom, Miss. Hulda Amanda Adolfina",female,14,0,0,350406,7.8542,,S +16,1,2,"Hewlett, Mrs. (Mary D Kingcome) ",female,55,0,0,248706,16,,S +17,0,3,"Rice, Master. Eugene",male,2,4,1,382652,29.125,,Q +18,1,2,"Williams, Mr. Charles Eugene",male,,0,0,244373,13,,S +19,0,3,"Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele)",female,31,1,0,345763,18,,S +20,1,3,"Masselmani, Mrs. Fatima",female,,0,0,2649,7.225,,C +21,0,2,"Fynney, Mr. Joseph J",male,35,0,0,239865,26,,S +22,1,2,"Beesley, Mr. Lawrence",male,34,0,0,248698,13,D56,S +23,1,3,"McGowan, Miss. Anna ""Annie""",female,15,0,0,330923,8.0292,,Q +24,1,1,"Sloper, Mr. William Thompson",male,28,0,0,113788,35.5,A6,S +25,0,3,"Palsson, Miss. Torborg Danira",female,8,3,1,349909,21.075,,S +26,1,3,"Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)",female,38,1,5,347077,31.3875,,S +27,0,3,"Emir, Mr. Farred Chehab",male,,0,0,2631,7.225,,C +28,0,1,"Fortune, Mr. Charles Alexander",male,19,3,2,19950,263,C23 C25 C27,S +29,1,3,"O'Dwyer, Miss. Ellen ""Nellie""",female,,0,0,330959,7.8792,,Q +30,0,3,"Todoroff, Mr. Lalio",male,,0,0,349216,7.8958,,S +31,0,1,"Uruchurtu, Don. Manuel E",male,40,0,0,PC 17601,27.7208,,C +32,1,1,"Spencer, Mrs. William Augustus (Marie Eugenie)",female,,1,0,PC 17569,146.5208,B78,C +33,1,3,"Glynn, Miss. Mary Agatha",female,,0,0,335677,7.75,,Q +34,0,2,"Wheadon, Mr. Edward H",male,66,0,0,C.A. 24579,10.5,,S +35,0,1,"Meyer, Mr. Edgar Joseph",male,28,1,0,PC 17604,82.1708,,C +36,0,1,"Holverson, Mr. Alexander Oskar",male,42,1,0,113789,52,,S +37,1,3,"Mamee, Mr. Hanna",male,,0,0,2677,7.2292,,C +38,0,3,"Cann, Mr. Ernest Charles",male,21,0,0,A./5. 2152,8.05,,S +39,0,3,"Vander Planke, Miss. Augusta Maria",female,18,2,0,345764,18,,S +40,1,3,"Nicola-Yarred, Miss. Jamila",female,14,1,0,2651,11.2417,,C +41,0,3,"Ahlin, Mrs. Johan (Johanna Persdotter Larsson)",female,40,1,0,7546,9.475,,S +42,0,2,"Turpin, Mrs. William John Robert (Dorothy Ann Wonnacott)",female,27,1,0,11668,21,,S +43,0,3,"Kraeff, Mr. Theodor",male,,0,0,349253,7.8958,,C +44,1,2,"Laroche, Miss. Simonne Marie Anne Andree",female,3,1,2,SC/Paris 2123,41.5792,,C +45,1,3,"Devaney, Miss. Margaret Delia",female,19,0,0,330958,7.8792,,Q +46,0,3,"Rogers, Mr. William John",male,,0,0,S.C./A.4. 23567,8.05,,S +47,0,3,"Lennon, Mr. Denis",male,,1,0,370371,15.5,,Q +48,1,3,"O'Driscoll, Miss. Bridget",female,,0,0,14311,7.75,,Q +49,0,3,"Samaan, Mr. Youssef",male,,2,0,2662,21.6792,,C +50,0,3,"Arnold-Franchi, Mrs. Josef (Josefine Franchi)",female,18,1,0,349237,17.8,,S +51,0,3,"Panula, Master. Juha Niilo",male,7,4,1,3101295,39.6875,,S +52,0,3,"Nosworthy, Mr. Richard Cater",male,21,0,0,A/4. 39886,7.8,,S +53,1,1,"Harper, Mrs. Henry Sleeper (Myna Haxtun)",female,49,1,0,PC 17572,76.7292,D33,C +54,1,2,"Faunthorpe, Mrs. Lizzie (Elizabeth Anne Wilkinson)",female,29,1,0,2926,26,,S +55,0,1,"Ostby, Mr. Engelhart Cornelius",male,65,0,1,113509,61.9792,B30,C +56,1,1,"Woolner, Mr. Hugh",male,,0,0,19947,35.5,C52,S +57,1,2,"Rugg, Miss. Emily",female,21,0,0,C.A. 31026,10.5,,S +58,0,3,"Novel, Mr. Mansouer",male,28.5,0,0,2697,7.2292,,C +59,1,2,"West, Miss. Constance Mirium",female,5,1,2,C.A. 34651,27.75,,S +60,0,3,"Goodwin, Master. William Frederick",male,11,5,2,CA 2144,46.9,,S +61,0,3,"Sirayanian, Mr. Orsen",male,22,0,0,2669,7.2292,,C +62,1,1,"Icard, Miss. Amelie",female,38,0,0,113572,80,B28, +63,0,1,"Harris, Mr. Henry Birkhardt",male,45,1,0,36973,83.475,C83,S +64,0,3,"Skoog, Master. Harald",male,4,3,2,347088,27.9,,S +65,0,1,"Stewart, Mr. Albert A",male,,0,0,PC 17605,27.7208,,C +66,1,3,"Moubarek, Master. Gerios",male,,1,1,2661,15.2458,,C +67,1,2,"Nye, Mrs. (Elizabeth Ramell)",female,29,0,0,C.A. 29395,10.5,F33,S +68,0,3,"Crease, Mr. Ernest James",male,19,0,0,S.P. 3464,8.1583,,S +69,1,3,"Andersson, Miss. Erna Alexandra",female,17,4,2,3101281,7.925,,S +70,0,3,"Kink, Mr. Vincenz",male,26,2,0,315151,8.6625,,S +71,0,2,"Jenkin, Mr. Stephen Curnow",male,32,0,0,C.A. 33111,10.5,,S +72,0,3,"Goodwin, Miss. Lillian Amy",female,16,5,2,CA 2144,46.9,,S +73,0,2,"Hood, Mr. Ambrose Jr",male,21,0,0,S.O.C. 14879,73.5,,S +74,0,3,"Chronopoulos, Mr. Apostolos",male,26,1,0,2680,14.4542,,C +75,1,3,"Bing, Mr. Lee",male,32,0,0,1601,56.4958,,S +76,0,3,"Moen, Mr. Sigurd Hansen",male,25,0,0,348123,7.65,F G73,S +77,0,3,"Staneff, Mr. Ivan",male,,0,0,349208,7.8958,,S +78,0,3,"Moutal, Mr. Rahamin Haim",male,,0,0,374746,8.05,,S +79,1,2,"Caldwell, Master. Alden Gates",male,0.83,0,2,248738,29,,S +80,1,3,"Dowdell, Miss. Elizabeth",female,30,0,0,364516,12.475,,S +81,0,3,"Waelens, Mr. Achille",male,22,0,0,345767,9,,S +82,1,3,"Sheerlinck, Mr. Jan Baptist",male,29,0,0,345779,9.5,,S +83,1,3,"McDermott, Miss. Brigdet Delia",female,,0,0,330932,7.7875,,Q +84,0,1,"Carrau, Mr. Francisco M",male,28,0,0,113059,47.1,,S +85,1,2,"Ilett, Miss. Bertha",female,17,0,0,SO/C 14885,10.5,,S +86,1,3,"Backstrom, Mrs. Karl Alfred (Maria Mathilda Gustafsson)",female,33,3,0,3101278,15.85,,S +87,0,3,"Ford, Mr. William Neal",male,16,1,3,W./C. 6608,34.375,,S +88,0,3,"Slocovski, Mr. Selman Francis",male,,0,0,SOTON/OQ 392086,8.05,,S +89,1,1,"Fortune, Miss. Mabel Helen",female,23,3,2,19950,263,C23 C25 C27,S +90,0,3,"Celotti, Mr. Francesco",male,24,0,0,343275,8.05,,S +91,0,3,"Christmann, Mr. Emil",male,29,0,0,343276,8.05,,S +92,0,3,"Andreasson, Mr. Paul Edvin",male,20,0,0,347466,7.8542,,S +93,0,1,"Chaffee, Mr. Herbert Fuller",male,46,1,0,W.E.P. 5734,61.175,E31,S +94,0,3,"Dean, Mr. Bertram Frank",male,26,1,2,C.A. 2315,20.575,,S +95,0,3,"Coxon, Mr. Daniel",male,59,0,0,364500,7.25,,S +96,0,3,"Shorney, Mr. Charles Joseph",male,,0,0,374910,8.05,,S +97,0,1,"Goldschmidt, Mr. George B",male,71,0,0,PC 17754,34.6542,A5,C +98,1,1,"Greenfield, Mr. William Bertram",male,23,0,1,PC 17759,63.3583,D10 D12,C +99,1,2,"Doling, Mrs. John T (Ada Julia Bone)",female,34,0,1,231919,23,,S +100,0,2,"Kantor, Mr. Sinai",male,34,1,0,244367,26,,S +101,0,3,"Petranec, Miss. Matilda",female,28,0,0,349245,7.8958,,S +102,0,3,"Petroff, Mr. Pastcho (""Pentcho"")",male,,0,0,349215,7.8958,,S +103,0,1,"White, Mr. Richard Frasar",male,21,0,1,35281,77.2875,D26,S +104,0,3,"Johansson, Mr. Gustaf Joel",male,33,0,0,7540,8.6542,,S +105,0,3,"Gustafsson, Mr. Anders Vilhelm",male,37,2,0,3101276,7.925,,S +106,0,3,"Mionoff, Mr. Stoytcho",male,28,0,0,349207,7.8958,,S +107,1,3,"Salkjelsvik, Miss. Anna Kristine",female,21,0,0,343120,7.65,,S +108,1,3,"Moss, Mr. Albert Johan",male,,0,0,312991,7.775,,S +109,0,3,"Rekic, Mr. Tido",male,38,0,0,349249,7.8958,,S +110,1,3,"Moran, Miss. Bertha",female,,1,0,371110,24.15,,Q +111,0,1,"Porter, Mr. Walter Chamberlain",male,47,0,0,110465,52,C110,S +112,0,3,"Zabour, Miss. Hileni",female,14.5,1,0,2665,14.4542,,C +113,0,3,"Barton, Mr. David John",male,22,0,0,324669,8.05,,S +114,0,3,"Jussila, Miss. Katriina",female,20,1,0,4136,9.825,,S +115,0,3,"Attalah, Miss. Malake",female,17,0,0,2627,14.4583,,C +116,0,3,"Pekoniemi, Mr. Edvard",male,21,0,0,STON/O 2. 3101294,7.925,,S +117,0,3,"Connors, Mr. Patrick",male,70.5,0,0,370369,7.75,,Q +118,0,2,"Turpin, Mr. William John Robert",male,29,1,0,11668,21,,S +119,0,1,"Baxter, Mr. Quigg Edmond",male,24,0,1,PC 17558,247.5208,B58 B60,C +120,0,3,"Andersson, Miss. Ellis Anna Maria",female,2,4,2,347082,31.275,,S +121,0,2,"Hickman, Mr. Stanley George",male,21,2,0,S.O.C. 14879,73.5,,S +122,0,3,"Moore, Mr. Leonard Charles",male,,0,0,A4. 54510,8.05,,S +123,0,2,"Nasser, Mr. Nicholas",male,32.5,1,0,237736,30.0708,,C +124,1,2,"Webber, Miss. Susan",female,32.5,0,0,27267,13,E101,S +125,0,1,"White, Mr. Percival Wayland",male,54,0,1,35281,77.2875,D26,S +126,1,3,"Nicola-Yarred, Master. Elias",male,12,1,0,2651,11.2417,,C +127,0,3,"McMahon, Mr. Martin",male,,0,0,370372,7.75,,Q +128,1,3,"Madsen, Mr. Fridtjof Arne",male,24,0,0,C 17369,7.1417,,S +129,1,3,"Peter, Miss. Anna",female,,1,1,2668,22.3583,F E69,C +130,0,3,"Ekstrom, Mr. Johan",male,45,0,0,347061,6.975,,S +131,0,3,"Drazenoic, Mr. Jozef",male,33,0,0,349241,7.8958,,C +132,0,3,"Coelho, Mr. Domingos Fernandeo",male,20,0,0,SOTON/O.Q. 3101307,7.05,,S +133,0,3,"Robins, Mrs. Alexander A (Grace Charity Laury)",female,47,1,0,A/5. 3337,14.5,,S +134,1,2,"Weisz, Mrs. Leopold (Mathilde Francoise Pede)",female,29,1,0,228414,26,,S +135,0,2,"Sobey, Mr. Samuel James Hayden",male,25,0,0,C.A. 29178,13,,S +136,0,2,"Richard, Mr. Emile",male,23,0,0,SC/PARIS 2133,15.0458,,C +137,1,1,"Newsom, Miss. Helen Monypeny",female,19,0,2,11752,26.2833,D47,S +138,0,1,"Futrelle, Mr. Jacques Heath",male,37,1,0,113803,53.1,C123,S +139,0,3,"Osen, Mr. Olaf Elon",male,16,0,0,7534,9.2167,,S +140,0,1,"Giglio, Mr. Victor",male,24,0,0,PC 17593,79.2,B86,C +141,0,3,"Boulos, Mrs. Joseph (Sultana)",female,,0,2,2678,15.2458,,C +142,1,3,"Nysten, Miss. Anna Sofia",female,22,0,0,347081,7.75,,S +143,1,3,"Hakkarainen, Mrs. Pekka Pietari (Elin Matilda Dolck)",female,24,1,0,STON/O2. 3101279,15.85,,S +144,0,3,"Burke, Mr. Jeremiah",male,19,0,0,365222,6.75,,Q +145,0,2,"Andrew, Mr. Edgardo Samuel",male,18,0,0,231945,11.5,,S +146,0,2,"Nicholls, Mr. Joseph Charles",male,19,1,1,C.A. 33112,36.75,,S +147,1,3,"Andersson, Mr. August Edvard (""Wennerstrom"")",male,27,0,0,350043,7.7958,,S +148,0,3,"Ford, Miss. Robina Maggie ""Ruby""",female,9,2,2,W./C. 6608,34.375,,S +149,0,2,"Navratil, Mr. Michel (""Louis M Hoffman"")",male,36.5,0,2,230080,26,F2,S +150,0,2,"Byles, Rev. Thomas Roussel Davids",male,42,0,0,244310,13,,S +151,0,2,"Bateman, Rev. Robert James",male,51,0,0,S.O.P. 1166,12.525,,S +152,1,1,"Pears, Mrs. Thomas (Edith Wearne)",female,22,1,0,113776,66.6,C2,S +153,0,3,"Meo, Mr. Alfonzo",male,55.5,0,0,A.5. 11206,8.05,,S +154,0,3,"van Billiard, Mr. Austin Blyler",male,40.5,0,2,A/5. 851,14.5,,S +155,0,3,"Olsen, Mr. Ole Martin",male,,0,0,Fa 265302,7.3125,,S +156,0,1,"Williams, Mr. Charles Duane",male,51,0,1,PC 17597,61.3792,,C +157,1,3,"Gilnagh, Miss. Katherine ""Katie""",female,16,0,0,35851,7.7333,,Q +158,0,3,"Corn, Mr. Harry",male,30,0,0,SOTON/OQ 392090,8.05,,S +159,0,3,"Smiljanic, Mr. Mile",male,,0,0,315037,8.6625,,S +160,0,3,"Sage, Master. Thomas Henry",male,,8,2,CA. 2343,69.55,,S +161,0,3,"Cribb, Mr. John Hatfield",male,44,0,1,371362,16.1,,S +162,1,2,"Watt, Mrs. James (Elizabeth ""Bessie"" Inglis Milne)",female,40,0,0,C.A. 33595,15.75,,S +163,0,3,"Bengtsson, Mr. John Viktor",male,26,0,0,347068,7.775,,S +164,0,3,"Calic, Mr. Jovo",male,17,0,0,315093,8.6625,,S +165,0,3,"Panula, Master. Eino Viljami",male,1,4,1,3101295,39.6875,,S +166,1,3,"Goldsmith, Master. Frank John William ""Frankie""",male,9,0,2,363291,20.525,,S +167,1,1,"Chibnall, Mrs. (Edith Martha Bowerman)",female,,0,1,113505,55,E33,S +168,0,3,"Skoog, Mrs. William (Anna Bernhardina Karlsson)",female,45,1,4,347088,27.9,,S +169,0,1,"Baumann, Mr. John D",male,,0,0,PC 17318,25.925,,S +170,0,3,"Ling, Mr. Lee",male,28,0,0,1601,56.4958,,S +171,0,1,"Van der hoef, Mr. Wyckoff",male,61,0,0,111240,33.5,B19,S +172,0,3,"Rice, Master. Arthur",male,4,4,1,382652,29.125,,Q +173,1,3,"Johnson, Miss. Eleanor Ileen",female,1,1,1,347742,11.1333,,S +174,0,3,"Sivola, Mr. Antti Wilhelm",male,21,0,0,STON/O 2. 3101280,7.925,,S +175,0,1,"Smith, Mr. James Clinch",male,56,0,0,17764,30.6958,A7,C +176,0,3,"Klasen, Mr. Klas Albin",male,18,1,1,350404,7.8542,,S +177,0,3,"Lefebre, Master. Henry Forbes",male,,3,1,4133,25.4667,,S +178,0,1,"Isham, Miss. Ann Elizabeth",female,50,0,0,PC 17595,28.7125,C49,C +179,0,2,"Hale, Mr. Reginald",male,30,0,0,250653,13,,S +180,0,3,"Leonard, Mr. Lionel",male,36,0,0,LINE,0,,S +181,0,3,"Sage, Miss. Constance Gladys",female,,8,2,CA. 2343,69.55,,S +182,0,2,"Pernot, Mr. Rene",male,,0,0,SC/PARIS 2131,15.05,,C +183,0,3,"Asplund, Master. Clarence Gustaf Hugo",male,9,4,2,347077,31.3875,,S +184,1,2,"Becker, Master. Richard F",male,1,2,1,230136,39,F4,S +185,1,3,"Kink-Heilmann, Miss. Luise Gretchen",female,4,0,2,315153,22.025,,S +186,0,1,"Rood, Mr. Hugh Roscoe",male,,0,0,113767,50,A32,S +187,1,3,"O'Brien, Mrs. Thomas (Johanna ""Hannah"" Godfrey)",female,,1,0,370365,15.5,,Q +188,1,1,"Romaine, Mr. Charles Hallace (""Mr C Rolmane"")",male,45,0,0,111428,26.55,,S +189,0,3,"Bourke, Mr. John",male,40,1,1,364849,15.5,,Q +190,0,3,"Turcin, Mr. Stjepan",male,36,0,0,349247,7.8958,,S +191,1,2,"Pinsky, Mrs. (Rosa)",female,32,0,0,234604,13,,S +192,0,2,"Carbines, Mr. William",male,19,0,0,28424,13,,S +193,1,3,"Andersen-Jensen, Miss. Carla Christine Nielsine",female,19,1,0,350046,7.8542,,S +194,1,2,"Navratil, Master. Michel M",male,3,1,1,230080,26,F2,S +195,1,1,"Brown, Mrs. James Joseph (Margaret Tobin)",female,44,0,0,PC 17610,27.7208,B4,C +196,1,1,"Lurette, Miss. Elise",female,58,0,0,PC 17569,146.5208,B80,C +197,0,3,"Mernagh, Mr. Robert",male,,0,0,368703,7.75,,Q +198,0,3,"Olsen, Mr. Karl Siegwart Andreas",male,42,0,1,4579,8.4042,,S +199,1,3,"Madigan, Miss. Margaret ""Maggie""",female,,0,0,370370,7.75,,Q +200,0,2,"Yrois, Miss. Henriette (""Mrs Harbeck"")",female,24,0,0,248747,13,,S +201,0,3,"Vande Walle, Mr. Nestor Cyriel",male,28,0,0,345770,9.5,,S +202,0,3,"Sage, Mr. Frederick",male,,8,2,CA. 2343,69.55,,S +203,0,3,"Johanson, Mr. Jakob Alfred",male,34,0,0,3101264,6.4958,,S +204,0,3,"Youseff, Mr. Gerious",male,45.5,0,0,2628,7.225,,C +205,1,3,"Cohen, Mr. Gurshon ""Gus""",male,18,0,0,A/5 3540,8.05,,S +206,0,3,"Strom, Miss. Telma Matilda",female,2,0,1,347054,10.4625,G6,S +207,0,3,"Backstrom, Mr. Karl Alfred",male,32,1,0,3101278,15.85,,S +208,1,3,"Albimona, Mr. Nassef Cassem",male,26,0,0,2699,18.7875,,C +209,1,3,"Carr, Miss. Helen ""Ellen""",female,16,0,0,367231,7.75,,Q +210,1,1,"Blank, Mr. Henry",male,40,0,0,112277,31,A31,C +211,0,3,"Ali, Mr. Ahmed",male,24,0,0,SOTON/O.Q. 3101311,7.05,,S +212,1,2,"Cameron, Miss. Clear Annie",female,35,0,0,F.C.C. 13528,21,,S +213,0,3,"Perkin, Mr. John Henry",male,22,0,0,A/5 21174,7.25,,S +214,0,2,"Givard, Mr. Hans Kristensen",male,30,0,0,250646,13,,S +215,0,3,"Kiernan, Mr. Philip",male,,1,0,367229,7.75,,Q +216,1,1,"Newell, Miss. Madeleine",female,31,1,0,35273,113.275,D36,C +217,1,3,"Honkanen, Miss. Eliina",female,27,0,0,STON/O2. 3101283,7.925,,S +218,0,2,"Jacobsohn, Mr. Sidney Samuel",male,42,1,0,243847,27,,S +219,1,1,"Bazzani, Miss. Albina",female,32,0,0,11813,76.2917,D15,C +220,0,2,"Harris, Mr. Walter",male,30,0,0,W/C 14208,10.5,,S +221,1,3,"Sunderland, Mr. Victor Francis",male,16,0,0,SOTON/OQ 392089,8.05,,S +222,0,2,"Bracken, Mr. James H",male,27,0,0,220367,13,,S +223,0,3,"Green, Mr. George Henry",male,51,0,0,21440,8.05,,S +224,0,3,"Nenkoff, Mr. Christo",male,,0,0,349234,7.8958,,S +225,1,1,"Hoyt, Mr. Frederick Maxfield",male,38,1,0,19943,90,C93,S +226,0,3,"Berglund, Mr. Karl Ivar Sven",male,22,0,0,PP 4348,9.35,,S +227,1,2,"Mellors, Mr. William John",male,19,0,0,SW/PP 751,10.5,,S +228,0,3,"Lovell, Mr. John Hall (""Henry"")",male,20.5,0,0,A/5 21173,7.25,,S +229,0,2,"Fahlstrom, Mr. Arne Jonas",male,18,0,0,236171,13,,S +230,0,3,"Lefebre, Miss. Mathilde",female,,3,1,4133,25.4667,,S +231,1,1,"Harris, Mrs. Henry Birkhardt (Irene Wallach)",female,35,1,0,36973,83.475,C83,S +232,0,3,"Larsson, Mr. Bengt Edvin",male,29,0,0,347067,7.775,,S +233,0,2,"Sjostedt, Mr. Ernst Adolf",male,59,0,0,237442,13.5,,S +234,1,3,"Asplund, Miss. Lillian Gertrud",female,5,4,2,347077,31.3875,,S +235,0,2,"Leyson, Mr. Robert William Norman",male,24,0,0,C.A. 29566,10.5,,S +236,0,3,"Harknett, Miss. Alice Phoebe",female,,0,0,W./C. 6609,7.55,,S +237,0,2,"Hold, Mr. Stephen",male,44,1,0,26707,26,,S +238,1,2,"Collyer, Miss. Marjorie ""Lottie""",female,8,0,2,C.A. 31921,26.25,,S +239,0,2,"Pengelly, Mr. Frederick William",male,19,0,0,28665,10.5,,S +240,0,2,"Hunt, Mr. George Henry",male,33,0,0,SCO/W 1585,12.275,,S +241,0,3,"Zabour, Miss. Thamine",female,,1,0,2665,14.4542,,C +242,1,3,"Murphy, Miss. Katherine ""Kate""",female,,1,0,367230,15.5,,Q +243,0,2,"Coleridge, Mr. Reginald Charles",male,29,0,0,W./C. 14263,10.5,,S +244,0,3,"Maenpaa, Mr. Matti Alexanteri",male,22,0,0,STON/O 2. 3101275,7.125,,S +245,0,3,"Attalah, Mr. Sleiman",male,30,0,0,2694,7.225,,C +246,0,1,"Minahan, Dr. William Edward",male,44,2,0,19928,90,C78,Q +247,0,3,"Lindahl, Miss. Agda Thorilda Viktoria",female,25,0,0,347071,7.775,,S +248,1,2,"Hamalainen, Mrs. William (Anna)",female,24,0,2,250649,14.5,,S +249,1,1,"Beckwith, Mr. Richard Leonard",male,37,1,1,11751,52.5542,D35,S +250,0,2,"Carter, Rev. Ernest Courtenay",male,54,1,0,244252,26,,S +251,0,3,"Reed, Mr. James George",male,,0,0,362316,7.25,,S +252,0,3,"Strom, Mrs. Wilhelm (Elna Matilda Persson)",female,29,1,1,347054,10.4625,G6,S +253,0,1,"Stead, Mr. William Thomas",male,62,0,0,113514,26.55,C87,S +254,0,3,"Lobb, Mr. William Arthur",male,30,1,0,A/5. 3336,16.1,,S +255,0,3,"Rosblom, Mrs. Viktor (Helena Wilhelmina)",female,41,0,2,370129,20.2125,,S +256,1,3,"Touma, Mrs. Darwis (Hanne Youssef Razi)",female,29,0,2,2650,15.2458,,C +257,1,1,"Thorne, Mrs. Gertrude Maybelle",female,,0,0,PC 17585,79.2,,C +258,1,1,"Cherry, Miss. Gladys",female,30,0,0,110152,86.5,B77,S +259,1,1,"Ward, Miss. Anna",female,35,0,0,PC 17755,512.3292,,C +260,1,2,"Parrish, Mrs. (Lutie Davis)",female,50,0,1,230433,26,,S +261,0,3,"Smith, Mr. Thomas",male,,0,0,384461,7.75,,Q +262,1,3,"Asplund, Master. Edvin Rojj Felix",male,3,4,2,347077,31.3875,,S +263,0,1,"Taussig, Mr. Emil",male,52,1,1,110413,79.65,E67,S +264,0,1,"Harrison, Mr. William",male,40,0,0,112059,0,B94,S +265,0,3,"Henry, Miss. Delia",female,,0,0,382649,7.75,,Q +266,0,2,"Reeves, Mr. David",male,36,0,0,C.A. 17248,10.5,,S +267,0,3,"Panula, Mr. Ernesti Arvid",male,16,4,1,3101295,39.6875,,S +268,1,3,"Persson, Mr. Ernst Ulrik",male,25,1,0,347083,7.775,,S +269,1,1,"Graham, Mrs. William Thompson (Edith Junkins)",female,58,0,1,PC 17582,153.4625,C125,S +270,1,1,"Bissette, Miss. Amelia",female,35,0,0,PC 17760,135.6333,C99,S +271,0,1,"Cairns, Mr. Alexander",male,,0,0,113798,31,,S +272,1,3,"Tornquist, Mr. William Henry",male,25,0,0,LINE,0,,S +273,1,2,"Mellinger, Mrs. (Elizabeth Anne Maidment)",female,41,0,1,250644,19.5,,S +274,0,1,"Natsch, Mr. Charles H",male,37,0,1,PC 17596,29.7,C118,C +275,1,3,"Healy, Miss. Hanora ""Nora""",female,,0,0,370375,7.75,,Q +276,1,1,"Andrews, Miss. Kornelia Theodosia",female,63,1,0,13502,77.9583,D7,S +277,0,3,"Lindblom, Miss. Augusta Charlotta",female,45,0,0,347073,7.75,,S +278,0,2,"Parkes, Mr. Francis ""Frank""",male,,0,0,239853,0,,S +279,0,3,"Rice, Master. Eric",male,7,4,1,382652,29.125,,Q +280,1,3,"Abbott, Mrs. Stanton (Rosa Hunt)",female,35,1,1,C.A. 2673,20.25,,S +281,0,3,"Duane, Mr. Frank",male,65,0,0,336439,7.75,,Q +282,0,3,"Olsson, Mr. Nils Johan Goransson",male,28,0,0,347464,7.8542,,S +283,0,3,"de Pelsmaeker, Mr. Alfons",male,16,0,0,345778,9.5,,S +284,1,3,"Dorking, Mr. Edward Arthur",male,19,0,0,A/5. 10482,8.05,,S +285,0,1,"Smith, Mr. Richard William",male,,0,0,113056,26,A19,S +286,0,3,"Stankovic, Mr. Ivan",male,33,0,0,349239,8.6625,,C +287,1,3,"de Mulder, Mr. Theodore",male,30,0,0,345774,9.5,,S +288,0,3,"Naidenoff, Mr. Penko",male,22,0,0,349206,7.8958,,S +289,1,2,"Hosono, Mr. Masabumi",male,42,0,0,237798,13,,S +290,1,3,"Connolly, Miss. Kate",female,22,0,0,370373,7.75,,Q +291,1,1,"Barber, Miss. Ellen ""Nellie""",female,26,0,0,19877,78.85,,S +292,1,1,"Bishop, Mrs. Dickinson H (Helen Walton)",female,19,1,0,11967,91.0792,B49,C +293,0,2,"Levy, Mr. Rene Jacques",male,36,0,0,SC/Paris 2163,12.875,D,C +294,0,3,"Haas, Miss. Aloisia",female,24,0,0,349236,8.85,,S +295,0,3,"Mineff, Mr. Ivan",male,24,0,0,349233,7.8958,,S +296,0,1,"Lewy, Mr. Ervin G",male,,0,0,PC 17612,27.7208,,C +297,0,3,"Hanna, Mr. Mansour",male,23.5,0,0,2693,7.2292,,C +298,0,1,"Allison, Miss. Helen Loraine",female,2,1,2,113781,151.55,C22 C26,S +299,1,1,"Saalfeld, Mr. Adolphe",male,,0,0,19988,30.5,C106,S +300,1,1,"Baxter, Mrs. James (Helene DeLaudeniere Chaput)",female,50,0,1,PC 17558,247.5208,B58 B60,C +301,1,3,"Kelly, Miss. Anna Katherine ""Annie Kate""",female,,0,0,9234,7.75,,Q +302,1,3,"McCoy, Mr. Bernard",male,,2,0,367226,23.25,,Q +303,0,3,"Johnson, Mr. William Cahoone Jr",male,19,0,0,LINE,0,,S +304,1,2,"Keane, Miss. Nora A",female,,0,0,226593,12.35,E101,Q +305,0,3,"Williams, Mr. Howard Hugh ""Harry""",male,,0,0,A/5 2466,8.05,,S +306,1,1,"Allison, Master. Hudson Trevor",male,0.92,1,2,113781,151.55,C22 C26,S +307,1,1,"Fleming, Miss. Margaret",female,,0,0,17421,110.8833,,C +308,1,1,"Penasco y Castellana, Mrs. Victor de Satode (Maria Josefa Perez de Soto y Vallejo)",female,17,1,0,PC 17758,108.9,C65,C +309,0,2,"Abelson, Mr. Samuel",male,30,1,0,P/PP 3381,24,,C +310,1,1,"Francatelli, Miss. Laura Mabel",female,30,0,0,PC 17485,56.9292,E36,C +311,1,1,"Hays, Miss. Margaret Bechstein",female,24,0,0,11767,83.1583,C54,C +312,1,1,"Ryerson, Miss. Emily Borie",female,18,2,2,PC 17608,262.375,B57 B59 B63 B66,C +313,0,2,"Lahtinen, Mrs. William (Anna Sylfven)",female,26,1,1,250651,26,,S +314,0,3,"Hendekovic, Mr. Ignjac",male,28,0,0,349243,7.8958,,S +315,0,2,"Hart, Mr. Benjamin",male,43,1,1,F.C.C. 13529,26.25,,S +316,1,3,"Nilsson, Miss. Helmina Josefina",female,26,0,0,347470,7.8542,,S +317,1,2,"Kantor, Mrs. Sinai (Miriam Sternin)",female,24,1,0,244367,26,,S +318,0,2,"Moraweck, Dr. Ernest",male,54,0,0,29011,14,,S +319,1,1,"Wick, Miss. Mary Natalie",female,31,0,2,36928,164.8667,C7,S +320,1,1,"Spedden, Mrs. Frederic Oakley (Margaretta Corning Stone)",female,40,1,1,16966,134.5,E34,C +321,0,3,"Dennis, Mr. Samuel",male,22,0,0,A/5 21172,7.25,,S +322,0,3,"Danoff, Mr. Yoto",male,27,0,0,349219,7.8958,,S +323,1,2,"Slayter, Miss. Hilda Mary",female,30,0,0,234818,12.35,,Q +324,1,2,"Caldwell, Mrs. Albert Francis (Sylvia Mae Harbaugh)",female,22,1,1,248738,29,,S +325,0,3,"Sage, Mr. George John Jr",male,,8,2,CA. 2343,69.55,,S +326,1,1,"Young, Miss. Marie Grice",female,36,0,0,PC 17760,135.6333,C32,C +327,0,3,"Nysveen, Mr. Johan Hansen",male,61,0,0,345364,6.2375,,S +328,1,2,"Ball, Mrs. (Ada E Hall)",female,36,0,0,28551,13,D,S +329,1,3,"Goldsmith, Mrs. Frank John (Emily Alice Brown)",female,31,1,1,363291,20.525,,S +330,1,1,"Hippach, Miss. Jean Gertrude",female,16,0,1,111361,57.9792,B18,C +331,1,3,"McCoy, Miss. Agnes",female,,2,0,367226,23.25,,Q +332,0,1,"Partner, Mr. Austen",male,45.5,0,0,113043,28.5,C124,S +333,0,1,"Graham, Mr. George Edward",male,38,0,1,PC 17582,153.4625,C91,S +334,0,3,"Vander Planke, Mr. Leo Edmondus",male,16,2,0,345764,18,,S +335,1,1,"Frauenthal, Mrs. Henry William (Clara Heinsheimer)",female,,1,0,PC 17611,133.65,,S +336,0,3,"Denkoff, Mr. Mitto",male,,0,0,349225,7.8958,,S +337,0,1,"Pears, Mr. Thomas Clinton",male,29,1,0,113776,66.6,C2,S +338,1,1,"Burns, Miss. Elizabeth Margaret",female,41,0,0,16966,134.5,E40,C +339,1,3,"Dahl, Mr. Karl Edwart",male,45,0,0,7598,8.05,,S +340,0,1,"Blackwell, Mr. Stephen Weart",male,45,0,0,113784,35.5,T,S +341,1,2,"Navratil, Master. Edmond Roger",male,2,1,1,230080,26,F2,S +342,1,1,"Fortune, Miss. Alice Elizabeth",female,24,3,2,19950,263,C23 C25 C27,S +343,0,2,"Collander, Mr. Erik Gustaf",male,28,0,0,248740,13,,S +344,0,2,"Sedgwick, Mr. Charles Frederick Waddington",male,25,0,0,244361,13,,S +345,0,2,"Fox, Mr. Stanley Hubert",male,36,0,0,229236,13,,S +346,1,2,"Brown, Miss. Amelia ""Mildred""",female,24,0,0,248733,13,F33,S +347,1,2,"Smith, Miss. Marion Elsie",female,40,0,0,31418,13,,S +348,1,3,"Davison, Mrs. Thomas Henry (Mary E Finck)",female,,1,0,386525,16.1,,S +349,1,3,"Coutts, Master. William Loch ""William""",male,3,1,1,C.A. 37671,15.9,,S +350,0,3,"Dimic, Mr. Jovan",male,42,0,0,315088,8.6625,,S +351,0,3,"Odahl, Mr. Nils Martin",male,23,0,0,7267,9.225,,S +352,0,1,"Williams-Lambert, Mr. Fletcher Fellows",male,,0,0,113510,35,C128,S +353,0,3,"Elias, Mr. Tannous",male,15,1,1,2695,7.2292,,C +354,0,3,"Arnold-Franchi, Mr. Josef",male,25,1,0,349237,17.8,,S +355,0,3,"Yousif, Mr. Wazli",male,,0,0,2647,7.225,,C +356,0,3,"Vanden Steen, Mr. Leo Peter",male,28,0,0,345783,9.5,,S +357,1,1,"Bowerman, Miss. Elsie Edith",female,22,0,1,113505,55,E33,S +358,0,2,"Funk, Miss. Annie Clemmer",female,38,0,0,237671,13,,S +359,1,3,"McGovern, Miss. Mary",female,,0,0,330931,7.8792,,Q +360,1,3,"Mockler, Miss. Helen Mary ""Ellie""",female,,0,0,330980,7.8792,,Q +361,0,3,"Skoog, Mr. Wilhelm",male,40,1,4,347088,27.9,,S +362,0,2,"del Carlo, Mr. Sebastiano",male,29,1,0,SC/PARIS 2167,27.7208,,C +363,0,3,"Barbara, Mrs. (Catherine David)",female,45,0,1,2691,14.4542,,C +364,0,3,"Asim, Mr. Adola",male,35,0,0,SOTON/O.Q. 3101310,7.05,,S +365,0,3,"O'Brien, Mr. Thomas",male,,1,0,370365,15.5,,Q +366,0,3,"Adahl, Mr. Mauritz Nils Martin",male,30,0,0,C 7076,7.25,,S +367,1,1,"Warren, Mrs. Frank Manley (Anna Sophia Atkinson)",female,60,1,0,110813,75.25,D37,C +368,1,3,"Moussa, Mrs. (Mantoura Boulos)",female,,0,0,2626,7.2292,,C +369,1,3,"Jermyn, Miss. Annie",female,,0,0,14313,7.75,,Q +370,1,1,"Aubart, Mme. Leontine Pauline",female,24,0,0,PC 17477,69.3,B35,C +371,1,1,"Harder, Mr. George Achilles",male,25,1,0,11765,55.4417,E50,C +372,0,3,"Wiklund, Mr. Jakob Alfred",male,18,1,0,3101267,6.4958,,S +373,0,3,"Beavan, Mr. William Thomas",male,19,0,0,323951,8.05,,S +374,0,1,"Ringhini, Mr. Sante",male,22,0,0,PC 17760,135.6333,,C +375,0,3,"Palsson, Miss. Stina Viola",female,3,3,1,349909,21.075,,S +376,1,1,"Meyer, Mrs. Edgar Joseph (Leila Saks)",female,,1,0,PC 17604,82.1708,,C +377,1,3,"Landergren, Miss. Aurora Adelia",female,22,0,0,C 7077,7.25,,S +378,0,1,"Widener, Mr. Harry Elkins",male,27,0,2,113503,211.5,C82,C +379,0,3,"Betros, Mr. Tannous",male,20,0,0,2648,4.0125,,C +380,0,3,"Gustafsson, Mr. Karl Gideon",male,19,0,0,347069,7.775,,S +381,1,1,"Bidois, Miss. Rosalie",female,42,0,0,PC 17757,227.525,,C +382,1,3,"Nakid, Miss. Maria (""Mary"")",female,1,0,2,2653,15.7417,,C +383,0,3,"Tikkanen, Mr. Juho",male,32,0,0,STON/O 2. 3101293,7.925,,S +384,1,1,"Holverson, Mrs. Alexander Oskar (Mary Aline Towner)",female,35,1,0,113789,52,,S +385,0,3,"Plotcharsky, Mr. Vasil",male,,0,0,349227,7.8958,,S +386,0,2,"Davies, Mr. Charles Henry",male,18,0,0,S.O.C. 14879,73.5,,S +387,0,3,"Goodwin, Master. Sidney Leonard",male,1,5,2,CA 2144,46.9,,S +388,1,2,"Buss, Miss. Kate",female,36,0,0,27849,13,,S +389,0,3,"Sadlier, Mr. Matthew",male,,0,0,367655,7.7292,,Q +390,1,2,"Lehmann, Miss. Bertha",female,17,0,0,SC 1748,12,,C +391,1,1,"Carter, Mr. William Ernest",male,36,1,2,113760,120,B96 B98,S +392,1,3,"Jansson, Mr. Carl Olof",male,21,0,0,350034,7.7958,,S +393,0,3,"Gustafsson, Mr. Johan Birger",male,28,2,0,3101277,7.925,,S +394,1,1,"Newell, Miss. Marjorie",female,23,1,0,35273,113.275,D36,C +395,1,3,"Sandstrom, Mrs. Hjalmar (Agnes Charlotta Bengtsson)",female,24,0,2,PP 9549,16.7,G6,S +396,0,3,"Johansson, Mr. Erik",male,22,0,0,350052,7.7958,,S +397,0,3,"Olsson, Miss. Elina",female,31,0,0,350407,7.8542,,S +398,0,2,"McKane, Mr. Peter David",male,46,0,0,28403,26,,S +399,0,2,"Pain, Dr. Alfred",male,23,0,0,244278,10.5,,S +400,1,2,"Trout, Mrs. William H (Jessie L)",female,28,0,0,240929,12.65,,S +401,1,3,"Niskanen, Mr. Juha",male,39,0,0,STON/O 2. 3101289,7.925,,S +402,0,3,"Adams, Mr. John",male,26,0,0,341826,8.05,,S +403,0,3,"Jussila, Miss. Mari Aina",female,21,1,0,4137,9.825,,S +404,0,3,"Hakkarainen, Mr. Pekka Pietari",male,28,1,0,STON/O2. 3101279,15.85,,S +405,0,3,"Oreskovic, Miss. Marija",female,20,0,0,315096,8.6625,,S +406,0,2,"Gale, Mr. Shadrach",male,34,1,0,28664,21,,S +407,0,3,"Widegren, Mr. Carl/Charles Peter",male,51,0,0,347064,7.75,,S +408,1,2,"Richards, Master. William Rowe",male,3,1,1,29106,18.75,,S +409,0,3,"Birkeland, Mr. Hans Martin Monsen",male,21,0,0,312992,7.775,,S +410,0,3,"Lefebre, Miss. Ida",female,,3,1,4133,25.4667,,S +411,0,3,"Sdycoff, Mr. Todor",male,,0,0,349222,7.8958,,S +412,0,3,"Hart, Mr. Henry",male,,0,0,394140,6.8583,,Q +413,1,1,"Minahan, Miss. Daisy E",female,33,1,0,19928,90,C78,Q +414,0,2,"Cunningham, Mr. Alfred Fleming",male,,0,0,239853,0,,S +415,1,3,"Sundman, Mr. Johan Julian",male,44,0,0,STON/O 2. 3101269,7.925,,S +416,0,3,"Meek, Mrs. Thomas (Annie Louise Rowley)",female,,0,0,343095,8.05,,S +417,1,2,"Drew, Mrs. James Vivian (Lulu Thorne Christian)",female,34,1,1,28220,32.5,,S +418,1,2,"Silven, Miss. Lyyli Karoliina",female,18,0,2,250652,13,,S +419,0,2,"Matthews, Mr. William John",male,30,0,0,28228,13,,S +420,0,3,"Van Impe, Miss. Catharina",female,10,0,2,345773,24.15,,S +421,0,3,"Gheorgheff, Mr. Stanio",male,,0,0,349254,7.8958,,C +422,0,3,"Charters, Mr. David",male,21,0,0,A/5. 13032,7.7333,,Q +423,0,3,"Zimmerman, Mr. Leo",male,29,0,0,315082,7.875,,S +424,0,3,"Danbom, Mrs. Ernst Gilbert (Anna Sigrid Maria Brogren)",female,28,1,1,347080,14.4,,S +425,0,3,"Rosblom, Mr. Viktor Richard",male,18,1,1,370129,20.2125,,S +426,0,3,"Wiseman, Mr. Phillippe",male,,0,0,A/4. 34244,7.25,,S +427,1,2,"Clarke, Mrs. Charles V (Ada Maria Winfield)",female,28,1,0,2003,26,,S +428,1,2,"Phillips, Miss. Kate Florence (""Mrs Kate Louise Phillips Marshall"")",female,19,0,0,250655,26,,S +429,0,3,"Flynn, Mr. James",male,,0,0,364851,7.75,,Q +430,1,3,"Pickard, Mr. Berk (Berk Trembisky)",male,32,0,0,SOTON/O.Q. 392078,8.05,E10,S +431,1,1,"Bjornstrom-Steffansson, Mr. Mauritz Hakan",male,28,0,0,110564,26.55,C52,S +432,1,3,"Thorneycroft, Mrs. Percival (Florence Kate White)",female,,1,0,376564,16.1,,S +433,1,2,"Louch, Mrs. Charles Alexander (Alice Adelaide Slow)",female,42,1,0,SC/AH 3085,26,,S +434,0,3,"Kallio, Mr. Nikolai Erland",male,17,0,0,STON/O 2. 3101274,7.125,,S +435,0,1,"Silvey, Mr. William Baird",male,50,1,0,13507,55.9,E44,S +436,1,1,"Carter, Miss. Lucile Polk",female,14,1,2,113760,120,B96 B98,S +437,0,3,"Ford, Miss. Doolina Margaret ""Daisy""",female,21,2,2,W./C. 6608,34.375,,S +438,1,2,"Richards, Mrs. Sidney (Emily Hocking)",female,24,2,3,29106,18.75,,S +439,0,1,"Fortune, Mr. Mark",male,64,1,4,19950,263,C23 C25 C27,S +440,0,2,"Kvillner, Mr. Johan Henrik Johannesson",male,31,0,0,C.A. 18723,10.5,,S +441,1,2,"Hart, Mrs. Benjamin (Esther Ada Bloomfield)",female,45,1,1,F.C.C. 13529,26.25,,S +442,0,3,"Hampe, Mr. Leon",male,20,0,0,345769,9.5,,S +443,0,3,"Petterson, Mr. Johan Emil",male,25,1,0,347076,7.775,,S +444,1,2,"Reynaldo, Ms. Encarnacion",female,28,0,0,230434,13,,S +445,1,3,"Johannesen-Bratthammer, Mr. Bernt",male,,0,0,65306,8.1125,,S +446,1,1,"Dodge, Master. Washington",male,4,0,2,33638,81.8583,A34,S +447,1,2,"Mellinger, Miss. Madeleine Violet",female,13,0,1,250644,19.5,,S +448,1,1,"Seward, Mr. Frederic Kimber",male,34,0,0,113794,26.55,,S +449,1,3,"Baclini, Miss. Marie Catherine",female,5,2,1,2666,19.2583,,C +450,1,1,"Peuchen, Major. Arthur Godfrey",male,52,0,0,113786,30.5,C104,S +451,0,2,"West, Mr. Edwy Arthur",male,36,1,2,C.A. 34651,27.75,,S +452,0,3,"Hagland, Mr. Ingvald Olai Olsen",male,,1,0,65303,19.9667,,S +453,0,1,"Foreman, Mr. Benjamin Laventall",male,30,0,0,113051,27.75,C111,C +454,1,1,"Goldenberg, Mr. Samuel L",male,49,1,0,17453,89.1042,C92,C +455,0,3,"Peduzzi, Mr. Joseph",male,,0,0,A/5 2817,8.05,,S +456,1,3,"Jalsevac, Mr. Ivan",male,29,0,0,349240,7.8958,,C +457,0,1,"Millet, Mr. Francis Davis",male,65,0,0,13509,26.55,E38,S +458,1,1,"Kenyon, Mrs. Frederick R (Marion)",female,,1,0,17464,51.8625,D21,S +459,1,2,"Toomey, Miss. Ellen",female,50,0,0,F.C.C. 13531,10.5,,S +460,0,3,"O'Connor, Mr. Maurice",male,,0,0,371060,7.75,,Q +461,1,1,"Anderson, Mr. Harry",male,48,0,0,19952,26.55,E12,S +462,0,3,"Morley, Mr. William",male,34,0,0,364506,8.05,,S +463,0,1,"Gee, Mr. Arthur H",male,47,0,0,111320,38.5,E63,S +464,0,2,"Milling, Mr. Jacob Christian",male,48,0,0,234360,13,,S +465,0,3,"Maisner, Mr. Simon",male,,0,0,A/S 2816,8.05,,S +466,0,3,"Goncalves, Mr. Manuel Estanslas",male,38,0,0,SOTON/O.Q. 3101306,7.05,,S +467,0,2,"Campbell, Mr. William",male,,0,0,239853,0,,S +468,0,1,"Smart, Mr. John Montgomery",male,56,0,0,113792,26.55,,S +469,0,3,"Scanlan, Mr. James",male,,0,0,36209,7.725,,Q +470,1,3,"Baclini, Miss. Helene Barbara",female,0.75,2,1,2666,19.2583,,C +471,0,3,"Keefe, Mr. Arthur",male,,0,0,323592,7.25,,S +472,0,3,"Cacic, Mr. Luka",male,38,0,0,315089,8.6625,,S +473,1,2,"West, Mrs. Edwy Arthur (Ada Mary Worth)",female,33,1,2,C.A. 34651,27.75,,S +474,1,2,"Jerwan, Mrs. Amin S (Marie Marthe Thuillard)",female,23,0,0,SC/AH Basle 541,13.7917,D,C +475,0,3,"Strandberg, Miss. Ida Sofia",female,22,0,0,7553,9.8375,,S +476,0,1,"Clifford, Mr. George Quincy",male,,0,0,110465,52,A14,S +477,0,2,"Renouf, Mr. Peter Henry",male,34,1,0,31027,21,,S +478,0,3,"Braund, Mr. Lewis Richard",male,29,1,0,3460,7.0458,,S +479,0,3,"Karlsson, Mr. Nils August",male,22,0,0,350060,7.5208,,S +480,1,3,"Hirvonen, Miss. Hildur E",female,2,0,1,3101298,12.2875,,S +481,0,3,"Goodwin, Master. Harold Victor",male,9,5,2,CA 2144,46.9,,S +482,0,2,"Frost, Mr. Anthony Wood ""Archie""",male,,0,0,239854,0,,S +483,0,3,"Rouse, Mr. Richard Henry",male,50,0,0,A/5 3594,8.05,,S +484,1,3,"Turkula, Mrs. (Hedwig)",female,63,0,0,4134,9.5875,,S +485,1,1,"Bishop, Mr. Dickinson H",male,25,1,0,11967,91.0792,B49,C +486,0,3,"Lefebre, Miss. Jeannie",female,,3,1,4133,25.4667,,S +487,1,1,"Hoyt, Mrs. Frederick Maxfield (Jane Anne Forby)",female,35,1,0,19943,90,C93,S +488,0,1,"Kent, Mr. Edward Austin",male,58,0,0,11771,29.7,B37,C +489,0,3,"Somerton, Mr. Francis William",male,30,0,0,A.5. 18509,8.05,,S +490,1,3,"Coutts, Master. Eden Leslie ""Neville""",male,9,1,1,C.A. 37671,15.9,,S +491,0,3,"Hagland, Mr. Konrad Mathias Reiersen",male,,1,0,65304,19.9667,,S +492,0,3,"Windelov, Mr. Einar",male,21,0,0,SOTON/OQ 3101317,7.25,,S +493,0,1,"Molson, Mr. Harry Markland",male,55,0,0,113787,30.5,C30,S +494,0,1,"Artagaveytia, Mr. Ramon",male,71,0,0,PC 17609,49.5042,,C +495,0,3,"Stanley, Mr. Edward Roland",male,21,0,0,A/4 45380,8.05,,S +496,0,3,"Yousseff, Mr. Gerious",male,,0,0,2627,14.4583,,C +497,1,1,"Eustis, Miss. Elizabeth Mussey",female,54,1,0,36947,78.2667,D20,C +498,0,3,"Shellard, Mr. Frederick William",male,,0,0,C.A. 6212,15.1,,S +499,0,1,"Allison, Mrs. Hudson J C (Bessie Waldo Daniels)",female,25,1,2,113781,151.55,C22 C26,S +500,0,3,"Svensson, Mr. Olof",male,24,0,0,350035,7.7958,,S +501,0,3,"Calic, Mr. Petar",male,17,0,0,315086,8.6625,,S +502,0,3,"Canavan, Miss. Mary",female,21,0,0,364846,7.75,,Q +503,0,3,"O'Sullivan, Miss. Bridget Mary",female,,0,0,330909,7.6292,,Q +504,0,3,"Laitinen, Miss. Kristina Sofia",female,37,0,0,4135,9.5875,,S +505,1,1,"Maioni, Miss. Roberta",female,16,0,0,110152,86.5,B79,S +506,0,1,"Penasco y Castellana, Mr. Victor de Satode",male,18,1,0,PC 17758,108.9,C65,C +507,1,2,"Quick, Mrs. Frederick Charles (Jane Richards)",female,33,0,2,26360,26,,S +508,1,1,"Bradley, Mr. George (""George Arthur Brayton"")",male,,0,0,111427,26.55,,S +509,0,3,"Olsen, Mr. Henry Margido",male,28,0,0,C 4001,22.525,,S +510,1,3,"Lang, Mr. Fang",male,26,0,0,1601,56.4958,,S +511,1,3,"Daly, Mr. Eugene Patrick",male,29,0,0,382651,7.75,,Q +512,0,3,"Webber, Mr. James",male,,0,0,SOTON/OQ 3101316,8.05,,S +513,1,1,"McGough, Mr. James Robert",male,36,0,0,PC 17473,26.2875,E25,S +514,1,1,"Rothschild, Mrs. Martin (Elizabeth L. Barrett)",female,54,1,0,PC 17603,59.4,,C +515,0,3,"Coleff, Mr. Satio",male,24,0,0,349209,7.4958,,S +516,0,1,"Walker, Mr. William Anderson",male,47,0,0,36967,34.0208,D46,S +517,1,2,"Lemore, Mrs. (Amelia Milley)",female,34,0,0,C.A. 34260,10.5,F33,S +518,0,3,"Ryan, Mr. Patrick",male,,0,0,371110,24.15,,Q +519,1,2,"Angle, Mrs. William A (Florence ""Mary"" Agnes Hughes)",female,36,1,0,226875,26,,S +520,0,3,"Pavlovic, Mr. Stefo",male,32,0,0,349242,7.8958,,S +521,1,1,"Perreault, Miss. Anne",female,30,0,0,12749,93.5,B73,S +522,0,3,"Vovk, Mr. Janko",male,22,0,0,349252,7.8958,,S +523,0,3,"Lahoud, Mr. Sarkis",male,,0,0,2624,7.225,,C +524,1,1,"Hippach, Mrs. Louis Albert (Ida Sophia Fischer)",female,44,0,1,111361,57.9792,B18,C +525,0,3,"Kassem, Mr. Fared",male,,0,0,2700,7.2292,,C +526,0,3,"Farrell, Mr. James",male,40.5,0,0,367232,7.75,,Q +527,1,2,"Ridsdale, Miss. Lucy",female,50,0,0,W./C. 14258,10.5,,S +528,0,1,"Farthing, Mr. John",male,,0,0,PC 17483,221.7792,C95,S +529,0,3,"Salonen, Mr. Johan Werner",male,39,0,0,3101296,7.925,,S +530,0,2,"Hocking, Mr. Richard George",male,23,2,1,29104,11.5,,S +531,1,2,"Quick, Miss. Phyllis May",female,2,1,1,26360,26,,S +532,0,3,"Toufik, Mr. Nakli",male,,0,0,2641,7.2292,,C +533,0,3,"Elias, Mr. Joseph Jr",male,17,1,1,2690,7.2292,,C +534,1,3,"Peter, Mrs. Catherine (Catherine Rizk)",female,,0,2,2668,22.3583,,C +535,0,3,"Cacic, Miss. Marija",female,30,0,0,315084,8.6625,,S +536,1,2,"Hart, Miss. Eva Miriam",female,7,0,2,F.C.C. 13529,26.25,,S +537,0,1,"Butt, Major. Archibald Willingham",male,45,0,0,113050,26.55,B38,S +538,1,1,"LeRoy, Miss. Bertha",female,30,0,0,PC 17761,106.425,,C +539,0,3,"Risien, Mr. Samuel Beard",male,,0,0,364498,14.5,,S +540,1,1,"Frolicher, Miss. Hedwig Margaritha",female,22,0,2,13568,49.5,B39,C +541,1,1,"Crosby, Miss. Harriet R",female,36,0,2,WE/P 5735,71,B22,S +542,0,3,"Andersson, Miss. Ingeborg Constanzia",female,9,4,2,347082,31.275,,S +543,0,3,"Andersson, Miss. Sigrid Elisabeth",female,11,4,2,347082,31.275,,S +544,1,2,"Beane, Mr. Edward",male,32,1,0,2908,26,,S +545,0,1,"Douglas, Mr. Walter Donald",male,50,1,0,PC 17761,106.425,C86,C +546,0,1,"Nicholson, Mr. Arthur Ernest",male,64,0,0,693,26,,S +547,1,2,"Beane, Mrs. Edward (Ethel Clarke)",female,19,1,0,2908,26,,S +548,1,2,"Padro y Manent, Mr. Julian",male,,0,0,SC/PARIS 2146,13.8625,,C +549,0,3,"Goldsmith, Mr. Frank John",male,33,1,1,363291,20.525,,S +550,1,2,"Davies, Master. John Morgan Jr",male,8,1,1,C.A. 33112,36.75,,S +551,1,1,"Thayer, Mr. John Borland Jr",male,17,0,2,17421,110.8833,C70,C +552,0,2,"Sharp, Mr. Percival James R",male,27,0,0,244358,26,,S +553,0,3,"O'Brien, Mr. Timothy",male,,0,0,330979,7.8292,,Q +554,1,3,"Leeni, Mr. Fahim (""Philip Zenni"")",male,22,0,0,2620,7.225,,C +555,1,3,"Ohman, Miss. Velin",female,22,0,0,347085,7.775,,S +556,0,1,"Wright, Mr. George",male,62,0,0,113807,26.55,,S +557,1,1,"Duff Gordon, Lady. (Lucille Christiana Sutherland) (""Mrs Morgan"")",female,48,1,0,11755,39.6,A16,C +558,0,1,"Robbins, Mr. Victor",male,,0,0,PC 17757,227.525,,C +559,1,1,"Taussig, Mrs. Emil (Tillie Mandelbaum)",female,39,1,1,110413,79.65,E67,S +560,1,3,"de Messemaeker, Mrs. Guillaume Joseph (Emma)",female,36,1,0,345572,17.4,,S +561,0,3,"Morrow, Mr. Thomas Rowan",male,,0,0,372622,7.75,,Q +562,0,3,"Sivic, Mr. Husein",male,40,0,0,349251,7.8958,,S +563,0,2,"Norman, Mr. Robert Douglas",male,28,0,0,218629,13.5,,S +564,0,3,"Simmons, Mr. John",male,,0,0,SOTON/OQ 392082,8.05,,S +565,0,3,"Meanwell, Miss. (Marion Ogden)",female,,0,0,SOTON/O.Q. 392087,8.05,,S +566,0,3,"Davies, Mr. Alfred J",male,24,2,0,A/4 48871,24.15,,S +567,0,3,"Stoytcheff, Mr. Ilia",male,19,0,0,349205,7.8958,,S +568,0,3,"Palsson, Mrs. Nils (Alma Cornelia Berglund)",female,29,0,4,349909,21.075,,S +569,0,3,"Doharr, Mr. Tannous",male,,0,0,2686,7.2292,,C +570,1,3,"Jonsson, Mr. Carl",male,32,0,0,350417,7.8542,,S +571,1,2,"Harris, Mr. George",male,62,0,0,S.W./PP 752,10.5,,S +572,1,1,"Appleton, Mrs. Edward Dale (Charlotte Lamson)",female,53,2,0,11769,51.4792,C101,S +573,1,1,"Flynn, Mr. John Irwin (""Irving"")",male,36,0,0,PC 17474,26.3875,E25,S +574,1,3,"Kelly, Miss. Mary",female,,0,0,14312,7.75,,Q +575,0,3,"Rush, Mr. Alfred George John",male,16,0,0,A/4. 20589,8.05,,S +576,0,3,"Patchett, Mr. George",male,19,0,0,358585,14.5,,S +577,1,2,"Garside, Miss. Ethel",female,34,0,0,243880,13,,S +578,1,1,"Silvey, Mrs. William Baird (Alice Munger)",female,39,1,0,13507,55.9,E44,S +579,0,3,"Caram, Mrs. Joseph (Maria Elias)",female,,1,0,2689,14.4583,,C +580,1,3,"Jussila, Mr. Eiriik",male,32,0,0,STON/O 2. 3101286,7.925,,S +581,1,2,"Christy, Miss. Julie Rachel",female,25,1,1,237789,30,,S +582,1,1,"Thayer, Mrs. John Borland (Marian Longstreth Morris)",female,39,1,1,17421,110.8833,C68,C +583,0,2,"Downton, Mr. William James",male,54,0,0,28403,26,,S +584,0,1,"Ross, Mr. John Hugo",male,36,0,0,13049,40.125,A10,C +585,0,3,"Paulner, Mr. Uscher",male,,0,0,3411,8.7125,,C +586,1,1,"Taussig, Miss. Ruth",female,18,0,2,110413,79.65,E68,S +587,0,2,"Jarvis, Mr. John Denzil",male,47,0,0,237565,15,,S +588,1,1,"Frolicher-Stehli, Mr. Maxmillian",male,60,1,1,13567,79.2,B41,C +589,0,3,"Gilinski, Mr. Eliezer",male,22,0,0,14973,8.05,,S +590,0,3,"Murdlin, Mr. Joseph",male,,0,0,A./5. 3235,8.05,,S +591,0,3,"Rintamaki, Mr. Matti",male,35,0,0,STON/O 2. 3101273,7.125,,S +592,1,1,"Stephenson, Mrs. Walter Bertram (Martha Eustis)",female,52,1,0,36947,78.2667,D20,C +593,0,3,"Elsbury, Mr. William James",male,47,0,0,A/5 3902,7.25,,S +594,0,3,"Bourke, Miss. Mary",female,,0,2,364848,7.75,,Q +595,0,2,"Chapman, Mr. John Henry",male,37,1,0,SC/AH 29037,26,,S +596,0,3,"Van Impe, Mr. Jean Baptiste",male,36,1,1,345773,24.15,,S +597,1,2,"Leitch, Miss. Jessie Wills",female,,0,0,248727,33,,S +598,0,3,"Johnson, Mr. Alfred",male,49,0,0,LINE,0,,S +599,0,3,"Boulos, Mr. Hanna",male,,0,0,2664,7.225,,C +600,1,1,"Duff Gordon, Sir. Cosmo Edmund (""Mr Morgan"")",male,49,1,0,PC 17485,56.9292,A20,C +601,1,2,"Jacobsohn, Mrs. Sidney Samuel (Amy Frances Christy)",female,24,2,1,243847,27,,S +602,0,3,"Slabenoff, Mr. Petco",male,,0,0,349214,7.8958,,S +603,0,1,"Harrington, Mr. Charles H",male,,0,0,113796,42.4,,S +604,0,3,"Torber, Mr. Ernst William",male,44,0,0,364511,8.05,,S +605,1,1,"Homer, Mr. Harry (""Mr E Haven"")",male,35,0,0,111426,26.55,,C +606,0,3,"Lindell, Mr. Edvard Bengtsson",male,36,1,0,349910,15.55,,S +607,0,3,"Karaic, Mr. Milan",male,30,0,0,349246,7.8958,,S +608,1,1,"Daniel, Mr. Robert Williams",male,27,0,0,113804,30.5,,S +609,1,2,"Laroche, Mrs. Joseph (Juliette Marie Louise Lafargue)",female,22,1,2,SC/Paris 2123,41.5792,,C +610,1,1,"Shutes, Miss. Elizabeth W",female,40,0,0,PC 17582,153.4625,C125,S +611,0,3,"Andersson, Mrs. Anders Johan (Alfrida Konstantia Brogren)",female,39,1,5,347082,31.275,,S +612,0,3,"Jardin, Mr. Jose Neto",male,,0,0,SOTON/O.Q. 3101305,7.05,,S +613,1,3,"Murphy, Miss. Margaret Jane",female,,1,0,367230,15.5,,Q +614,0,3,"Horgan, Mr. John",male,,0,0,370377,7.75,,Q +615,0,3,"Brocklebank, Mr. William Alfred",male,35,0,0,364512,8.05,,S +616,1,2,"Herman, Miss. Alice",female,24,1,2,220845,65,,S +617,0,3,"Danbom, Mr. Ernst Gilbert",male,34,1,1,347080,14.4,,S +618,0,3,"Lobb, Mrs. William Arthur (Cordelia K Stanlick)",female,26,1,0,A/5. 3336,16.1,,S +619,1,2,"Becker, Miss. Marion Louise",female,4,2,1,230136,39,F4,S +620,0,2,"Gavey, Mr. Lawrence",male,26,0,0,31028,10.5,,S +621,0,3,"Yasbeck, Mr. Antoni",male,27,1,0,2659,14.4542,,C +622,1,1,"Kimball, Mr. Edwin Nelson Jr",male,42,1,0,11753,52.5542,D19,S +623,1,3,"Nakid, Mr. Sahid",male,20,1,1,2653,15.7417,,C +624,0,3,"Hansen, Mr. Henry Damsgaard",male,21,0,0,350029,7.8542,,S +625,0,3,"Bowen, Mr. David John ""Dai""",male,21,0,0,54636,16.1,,S +626,0,1,"Sutton, Mr. Frederick",male,61,0,0,36963,32.3208,D50,S +627,0,2,"Kirkland, Rev. Charles Leonard",male,57,0,0,219533,12.35,,Q +628,1,1,"Longley, Miss. Gretchen Fiske",female,21,0,0,13502,77.9583,D9,S +629,0,3,"Bostandyeff, Mr. Guentcho",male,26,0,0,349224,7.8958,,S +630,0,3,"O'Connell, Mr. Patrick D",male,,0,0,334912,7.7333,,Q +631,1,1,"Barkworth, Mr. Algernon Henry Wilson",male,80,0,0,27042,30,A23,S +632,0,3,"Lundahl, Mr. Johan Svensson",male,51,0,0,347743,7.0542,,S +633,1,1,"Stahelin-Maeglin, Dr. Max",male,32,0,0,13214,30.5,B50,C +634,0,1,"Parr, Mr. William Henry Marsh",male,,0,0,112052,0,,S +635,0,3,"Skoog, Miss. Mabel",female,9,3,2,347088,27.9,,S +636,1,2,"Davis, Miss. Mary",female,28,0,0,237668,13,,S +637,0,3,"Leinonen, Mr. Antti Gustaf",male,32,0,0,STON/O 2. 3101292,7.925,,S +638,0,2,"Collyer, Mr. Harvey",male,31,1,1,C.A. 31921,26.25,,S +639,0,3,"Panula, Mrs. Juha (Maria Emilia Ojala)",female,41,0,5,3101295,39.6875,,S +640,0,3,"Thorneycroft, Mr. Percival",male,,1,0,376564,16.1,,S +641,0,3,"Jensen, Mr. Hans Peder",male,20,0,0,350050,7.8542,,S +642,1,1,"Sagesser, Mlle. Emma",female,24,0,0,PC 17477,69.3,B35,C +643,0,3,"Skoog, Miss. Margit Elizabeth",female,2,3,2,347088,27.9,,S +644,1,3,"Foo, Mr. Choong",male,,0,0,1601,56.4958,,S +645,1,3,"Baclini, Miss. Eugenie",female,0.75,2,1,2666,19.2583,,C +646,1,1,"Harper, Mr. Henry Sleeper",male,48,1,0,PC 17572,76.7292,D33,C +647,0,3,"Cor, Mr. Liudevit",male,19,0,0,349231,7.8958,,S +648,1,1,"Simonius-Blumer, Col. Oberst Alfons",male,56,0,0,13213,35.5,A26,C +649,0,3,"Willey, Mr. Edward",male,,0,0,S.O./P.P. 751,7.55,,S +650,1,3,"Stanley, Miss. Amy Zillah Elsie",female,23,0,0,CA. 2314,7.55,,S +651,0,3,"Mitkoff, Mr. Mito",male,,0,0,349221,7.8958,,S +652,1,2,"Doling, Miss. Elsie",female,18,0,1,231919,23,,S +653,0,3,"Kalvik, Mr. Johannes Halvorsen",male,21,0,0,8475,8.4333,,S +654,1,3,"O'Leary, Miss. Hanora ""Norah""",female,,0,0,330919,7.8292,,Q +655,0,3,"Hegarty, Miss. Hanora ""Nora""",female,18,0,0,365226,6.75,,Q +656,0,2,"Hickman, Mr. Leonard Mark",male,24,2,0,S.O.C. 14879,73.5,,S +657,0,3,"Radeff, Mr. Alexander",male,,0,0,349223,7.8958,,S +658,0,3,"Bourke, Mrs. John (Catherine)",female,32,1,1,364849,15.5,,Q +659,0,2,"Eitemiller, Mr. George Floyd",male,23,0,0,29751,13,,S +660,0,1,"Newell, Mr. Arthur Webster",male,58,0,2,35273,113.275,D48,C +661,1,1,"Frauenthal, Dr. Henry William",male,50,2,0,PC 17611,133.65,,S +662,0,3,"Badt, Mr. Mohamed",male,40,0,0,2623,7.225,,C +663,0,1,"Colley, Mr. Edward Pomeroy",male,47,0,0,5727,25.5875,E58,S +664,0,3,"Coleff, Mr. Peju",male,36,0,0,349210,7.4958,,S +665,1,3,"Lindqvist, Mr. Eino William",male,20,1,0,STON/O 2. 3101285,7.925,,S +666,0,2,"Hickman, Mr. Lewis",male,32,2,0,S.O.C. 14879,73.5,,S +667,0,2,"Butler, Mr. Reginald Fenton",male,25,0,0,234686,13,,S +668,0,3,"Rommetvedt, Mr. Knud Paust",male,,0,0,312993,7.775,,S +669,0,3,"Cook, Mr. Jacob",male,43,0,0,A/5 3536,8.05,,S +670,1,1,"Taylor, Mrs. Elmer Zebley (Juliet Cummins Wright)",female,,1,0,19996,52,C126,S +671,1,2,"Brown, Mrs. Thomas William Solomon (Elizabeth Catherine Ford)",female,40,1,1,29750,39,,S +672,0,1,"Davidson, Mr. Thornton",male,31,1,0,F.C. 12750,52,B71,S +673,0,2,"Mitchell, Mr. Henry Michael",male,70,0,0,C.A. 24580,10.5,,S +674,1,2,"Wilhelms, Mr. Charles",male,31,0,0,244270,13,,S +675,0,2,"Watson, Mr. Ennis Hastings",male,,0,0,239856,0,,S +676,0,3,"Edvardsson, Mr. Gustaf Hjalmar",male,18,0,0,349912,7.775,,S +677,0,3,"Sawyer, Mr. Frederick Charles",male,24.5,0,0,342826,8.05,,S +678,1,3,"Turja, Miss. Anna Sofia",female,18,0,0,4138,9.8417,,S +679,0,3,"Goodwin, Mrs. Frederick (Augusta Tyler)",female,43,1,6,CA 2144,46.9,,S +680,1,1,"Cardeza, Mr. Thomas Drake Martinez",male,36,0,1,PC 17755,512.3292,B51 B53 B55,C +681,0,3,"Peters, Miss. Katie",female,,0,0,330935,8.1375,,Q +682,1,1,"Hassab, Mr. Hammad",male,27,0,0,PC 17572,76.7292,D49,C +683,0,3,"Olsvigen, Mr. Thor Anderson",male,20,0,0,6563,9.225,,S +684,0,3,"Goodwin, Mr. Charles Edward",male,14,5,2,CA 2144,46.9,,S +685,0,2,"Brown, Mr. Thomas William Solomon",male,60,1,1,29750,39,,S +686,0,2,"Laroche, Mr. Joseph Philippe Lemercier",male,25,1,2,SC/Paris 2123,41.5792,,C +687,0,3,"Panula, Mr. Jaako Arnold",male,14,4,1,3101295,39.6875,,S +688,0,3,"Dakic, Mr. Branko",male,19,0,0,349228,10.1708,,S +689,0,3,"Fischer, Mr. Eberhard Thelander",male,18,0,0,350036,7.7958,,S +690,1,1,"Madill, Miss. Georgette Alexandra",female,15,0,1,24160,211.3375,B5,S +691,1,1,"Dick, Mr. Albert Adrian",male,31,1,0,17474,57,B20,S +692,1,3,"Karun, Miss. Manca",female,4,0,1,349256,13.4167,,C +693,1,3,"Lam, Mr. Ali",male,,0,0,1601,56.4958,,S +694,0,3,"Saad, Mr. Khalil",male,25,0,0,2672,7.225,,C +695,0,1,"Weir, Col. John",male,60,0,0,113800,26.55,,S +696,0,2,"Chapman, Mr. Charles Henry",male,52,0,0,248731,13.5,,S +697,0,3,"Kelly, Mr. James",male,44,0,0,363592,8.05,,S +698,1,3,"Mullens, Miss. Katherine ""Katie""",female,,0,0,35852,7.7333,,Q +699,0,1,"Thayer, Mr. John Borland",male,49,1,1,17421,110.8833,C68,C +700,0,3,"Humblen, Mr. Adolf Mathias Nicolai Olsen",male,42,0,0,348121,7.65,F G63,S +701,1,1,"Astor, Mrs. John Jacob (Madeleine Talmadge Force)",female,18,1,0,PC 17757,227.525,C62 C64,C +702,1,1,"Silverthorne, Mr. Spencer Victor",male,35,0,0,PC 17475,26.2875,E24,S +703,0,3,"Barbara, Miss. Saiide",female,18,0,1,2691,14.4542,,C +704,0,3,"Gallagher, Mr. Martin",male,25,0,0,36864,7.7417,,Q +705,0,3,"Hansen, Mr. Henrik Juul",male,26,1,0,350025,7.8542,,S +706,0,2,"Morley, Mr. Henry Samuel (""Mr Henry Marshall"")",male,39,0,0,250655,26,,S +707,1,2,"Kelly, Mrs. Florence ""Fannie""",female,45,0,0,223596,13.5,,S +708,1,1,"Calderhead, Mr. Edward Pennington",male,42,0,0,PC 17476,26.2875,E24,S +709,1,1,"Cleaver, Miss. Alice",female,22,0,0,113781,151.55,,S +710,1,3,"Moubarek, Master. Halim Gonios (""William George"")",male,,1,1,2661,15.2458,,C +711,1,1,"Mayne, Mlle. Berthe Antonine (""Mrs de Villiers"")",female,24,0,0,PC 17482,49.5042,C90,C +712,0,1,"Klaber, Mr. Herman",male,,0,0,113028,26.55,C124,S +713,1,1,"Taylor, Mr. Elmer Zebley",male,48,1,0,19996,52,C126,S +714,0,3,"Larsson, Mr. August Viktor",male,29,0,0,7545,9.4833,,S +715,0,2,"Greenberg, Mr. Samuel",male,52,0,0,250647,13,,S +716,0,3,"Soholt, Mr. Peter Andreas Lauritz Andersen",male,19,0,0,348124,7.65,F G73,S +717,1,1,"Endres, Miss. Caroline Louise",female,38,0,0,PC 17757,227.525,C45,C +718,1,2,"Troutt, Miss. Edwina Celia ""Winnie""",female,27,0,0,34218,10.5,E101,S +719,0,3,"McEvoy, Mr. Michael",male,,0,0,36568,15.5,,Q +720,0,3,"Johnson, Mr. Malkolm Joackim",male,33,0,0,347062,7.775,,S +721,1,2,"Harper, Miss. Annie Jessie ""Nina""",female,6,0,1,248727,33,,S +722,0,3,"Jensen, Mr. Svend Lauritz",male,17,1,0,350048,7.0542,,S +723,0,2,"Gillespie, Mr. William Henry",male,34,0,0,12233,13,,S +724,0,2,"Hodges, Mr. Henry Price",male,50,0,0,250643,13,,S +725,1,1,"Chambers, Mr. Norman Campbell",male,27,1,0,113806,53.1,E8,S +726,0,3,"Oreskovic, Mr. Luka",male,20,0,0,315094,8.6625,,S +727,1,2,"Renouf, Mrs. Peter Henry (Lillian Jefferys)",female,30,3,0,31027,21,,S +728,1,3,"Mannion, Miss. Margareth",female,,0,0,36866,7.7375,,Q +729,0,2,"Bryhl, Mr. Kurt Arnold Gottfrid",male,25,1,0,236853,26,,S +730,0,3,"Ilmakangas, Miss. Pieta Sofia",female,25,1,0,STON/O2. 3101271,7.925,,S +731,1,1,"Allen, Miss. Elisabeth Walton",female,29,0,0,24160,211.3375,B5,S +732,0,3,"Hassan, Mr. Houssein G N",male,11,0,0,2699,18.7875,,C +733,0,2,"Knight, Mr. Robert J",male,,0,0,239855,0,,S +734,0,2,"Berriman, Mr. William John",male,23,0,0,28425,13,,S +735,0,2,"Troupiansky, Mr. Moses Aaron",male,23,0,0,233639,13,,S +736,0,3,"Williams, Mr. Leslie",male,28.5,0,0,54636,16.1,,S +737,0,3,"Ford, Mrs. Edward (Margaret Ann Watson)",female,48,1,3,W./C. 6608,34.375,,S +738,1,1,"Lesurer, Mr. Gustave J",male,35,0,0,PC 17755,512.3292,B101,C +739,0,3,"Ivanoff, Mr. Kanio",male,,0,0,349201,7.8958,,S +740,0,3,"Nankoff, Mr. Minko",male,,0,0,349218,7.8958,,S +741,1,1,"Hawksford, Mr. Walter James",male,,0,0,16988,30,D45,S +742,0,1,"Cavendish, Mr. Tyrell William",male,36,1,0,19877,78.85,C46,S +743,1,1,"Ryerson, Miss. Susan Parker ""Suzette""",female,21,2,2,PC 17608,262.375,B57 B59 B63 B66,C +744,0,3,"McNamee, Mr. Neal",male,24,1,0,376566,16.1,,S +745,1,3,"Stranden, Mr. Juho",male,31,0,0,STON/O 2. 3101288,7.925,,S +746,0,1,"Crosby, Capt. Edward Gifford",male,70,1,1,WE/P 5735,71,B22,S +747,0,3,"Abbott, Mr. Rossmore Edward",male,16,1,1,C.A. 2673,20.25,,S +748,1,2,"Sinkkonen, Miss. Anna",female,30,0,0,250648,13,,S +749,0,1,"Marvin, Mr. Daniel Warner",male,19,1,0,113773,53.1,D30,S +750,0,3,"Connaghton, Mr. Michael",male,31,0,0,335097,7.75,,Q +751,1,2,"Wells, Miss. Joan",female,4,1,1,29103,23,,S +752,1,3,"Moor, Master. Meier",male,6,0,1,392096,12.475,E121,S +753,0,3,"Vande Velde, Mr. Johannes Joseph",male,33,0,0,345780,9.5,,S +754,0,3,"Jonkoff, Mr. Lalio",male,23,0,0,349204,7.8958,,S +755,1,2,"Herman, Mrs. Samuel (Jane Laver)",female,48,1,2,220845,65,,S +756,1,2,"Hamalainen, Master. Viljo",male,0.67,1,1,250649,14.5,,S +757,0,3,"Carlsson, Mr. August Sigfrid",male,28,0,0,350042,7.7958,,S +758,0,2,"Bailey, Mr. Percy Andrew",male,18,0,0,29108,11.5,,S +759,0,3,"Theobald, Mr. Thomas Leonard",male,34,0,0,363294,8.05,,S +760,1,1,"Rothes, the Countess. of (Lucy Noel Martha Dyer-Edwards)",female,33,0,0,110152,86.5,B77,S +761,0,3,"Garfirth, Mr. John",male,,0,0,358585,14.5,,S +762,0,3,"Nirva, Mr. Iisakki Antino Aijo",male,41,0,0,SOTON/O2 3101272,7.125,,S +763,1,3,"Barah, Mr. Hanna Assi",male,20,0,0,2663,7.2292,,C +764,1,1,"Carter, Mrs. William Ernest (Lucile Polk)",female,36,1,2,113760,120,B96 B98,S +765,0,3,"Eklund, Mr. Hans Linus",male,16,0,0,347074,7.775,,S +766,1,1,"Hogeboom, Mrs. John C (Anna Andrews)",female,51,1,0,13502,77.9583,D11,S +767,0,1,"Brewe, Dr. Arthur Jackson",male,,0,0,112379,39.6,,C +768,0,3,"Mangan, Miss. Mary",female,30.5,0,0,364850,7.75,,Q +769,0,3,"Moran, Mr. Daniel J",male,,1,0,371110,24.15,,Q +770,0,3,"Gronnestad, Mr. Daniel Danielsen",male,32,0,0,8471,8.3625,,S +771,0,3,"Lievens, Mr. Rene Aime",male,24,0,0,345781,9.5,,S +772,0,3,"Jensen, Mr. Niels Peder",male,48,0,0,350047,7.8542,,S +773,0,2,"Mack, Mrs. (Mary)",female,57,0,0,S.O./P.P. 3,10.5,E77,S +774,0,3,"Elias, Mr. Dibo",male,,0,0,2674,7.225,,C +775,1,2,"Hocking, Mrs. Elizabeth (Eliza Needs)",female,54,1,3,29105,23,,S +776,0,3,"Myhrman, Mr. Pehr Fabian Oliver Malkolm",male,18,0,0,347078,7.75,,S +777,0,3,"Tobin, Mr. Roger",male,,0,0,383121,7.75,F38,Q +778,1,3,"Emanuel, Miss. Virginia Ethel",female,5,0,0,364516,12.475,,S +779,0,3,"Kilgannon, Mr. Thomas J",male,,0,0,36865,7.7375,,Q +780,1,1,"Robert, Mrs. Edward Scott (Elisabeth Walton McMillan)",female,43,0,1,24160,211.3375,B3,S +781,1,3,"Ayoub, Miss. Banoura",female,13,0,0,2687,7.2292,,C +782,1,1,"Dick, Mrs. Albert Adrian (Vera Gillespie)",female,17,1,0,17474,57,B20,S +783,0,1,"Long, Mr. Milton Clyde",male,29,0,0,113501,30,D6,S +784,0,3,"Johnston, Mr. Andrew G",male,,1,2,W./C. 6607,23.45,,S +785,0,3,"Ali, Mr. William",male,25,0,0,SOTON/O.Q. 3101312,7.05,,S +786,0,3,"Harmer, Mr. Abraham (David Lishin)",male,25,0,0,374887,7.25,,S +787,1,3,"Sjoblom, Miss. Anna Sofia",female,18,0,0,3101265,7.4958,,S +788,0,3,"Rice, Master. George Hugh",male,8,4,1,382652,29.125,,Q +789,1,3,"Dean, Master. Bertram Vere",male,1,1,2,C.A. 2315,20.575,,S +790,0,1,"Guggenheim, Mr. Benjamin",male,46,0,0,PC 17593,79.2,B82 B84,C +791,0,3,"Keane, Mr. Andrew ""Andy""",male,,0,0,12460,7.75,,Q +792,0,2,"Gaskell, Mr. Alfred",male,16,0,0,239865,26,,S +793,0,3,"Sage, Miss. Stella Anna",female,,8,2,CA. 2343,69.55,,S +794,0,1,"Hoyt, Mr. William Fisher",male,,0,0,PC 17600,30.6958,,C +795,0,3,"Dantcheff, Mr. Ristiu",male,25,0,0,349203,7.8958,,S +796,0,2,"Otter, Mr. Richard",male,39,0,0,28213,13,,S +797,1,1,"Leader, Dr. Alice (Farnham)",female,49,0,0,17465,25.9292,D17,S +798,1,3,"Osman, Mrs. Mara",female,31,0,0,349244,8.6833,,S +799,0,3,"Ibrahim Shawah, Mr. Yousseff",male,30,0,0,2685,7.2292,,C +800,0,3,"Van Impe, Mrs. Jean Baptiste (Rosalie Paula Govaert)",female,30,1,1,345773,24.15,,S +801,0,2,"Ponesell, Mr. Martin",male,34,0,0,250647,13,,S +802,1,2,"Collyer, Mrs. Harvey (Charlotte Annie Tate)",female,31,1,1,C.A. 31921,26.25,,S +803,1,1,"Carter, Master. William Thornton II",male,11,1,2,113760,120,B96 B98,S +804,1,3,"Thomas, Master. Assad Alexander",male,0.42,0,1,2625,8.5167,,C +805,1,3,"Hedman, Mr. Oskar Arvid",male,27,0,0,347089,6.975,,S +806,0,3,"Johansson, Mr. Karl Johan",male,31,0,0,347063,7.775,,S +807,0,1,"Andrews, Mr. Thomas Jr",male,39,0,0,112050,0,A36,S +808,0,3,"Pettersson, Miss. Ellen Natalia",female,18,0,0,347087,7.775,,S +809,0,2,"Meyer, Mr. August",male,39,0,0,248723,13,,S +810,1,1,"Chambers, Mrs. Norman Campbell (Bertha Griggs)",female,33,1,0,113806,53.1,E8,S +811,0,3,"Alexander, Mr. William",male,26,0,0,3474,7.8875,,S +812,0,3,"Lester, Mr. James",male,39,0,0,A/4 48871,24.15,,S +813,0,2,"Slemen, Mr. Richard James",male,35,0,0,28206,10.5,,S +814,0,3,"Andersson, Miss. Ebba Iris Alfrida",female,6,4,2,347082,31.275,,S +815,0,3,"Tomlin, Mr. Ernest Portage",male,30.5,0,0,364499,8.05,,S +816,0,1,"Fry, Mr. Richard",male,,0,0,112058,0,B102,S +817,0,3,"Heininen, Miss. Wendla Maria",female,23,0,0,STON/O2. 3101290,7.925,,S +818,0,2,"Mallet, Mr. Albert",male,31,1,1,S.C./PARIS 2079,37.0042,,C +819,0,3,"Holm, Mr. John Fredrik Alexander",male,43,0,0,C 7075,6.45,,S +820,0,3,"Skoog, Master. Karl Thorsten",male,10,3,2,347088,27.9,,S +821,1,1,"Hays, Mrs. Charles Melville (Clara Jennings Gregg)",female,52,1,1,12749,93.5,B69,S +822,1,3,"Lulic, Mr. Nikola",male,27,0,0,315098,8.6625,,S +823,0,1,"Reuchlin, Jonkheer. John George",male,38,0,0,19972,0,,S +824,1,3,"Moor, Mrs. (Beila)",female,27,0,1,392096,12.475,E121,S +825,0,3,"Panula, Master. Urho Abraham",male,2,4,1,3101295,39.6875,,S +826,0,3,"Flynn, Mr. John",male,,0,0,368323,6.95,,Q +827,0,3,"Lam, Mr. Len",male,,0,0,1601,56.4958,,S +828,1,2,"Mallet, Master. Andre",male,1,0,2,S.C./PARIS 2079,37.0042,,C +829,1,3,"McCormack, Mr. Thomas Joseph",male,,0,0,367228,7.75,,Q +830,1,1,"Stone, Mrs. George Nelson (Martha Evelyn)",female,62,0,0,113572,80,B28, +831,1,3,"Yasbeck, Mrs. Antoni (Selini Alexander)",female,15,1,0,2659,14.4542,,C +832,1,2,"Richards, Master. George Sibley",male,0.83,1,1,29106,18.75,,S +833,0,3,"Saad, Mr. Amin",male,,0,0,2671,7.2292,,C +834,0,3,"Augustsson, Mr. Albert",male,23,0,0,347468,7.8542,,S +835,0,3,"Allum, Mr. Owen George",male,18,0,0,2223,8.3,,S +836,1,1,"Compton, Miss. Sara Rebecca",female,39,1,1,PC 17756,83.1583,E49,C +837,0,3,"Pasic, Mr. Jakob",male,21,0,0,315097,8.6625,,S +838,0,3,"Sirota, Mr. Maurice",male,,0,0,392092,8.05,,S +839,1,3,"Chip, Mr. Chang",male,32,0,0,1601,56.4958,,S +840,1,1,"Marechal, Mr. Pierre",male,,0,0,11774,29.7,C47,C +841,0,3,"Alhomaki, Mr. Ilmari Rudolf",male,20,0,0,SOTON/O2 3101287,7.925,,S +842,0,2,"Mudd, Mr. Thomas Charles",male,16,0,0,S.O./P.P. 3,10.5,,S +843,1,1,"Serepeca, Miss. Augusta",female,30,0,0,113798,31,,C +844,0,3,"Lemberopolous, Mr. Peter L",male,34.5,0,0,2683,6.4375,,C +845,0,3,"Culumovic, Mr. Jeso",male,17,0,0,315090,8.6625,,S +846,0,3,"Abbing, Mr. Anthony",male,42,0,0,C.A. 5547,7.55,,S +847,0,3,"Sage, Mr. Douglas Bullen",male,,8,2,CA. 2343,69.55,,S +848,0,3,"Markoff, Mr. Marin",male,35,0,0,349213,7.8958,,C +849,0,2,"Harper, Rev. John",male,28,0,1,248727,33,,S +850,1,1,"Goldenberg, Mrs. Samuel L (Edwiga Grabowska)",female,,1,0,17453,89.1042,C92,C +851,0,3,"Andersson, Master. Sigvard Harald Elias",male,4,4,2,347082,31.275,,S +852,0,3,"Svensson, Mr. Johan",male,74,0,0,347060,7.775,,S +853,0,3,"Boulos, Miss. Nourelain",female,9,1,1,2678,15.2458,,C +854,1,1,"Lines, Miss. Mary Conover",female,16,0,1,PC 17592,39.4,D28,S +855,0,2,"Carter, Mrs. Ernest Courtenay (Lilian Hughes)",female,44,1,0,244252,26,,S +856,1,3,"Aks, Mrs. Sam (Leah Rosen)",female,18,0,1,392091,9.35,,S +857,1,1,"Wick, Mrs. George Dennick (Mary Hitchcock)",female,45,1,1,36928,164.8667,,S +858,1,1,"Daly, Mr. Peter Denis ",male,51,0,0,113055,26.55,E17,S +859,1,3,"Baclini, Mrs. Solomon (Latifa Qurban)",female,24,0,3,2666,19.2583,,C +860,0,3,"Razi, Mr. Raihed",male,,0,0,2629,7.2292,,C +861,0,3,"Hansen, Mr. Claus Peter",male,41,2,0,350026,14.1083,,S +862,0,2,"Giles, Mr. Frederick Edward",male,21,1,0,28134,11.5,,S +863,1,1,"Swift, Mrs. Frederick Joel (Margaret Welles Barron)",female,48,0,0,17466,25.9292,D17,S +864,0,3,"Sage, Miss. Dorothy Edith ""Dolly""",female,,8,2,CA. 2343,69.55,,S +865,0,2,"Gill, Mr. John William",male,24,0,0,233866,13,,S +866,1,2,"Bystrom, Mrs. (Karolina)",female,42,0,0,236852,13,,S +867,1,2,"Duran y More, Miss. Asuncion",female,27,1,0,SC/PARIS 2149,13.8583,,C +868,0,1,"Roebling, Mr. Washington Augustus II",male,31,0,0,PC 17590,50.4958,A24,S +869,0,3,"van Melkebeke, Mr. Philemon",male,,0,0,345777,9.5,,S +870,1,3,"Johnson, Master. Harold Theodor",male,4,1,1,347742,11.1333,,S +871,0,3,"Balkic, Mr. Cerin",male,26,0,0,349248,7.8958,,S +872,1,1,"Beckwith, Mrs. Richard Leonard (Sallie Monypeny)",female,47,1,1,11751,52.5542,D35,S +873,0,1,"Carlsson, Mr. Frans Olof",male,33,0,0,695,5,B51 B53 B55,S +874,0,3,"Vander Cruyssen, Mr. Victor",male,47,0,0,345765,9,,S +875,1,2,"Abelson, Mrs. Samuel (Hannah Wizosky)",female,28,1,0,P/PP 3381,24,,C +876,1,3,"Najib, Miss. Adele Kiamie ""Jane""",female,15,0,0,2667,7.225,,C +877,0,3,"Gustafsson, Mr. Alfred Ossian",male,20,0,0,7534,9.8458,,S +878,0,3,"Petroff, Mr. Nedelio",male,19,0,0,349212,7.8958,,S +879,0,3,"Laleff, Mr. Kristo",male,,0,0,349217,7.8958,,S +880,1,1,"Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)",female,56,0,1,11767,83.1583,C50,C +881,1,2,"Shelley, Mrs. William (Imanita Parrish Hall)",female,25,0,1,230433,26,,S +882,0,3,"Markun, Mr. Johann",male,33,0,0,349257,7.8958,,S +883,0,3,"Dahlberg, Miss. Gerda Ulrika",female,22,0,0,7552,10.5167,,S +884,0,2,"Banfield, Mr. Frederick James",male,28,0,0,C.A./SOTON 34068,10.5,,S +885,0,3,"Sutehall, Mr. Henry Jr",male,25,0,0,SOTON/OQ 392076,7.05,,S +886,0,3,"Rice, Mrs. William (Margaret Norton)",female,39,0,5,382652,29.125,,Q +887,0,2,"Montvila, Rev. Juozas",male,27,0,0,211536,13,,S +888,1,1,"Graham, Miss. Margaret Edith",female,19,0,0,112053,30,B42,S +889,0,3,"Johnston, Miss. Catherine Helen ""Carrie""",female,,1,2,W./C. 6607,23.45,,S +890,1,1,"Behr, Mr. Karl Howell",male,26,0,0,111369,30,C148,C +891,0,3,"Dooley, Mr. Patrick",male,32,0,0,370376,7.75,,Q \ No newline at end of file diff --git "a/day5/\346\274\224\347\277\2221/main.py" "b/day5/\346\274\224\347\277\2221/main.py" new file mode 100644 index 000000000..08be7c6ab --- /dev/null +++ "b/day5/\346\274\224\347\277\2221/main.py" @@ -0,0 +1,123 @@ +import os +import mlflow +import mlflow.sklearn +import pandas as pd +import numpy as np +import random +import pickle +from sklearn.model_selection import train_test_split +from sklearn.ensemble import RandomForestClassifier +from sklearn.metrics import accuracy_score +from sklearn.preprocessing import LabelEncoder +from mlflow.models.signature import infer_signature + + +# データ準備 +def prepare_data(test_size=0.2, random_state=42): + # Titanicデータセットの読み込み + path = "data/Titanic.csv" + data = pd.read_csv(path) + + # 必要な特徴量の選択と前処理 + data = data[["Pclass", "Sex", "Age", "Fare", "Survived"]].dropna() + data["Sex"] = LabelEncoder().fit_transform(data["Sex"]) # 性別を数値に変換 + + # 整数型の列を浮動小数点型に変換 + data["Pclass"] = data["Pclass"].astype(float) + data["Sex"] = data["Sex"].astype(float) + data["Age"] = data["Age"].astype(float) + data["Fare"] = data["Fare"].astype(float) + data["Survived"] = data["Survived"].astype(float) + + X = data[["Pclass", "Sex", "Age", "Fare"]] + y = data["Survived"] + + # データ分割 + X_train, X_test, y_train, y_test = train_test_split( + X, y, test_size=test_size, random_state=random_state + ) + return X_train, X_test, y_train, y_test + + +# 学習と評価 +def train_and_evaluate( + X_train, X_test, y_train, y_test, n_estimators=100, max_depth=None, random_state=42 +): + model = RandomForestClassifier( + n_estimators=n_estimators, max_depth=max_depth, random_state=random_state + ) + model.fit(X_train, y_train) + predictions = model.predict(X_test) + accuracy = accuracy_score(y_test, predictions) + return model, accuracy + + +# モデル保存 +def log_model(model, accuracy, params): + with mlflow.start_run(): + # パラメータをログ + for param_name, param_value in params.items(): + mlflow.log_param(param_name, param_value) + + # メトリクスをログ + mlflow.log_metric("accuracy", accuracy) + + # モデルのシグネチャを推論 + signature = infer_signature(X_train, model.predict(X_train)) + + # モデルを保存 + mlflow.sklearn.log_model( + model, + "model", + signature=signature, + input_example=X_test.iloc[:5], # 入力例を指定 + ) + # accurecyとparmsは改行して表示 + print(f"モデルのログ記録値 \naccuracy: {accuracy}\nparams: {params}") + + +# メイン処理 +if __name__ == "__main__": + # ランダム要素の設定 + test_size = round( + random.uniform(0.1, 0.3), 2 + ) # 10%〜30%の範囲でテストサイズをランダム化 + data_random_state = random.randint(1, 100) + model_random_state = random.randint(1, 100) + n_estimators = random.randint(50, 200) + max_depth = random.choice([None, 3, 5, 10, 15]) + + # パラメータ辞書の作成 + params = { + "test_size": test_size, + "data_random_state": data_random_state, + "model_random_state": model_random_state, + "n_estimators": n_estimators, + "max_depth": "None" if max_depth is None else max_depth, + } + + # データ準備 + X_train, X_test, y_train, y_test = prepare_data( + test_size=test_size, random_state=data_random_state + ) + + # 学習と評価 + model, accuracy = train_and_evaluate( + X_train, + X_test, + y_train, + y_test, + n_estimators=n_estimators, + max_depth=max_depth, + random_state=model_random_state, + ) + + # モデル保存 + log_model(model, accuracy, params) + + model_dir = "models" + os.makedirs(model_dir, exist_ok=True) + model_path = os.path.join(model_dir, f"titanic_model.pkl") + with open(model_path, "wb") as f: + pickle.dump(model, f) + print(f"モデルを {model_path} に保存しました") diff --git "a/day5/\346\274\224\347\277\2221/models/titanic_model.pkl" "b/day5/\346\274\224\347\277\2221/models/titanic_model.pkl" new file mode 100644 index 0000000000000000000000000000000000000000..6fec87e472dc813f204e1541df92c8b679fe056e GIT binary patch literal 3308604 zcmdqK2YeMp_ddQVDov$}iV%vF2pD>2hF&5NL=+1qR0C211PiunL(r(GQNfC0Zxm4h z0Yec1BZMAW5_-p2UtaZn-{0Jw=j`m+d+(pUx#%Ci_mfYa-Pt*F%A6@XJ9{=z?1f>C z&#{8PjLH-47&UCr_%RKKjhQfP^x#p$8YT}PJAT-N^vsM(*9{sobnNJ^_Gzb4gC-`=B~-Q%qX(sr9iN#|k;+LQKTMS|B$$2J1XW1qVM9ht7%_It z^(sAVAw$NGNFO#{<;ct^cKe7iBQi6JPe>azB3&h_l)<(rB}NarJ9+4^wDi=>-Wg>_ zj~J6YVbJKbQNt!A+gURc&&?>~PE{%m&rCcgqjE6uu3;l?PfbrAK7P=Ubj2pwzSzxH zKWKr{!Lo-B80wL(Hvy8H^c=DJ*qg6F3gDM{yGjVj5EYB;6AIt1?&fv_)Gq206 zn|MxQvBxq~<1@}5nto5(upr5~eOhKtouaRvmvPR0nZ0}W?)g9Uv;QTE^vuCi2P&Vw zAjz(~%#8E;4ZBj&jbZAem{t4^9^oI9M!*487N6_l-08FE;Sg(5R3j^gDM zuNpxGBTBNVb6Y6mE}5w%GD0^5s@q`4q*y6=L#pQ-RXxd5T?`bv#B+j`r@Ft? zOA^Z{`>Q@8dC1s_W70Dd4=Bg9yNuA14%iia-VM#08ZS(3(YtO&$x*|Grza0d9WiQX zW=5&;c29+~3(-VW`%O<(eN*b#V4mXC@ni;l(PmGLGUHO+)eRe}+<;#xH+qEXzQ^32 zeEZns^s%aY8=kKGC#c1}er%j*P0mccFZJ=n;tKCqSVrLksXY=aD|}F4oWg)gudDDO zb)KN`;b6%V8!?4hqYKtvV#~>y6BDIsv1QcR)Q+;1W$B^GvO1$)>0F-{i1xFO%TI2~ z6Zg6=q&^~%-6DTzgM{>O4Dvt7B?7r?C7n6e~Eo4gL{t59Pd?t98*2mEFgq<<;Kzp=jE%Rg5CjYLm=RUPs(IRmZa;%oms>bmQ9i_3A{hCo-xewQJ=YFK*mzih$#=av%L zEh_g)B)IA?W%v!X<&1b`ggHUHQrs42+jkdR(+2bHHLj{k+cB$f-ZS{zv1CrcaPyS48`n{k{xBng{8L4xF%1~_@=WpbL6iHIvO8c`p5OVs-~>^*s;C~s_qsvzUb^tCCIE= zIJgSvqF4P)HD~e@{GTRzG(bS|5Y@4b@0LJb zPwi#S`S1SJyXBXnB(7^P{ik34-tmKqQ@4QjuQibK?ZJ&@_2)j8t$LGt*O-zAsg6l?o2_9I0) zg_GZEBUAQeE!n*FRYBv6oh{Ip$gB>a>lltc&{76IdHu?BTYMqtK1FA1?u_4l_2=`) zW)6S9^ki?%-{|j`p60olzPrP}i%ziS0bTW!lij(soYrr{gwD@z62IZP4Fz{Q`gcWo zpK$c*{%chK`2Djk`A*Ds)6W?v>9iXTdIOpNS#4!%hf5xuX?-qg5!f8_vrTOX+ySq=AX44{dj!lCpKP*;=IQ_Z`KwDWrKy>J+yK2t z1346v(`TjsvG!=Tc${4@_P-J7BZ1uhz2yG>g|D{WxkAwWg`G{U-;h5J0Nuc_^iAcQ zM(?DIynT_N`xH%|D3RT|2?sX=8UH|IXZ+*y?}J zbY*|i-yi?K&i`(M+{xkWX9*b>oIa16&)2^!GyeFK-?I4l*+PPym4bsIKvsWJ%I-;j zR-UkJxhP8nHnx&6-^1v-FF==x`L{A2fjX4fLj zUyGB#Hr9e(mURcxM*+G1^ql1EUH=;cx#t31cA7ckrh4-CZIk!zydpJ|?=oi+Id8v)ImF&M!(D-U+%Sv|ozckQ21Z4KhYAMsMX)b96Si*_19Fk+;?-W_dm!Hy#C{z`nwl&_l2czB6V_Z$nzg$_c?w1w8$j)#|FdQNiqF5y{QY$Dlbw0}ng07>WOx(E>R-)2((ia+z}uxa^Ys_& zI;Z|00o}_$m;GgvpR36atG`_C$@6xJ%DAqE0NuL z3-ebo z^YO>@Uzy-L1L)GTP^j@wCx_NQ+4BX^O$T!Mss1DP|1W~>C7_Fc(z{Qb{qqOE?U(GO z)r{VMnO$Aa?_Yu4UJtcj+VC&pocR|Yzl{IB3cA;Tj8DMSA4_-f|GV_(_A4$SuJr~E zW&)X<0n`7o^qBk4=U-$hROZsF0>~kqkIi!{o-w; ze-Mtp>?RAJyYReq3$}X3Khyub1G@La(sz|Qxj=aRkL>X-=-vam+P^)2(aE9x2eSK| zznXoTn$FnYul>0H82|H2Px?Y`8Lj->epMX$k5JI3K$rcdE&QmaRFlWHyI;=t%>T{v zgO5S?36SZj#vhu0yUJBLP5<$C>CfbH^*{7nXihl!t!o_lIeo147rp<)TK}b>pN8g= zPCvuJW=ddqO62VAbbi{v-J+X2J?mDd|Co>TuYm4)E;FOOjBl{x$+>BHBEe1Xdj9)4 z(!U5pZ{6Km&KvsHzC#;wJ^SD2zSRHxDN_A?3BHR$`OloOy`8j^13NwYrxG0f7l3Xd zknxd;GILDwO-mB*INz{nu?B`!5CEno#(&jQ^FAgh11|BUwUl*DxnbtRoH!@+W(i+{@S zcRM@$S-CN<|DU=3XC>tRCRF}}CjaW;Jbx~Z>l$iEI`!*++<(pb{VEjnEs)tMtDE!u zl+#ym>d!BKSG_1shQD8W-hW4Lf2LQ=^>5n$cd%P_IQu#K)I-<*NFTrYbNipU@qZoU zUJrEDQ_hs<`aA8f46bXS`x5{C=LL+uwxrV>9BcscdTQ*9U%dUtI(`}d+X%j!fG+)K z_8)SCoU-=felP9(+B5%dD3RUw_(Aop>7w`F3yGnP^(CEd!ND$|Oa7eBRwtR(>c%CX z^xGjWB?24G{mWLQZv%4smzFxYAY}YTcHjEDqo_^a8 zx1X86?*QMOq5N|?r*-^`#t%z^op1Y*zM9VX&u$cy2junFN(SE^t5|!TXa9Nh``;q9 z-+b^b0CFhi?7!mkFVp`0)*si)_|G0N+zaIS{`&pP`@na9SpMzLdjGNC48GvbL8B(B z*Vn_mi>h9>JooX;)E-kiCS7b<&&+Rp&$(~y6MJ5K`Jz9*$`$dC{nD(@J2~QxCFc(t z@W~;ua!T2nT{CjU>uv5jxohD*(e=`S=^MIyDQvj(gn*F%g`)E0LF#XTXt)07w(EaB zE?%Ay{H*~V5%=0}556t*Q;d@#^v~7mq5hVOonMSrf5&j$v<@#neSW&@`%zA=cy;sr z_l)XNAXeW{?4mjo^F#PITXy%=e^l8kUcCR}4@#`siR)Rw<01Jq{{o~FMwaK-9&h~8 zgF@S3qo>@{m+!SlRr_~RX#5oAMV3$3U#|E?)n426 z`^0ejw^e+f9sKQwT;BSjTA^}tz~^uT`Mvpxj?xJW#p}6KU(21kTg)xrM*Zyxkzf1c zHWBp7O9$>3P3+%3_}g~mH|6Og!>_;n`$l~9Veoe}B)`7CMQA(_!k1QUTJABiJ?OTtWr>4xD|T4X zl!}A@#=H;9GBnQbwexlpmd!Ro7{5(Q^nfgAR{KSXzB|Qo0D#=M` zS+yR#ZP>W3$3)tBlSj5bxLmx}`@Ky^(vONKzZpDtK>bzX%{_0Q{BFoG@qiiya?+NI z{9oQ}vE;}JQR=4E9V^Y76C!^D`*%XT^kVS$MTq}~uOA~1NlJRrxJct9rBl9OFE_XR zF;T%jSOI?C{vq^6;ksbZXW8~{`V8w#um-dU%&F+3$ZrCbB^>u6eOxY(MUJ@LL zb4AcfncH%NZLZ8ium^FWa;V)L#JHe#|Jdz&UxfTbN97O}ie}5l_o-R`ka+Rl%Lgrd zZv)1UeIht(ey$eHcZ~hL`qMl|r+*Wn|2O>fk&)+g$VdAn4wRhB={pR9>VpI?&N1Cq_mqO=0 zi0+GsFXbRVrFx@up3mqz>&f86?HJ}y%OJ10uE%LJzvAUsmX>3?GjI0tBRNPeFTFQ^ z@a}Ws;MB`guTcM^3@bI^{vWRWi^59XnwsnixWM+fe|GnsoeDRQb9Vko~qrRYE%OJ9g{9;4LSuZ}j zThQYkJ6m9avy4y6ZdE|G8}ZBr?NOB4JPU@?9s- z6Mfw2GgBP<(ekERW3hkCeku%8)~)SE4X^S#e+@P(Ng}&N%j5Kzn(9+s&&fWOB9kf& znpNV`Pepkm2%-w(L-z2iKgp+yG22+^@g6-UWb#`rrOqFD8=GJLORaq7D%RQHAj$dHnLP;HI}aN;)lv z1Co#Nx0=i2e)Z?{mP20& z`dIgLbhgS- z*FX1v^BA&d_KV*CdH)=J`{VTHG5(dXn;Htk{7#8m*YzKJEHh7ZabFGGD(SQ;4q5?S z^`FqB%n+G!;kwKE?%3&hjj@Mg|7xI%3#Feqqer})w_@{w-!9xPXneG@sW4Q??)xzg z_Y32{)lpD=pi6#x8%6tbW>4#syVVm0tBWIl4bWW;WPAdh9sT+EWc6dIX+Z=6^5g|^B9uL zZ?>`21zo*R`e`53Xd`uUo@X0itYP4yZ~x3Mim(lW(?{R_dH-$tp9Zj7%TW7Si%a!) zw!!fJx3S~@4MBGekjvS^>3?aSrn8y;$FKiIlApHcwFs5p-iAeCJh}gvFcghI*Ep>F z(s_-Y`+uzVH{)*;@NFKBe^w`{lS8)wlRcV(t{KqP&g^Yuv@pZ##qckh{VmAle;W$P ztHm__S2X_7)4S}VL@@o2U;dolJO*zKySD+l^2xVa-|h5Yu5^_%`fXgi{-T#ZlKtC3 z?)IVb+pn?P$t^eXFc4OfM0VffZ>085D>qai*R!sSn-JWHx<$}DL-XxP*?sf(+Mnd_ zfP?NpmQRHNczaKm$2vZoEogpgXA5+b$ZmDSK_?)SU%f^$rOVo^O`mM{yvEenq4(>5 zeEwR)q3;a7-GH2bhtqC@r+Ho1aP;amObWxv>|({*|5=Xwr_=vT-TyGVxL$+l0lj;M z(?1~OfR4Xa%P%$869%K5Gya`UeiZAh6Xe?fOyT0MqrSMpoW{Hd0se{ayy`U>Nd^;eCbvG)I_|Mpvdy#F-g z=XKD(ACTuO5IGl2T=Bz`d3^mS&|4zA@A@lA1U4o(^w%T(b|ABV!F95Ai8tO|`}s!R zf4ai>_6OY!K$rie3?JTF4o`}|c5$^0g6>*){T>4L&@lc{e&*Un?{GIzn^#04~ zEl2)ap~yg>Oa7eBr@A`xZ$5rR@BfkXzYTnofjnOi$9^ukRL*F_Fj*Ea*XUog_G|1v z2yzb(C%^111NIH{BF{EXGky;S-H>qfY8yI*vE%lS{{EZW&)k0w1>a#nSH8mkjiq@~ zLN z(~&rM9_X^a3Zvgt*64NDo8SGKFX%qa&L;aiA(HfAGfP% zzhl8S4d}98LX)4baPFUq{m4XjsN?l=lxeLNB=va_gz3&{i&3y&hrcJ`X{m%vHcqT??yq7hw`5`V?<5) z)3tqb8=3W$ZUs(Rl zWpMVNGa%n{{}}81-}vAC;QK&0{#I-G^swLrFyHeUPHll)1X>$m;z{?D|(M^Nsg;rOf9h;(x3`X93Uwm;`@ zpG=1d!*eB3B2aa8}vk31i*Tv7cZ0 zx&IjdeG+^#fG+z_n{lMRGyX=pe~Oj=Q{ej?km;}XKj`EF&-#P8|9={E&j4NWr%bMV zjdTCO^*?j>AJf41*--u}jK=?+FbFQYDosuQ>9_tbf_*fY@#_VozX)XYZ>cZ}1FBtq ztmY;`^{caulF076|Ka7D{_`aiv>(XwsrARfZEydm%nKU?`Kg^P#e4>CI_UNRU3SX3 zetQpjZo;G|FaC71xEi#xdi-&s(PL+9c@y%Fb3WSR%XiG7eq= zGWpf~fx=kv^<(PS{Xak9^ItRnd=-3O1G@B=O`4RJt3U6a)UWzl&;FCv64`y%A0I!= z`1LvpdNY*29Y&tQ2$v&bE_V*6TeHZAmQ(;E& zYJbuCg&F_+*+2IAN2K}V2hckQ$m%bvtzLf5*(!SCx&{+Q=0l`^26WjkC;QrJ>iJ8T zz5{!&746*gf&P+CKf=MsK*nF)zti&%F2AWifA%x`Ts0fhem?=E}530_d`{y?#ah$NL|1|L<3RSGkIlslPA5cR@J**9&L=1z-P* z^)mvd{VW9EML=H9G*6Aa|B2-Pe(e{Delg@;5^6s?j9kI*zr5eKsucTAI z{Q3CR!l7S^g4O_;{Z#)&VeqRHLmRt0GZm{CWRt*1xk+?)q^2RTxlue$VY+OCr1VJr33Z zUG-nQ@b$myGkTW8->?3W`ai$)y#9>;Y=GVyL-n`AfKwPee*YZn{gdf`Hi2(JDF2-7 zjOxz%YiV59V8Y03M*2=5Yd=}-VpqH8F z%YW=J#yUAP3^=mKeE*q?g0_e9FBJR#?}Sli_3B#x*#*6K16e+`e~HEq?*BC;vKP_* zX8g%RLHR&e{ky{0dh0*h_b<-$^J~-p?19{SL*<`2V@5sa`J+oOmGkV`zv;LCV}9Yf ze>niX4~FV*he6Nozp35Ao5*Z0GXb$tF!--ub-Ly>qkI$G#q_a7ia#;$IrSF*?sHp(o2z=@#h!{ zIu3N@v)j)kI}p=m&u4Va{fpoFr~Y2EG57y|>6u+!{m)6r{R5Ea>+bYFJl)Kn{PO4W zoAI+~^p=FUzUzZRBe^J@~J)t#lngATv(;vhvMzjDPqh(iuXft8wgD` zk~$g-#i=HH);}s{iLB%2e0E{>Npbs^g&#F~_GwY0T~e#B9{WKQuXbPIvJ2k;{vf>c z`aBEi6i0({5nn<|CoDv{vqhQqrwSgqgyc8Z^?Uov#Nw}lzhlmO?ew0z&KbFUZ+tQx zr{OciyP!BXk>f?3u6&Y|@&%(uB;B@8G`9n9Y)4$4&0@u`b#HxU`2oZs*dXq*e-vNB z$Um;zuCjNn{9e>LIi=0srw@nF>v#wo5#Q<{;wtSD6i>q|56MO86sJJr5!72Qkm9OQ zZjy_T(g`V@km7qRcH%ziI0Ih$n*84Qa}+m;$BXmw%YnRyBg7B!<~RK4ibijG=sDSm z>=vGmN(Fs@;*PC?oTgkI_w0z!ae={k zA?4Aujq0D`%u(DqDw*WgdU)eQ82P#lI630c11AxWCBo*-`^rl_e{3m>T48u)!J0FikB_qWygAv?E>5 zk>aOO9F?39eTft2W90W<-+1GHTa|nGkQkVBUdGNpa>TRKg1-WhpJ)Gs-A%X86?-1J zL>=xEIv!r0XjFPdLg^I+V$(+Zhxl3tL*$`$MD2>pr6$aF!|?Xc{_W@0=XCL`dXJs7 z>6N_wVrcbX#IUW1`?6Qq;a`5*5hB0tmv+Mc_u@KnEkxXwJ&32dJA^*g_Nh5hJyX3K z{`!cLOdutuyOdHd&|?KmR7xqfhbqZd{? z^91rs&eyVzuk0QCL%t;;{Jin`G(FW@PKbYa_4CG?JYD~*`-#)VTO_|AH1@m7HsE2Q z`KaaeyH;K~uG?{;=Os&g&cCQ!Lei=*LVPO2U*{w`LPM{QO#YQMhN+$N$A#WLzc7M) zhMwjXG|%vsr_YHmp`rKY@3U&`OOqO(6s2A{Z|V)XABWVZ_HUYJelC_A>7{y{V~9_f z6_Q`~J4X?(ZDoi);oA$zS%7+rJU)llKeB%MvEE51&aYR0?|2_xK2u-BiI-!p>v(jL z4IyoZ!Gc0 zj!*xg`#&ZASg(uD2@`-!r6K}ZC-Y<~%nI1F8O!>~avxvNtn8sY@uGVPL`5K@Q(9T+ zhuWfaeOe&mZk@il%=f!QD!cHIq{^igr#K|gxjIc5{#z|sruCZl=M~>6CJ;doXAYHg zN-N8>!bkGh*8|OErF!S}`SM`C=R?dL9r@|WUO5!#;-8aUzoz{2*-iI-^7?Mihj7dj z5L%hLFqGbYgM>cB#8+_46Wmx=kZ5I*p3pJ*)rUmof`kvMzr4}2gTIl4xV~4Q$j+M1 ztRR*|LG*;m#Xsri-qqw@dkJxeAUo;owIs+avI{+7V)bV=MLzEnB{}mbG?lG6`*%Tpv(S&+8wLO zq4%eLe92Q=Ja5p{m&oqh|2colp|6C3ssVYv9>|yLX@7N{{^wHARR+4`SCQhX$r@=x zF3T*r$@2uYHp=zCgO~fSvHxY@TQ!uw{ULFBf=~U7&Su*0<)EV-#!P?pA!>Sp!26Hr zpCGVuT|2m{fd7@D^1D8y>+L^G{rUC3NcQ`?=wr2CB>AhuZZ&}1&Xr_*mF@ZUZrdhq z#&sLwQY4-F)t~x#O-KE@Wz|GMwSkO(pn=?9{ZZ>c;PfALk>1ID z-8n8Mt8^Rp$~Ql37j2z1b>MmfxE|6Q16}-809dsHxM1l1k1pLH;@$LtK9Wu;{pwJ9 z6#=fE+|~Yt*~gz==80fpp1}IGAI+~c8`J;Q2j50O=0EBULY