忍者ブログ
統計、機械学習、AIを学んでいきたいと思います。 お役に立てば幸いです。

【DS検定対策】AIに「対話の作法」を教え込む!教師付きファインチューニング(SFT)

インターネット全体の知識を詰め込んだだけのAIに、「質問されたら、正しい指示に従って回答する」という対話能力を身につけさせるプロセス、それがSFTです。

1. 【 問題 】

大規模言語モデル(LLM)の学習において、事前学習済みのモデルに対して、特定のタスク(要約、翻訳、対話など)や望ましい出力を学習させるため、人間が作成した高品質な「指示と正解のペア(プロンプトとレスポンス)」を用いて追加学習を行う手法を何と呼ぶでしょうか?

① 事前学習(Pre-training)
② 教師付きファインチューニング(SFT)
③ 報酬モデルの学習
④ 知識留(Distillation)


2. 【 解答 】

正解: ② 教師付きファインチューニング(SFT)

3. 整理:LLMが「アシスタント」になるまでの2段階

生成AI(ChatGPTなど)が使えるようになるまでには、大きな2つの学習ステップがあります。

【 事前学習とSFTの違い 】

ステップ1:事前学習(巨大な燃料)
 ウェブ上の膨大なテキストを読み込み、「次に来る単語を予測する」能力だけを鍛える。
 例:「日本の首都は」→「東京です」だけでなく「どこでしょう?」と勝手に問題を作ってしまうことも。

ステップ2:SFT(対話の型を教える)
 人間が作った「模範解答」を読ませて、指示に従う態度を学ばせる。
 データ例:
 [指示] 日本の首都を教えてください。
 [正解] 日本の首都は東京です。

--------------------------

ポイント:
SFTを行うことで、AIは単なる「文章の続きを予測する機械」から、私たちの「有能なアシスタント(Instruction-tunedモデル)」へと進化します。

4. SFTの特徴と課題

1. 高品質なデータが必要: データの「量」よりも、人間が丁寧に作った「質(正確性や丁寧さ)」がモデルの賢さを左右します。
2. コストの壁: 人間(アノテーター)が大量の指示文と模範解答をゼロから作成するため、人件費と時間が非常にかかります。


5. DS検定形式:実戦4択クイズ

問:大規模言語モデル(LLM)のチューニングにおいて、SFT(教師付きファインチューニング)の次に行われる、人間の好みにさらに近づけるための強化学習手法はどれか。

① RAG   ② CNN   ③ RLHF   ④ BERT

【 正解: ③ 】

解説: SFTで「対話の基本形」を学んだAIに対して、さらに「人間にとってどれがより心地よい回答か」を微調整するのが、以前学んだ「RLHF」です。この順番(事前学習 → SFT → RLHF)はセットで頻出です。


6. まとめ

DS検定において「事前学習済みモデルに足して」「人間が作成した正解応答や指示に従い学習させる」という記述が出たら「教師付きファインチューニング(SFT)」です。チャットAI開発の根幹をなすプロセスとして、確実に理解しておきましょう!

PR

【DS検定対策】少ないデータで過学習を防ぐ!「データ拡張」の手法

AIの学習には大量のデータが必要ですが、現実には十分なデータが集まらないことも。そんな時にデータを賢く「水増し」するのがデータ拡張です。

1. 【 問題 】

機械学習(特に深層学習)において、手元にある限られた教師データを加工・変形(回転、反転、拡大縮小など)することで、実質的にデータの種類や量を増やし、過学習を防ぐ手法を何と呼ぶでしょうか?

① データリーケージ
② データ拡張(データオーグメンテーション)
③ アンサンブル学習
④ 次元圧縮


2. 【 解答 】

正解: ② データ拡張(データオーグメンテーション)

3. 整理:画像認識における代表的な「水増し」手法

データ拡張は、元のデータが持つ「答え(ラベル)」を変えずに、見た目だけを変化させるのがポイントです。

【 よく使われる加工パターンの例 】

幾何学的変換
 左右反転(フリップ)、回転、拡大・縮小、トリミング(切り抜き)

色調変換
 明るさの変更、コントラストの調整、ノイズの追加

--------------------------

なぜこれで精度が上がるのか?
AIに「横を向いた猫」や「少し暗い場所にいる猫」の画像も同時に学習させることで、カメラの角度や照明条件が変わっても正しく認識できる「頑健(ロバスト)なモデル」に育つためです。

4. データ拡張の注意点(ドメイン知識の重要性)

何でもかんでも変形すれば良いわけではありません。データの本質(意味)を壊さない加工を選ぶ必要があります。
(例)手書き数字の「6」を180度回転させると「9」になってしまい、正解ラベルが変わってしまうため、数字認識での大幅な回転は不適切となります。


5. DS検定形式:実戦4択クイズ

問:2つの異なる画像(例えば犬と猫)を、ある割合で不透明度を変えて重ね合わせ、ラベルもその割合に応じてブレンド(例:犬0.5、猫0.5)する、ユニークなデータ拡張手法を何と呼ぶか。

① Dropout   ② Batch Normalization   ③ Mixup   ④ Data Cleansing

【 正解: ③ 】

解説: 画像同士を混ぜ合わせるデータ拡張手法を「Mixup」と呼びます。モデルの決定境界が滑らかになり、未知のデータに対して過剰に自信を持った誤判定をするのを防ぐ効果があります。


6. まとめ

DS検定において「データの水増し」「既存のデータを変形して生成」という記述が出たら「データ拡張」です。過学習(過剰適合)を防ぐための強力な前処理テクニックとして、その目的と具体的な加工方法を覚えておきましょう!

【DS検定対策】AIの表現力を高める工夫!「派生変数」の作り方

元のデータをそのままAIに投入するのではなく、組み合わせて「新しい意味を持つ変数」を作る。これが特徴量エンジニアリングの基本である派生変数です。

1. 【 問題 】

データ分析の前処理(特徴量エンジニアリング)において、既存の複数の変数(特徴量)を組み合わせたり、計算処理を行ったりすることで新しく導出される変数のことを何と呼ぶでしょうか?

① 目的変数
② 派生変数(派生特徴量)
③ ダミー変数
④ 潜在変数


2. 【 解答 】

正解: ② 派生変数(派生特徴量)

3. 整理:なぜ「計算してわざわざ増やす」のか?

元のデータ(生データ)だけでは、AIがその本質的な関係性を学習するのに膨大な時間がかかる(あるいは学習できない)ことがあります。あらかじめ人間が計算してあげることで、モデルの予測精度が大きく向上します。

【 よくある派生変数の具体例 】

「身長」と「体重」から導出
 → BMI = 体重(kg) ÷ 身長(m)の2乗

「売上額」と「客数」から導出
 → 客単価 = 売上額 ÷ 客数

「生年月日」から導出
 → 現在の年齢、生まれた曜日、星座など

--------------------------

ポイント: ドメイン知識(業務知識)を活かして、「どんな派生変数を作るか」がデータサイエンティストの腕の見せ所になります。

4. 派生変数を作る際の注意点

1. 多重共線性(マルチコ): 元の変数と派生変数の間で強い相関が生まれるため、線形回帰など一部のモデルでは計算が不安定になる原因になります。
2. データリーケージ(情報の漏洩): 未来のデータを使って派生変数を作ってしまうと、予測モデルが不正解をカンニングした状態になってしまうため注意が必要です。


5. DS検定形式:実戦4択クイズ

問:派生変数の一種で、カテゴリ変数(「東京」「大阪」など)を機械学習モデルが処理できるように、0と1だけで表した変数のことを何と呼ぶか。

① 目的変数   ② 説明変数   ③ ダミー変数   ④ 連続変数

【 正解: ③ 】

解説: カテゴリをフラグ化(One-Hotエンコーディング)したものは「ダミー変数」と呼ばれ、これも立派な派生変数の一種です。


6. まとめ

DS検定において「他の変数から導出できる変数」「組み合わせて作る特徴量」という記述が出たら「派生変数」です。データの組み合わせによって、AIに新しい視点を提供する技術として押さえておきましょう!

【Python】SymPyで極限(limit)を求める!1/x の 0 への接近

関数の値がどこまで近づくかを計算する「極限(limit)」。PythonのSymPyライブラリを使うと、単純な数値代入ではエラー(ゼロ除算)になってしまう $f(x) = 1/x$ のようなケースも、数学的な極限として正しく処理できます。

1. limit関数のポイント:近づく「方向」

関数 $f(x) = 1/x$ は、0に近づくときに「右側(正の数)」から近づくか、「左側(負の数)」から近づくかで結果が異なります。SymPyでは引数 dir を使ってこの方向を指定します。

  • dir='+':右側極限(0.1, 0.01...と正の側から接近)
  • dir='-':左側極限(-0.1, -0.01...と負の側から接近)

2. Pythonサンプルプログラム

特別な設定をせず、標準的な print 関数を使って結果を出力します。

# -*- coding: utf-8 -*-
from sympy import symbols, limit

def main():
    # 変数xを定義
    x = symbols('x')
    
    # 関数 f(x) = 1/x の定義
    f = 1 / x

    # 右側極限 (x -> 0+)
    limit_right = limit(f, x, 0, dir='+')

    # 左側極限 (x -> 0-)
    limit_left = limit(f, x, 0, dir='-')

    print("--- f(x) = 1/x の極限計算 ---")
    print(f"x -> 0+ (右側極限): {limit_right}")
    print(f"x -> 0- (左側極限): {limit_left}")

if __name__ == "__main__":
    main()

3. 実行結果

実行すると、以下のような結果が得られます。SymPyでは無限大($\infty$)を oo(小文字のoが2つ)で表現します。

--- f(x) = 1/x の極限計算 ---
x -> 0+ (右側極限): oo
x -> 0- (左側極限): -oo

4. まとめ

結果にある oo は正の無限大、-oo は負の無限大を意味しています。右から近づけばプラス無限に、左から近づけばマイナス無限に発散するという数学的な挙動が、たった数行のコードで確認できました。ゼロ除算エラーを気にせず数学的検証ができるSymPyは、エンジニアにとっても強力な武器になりますね。



【Python】SymPyで偏微分をマスター!多変数関数の計算結果をコード形式で出力する

Pythonの強力な数式処理ライブラリ「SymPy」を使って、多変数関数 $f(x, y) = x^2 + 3 + y^4 + 5$ の偏微分を計算する方法を解説します。今回は、計算結果をそのままプログラムに再利用しやすい「標準出力形式」で表示します。

1. 偏微分のルール

偏微分とは、特定の変数だけに注目して微分し、それ以外の変数はすべて「定数(ただの数字)」として扱う計算です。

  • xで偏微分:x^2を微分して 2*x となり、それ以外の $y^4$ や定数は消えます。
  • yで偏微分:y^4 を微分して 4*y**3 となり、それ以外の $x^2$ や定数は消えます。

2. Pythonサンプルプログラム

余計な装飾設定を省き、標準の print() 関数で結果を出力するシンプルな構成です。

# -*- coding: utf-8 -*-
from sympy import symbols, diff

def main():
    # 1. 変数x, yを記号として定義
    x, y = symbols('x y')

    # 2. 関数の定義 f(x, y) = x^2 + 3 + y^4 + 5
    f = x**2 + 3 + y**4 + 5

    # 3. xおよびyで偏微分を実行
    df_dx = diff(f, x)
    df_dy = diff(f, y)

    # 4. 結果を表示
    print("--- xでの偏微分結果 ---")
    print(df_dx)
    
    print("\n--- yでの偏微分結果 ---")
    print(df_dy)

if __name__ == "__main__":
    main()

3. 実際の実行結果

このコードを実行すると、コンソールには以下のように出力されます。*(掛け算)や **(累乗)がそのまま表示されるため、エンジニアにとって非常に直感的です。

--- xでの偏微分結果 ---
2*x

--- yでの偏微分結果 ---
4*y**3

4. まとめ

SymPyのデフォルト出力は、Pythonのコードとしてそのまま通用する形式です。複雑な数式も、この形式で出力すればロジックの確認や他のスクリプトへの移植がスムーズに行えます。見た目の美しさよりも「実用性」を重視する場面では、この標準出力が最も頼りになります。