はじめに
こんばんは、元ゴリゴリ文系(ゴリ文)のmirukyです。
機械学習、と聞くと「うげっ」と拒否反応を示す半年前の自分がいました。大学でCS(コンピューターサイエンス)を専攻している人の領分だという勝手なイメージと、複雑な数式が無限に出てくる先入観があったためです。しかしいざ学んでみると、確かに大学・大学院の学術レベルではそうなのかもしれませんが、実は入門部分ではそこまで複雑な数式なしで理解できたりします。
この記事では、機械学習の全体像から生成AIの最新研究までを、学び始めの段階でも理解できるようにまとめます。数式も少し使いますが、中学数学の文字式と一次関数を思い出せれば扱えるように、式の意味を日本語に戻しながら進めます。
では、機械学習の世界に参りましょう!
目次
- 機械学習の全体像
- データの扱い方
- 学習の種類
- 予測を式で確認する
- 損失関数
- 最適化
- 分類の考え方
- 評価指標
- 汎化と過学習
- 代表的なモデル
- ニューラルネットワーク
- Transformerと生成AI
- 現在の生成AIにつながる研究の流れ
- 学び方
1. 機械学習の全体像
1-1. 人間がルールを書く方法との違い
普通のプログラムでは、人間がルールを書きます。たとえば、点数が80点以上なら合格、80点未満なら不合格、といったルールをコードにします。
機械学習では、最初からルールを全部書きません。過去のデータを渡し、モデルに傾向を学ばせます。家賃予測なら、駅からの距離、広さ、築年数、階数などを見て、家賃を予測する式や判断の境界をモデルが調整する、ということです。
ここでいう学ぶは、人間のように意味を理解することとは少し違うと理解していただければと思います。モデルは、入力と正解の関係を数値として調整します。雑に言えば、予測が外れたら少し直し、また外れたら少し直す、という作業を何度も繰り返します。ここは機械らしいですよね。
たとえば、メールを迷惑メールかどうか判定する普通のプログラムを考えると、人間が「この単語が含まれていたら迷惑メール」「この送信元なら危険」といった条件やルールを書きます。条件が少ないうちは対応できますが、実際のメールは表現が変わり、送信元も変わり、正常なメールにも似た単語が入ります。ルールが増えるほど、人間が保守する負担は大きくなります。
機械学習では、迷惑メールと通常メールの例をたくさん渡し、モデルに境界を調整させます。人間は「どの単語をどれくらい重く扱うか」を全部手書きすることはほとんどしないと思います。だいたい直感で分類しますよね。機械は、データから、迷惑メールらしさを表す数字の組み合わせを作ります。
もちろん、機械学習なら何でも自動で解けるわけではありません。データの品質が悪ければ、モデルも悪い傾向を覚えます。入力と正解の関係が弱い問題では、どれだけ高度なモデルを使っても限界があります。機械学習は、ルール作成を全部消す技術ではなく、データから調整できる部分をモデルに任せる技術です。
1-2. AI、機械学習、深層学習、生成AI
ここで用語の定義ですが、実はAI、機械学習、深層学習、生成AIは、同じものではありません。それぞれ範囲の広さが違います。
| 用語 | ざっくりした意味 |
|---|---|
| AI | 人間の知的作業を機械で扱う広い分野 |
| 機械学習 | データから規則性を学んで予測する方法 |
| 深層学習 | 多層のニューラルネットワークを使う機械学習 |
| 生成AI | 文章、画像、音声、コードなどを生成するAI |
深層学習は機械学習の一部で、生成AIの多くは深層学習を土台にしています。今の大規模言語モデルも、突然別世界から来た技術ではなく、機械学習の延長線上にあります。よく大学でCS、特に機械学習を専攻していた方がおっしゃっていますよね、まさにそのとおりなんです。
1-3. できることと苦手なこと
機械学習には得手不得手があります、人間みたいに。機械学習が得意なのは、過去データに含まれる傾向を使って、似た状況に対して予測することです。商品の需要予測、画像分類、異常検知、文章分類、レコメンド、音声認識のように、たくさんの例からパターンを見つける問題に向いています。これはイメージしやすいと思います。
一方で、過去データにない状況、データの取り方が変わった状況、正解がそもそも曖昧な状況は苦手です。たとえば、過去の売上データだけで、突然の法改正、災害、SNSでの急な流行を正確に予測するのは難しくなります。モデルは未来を知っているわけではなく、あくまで学習時のデータから見つけた関係を使います。
もう1つ大事なのは、機械学習の出力は判断材料であって、必ずしも最終判断そのものではないという点ですかね。医療、金融、採用、セキュリティのように影響が大きい場面では、予測値だけでなく、どのデータで学習したか、どのくらい間違えるか、間違えた場合に何が起きるかまで厳重に確認します。
1-4. モデル、アルゴリズム、パラメータ
機械学習の入門では、モデル、アルゴリズム、パラメータという言葉がよく出ます。似た場面で使われますが、役割は異なります。世間的な用語のイメージとは少し乖離がある用語もあるかと思うので、ちょっと注意ですね。
| 用語 | 意味 | 家賃予測の例 |
|---|---|---|
| モデル | 入力から予測を出す仕組み | 家賃を予測する式 |
| アルゴリズム | モデルを学習させる方法 | 誤差が小さくなるように重みを更新する方法 |
| パラメータ | 学習で調整される数字 | 広さや築年数にかける重み |
| ハイパーパラメータ | 人間が先に決める設定 | 学習率、木の深さ、エポック数 |
モデルは、予測を出す本体です。線形回帰なら、入力に重みをかけて足し合わせる式がモデルです。決定木なら、条件分岐の木がモデルです。ニューラルネットワークなら、たくさんの重みを持つ層の集まりがモデルです。
アルゴリズムは、そのモデルをどう作るか、どう調整するかの手順です。たとえば勾配降下法は、損失が小さくなる方向へパラメータを動かすアルゴリズムです。
パラメータは、想像しやすいと思いますが、学習によって変わる数字です。家賃予測で、広さの重み、駅距離の重み、築年数の重みがこれにあたります。一方、学習率や決定木の深さの上限のように、人間が事前に決める値はハイパーパラメータと言います。この辺りの用語は非常に大事なので、ぜひこの機会に覚えてください。
2. データの扱い方
2-1. 特徴量とラベル
機械学習では、入力に使う情報を特徴量、予測したい答えをラベルと呼びます。家賃予測なら、入力に使用する情報である、広さ、駅からの距離、築年数が特徴量で、答えである家賃がラベルです。
この表では、広さ、駅からの距離、築年数を見て、家賃を予測します。モデルは、広いほど家賃が上がる、駅に近いほど家賃が上がる、築年数が古いほど家賃が下がる、といった傾向を数値として覚えます。
ただし、データに入っていない情報は基本的に学べません。日当たり、治安、内装のきれいさ、近くの騒音などが家賃に影響するなら、それらも特徴量として持たせたほうが予測は安定します。
データを表(テーブル)で考える場合、1行が1つの事例、1列が1つの項目です。物件A、物件B、物件Cが行で、広さ、駅からの距離、築年数が列です。機械学習では、この表のうち、予測に使う列を特徴量、当てたい列をラベルとして扱います。
この見方は、画像や文章でも同じです。画像分類では、1枚の画像が1行に相当し、ラベルは犬、猫、車などのカテゴリです。文章分類では、1つの文章が1行に相当し、ラベルは迷惑メール、問い合わせ種別、感情などになります。
2-2. 学習データ、検証データ、テストデータ
データは、学習用と確認用に分けるのが大事です。全部を学習に使ってしまうと、モデルが過去問を丸暗記しているだけなのか、新しい問題にも対応できるのか判断できません。
| データ | 役割 |
|---|---|
| 学習データ | モデルを調整するために使う |
| 検証データ | モデルや設定を選ぶために使う |
| テストデータ | 最後に性能を確認するために使う |
テストデータは、試験本番に近い扱いだと思ってください。何度も見ながらモデルを直すと、テストに合わせた調整になってしまいます。実務でも、性能が良く見える数字を作ることより、未知のデータでどれくらい外れるかを正直に測ることが重要です。この辺りが大事かつ難しいです。
2-3. 前処理とデータ漏れ
とはいえ、現実のデータは、そのままでは学習に使えないことが多いです。空欄がある、表記ゆれがある、数値の単位が混ざっている、カテゴリ名がばらばら、外れ値が入っている、といった状態から始まります。つまりデータが汚いんですね。
| 作業 | 何をするか |
|---|---|
| 欠損値の処理 | 空欄を補う、または行や列を外す |
| 標準化 | 数値のスケールをそろえる |
| カテゴリ変換 | 文字のカテゴリを数値に変える |
| 外れ値の確認 | 極端な値をそのまま使うか判断する |
特に注意したいのは、データ漏れです。これは、本来なら予測時点で知らないはずの情報が、学習データに混ざってしまう状態です。たとえば退会予測で、退会後にしか分からない項目を特徴量に入れると、学習時の成績は高く見えますが、本番では使えません。
機械学習では、モデル選びと同じくらいデータの作り方が大事です。モデルが賢く見えても、未来の情報をこっそり見ていただけなら、実務では役に立たないことは、想像に難くないと思います。
2-4. 特徴量設計
特徴量設計は、モデルへ渡す情報をどう作るかという作業です。同じ元データでも、特徴量の作り方で性能は大きく変わります。家賃予測なら、駅からの距離そのものだけでなく、最寄り駅の路線数、築年数を新築、築浅、古めのような区分へ変える、広さと駅距離を組み合わせた特徴量を作る、といった工夫ができます。
繰り返しご説明している通り、特徴量設計では、モデルに答えを直接渡してはいけません。退会予測で、退会日や解約理由のような退会後にしか分からない情報を入れると、学習時の点数だけ高くなります。これはさっき登場したデータ漏れですね。
また、特徴量は多ければ良いわけではなく、関係の薄い特徴量が増えると、モデルが偶然の関係まで拾うことがあります。学習データでは良く見えるのに、未知データで外れるなら、特徴量の作り方を疑うのがセオリーです。
2-5. 数値、カテゴリ、テキスト、画像
機械学習で扱うデータには、いくつかの型があります。数値データはそのまま使えることも多いですが、カテゴリ、テキスト、画像はモデルに渡す前に数字へ変換します。
| データの種類 | 例 | 変換の考え方 |
|---|---|---|
| 数値 | 年齢、価格、距離 | 標準化や外れ値確認を行う |
| カテゴリ | 地域、職業、プラン名 | one-hotエンコーディングなどで数値化する |
| テキスト | レビュー、問い合わせ文 | 単語やトークン、埋め込みへ変換する |
| 画像 | 商品写真、医療画像 | 画素値や画像特徴として扱う |
カテゴリデータでは、Aプラン、Bプラン、Cプランを単純に1、2、3へ置き換えると、モデルが「CはAより大きい」と勘違いする場合があります。プラン名に大小関係がないなら、one-hotエンコーディングのように、カテゴリごとに別の列を作る方法が候補になります。
one-hotエンコーディングは、カテゴリの数だけ列を用意して、当てはまるものだけ1、残りは0にする変換です。プランA、B、Cなら、Aプラン用の列、Bプラン用の列、Cプラン用の列を作り、Aプランの人はAの列だけ1で残りは0、という形にします。こうすれば数字の大小がそのまま順位に化けないので、モデルがCはAより大きいと勘違いせずに済みます。
テキストや画像では、さらに変換が重要になります。文章はトークンや埋め込みへ変換し、画像は画素値やニューラルネットワークの中間表現として扱います。どの変換を使うかで、モデルがつかめる情報が変わります。
2-6. ラベルの作り方
復習ですが、ラベルは予測したい答えでしたね。ただし、現実のデータではラベルそのものをどう定義するかが難しいことがあります。
退会予測なら、何日以内に解約したら退会とするのかを決める必要があります。購入予測なら、クリックを購入の代わりに使ってよいのか、実際の購入だけを見るのかで意味が変わります。問い合わせ分類なら、担当者ごとにカテゴリの付け方が違うかもしれません。
ラベルの基準が揺れると、モデルは揺れた答えを学びます。モデルの精度が上がらないとき、アルゴリズムよりもラベルの定義や付け方に原因がある場合もあります。機械学習では、正解データを作る作業も設計の一部に含まれます。
3. 学習の種類
3-1. 教師あり学習
この辺りは聞いたことある方も大勢いらっしゃるかと思います。教師あり学習は、入力と正解のセットから学ぶ方法です。売上予測、家賃予測、画像分類、迷惑メール判定などでよく使うものです。教師から入力と正解をセットで教えてもらうイメージを持てば、教師あり学習を覚えやすいと思います。
| タスク | 入力 | 正解 |
|---|---|---|
| 家賃予測 | 広さ、駅距離、築年数 | 家賃 |
| 迷惑メール判定 | メール本文、送信元 | 迷惑かどうか |
| 画像分類 | 画像 | 犬、猫、車など |
正解が数値なら回帰、正解がカテゴリなら分類です。家賃や売上のような数値を予測するのが回帰で、迷惑メールか通常メールかを分けるのが分類です。
回帰とは、要は数値そのものを当てにいくタスクだと思ってください。家賃が9万円なのか11万円なのか、来月の売上が100万円なのか120万円なのか、といった連続した量を予測します。一方の分類は、犬か猫か、迷惑メールか通常メールか、といったどのグループに入るかを当てるタスクです。同じ教師あり学習でも、答えが数字なのかグループ名なのかで呼び方が変わる、と押さえておけば十分です。
教師あり学習では、正解があるため評価の基準を作れる反面、正解データを作るコストがかかります。画像に犬、猫、車のラベルを付ける作業、問い合わせ文にカテゴリを付ける作業、音声に文字起こしを付ける作業は、人間の判断が必要です。
また、教師あり学習は過去の正解に強く依存する特徴があります。過去の判断が偏っていれば、その偏りも学んでしまう、というロジックです。採用、審査、与信のように人間の判断履歴を使う場合は、過去データが本当に望ましい判断を表しているかの確認が必須です。
3-2. 教師なし学習
教師なし学習は、正解ラベルなしでデータの構造を探す方法です。顧客を似た購買傾向ごとに分ける、文章を似たテーマごとにまとめる、異常なデータを探す、といった用途があります。先程とは異なり教師はおらず、あらかじめ正解を教えてくれない、と覚えてください。
代表例はクラスタリングです。クラスタリングでは、データ同士の近さをもとにグループを作ります。人間が事前に、この人はAグループ、この人はBグループ、と正解を渡さなくても、モデルが似たもの同士をまとめます。
教師なし学習では、結果の解釈が重要です。クラスタが3つに分かれたとしても、それが業務上意味のある3分類とは限りません。購買傾向のクラスタなら、各グループにどんな商品を買う人が多いのか、年齢や地域に偏りがあるのかを人間が確認します。
次元削減も教師なし学習の代表例です。たくさんの特徴量を、情報をなるべく残したまま少ない軸にまとめます。高次元のデータを可視化したり、情報の重複を減らしたりするときに使われます。
ちなみに次元削減とは、たくさんの列(特徴量)を、意味をなるべく残したまま少ない数の軸へまとめ直す作業です。たとえば、数学、物理、化学、国語、社会、英語の6教科の点数があったとき、理系寄りか文系寄りかという1本の軸と、全体的に得意か苦手かという1本の軸の、2つくらいでだいたいの傾向をつかめることがあります。6列を2列に減らしても大事な違いは残る、というのが次元削減のイメージです。列が減るとグラフに描いて眺めやすくなり、方法とデータによっては、似た情報の重複やノイズを減らせる場合があります。ただし、重要な情報まで失うこともあるため、減らせば必ず良くなるわけではありません。
3-3. 強化学習
ここから少しややこしいですかね。強化学習は、行動した結果として得られる報酬をもとに、より良い行動を学ぶ方法です。ゲームAI、ロボット制御、広告配信、推薦、最近では大規模言語モデルの推論能力を高める研究でも使われます。報酬を与える、はキーワードです。
強化学習では、正解が最初から表に並んでいるとは限りません。ある行動を選び、結果を受け取り、次の行動を変えます。テストの採点というより、何度も試して報酬が増える方向へ動くイメージです。お手、と言った時にイッヌがお手をしてくれたら餌(報酬)をあげるイメージです。イッヌは、飼い主がお手と言った時に、右手を飼い主の手の上におけば、餌をくれると学習します。まさしくこんな感じです。
強化学習では、エージェント、状態、行動、報酬、方策という言葉がよく出てきます。ちょっとややこしいですが、用語的にはエージェントは行動する主体、状態は今の状況、行動は選べる操作、報酬は結果の点数、方策はどの状態でどの行動を選ぶかのルールです。
| 用語 | 意味 | ゲームの例 |
|---|---|---|
| エージェント | 行動する主体 | プレイヤーAI |
| 状態 | 今の状況 | 盤面、HP、位置 |
| 行動 | 選べる操作 | 移動、攻撃、防御 |
| 報酬 | 行動結果の点数 | 勝利、得点、ダメージ |
| 方策 | 行動の選び方 | この局面なら攻撃する |
強化学習が難しいのは、すぐ良い報酬につながる行動が、長期的には悪い場合があることです。目先の得点だけを取ると後で負ける、探索しないと良い手を発見できない、といった問題があります。最近の推論モデルでも、強化学習は回答の検証や思考手順の改善に関係します。
3-4. 自己教師あり学習
最近の大規模言語モデルを理解するうえで、自己教師あり学習も重要です。これは、人間が1件ずつ正解ラベルを付けなくても、データの一部を正解として使う方法です。自分を教師とするので、自己教師あり、という感じです。
文章なら、それまでの文から次の文を予測する、文章中の一部を隠して前後の文脈から復元する、といった形で学習できます。もともとの文章そのものから問題と答えを作れるため、膨大なテキストを使った事前学習と相性が良いです。ここでピン、と来た方もいるのではないでしょうか。そう、トークンの仕組みですね。トークンは文章を区切った小さな単位のことで、詳しくは12章で扱いますが、いま押さえたいのは、文章そのものから次に来る単語を当てる問題を作っている、という点です。この、答えをわざわざ別で用意しなくてもデータ自身から問題と答えが作れる仕組みが、後の大規模言語モデルの土台になります。
この方法なら、人間が付けた正解ラベルだけに頼らず、大量のデータから表現を学べます。大規模言語モデルは、このような事前学習で言語のパターンを身につけ、その後に指示応答や会話向けの調整を受けます。
自己教師あり学習は、ラベル作成コストを下げるだけでなく、汎用的な表現を作るためにも使われます。文章なら、単語同士の関係や文脈を学びます。画像なら、一部を隠して復元する、同じ画像を変換したもの同士を近づける、といった方法があります。
この段階で作られた表現は、後のタスクで使えます。たとえば、事前学習済みの言語モデルを土台にして、問い合わせ分類、要約、チャット応答、コード生成へ調整します。大規模モデルの強さは、特定タスクだけを学ぶのではなく、広いデータから表現を作り、その後に用途へ合わせる点にあると考えてください。
4. 予測を式で確認する
4-1. 一次関数として考える
機械学習の入り口は、一次関数から始まります。中学数学で出てくる式です。
$$
y = ax + b
$$
この式では、x が入力、y が予測結果です。a は傾き、b は切片です。懐かしいです。
家賃予測で広さだけを見るなら、たとえばこう書けます。
$$
家賃 = a \times 広さ + b
$$
もし a = 0.2、b = 3 なら、広さが30㎡のとき家賃はこうなります。
$$
0.2 \times 30 + 3 = 9
$$
この場合、予測家賃は9万円です。実際には広さだけでは足りないので、駅距離や築年数も入れます。
$$
家賃 = a \times 広さ + b \times 駅距離 + c \times 築年数 + d
$$
文字が増えても、やっていることは同じです。入力に重みをかけて足し合わせ、最後に調整用の値を足します。
ここで、広さ、駅距離、築年数 は特徴量です。a、b、c はそれぞれの特徴量をどれくらい重く扱うかを決める数字です。d は、全体を上下にずらす調整役です。
たとえば、広さの重みが大きいモデルは、広さを家賃に強く反映します。駅距離の重みがマイナスなら、駅から遠いほど家賃を下げる方向に働きます。築年数の重みがマイナスなら、古い物件ほど家賃を下げる方向です。こうイメージすれば、かなり腹落ちしませんか。
線形モデルは単純ですが、最初に学ぶ価値は高いと思います。予測がどう作られるかを式で確認でき、重みの符号から特徴量の影響も確認できます。複雑なモデルへ進む前に、線形モデルで考え方をつかむと、損失関数や最適化も理解しやすくなるので、ご紹介しました。
4-2. パラメータは調整される数字
式の中の a、b、c、d のように、学習で調整される数字をパラメータと呼びます。機械学習の学習とは、このパラメータを良い値に近づける作業です。
人間が、広さは家賃に強く影響するから重みは大きめ、築年数は古いほど家賃を下げるから重みはマイナス、と手で全部決めるのは大変です。そこで、過去データを使ってモデルに調整させます。
前述した通り、パラメータとハイパーパラメータは、混同しないほうがよい言葉です。パラメータは学習でモデルが調整する数字です。ハイパーパラメータは、人間が学習前に決める設定です。
| 種類 | 誰が決めるか | 例 |
|---|---|---|
| パラメータ | 学習で決まる | 重み、切片、ニューラルネットワークの重み |
| ハイパーパラメータ | 人間が設定する | 学習率、エポック数、木の深さ |
モデルの性能が悪いとき、パラメータを直接手で直すことはあまりありません。代わりに、特徴量を変える、学習データを見直す、モデルを変える、ハイパーパラメータを変える、といった形で改善します。
4-3. 重みの符号と大きさ
線形モデルでは、重みの符号を見ると、特徴量が予測へどちら向きに働いているかを確認できます。広さの重みがプラスなら、広いほど家賃が上がる方向です。駅からの距離の重みがマイナスなら、駅から遠いほど家賃が下がる方向です。
ただし、重みの大きさをそのまま比べると危ない場合があります。広さは㎡、駅距離は分、築年数は年、というように単位が違うからです。100点満点のテストと、5段階評価のアンケートを同じ重さで比べられないのと同じです。
そのため、数値のスケールをそろえる標準化が使われます。標準化では、平均からどれくらい離れているかを基準に数値を変換します。標準化すると、モデルが特定の単位の大きさに引っ張られにくくなります。
ここで大事なのは、標準化の計算も学習データだけで行うことです。テストデータを含めて平均や標準偏差を計算すると、テストデータの情報が学習側へ漏れます。
重みを解釈するときは、相関と因果も分けます。駅に近い物件ほど家賃が高い傾向があっても、モデルの重みだけで「駅距離が家賃を上げ下げしている原因だ」と断定はできません。実際には、駅前に商業施設が多い、人気エリアが駅周辺に集中している、築年数や間取りの分布が違う、といった別の要因が絡みます。
機械学習モデルは、データ内の関係を学びます。因果関係を証明するには、実験設計や統計的な検証が別に必要です。モデルの係数は強い手がかりになりますが、そのまま原因と呼ばないほうが良いかと思います。
4-4. 残差
回帰では、正解と予測の差を残差と呼びます。かっこよくないですか、残差って。
$$
残差 = 正解 - 予測
$$
家賃の正解が10万円、予測が9万円なら、残差は1万円です。正解が10万円、予測が12万円なら、残差はマイナス2万円です。
残差を見ると、モデルがどの方向に外れているかが分かります。全体的に残差がプラスなら、モデルは低めに予測している可能性があります。逆に残差がマイナスに偏るなら、高めに予測している可能性があります。
残差の確認は、モデル改善の入口になります。特定の地域だけ外れる、築年数が古い物件だけ外れる、家賃が高い物件だけ外れる、といった傾向があれば、特徴量やモデルを見直します。
5. 損失関数
5-1. 外れ具合を数字にする
モデルの予測がどれくらい外れたかを測る数字が損失です。損失が小さいほど、予測は正解に近いと判断します。逆に損失が大きければ、正解から遠い、ということです。
たとえば、実際の家賃が10万円で、予測が8万円なら、差は2万円です。予測が12万円でも差は2万円です。どちらも外れ具合は同じなので、差をそのまま足すとプラスとマイナスが打ち消し合ってしまいます。
そこで、差を二乗します。
$$
(正解 - 予測)^2
$$
差が2なら、二乗して4です。差が5なら25です。大きく外れた予測ほど強く罰する形になります。
損失関数を使う理由は、モデルの良し悪しを1つの数字として比較するためです。予測が100件あるとき、1件ずつの外れ方を眺めるだけでは、どのモデルが良いか判断しにくくなります。損失を計算すると、モデルAの損失は10、モデルBの損失は6、というように比べられます。
ただし、損失が小さいから常に良いモデルとは限りません。学習データだけで損失が小さい場合、過学習している可能性があります。過学習は、学習に使ったデータの答えをほぼ丸暗記してしまい、初めて見るデータには弱くなる状態のことです。テスト前に過去問の答えだけ覚えて、本番で少し問題をひねられるとお手上げになる、あの感じですね。詳しくは9章で扱うので、いまは、学習データでの損失の小ささだけを信用してはいけない、とだけ押さえてください。本当に確認したいのは、学習に使っていないデータで損失が小さいかどうかです。
5-2. 平均二乗誤差
構えないでいただきたい部分です。この平均二乗誤差は、回帰でよく使う損失関数で、英語ではMean Squared Error、略してMSEです。ここからMSEと言います。
$$
MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y_i})^2
$$
うわって感じですよね、わかります。この式だけだと急に難しく見えますが、意味はシンプルです。
まず見慣れない(久々に見た?) Σ からいきましょう。これはシグマと読んで、右側に並んだものを全部足しなさい、という意味の記号です。Σの下の i=1 と上の n は、1番目からn番目まで順番に、という指示で、要は1件目、2件目、3件目と、全員分をひとつずつ足していくだけです。クラス全員のテストの点数を上から順に足していく、あの作業を記号1文字にまとめたもの、と思ってください。
| 記号 | 意味 |
|---|---|
n |
データの数 |
y_i |
i番目の正解 |
ŷ_i |
i番目の予測 |
Σ |
全部足す |
つまり、予測と正解の差を二乗し、全部足して、データ数で割ります。平均点を出すときに、合計点を人数で割るのと同じです。
小さな例で確認します。正解が 10, 12, 8、予測が 9, 10, 9 だとします。
差を二乗するので、プラスとマイナスは打ち消し合いません。また、大きな外れが強く反映されます。これは良い点でもあり、注意点でもあります。大きな外れを強く避けたいならMSEは合いますが、外れ値に強く引っ張られる場合もあることがご理解いただけたかと思います。
5-3. 分類で使う交差エントロピー
分類では、平均二乗誤差より交差エントロピーがよく使われます。名前は難しいですが、予測確率が正解からどれくらい外れているかを測るものです。エントロピーとは、ざっくり言えば、どれくらい結果が読めないか、つまり不確かさ(乱雑さ)を表す数字です。全部の目が同じくらいの確率で出るサイコロのように、どれが出るか予想しづらい状態ほどエントロピーは大きく、ほぼ結果が決まっている状態ほど小さくなります。交差エントロピーは、この考え方を使って、モデルの予測確率が正解にどれだけ近いかを損失にしたものです。正解に高い確率を当てられていれば損失は小さく、正解から外れたほうへ自信を持っているほど損失は大きくなります。
たとえば、正解が猫の画像に対して、モデルが猫である確率を0.9と出したならかなり良い予測です。逆に0.1と出したなら、正解に対して自信を持って外しているので大きく罰します。
分類では、当たったか外れたかだけでなく、どれくらい自信を持って予測したかも見ます。交差エントロピーは、その自信の向きが正しいかを損失として扱います。
たとえば、正解が猫の画像に対して、モデルAは猫0.51、犬0.49と予測し、モデルBは猫0.99、犬0.01と予測したとします。どちらも最終的な分類は猫で正解ですが、モデルBのほうが正解カテゴリへ強い確率を出しています。交差エントロピーでは、この差も損失に反映されます。
逆に、正解が猫なのに犬0.99と予測した場合は、大きく罰されます。自信満々に外すことは、分類モデルでは危険だからです。医療や不正検知では、確率の扱いが運用判断に直結します。
5-4. 損失関数は目的の翻訳
損失関数は、モデルに何を良い予測として扱わせるかを決めます。回帰で平均二乗誤差を使うと、大きく外れた予測を強く罰します。分類で交差エントロピーを使うと、正解カテゴリへ高い確率を出すことを求めます。
ここを間違えると、モデルは悪気なく違う方向へ最適化されます。たとえば、不正検知で正解率だけを最大化すると、ほとんどを正常と判定するモデルが高得点になるかもしれません。現場で欲しいのは、不正を見逃さないことなのに、損失や評価がそこを反映していない状態です。
損失関数は、業務上どの間違いを重く見るかを、人間が数式へ翻訳したものと言えます。損失関数そのものが目的を勝手に読み取ってくれるわけではなく、何を外すと困るのか、どの間違いが重いのか、どの程度の誤差なら許せるのかを人間が考えて、それに合う損失関数や評価指標を選びます。
5-5. 損失関数と評価指標の違い
損失関数と評価指標は似ていますが、役割が違います。損失関数は、学習中にモデルを調整するための数字です。
ここで登場した評価指標は、学習後にモデルの良し悪しを判断するための数字です。学習が終わったモデルの成績表のようなもので、テストが終わった後に、何点だったか、どこを間違えたかを人間が確認する、あの感覚に近いと思ってください。
| 項目 | 使う場面 | 例 |
|---|---|---|
| 損失関数 | 学習中 | MSE、交差エントロピー |
| 評価指標 | 評価時 | 正解率、F1、MAE、RMSE |
同じものを使う場合もありますが、必ず一致するわけではありません。分類では交差エントロピーで学習し、評価ではF1スコアを見ることがあります。回帰ではMSEで学習し、評価ではMAEを確認することもあります。
理由は、学習で扱うのに向いた数字と、人間が判断したい数字が違う場合があるからです。学習では、なめらかに変化してパラメータ調整の手がかりになる損失が必要です。一方、運用では、見逃し数、誤検知数、平均誤差、レビュー件数など、人間の意思決定に近い指標が必要になります。
表に出てきた評価指標も、いまは名前と役割だけつかめれば十分です。詳しくは8章で扱うので、ここでは短い説明だけ先に添えておきます。
- 正解率は、全体のうち何件を正しく当てられたかの割合です。ただしデータが偏っていると当てにならない場面があります。
- F1は、後で出てくる適合率と再現率という2つの指標を、バランスよく1つにまとめた数字です。
- MAEは、予測が平均で何万円ズレたか、のように誤差の大きさをそのままの単位で見る指標です。
- RMSEはMAEに近いですが、大きく外した予測をより重く見る誤差です。
正解率やF1は分類、MAEやRMSEは回帰でよく使う、という程度の対応で今は大丈夫です。
6. 最適化
6-1. 勾配降下法
損失を小さくするために、パラメータを少しずつ動かす方法が勾配降下法です。GoogleのMachine Learning Crash Courseでも、勾配降下法は損失を最小にする重みとバイアスを反復的に探す方法として紹介されています。
イメージとしては、坂道を下る、みたいな感じです。今いる場所で、どちらへ動けば下り坂になるかを調べ、少しだけ動きます。動いた先でまた下り坂を調べ、また少し動きます。これを繰り返すと、損失が小さい場所へ近づきます。
探しているのは傾きが緩やかな方向ではなく、損失が低くなる方向、つまり下り坂の向きです。傾き(勾配)は、今いる場所でどちらが上り坂か、そしてどれくらい急かを教えてくれる矢印のようなもので、その反対側へ一歩進めば損失は下がります。急な下りでも緩い下りでも、とにかく下がるほうへ進む、というのが基本の動きです。
1. いまのパラメータで予測する
2. 正解との差から損失を計算する
3. 損失が下がる向きを調べる
4. パラメータを少し動かす
5. もう一度予測する
数式では、更新をこう書きます。
$$
新しい重み = 古い重み - 学習率 \times 傾き
$$
傾きは、いまの場所で損失がどちらに増えるかを表します。損失を減らしたいので、傾きと反対方向へ動きます。
式の中身を、もう少し細かく見ていきます。新しい重みは、古い重みから、学習率と傾きを掛けた分だけ引いた値です。たとえば、いまの重みが0.5、傾きがプラス2、学習率が0.1だとします。傾きがプラス2というのは、重みを増やすと損失が増える向きだ、という意味です。ここで 0.5 から 0.1 × 2、つまり0.2を引くと、新しい重みは0.3になります。損失が増える向きがプラスなので、その反対へ動かすためにマイナスで引いているわけです。もし傾きがマイナスなら、引き算の結果はプラスになり、今度は重みが増えるほうへ動きます。学習率は、この1回の動きの大きさを決める数字で、この後すぐ扱います。
勾配降下法で調整しているのは、モデルの予測そのものではなく、予測を作るためのパラメータです。予測が外れたら、どの重みがどれくらい外れに関係したかを計算し、その重みを少し動かします。
1回の更新で完璧な値にするわけではありません。少し予測し、少し外れを測り、少し直します。この「少しずつ」が大事です。大きく動かしすぎると、損失が小さい場所を通り過ぎることがあります。小さすぎると、良い場所へ近づくまでに時間がかかります。
6-2. 学習率
学習率は、1回でどれくらい動くかを決める数字です。学習率が大きすぎると、良い場所を飛び越えてしまいます。小さすぎると、学習がなかなか進みません。
先ほどの更新の式でいうと、学習率は 学習率 × 傾き の部分で、1歩の大きさを決めます。坂を下るときの歩幅だと思ってください。歩幅が大きすぎると、谷底の手前で止まれずに反対側の斜面へ飛び移ってしまい、いつまでも谷を行ったり来たりします。逆に歩幅が小さすぎると、下ってはいるものの、谷底にたどり着くまで気が遠くなるほど時間がかかります。大きすぎず小さすぎない、ちょうどよい歩幅を探すのが学習率の調整です。
| 学習率 | 起きること |
|---|---|
| 大きすぎる | 損失が安定せず、発散することがある |
| 小さすぎる | 学習に時間がかかる |
| ほどよい | 損失が少しずつ下がる |
このあたりから、機械学習は数学だけでなく実験の技術が非常に大事になります。理屈を知ったうえで、学習曲線や検証データの性能を確認しながら調整します。
学習率は、最初につまずくハイパーパラメータの1つです。学習率が大きいと、損失が下がるどころか上下に暴れることがあります。学習率が小さいと、損失は下がっていても変化が遅く、いつまでも十分な性能に届きません。
最近の深層学習では、学習率を途中で変えるスケジューリングもよく使われます。最初は大きめに動かして大まかな場所を探し、後半は小さく動かして細かく調整する、という考え方と理解してください。
6-3. エポック、バッチ、ミニバッチ
学習では、データを何度も使ってパラメータを更新します。学習データ全体を1周使うことをエポックと呼びます。1000件のデータをすべて使って1回学習したら、1エポックです。
全データを一度に使って更新する方法もありますが、データが大きいと計算が重くなります。そこで、データを小さなかたまりに分けて更新します。このかたまりがバッチで、特に小さな単位で更新する方法をミニバッチ学習と呼びます。
たとえば1000件のデータを100件ずつ10個のかたまりに分ければ、1かたまりごとに1回、合計10回パラメータを更新できます。この10回で全データをちょうど1周したことになり、これが1エポックです。次の図が、1000件を10個のミニバッチに分けて順番に更新し、1エポックにまとめるまでの流れを表しています。
バッチサイズが小さいと、更新は少し揺れますが、少ないメモリでも計算できます。バッチサイズが大きいと、勾配のばらつきは小さくなりやすい一方で、より多くのメモリが必要です。ただし、大きいほど常に速く、性能も良くなるわけではありません。深層学習では、ハードウェアの利用効率も含め、学習率、バッチサイズ、エポック数の組み合わせが結果に大きく影響します。
6-4. 学習曲線
学習曲線は、学習が進むにつれて損失や精度がどう変わるかを見るグラフです。学習データの損失と検証データの損失を並べると、モデルが本当に良くなっているのか、過学習しているのかを判断できます。
| 状況 | 学習データ | 検証データ | 考えられること |
|---|---|---|---|
| どちらも悪い | 悪い | 悪い | モデルが単純すぎる、特徴量が足りない |
| 学習だけ良い | 良い | 悪い | 過学習している |
| どちらも良い | 良い | 良い | まずは良い状態 |
図では、学習損失と検証損失の2本の線を並べています。序盤は両方とも下がっていきますが、ある時点から検証データの損失だけが上がり始めることがあります。ここが過学習の入り口で、そのまま学習を続けても本番での成績はむしろ悪くなっていきます。検証損失がいちばん低くなったあたりで学習を止める工夫は、早期終了(アーリーストッピング)と呼ばれます。
機械学習では、1回学習して終わりではありません。学習曲線、評価指標、誤分類の例、外れ値、特徴量を見ながら、どこを直すべきか判断します。
6-5. 初期値、局所解、鞍点
最適化では、どこから始めるかも結果に影響します。これを初期値と呼びます。線形回帰のような単純な問題では大きな問題になりにくいですが、深いニューラルネットワークでは、初期値によって学習の進み方が変わります。
損失の形は、いつもきれいなお椀型とは限りません。谷が複数ある場合もあります。ある場所では周囲より低いけれど、全体で一番低いわけではない場所を局所解と呼びます。
鞍点もあります。これは、ある方向には下り坂、別の方向には上り坂のような場所です。深層学習では、単純な局所解だけでなく、こうした複雑な地形を進むことになります。
山あいの地形を思い浮かべてみてください。いちばん深い谷、つまり全体で最も損失が低い場所へ行きたいのに、途中の浅い谷、いわゆる局所解で足が止まってしまうことがあります。鞍点は、馬の背に乗せる鞍のように、前後は下っているのに左右は上っている、平らで迷いやすい場所です。次の図は、この損失の地形を上から見た地図として、スタート地点である初期値が違えば通る道も変わる様子を表しています。
だからこそ、最適化では損失の変化、検証データの性能、学習率、初期値、バッチサイズをまとめて確認します。1つの数字だけで判断しないことが大切です。
7. 分類の考え方
7-1. 確率としきい値
分類では、モデルがカテゴリを予測します。迷惑メール判定なら、迷惑メールか、通常メールかを選びます。
分類モデルは、確率、またはクラスへの近さを表すスコアを出すことがあります。たとえば、迷惑メールである確率が0.8なら、かなり迷惑メールらしいと判断できます。
| 予測値 | 判定 |
|---|---|
| 0.8 | 迷惑メール |
| 0.3 | 通常メール |
どこから迷惑メールとするかを決める境界がしきい値です。しきい値を0.5にすると、0.5以上は迷惑メール、0.5未満は通常メールです。
しきい値は、もちろん0.5である必要はなく、迷惑メールの見逃しを減らしたいなら、0.3以上を迷惑メール扱いにする方法もあります。逆に、普通のメールを誤って迷惑メールにしたくないなら、0.8以上だけを迷惑メール扱いにすることもあります。
このしきい値は学習し直さなくても後から動かせます。モデルはそのままに、見逃しを減らしたい時期は下げ、誤検知を抑えたい時期は上げる、といった調整が現場の都合でできます。次の図は、同じ予測確率の並びに対して、しきい値を0.5、0.3、0.8と動かすと、どこから右が陽性になるかが変わる様子を表しています。
このように、分類モデルの出力は「カテゴリ名」だけではなく「確率のような値」と一緒に扱うと運用判断に使えます。
7-2. ロジスティック回帰
ロジスティック回帰は、分類でよく使う基本モデルです。名前に回帰と入っていますが、よく使われる用途は分類です。だいぶ紛らわしいですよね。
線形回帰は、数値をそのまま予測します。一方、ロジスティック回帰は、入力をいったん点数にして、それを0から1の範囲に変換します。0から1の値なら、確率のように扱えます。
$$
0 \leq 予測確率 \leq 1
$$
この範囲に収める関数をシグモイド関数と呼びます。式を丸暗記する必要はありません。大事なのは、どんな点数でも0から1の範囲へ押し込む変換だと捉えることです。
ロジスティック回帰の内部では、まず線形回帰と同じように点数を作ります。
$$
点数 = a \times x + b
$$
この点数が大きいほど陽性らしく、小さいほど陰性らしいと考えます。ただし、点数はそのままだとマイナスにも100にもなります。確率のように扱うには0から1の範囲に収める必要があります。そこでシグモイド関数を通します。
シグモイドのS字の形にはちゃんと意味があります。点数が0付近のときに出力が最も大きく変化し、点数が大きくプラスまたはマイナスへ離れるほど、出力は1または0に近づいて変化が小さくなります。自信のある領域では確率が振り切れ、迷う領域では中間の値が出る、という人間の感覚に近い挙動です。この流れは図にしています。点数を0から1の確率へ変換し、しきい値で陽性を決めるまでを1枚で追えます。
ロジスティック回帰は単純ですが、分類の土台としてとても重要です。確率、しきい値、交差エントロピー、適合率、再現率の話がすべてつながります。
7-3. 多クラス分類
もちろん分類は2択だけではありませんよね。画像を犬、猫、鳥、車のどれかに分類するような問題は、多クラス分類です。多クラス分類では、それぞれのカテゴリに対して確率のような値を出し、最も高いカテゴリを選びます。
| カテゴリ | 予測値 |
|---|---|
| 犬 | 0.10 |
| 猫 | 0.75 |
| 鳥 | 0.05 |
| 車 | 0.10 |
softmaxなどを使う、1件につき正解が1つの多クラス分類では、4つの予測確率をすべて足すと1になります。softmaxとはモデルが出す点数の並びを、合計が1になる確率の形へそろえる変換です。先ほど登場したシグモイドが2択用の変換だとすれば、softmaxはその3択以上版のようなもの、と捉えてください。この場合、カテゴリ同士が限られた確率を分け合う形になっていて、どれかが上がれば他が下がります。猫が0.75なら、残りの0.25を他の3つで分け合っているわけです。図では、いちばん長い猫の棒を選んで予測にします。下側には、最大でも0.35しかない、どれとも決めきれない例も添えました。
この例なら、最も高い猫を予測結果にします。ただし、猫0.75と猫0.35では意味が違います。前者は比較的自信がありますが、後者は他カテゴリと迷っているかもしれません。確率の一番高いものを選ぶだけでなく、どれくらい確信しているかも確認すると、モデルの不安定なケースを見つける助けになります。
7-4. しきい値の調整
2値分類では、しきい値を変えるとモデルの振る舞いが変わります。迷惑メール判定でしきい値を低くすると、多くのメールを迷惑メールとして拾えますが、普通のメールまで巻き込む可能性が上がります。しきい値を高くすると、誤検知は減りますが、迷惑メールの見逃しが増えるかもしれません。
| しきい値 | 起きること |
|---|---|
| 低い | 見逃しは減るが、誤検知が増える |
| 高い | 誤検知は減るが、見逃しが増える |
下げれば見逃しが減る代わりに誤検知が増え、上げればその逆になる、というシーソーの関係です。図では、しきい値のスライダーを左右に動かしたときに、この見逃しと誤検知が入れ替わることと、医療や不正検知と、通知やレビューとで優先したい側が違うことを表しています。
この調整は、モデルの問題というより運用判断です。医療検査や不正検知では見逃しを減らしたい場面が多く、通知やレビュー業務では誤検知を減らしたい場面もあります。何を優先するかで、同じモデルでも設定は変わります。
なお、しきい値は勘で1つ決めるのではなく、検証データや過去の運用データで、見逃しと誤検知がどう動くかを一覧にしてから選ぶのが実務的です。最終テストデータは、しきい値を決めた後の評価に残します。その見取り図が、この後で出てくるROC曲線やPR曲線です。
7-5. 確率の校正
分類モデルが出す陽性確率0.8という値は、必ずしも「同じように0.8と予測されたデータの約80%が実際に陽性になる」という意味ではありません。モデルによっては、陽性確率を高く見積もりすぎることがあります。これを確認する考え方が確率の校正です。
たとえば、陽性確率が0.8前後と予測されたデータを100件集めたとき、実際に陽性だったものが80件ほどなら、その確率はよく校正されていると言えます。実際の陽性が50件しかなければ、モデルは陽性確率を高く見積もりすぎています。
見落とされやすいのは、陽性確率0.8という数字を、同じ予測をしたデータの8割が陽性になる、とそのまま受け取ってしまう点です。校正がずれているモデルでは、実際の陽性率が5割程度しかない、ということが起こります。次の図は、予測0.8のグループを100件集めて、実際に何件が陽性だったかを、よく校正された場合と自信過剰な場合とで並べたものです。
確率が重要になる場面では、正解したかどうかだけでなく、確率の信頼性も確認します。医療検査、与信、不正検知、優先度付けでは、確率の値そのものが次の行動を決める材料になります。
7-6. 分類境界
分類モデルは、データを分ける境界を作ります。2つの特徴量だけで考えると、平面上に線を引き、その片側を陽性、反対側を陰性とするイメージです。
線形モデルは、まっすぐな境界を作ります。決定木は、条件分岐で階段状の境界を作ります。ニューラルネットワークは、複数の層と活性化関数を組み合わせることで、より複雑な非線形の境界を作れます。
同じ点の集まりでも、モデルによって引ける線の形が変わる、というのがここの肝です。図では、まったく同じデータに対して、線形モデルが1本の直線、決定木が縦横の階段、ニューラルネットワークが複雑な非線形境界を引く例を並べています。ニューラルネットワークの境界がいつもなめらかになるわけではなく、活性化関数や構成によっては折れ曲がりを含みます。
複雑な境界を作れるほど表現力は上がりますが、過学習の危険も増えます。学習データをきれいに分けられても、未知データで崩れるなら、その境界は細かすぎる可能性があります。分類では、境界の複雑さと汎化のバランスを考えます。難しいですね。
8. 評価指標
8-1. 正解率だけでは足りない
分類では正解率がよく使われます。
$$
正解率 = \frac{正しく予測した数}{全体の数}
$$
ただし、正解率だけでは危ない場面があります。たとえば、100件のうち99件が正常、1件だけ不正というデータを考えます。すべて正常と予測するモデルは、99%の正解率になります。しかし、不正を1件も見つけられません。
このように、データの偏りが大きい場合は、正解率だけで判断すると危険です。そこで、適合率、再現率、F1スコアを使います。これらの土台になるのが、次の混同行列です。
8-2. 混同行列
分類の結果は、混同行列で見ると判断しやすくなります。混同行列は、実際の正解とモデルの予測を組み合わせて数える表です。
| 予測が陽性 | 予測が陰性 | |
|---|---|---|
| 実際に陽性 | 真陽性 | 偽陰性 |
| 実際に陰性 | 偽陽性 | 真陰性 |
表の4つのマスは、実際が陽性か陰性か(縦)と、予測が陽性か陰性か(横)の組み合わせです。図では、この2×2のマスに、迷惑メールを見逃した偽陰性と、通常メールを誤って弾いた偽陽性が、それぞれどこに当たるかを色分けしています。この後で扱う適合率も再現率も、もとをたどればこの4マスの数え方から出てきます。
これは非常に覚えづらい印象があります。おすすめは、真陽性と真陰性は陽性×陽性、陰性×陰性なので同じものは真とおぼえて、異なるものをかけると偽、というイメージを持ちます。続いて、異なりつつ「予想側」が陽性だったら偽陽性、陰性だったら偽陰性です。
この覚え方が成り立つのには由来があります。4つの言葉はもともと英語のTrue Positive、False Positiveなどの訳で、後ろの陽性・陰性はモデルが出した予測を、頭の真・偽はその予測が当たっていたかどうかを表します。偽陽性なら、陽性という予測が偽だった、とそのまま読み下せるわけです。
迷惑メール判定なら、真陽性は本当に迷惑メールで、モデルも迷惑メールと判定したものです。偽陽性は普通のメールを迷惑メールと判定したもの、偽陰性は迷惑メールを見逃したものです。
医療やセキュリティでは、偽陰性の重みが大きい場面があります。逆に、通常メールを迷惑メール扱いすると困る業務では、偽陽性も無視できません。評価指標は数字の大小だけでなく、間違えたときの影響で選びます。
8-3. 適合率、再現率、F1スコア
混同行列の言葉がそろったので、指標を定義していきます。適合率は、陽性と予測したもののうち、本当に陽性だった割合です。迷惑メール判定なら、迷惑メールと判定したメールのうち、本当に迷惑メールだった割合です。
$$
適合率 = \frac{真陽性}{真陽性 + 偽陽性}
$$
再現率は、本当に陽性だったもののうち、モデルが見つけられた割合です。
$$
再現率 = \frac{真陽性}{真陽性 + 偽陰性}
$$
F1スコアは、適合率と再現率のバランスを見る指標です。
$$
F1 = \frac{2 \times 適合率 \times 再現率}{適合率 + 再現率}
$$
適合率と再現率がどっちがどっちなのか非常に覚えづらいですよね。おすすめな覚え方としては、適合、と再現にイメージをつけることが大事で、適合は、モデルが陽性と主張した内容が現実に適合していたか、再現は、現実にある陽性を予測でどれだけ再現できたか、と結びつけます。前者は言い当てた割合、後者は取りこぼさなかった割合です。モデルの主張を主語にするなら適合率、現実の陽性を主語にするなら再現率、と押さえると良いかと思います。
8-4. 回帰の評価指標
数値を予測する回帰では、分類とは違う評価指標を使います。家賃予測、売上予測、気温予測、需要予測では、当たったか外れたかの2択ではなく、どれくらい外れたかを測ります。
| 指標 | 意味 | 特徴 |
|---|---|---|
| MAE | 誤差の絶対値の平均 | 単位が元の値と同じ |
| MSE | 誤差の二乗の平均 | 大きな外れを強く罰する |
| RMSE | MSEの平方根 | 単位が元の値と同じで、大きな外れも反映する |
| R² | 平均だけで予測する場合よりどれくらい良いか | 1が最良で、0は平均予測と同程度、負ならそれより悪い |
4つの指標は、回帰モデルを見る角度が違います。誤差だけから計算できるのはMAE、MSE、RMSEの3つです。R²は、正解値の平均からのばらつきと予測の誤差を比べるため、正解値と予測値の両方が必要です。
MAEは、予測家賃が平均で何万円外れたか、という感覚で扱えます。実際の家賃が10万円で予測が9万円なら誤差は1万円、12万円なら誤差は2万円です。この誤差を全部足して、件数で割ります。
MSEは誤差を二乗するため、大きな外れに厳しくなります。1万円の外れは1、5万円の外れは25として扱われます。たまに大きく外すモデルを避けたい場合は、MSEやRMSEが候補になります。
R²は少し見方が違います。予測誤差の二乗和を、正解値が平均からどれだけばらつくかの二乗和と比べます。1が最良で、0なら毎回平均値だけを予測する方法と同程度です。マイナスになることもあり、その場合は平均値だけを予測する方法より悪いことを意味します。R²が高くても個別の誤差が小さいとは限らないため、MAEやRMSEと一緒に確認します。
8-5. ROC曲線とPR曲線
分類モデルが出す確率に対して、しきい値を変えると、適合率、再現率、偽陽性率が変わります。その変化をまとめて確認するために、ROC曲線やPR曲線が使われます。
ROC曲線は、陽性をどれだけ拾えるかと、陰性をどれだけ誤って陽性にしてしまうかの関係を表します。AUCは、このROC曲線の下の面積で、1に近いほど陽性と陰性を分ける力が高いと考えられます。
ただし、陽性がとても少ないデータでは、ROC-AUCだけでは良く見える場合があります。不正検知や病気検査のように陽性が少ない問題では、PR曲線、つまり適合率と再現率の関係も確認します。PR曲線は、陽性を見つけることにより強く注目するため、偏りの大きい分類で役立ちます。
言葉だけだとわかりにくいので、図で見てみましょう。次の図は、しきい値を少しずつ動かしながら描いた2本の曲線を並べたものです。左のROC曲線は、拾えた陽性の割合と、間違えて陽性にした割合の関係を、右のPR曲線は、適合率と再現率の関係を表します。1つのしきい値の良し悪しではなく、しきい値を動かしたときの全体像を1枚で見られるのが、これらの曲線の便利なところです。
評価指標は、どの間違いが業務上痛いのか、どれくらいの確認コストを許容できるのか、見逃しと誤検知のどちらを重く扱うのかを決めてから選ぶものです。
9. 汎化と過学習
9-1. 汎化
汎化とは、学習に使っていないデータにも対応できることです。機械学習で本当に欲しいのは、学習データの高得点ではなく、未知のデータに対する安定した予測です。
たとえば、英単語テストの過去問を丸暗記しただけでは、少し問題文が変わると対応できません。機械学習でも同じで、学習データに合わせすぎると新しいデータで外れます。
9-2. 過学習と未学習
過学習は、学習データに合わせすぎた状態です。未学習は、そもそもデータの傾向を十分につかめていない状態です。
| 状態 | 学習データ | 未知データ | 状況 |
|---|---|---|---|
| 未学習 | 悪い | 悪い | まだ学べていない |
| ちょうどよい | 良い | 良い | 傾向をつかめている |
| 過学習 | とても良い | 悪い | 丸暗記に近い |
過学習を避けるために、検証データ、交差検証、正則化、データ拡張、早期終了などを使います。scikit-learnの公式ドキュメントでも、交差検証はモデルがどれくらい汎化できるかを推定する手段として説明されています。
9-3. バイアスとバリアンス
過学習と未学習をもう少し深く理解するために、バイアスとバリアンスという考え方があります。バイアスは、モデルが単純すぎて本来の関係を表せないことです。バリアンスは、学習データの細かい揺れに反応しすぎることです。
| 状態 | 何が起きているか | 例 |
|---|---|---|
| バイアスが大きい | モデルが単純すぎる | 曲線の関係を直線だけで表そうとする |
| バリアンスが大きい | データの細部に合わせすぎる | たまたま入った外れ値まで覚える |
未学習は、バイアスが大きい状態に近いです。モデルが単純すぎる、特徴量が足りない、学習回数が少ない、といった理由で、学習データにも未知データにも合いません。
過学習は、バリアンスが大きい状態に近いです。学習データにはよく合いますが、少し違うデータに弱くなります。複雑なモデルほど表現力は上がりますが、データ量や正則化が足りないと、偶然のノイズまで覚えます。
9-4. 正則化
正則化は、モデルが複雑になりすぎないように制約を加える方法です。線形モデルでは、重みが極端に大きくならないように罰を加えます。ニューラルネットワークでは、ドロップアウトや重み減衰なども使われます。
たとえば、ある特徴量の重みだけが極端に大きいモデルは、その特徴量に強く依存しています。その特徴量が本当に重要なら問題ありませんが、たまたま学習データで強く見えただけなら危険です。正則化は、そうした極端な依存を抑えます。
正則化を強くしすぎると、今度はモデルが単純になりすぎます。過学習を抑えるつもりが、未学習へ寄ってしまう場合もあります。学習データと検証データの両方を確認しながら、ほどよい強さを探します。
9-5. 交差検証と時系列データ
データを1回だけ学習用と検証用に分けると、たまたま分け方が良かった、または悪かった可能性が残ります。交差検証では、データの分け方を変えながら複数回評価し、性能のばらつきを確認します。モデルやハイパーパラメータを選んだ後の最終評価には、交差検証へ使っていない独立したテストデータを残します。
代表的な方法はk分割交差検証です。データをk個に分け、1つを検証用、残りを学習用にします。これを役割を変えながらk回繰り返し、平均を取ります。
ただし、時系列データでは単純にシャッフルしてはいけません。未来のデータを使って過去を予測する形になり、データ漏れが起きるからです。売上予測、在庫予測、アクセス数予測では、過去で学習し、未来で評価する分け方にします。また、同じ人物、会社、装置などから複数行が生まれる場合は、同じグループが学習側と検証側へまたがらないようにGroupKFoldなどを使います。
10. 代表的なモデル
10-1. 線形モデル
線形モデルは、入力に重みをかけて足し合わせるモデルです。単純ですが、解釈しやすく、基準として強いモデルです。
| モデル | 主な用途 | 特徴 |
|---|---|---|
| 線形回帰 | 数値予測 | 影響の向きを確認できる |
| ロジスティック回帰 | 分類 | 確率のような値を出せる |
線形モデルの良さは、特徴量の単位や相関などに注意すれば、係数から予測への影響の向きを確認しやすいところです。広さの係数がプラス、駅距離の係数がマイナス、というように、ほかの特徴量を一定とした条件での関係を説明しやすいため、最初の基準として重宝します。ただし、係数だけで因果関係や特徴量の重要度を断定することはできません。図では、線形回帰とロジスティック回帰が、同じ重み付き和という土台を共有しながら、連続値を出すか確率を出すかで枝分かれする様子を表しています。
線形モデルは、すべての問題に強いわけではなく、複雑な曲線や条件分岐が多い問題では、木系モデルやニューラルネットワークのほうが合うことがあります。
10-2. 決定木とランダムフォレスト
決定木は、質問を順番に分けていくモデルです。たとえば、駅から10分以内か、築年数が10年以内か、広さが30㎡以上か、といった条件で枝分かれします。
ランダムフォレストは、決定木をたくさん作り、その多数決や平均で予測します。レオ・ブレイマンのRandom Forests論文では、ランダムな要素を持つ木の組み合わせとしてランダムフォレストが説明されています。
決定木の良さは、はい・いいえの分岐をたどるだけで結論にたどり着ける分かりやすさです。ただ1本だけだと、学習データのちょっとした違いに引きずられて枝分かれが変わってしまいます。図で見ると、左に1本の決定木の分岐、右に少しずつ違う複数の木の予測を多数決や平均でまとめるランダムフォレストを並べています。1本の気まぐれを、大勢の意見でならすイメージですね。
木を1本だけ使うと、学習データに合わせすぎる場合があります。たくさんの木を組み合わせると、1本ごとの癖がならされ、予測が安定しやすくなります。
10-3. 勾配ブースティング
勾配ブースティングは、弱いモデルを順番に足していく方法です。前のモデルが苦手だった部分を、次のモデルが補うように学びます。
ランダムフォレストが複数の木を横並びで作って多数決するのに対して、勾配ブースティングは木を縦に、順番に足していきます。二乗誤差を使う回帰では、前のモデルが残した誤差を次の木が補う、と考えられます。より一般には、選んだ損失関数を小さくする方向、つまり損失の負の勾配を次の木が学習します。次の図は、木を足すたびに残りの誤差が短くなり、最後にすべてを合わせて予測にする流れを表しています。
表形式データでは、今でも木系モデルが強い場面が多くあります。深層学習や生成AIが注目されても、すべてをニューラルネットワークで解く必要はありません。データの形と目的に合うモデルを選ぶことが重要です。
10-4. k近傍法、ナイーブベイズ、SVM
機械学習の基本モデルとして、k近傍法、ナイーブベイズ、SVMもよく名前が出ます。どれも古い手法というより、考え方を理解するために今でも価値があります。
k近傍法は、近くにあるデータを参考にして予測する方法です。新しい点が来たら、周りにあるk個のデータを確認し、多数派のカテゴリや平均値を使います。考え方は直感的ですが、データが大きいと近い点を探す計算が重くなります。また、距離の測り方や標準化の影響を強く受けます。
ナイーブベイズは、確率を使った分類モデルです。迷惑メール判定で、ある単語が出たときに迷惑メールである確率を考えます。予測するクラスが分かっているという条件のもとで、各特徴量が互いに独立しているという強い仮定を置くため「ナイーブ」と呼ばれますが、テキスト分類では軽くて強い基準になります。
3つとも判断の仕方がまったく違うのが面白いところです。図では、k近傍法が新しい点の近くにある数個の多数決で決める様子、ナイーブベイズがクラスごとの確率で決める様子、SVMが2つのクラスの間にいちばん余裕のある境界を引く様子を、3つのパネルで並べています。
SVMは、カテゴリの境界をできるだけ余裕を持って引くモデルです。境界から近いデータをサポートベクターと呼び、それらが分類境界を決めます。データ数や特徴量の条件が合うと高い性能を出しますが、大規模データでは計算コストが課題になることがあります。
11. ニューラルネットワーク
11-1. ニューロン
ニューラルネットワークは、小さな計算単位をたくさんつなげたモデルです。基本形では、1つの計算単位が入力に重みを掛けて足し、バイアスを加え、最後に活性化関数で変換します。
$$
出力 = 活性化関数(重み付きの合計 + バイアス)
$$
活性化関数があることで、ニューラルネットワークは直線だけでなく、曲がった境界も表現できます。
1個のニューロンがやっていることは、じつは4章の重み付き和とほとんど同じです。入力に重みを掛けて足し、バイアスを加え、活性化関数で変換します。この小さな計算単位を何百、何千とつなげて層を重ねたものがニューラルネットワークで、1個ずつは単純でも、集まると複雑な関係を表せるようになります。
11-2. 逆伝播
逆伝播は、パラメータを少し動かしたときに損失がどちら向きにどれくらい変わるか、つまり勾配を効率よく計算する方法です。求めた勾配を使って実際に重みを変更するのは、勾配降下法やAdamなどの最適化アルゴリズムです。
順番に見ると、入力から出力へ向かって計算し、予測と損失を求めます。これが順伝播です。次に、損失から入力側へ計算をたどり、各重みに対する勾配を求めます。これが逆伝播です。最後に、最適化アルゴリズムが勾配を使って重みを更新します。テストで間違えたとき、答案を後ろからたどって、どの手順が点数にどれだけ影響したかを確かめ、その結果をもとに解き方を直す流れに近いです。図では、青の順伝播、オレンジの逆伝播、下段の重み更新に分けています。
1986年のデイヴィッド・ラメルハート、ジェフリー・ヒントン、ロナルド・ウィリアムズによる論文は、誤差を逆向きに伝えて内部表現を学ばせる方法を示し、ニューラルネットワーク研究の重要な土台になりました。
深層学習では、この逆伝播と勾配降下法を組み合わせ、大量のデータと計算資源で多層のモデルを学習します。2012年のImageNet分類の論文では、深い畳み込みニューラルネットワークが画像分類で大きな成果を示し、深層学習が広く使われる流れを強めました。
11-3. 層と活性化関数
ニューラルネットワークは、入力層、隠れ層、出力層で構成されます。入力層はデータを受け取り、隠れ層は中間の特徴を作り、出力層は最終的な予測を出します。
活性化関数は、線形の計算に曲がりを加える役割を持ちます。もし活性化関数がなければ、層を何枚重ねても、全体として1つの線形変換、正確にはバイアスを含むアフィン変換と同じになります。ReLU、シグモイド、tanhなどが代表例です。
ReLUは、0より小さい値を0にし、0より大きい値はそのまま通します。式で書くと少しだけ数学っぽくなりますが、意味は単純です。
$$
ReLU(x) = max(0, x)
$$
x がマイナスなら0、プラスなら x を返します。この単純な変換は、CNNをはじめとする深いネットワークで広く使われています。
活性化関数はReLUだけではありません。昔はシグモイドやtanhがよく使われていましたが、層を深くすると学習の信号が奥まで届きにくくなる弱点がありました。ReLUはプラス側で入力をそのまま通すので信号が減衰しにくく、計算も軽いことから、現在も広く使われています。一方、Transformer系では、BERTのGELUやLLaMAのSwiGLUのように、ReLU以外の活性化関数を採用したモデルもあります。
11-4. CNN、RNN、Transformer
ニューラルネットワークには、データの形に合わせた構造があります。画像、文章、音声、表データでは、向いている構造が変わります。
| 構造 | 向いているデータ | 考え方 |
|---|---|---|
| CNN | 画像 | 近くの画素のまとまりから特徴を抽出する |
| RNN | 時系列、文章 | 前の情報を次へ渡しながら処理する |
| Transformer | 文章、画像、音声など | Attentionで要素同士の関係を計算する |
3つの構造は、データの何を手がかりにするかが違います。次の図は、CNNが画像の上を小さな窓でずらしながら近くの模様を拾う様子、RNNが単語を順番に受け取って前の状態を次へ渡す様子、Transformerが参照を許された範囲にあるトークン同士の関係をAttentionでまとめて計算する様子を、横に並べて比べたものです。図のTransformer部分は、前後のトークンを参照できるエンコーダ型self-attentionの概念に近い描き方です。
CNNは、画像の一部分に注目する小さなフィルタを使います。最初の層では線や角のような単純な特徴を扱い、深い層では顔、車、文字の一部のような複雑な特徴へ進みます。
RNNは、系列データを順番に処理します。文章なら、前の単語の情報を次の単語へ渡します。ただし、長い系列では遠くの情報を保つのが難しいため、現在の大規模言語モデルではTransformerが中心になっています。
Transformerは、参照を許された範囲にある要素同士の関係を一度に計算する用途に向いた構造です。エンコーダ型では前後のトークンを参照できます。文章を左から順に生成するデコーダ型では、未来のトークンを見ないように因果マスクを使います。学習時には各位置の関係を並列に計算でき、大量のテキストを使った学習を進める重要な土台になりました。ただし、標準的なself-attentionの計算量とメモリ使用量は系列長の二乗に比例して増えるため、長い文脈を効率よく扱うには追加の工夫が必要です。
11-5. ドロップアウトと正規化
深いニューラルネットワークでは、過学習を避けるための工夫が重要です。代表的なものがドロップアウトです。ドロップアウトでは、学習中に一部のニューロンをランダムに使わないようにします。
これは、特定のニューロンだけに頼りすぎないようにするための方法です。学習のたびに少し違うネットワークとして訓練されるため、モデル全体がより安定した特徴を使う方向へ進みます。
正規化も重要です。ニューラルネットワークでは、層を進むにつれて値の大きさが不安定になることがあります。Batch NormalizationやLayer Normalizationは、値の分布を整え、学習を安定させるために使われます。TransformerではLayer Normalizationが広く使われます。
ドロップアウトのコツは、無効化するのが学習中だけ、という点です。本番の推論では全部のニューロンを使います。毎回わざと一部を欠けさせて練習することで、特定のニューロンへの依存を防ぐわけですね。次の図は、左に学習中と推論時でノードの使い方が変わるドロップアウトを、右にばらついた値を整える正規化を並べたものです。
深層学習は、層を増やせば自動的に良くなるものではありません。データ量、モデルの大きさ、正則化、学習率、バッチサイズ、初期値、評価方法が組み合わさって結果が決まります。
12. Transformerと生成AI
12-1. Attention
Transformerは、今の大規模言語モデルの中心にある構造です。2017年のAttention Is All You Needで提案され、再帰や畳み込みを使わず、Attentionを中心にした構成が示されました。
Attentionは、入力のどの部分を重く扱うかを決める仕組みです。文章を理解するとき、人間もすべての単語を同じ重さで扱うわけではありません。質問に答えるときは、関係する単語や文に強く注意を向けます。Transformerは、その注意の向け方を数値として計算します。
たとえば、猫は窓辺で眠る、という文で、眠るという単語を捉えるとき、モデルは主語の猫に強く、窓辺にほどほどに、「は」「で」「に」には弱く注意を向けるかもしれません。この、どの単語をどれくらい見るかの重みがAttentionで、文脈に応じて計算されます。次の図は、眠るから各単語へ引いた線の太さで、その参照の強さを表した概念例です。実際の重みは層やheadごとに異なり、Attentionの重みだけからモデルの判断理由を断定することはできません。
12-2. 事前学習とファインチューニング
大規模言語モデルは、まず大量のテキストから言語のパターンを学びます。これが事前学習です。その後、会話、要約、コード生成、指示応答などの用途に合わせて追加で学習します。これがファインチューニングです。
この2段階は、料理でいう仕込みと味付けのようなものです。事前学習で、大量のテキストから言葉の一般的な使い方という土台をじっくり作り、ファインチューニングで、その土台を特定の用途向けに軽く調整します。ゼロから作り直すのではなく、できあがった土台を活かすので、少ないデータで済むのが利点です。図では、大量データによる事前学習から基盤モデルを作り、用途別データや好みデータで仕上げていく流れを示しています。
最近のモデルでは、さらに収集した人間の選好データや安全性を反映する後処理も重要です。InstructGPTの論文では、人間のフィードバックを使った学習により、ユーザーの意図に沿う出力を増やす方向が示されました。DPOの論文では、報酬モデルと強化学習を明示的に分けず、選好データから直接モデルを調整する方法が提案されています。
12-3. 埋め込みとRAG
生成AIを理解するときは、埋め込みも重要です。埋め込みは、文章や画像などを数字の並びに変換したものです。意味が近い文章ほど、数字の空間でも近い場所に置かれるように学習します。
たとえば、東京の天気と都内の気温は近い意味を持つため、埋め込み空間でも近い位置に来やすくなります。まったく別の話題である家賃や料理レシピは、離れた位置に来ます。
RAGは、外部の情報源から関連する文書やデータを検索し、それをモデルへ渡して回答生成に使う方法です。検索には埋め込みによるベクトル検索がよく使われますが、キーワード検索や、両者を組み合わせたハイブリッド検索も利用されます。
別記事で詳しくまとめているので、こちらもどうぞ。
例え社内規程を覚えていない新人でも、手元に規程集があれば、該当ページを引いて正しく答えられます。RAGはこれと同じで、モデルに全部を暗記させる代わりに、質問のたびに関連しそうな文書を検索して、その中身と一緒に質問を渡します。次の図は、典型的なベクトル検索型RAGの例として、質問と外部文書を埋め込み空間で見比べて近い文書を選び、その根拠を添えて回答を作る流れを表しています。
RAGを使っても、もちろん検索結果が間違っている、古い、質問とずれている場合は、回答もずれます。生成AIの精度はモデルだけで決まらず、検索対象の文書、更新頻度、権限、評価方法にも左右されます。
12-4. トークン化と次トークン予測
大規模言語モデルは、文章をそのまま文字列として扱うのではなく、トークンという単位に分けます。トークンは、単語そのものの場合もあれば、単語の一部、記号、空白を含む単位になる場合もあります。
実際のトークン分割はモデルごとに違います。日本語では、英語のように空白で単語が区切られないため、分割のされ方に注意が必要です。トークン数は、モデルに入力できる文量や料金、処理時間にも関係します。
多くの生成型大規模言語モデルは、次のトークンを予測するように学習します。たとえば「今日は雨が」と来たら、次に「降る」「強い」「止む」などが候補になります。モデルは、これまでの文脈から次に来る可能性の高いトークンを計算します。
やっていることは、高性能な予測変換というイメージが近いかな、と思います。これまでの文章を手がかりに、次に来そうな単語の候補それぞれへ確率を付け、設定された生成方法に従って1つ選び、また次を予測する、をひたすら繰り返します。毎回もっとも確率の高い候補を選ぶ方法もあれば、確率分布からある程度ランダムに選ぶ方法もあります。図は、いちばん高い候補を選ぶgreedy decodingの例です。
この仕組みだけを見ると単純ですが、大量のテキストで学習すると、文法、知識、推論のように見える振る舞いが現れます。ただし、根本は確率的な生成です。正しい事実を保証する装置ではないため、出力の検証が必要です。
12-5. ハルシネーション
ハルシネーションは、モデルがもっともらしいけれど誤った内容を生成する現象です。存在しない論文名、間違ったURL、古い仕様、実在しないAPI、事実と違う説明などが例です。ハルシネーションは日本語でいう幻覚のことで、もともとは、実在しないものが見えたり聞こえたりする医学・心理学の用語です。モデルが、実際には無い情報を、まるで幻覚を見ているかのように意気揚々と語る様子から、この名前が借りられました。
ハルシネーションが起きる理由の1つは、モデルが「真実のデータベース」ではなく「次に来そうなトークンを出すモデル」だからです。学習データ内の事実に基づくこともありますが、質問の文脈に合わせてもっともらしい文章を作ることもあります。
やっかいなのは、間違っていても文章としては自信たっぷりで、見た目には正しそうに読めてしまう点です。モデルは事実を調べているのではなく、それっぽく続く言葉を選んでいるだけなので、実在しない論文名やURLをすらすら書いてしまうことがあります。次の図は、次トークン予測からもっともらしい誤情報が生まれる経路と、根拠文書や出典確認、人間のレビューでそれを食い止める対策を並べたものです。
対策としては、RAGで根拠文書を渡す、出典を確認する、評価データを作る、重要な用途では人間のレビューを入れる、出力に使える範囲を制限する、といった方法があります。特に法務、医療、金融、セキュリティでは、生成結果をそのまま判断に使わない設計が必要です。
12-6. コンテキスト長と外部知識
コンテキスト長は、モデルが一度の処理で保持できるトークン数の上限です。多くの仕組みでは入力と生成出力が同じ上限枠を共有しますが、製品やAPIによって定義は異なります。長いコンテキストを扱えるモデルなら、大きな文書や長い会話を入力に入れられます。ただし、長く入れられることと、すべてを正確に使えることは同じではありません。
コンテキストは、モデルの机の広さのようなものです。机が広ければ多くの資料を広げられますが、広げただけで全部を同時に読み込めるわけではありません。机の真ん中に置いた大事な資料が、端に積んだ大量の紙に埋もれて見落とされる、ということが起こります。だから、詰め込めるだけ詰め込むより、必要なものを選んで置くほうがうまくいく場面が多いです。
長い文書では、重要な情報が途中に埋もれることがあります。また、入力が長いほど処理コストも増えます。必要な情報をそのまま全部入れるより、検索で関連部分を選び、要約や構造化を組み合わせるほうが安定する場合があります。
生成AIへ外部知識や機能を補ったり、振る舞いを特定用途へ合わせたりする方法には、RAG、ファインチューニング、プロンプト設計、ツール利用があります。
| 方法 | 役割 | 向いている場面 |
|---|---|---|
| RAG | 外部文書を検索して渡す | 最新情報や社内文書を使いたい |
| ファインチューニング | モデルの振る舞いを調整する | 文体や形式、タスクの型を合わせたい |
| プロンプト設計 | 入力の与え方を工夫する | 小さなタスクを素早く試したい |
| ツール利用 | 検索、計算、DB操作を外部に任せる | 正確な計算や最新データが必要 |
どれか1つが常に正解というわけではありません。最新の社内規程を参照したいならRAG、出力形式を安定させたいならファインチューニング、計算が必要ならツール利用、というように目的で分けます。
13. 現在の生成AIにつながる研究の流れ
13-1. 大きいだけでは足りない
2026年7月時点のAI研究を見ると、モデルを大きくするだけではなく、データ、学習方法、推論時の計算量、検索、評価、安全性まで含めて改善する方向へ進んでいます。
| 流れ | 代表的な研究 | 入門で押さえる意味 |
|---|---|---|
| スケーリング | Scaling Laws、Chinchilla | 実験から得られた経験則を基に、モデルとデータ量のバランスを考える |
| 基盤モデル | Foundation Models | 広いデータを大規模に学習し、多様な下流タスクへ適応して使う |
| 検索併用 | RAG | モデル内部の知識だけに頼らず、外部文書を参照する |
| 軽量適応 | LoRA | 全重みを更新せず、少ない追加パラメータで用途に合わせる |
| 人間の選好 | RLHF、DPO | 収集した選好データから、どちらの回答が望ましいかを学ぶ |
| 推論強化 | DeepSeek-R1、Qwen3 | 回答時に考える量を使い分ける方向が強い |
| マルチモーダル | MLLM | 文章、画像、音声などを同じ枠組みで扱う |
| エージェント | LLM Agent | 推論や計画、ツール、記憶、外部環境とのやりとりなどを組み合わせる |
| 失敗分析 | Reasoning Failures | 既存研究で報告された失敗の型をまとめる |
Scaling Lawsの論文は、特定の実験条件で、言語モデルの損失とモデルサイズ、データ量、学習計算量の間に経験的な関係があると報告しました。自然法則のように、すべてのモデルやデータへそのまま当てはまるものではありません。
Chinchillaの論文は、訓練時の計算予算を固定した条件では、モデルサイズだけでなく学習トークン数もバランスよく増やす必要があると報告しました。つまり、パラメータ数だけを大きくしても、十分なデータで学習しなければ性能は伸びにくいという見方です。
モデルを大きくすれば強くなる、という話は分かりやすいですが、現実はもう少し込み入っています。器であるモデルの大きさだけを広げても、そこに注ぐ中身である学習データが足りなければ、実力は頭打ちになります。次の図は、AIの性能がモデルサイズだけでなく、学習データ、計算予算、検索、軽量な追加学習、評価といった複数の要素の組み合わせで決まることを表しています。
LoRAの論文は、事前学習済みモデルの重みを固定し、追加の小さな行列だけを学習する方法を示しました。巨大モデルを毎回すべて更新するのは重いため、この発想は、その後のパラメータ効率のよいファインチューニング手法へ大きな影響を与えています。
13-2. 推論モデルと失敗分析
2024年後半以降、回答時に追加の計算量を使って数学やコードなどの問題を解く推論モデルが、主要な研究テーマの1つになりました。DeepSeek-R1論文では、特に人間が作成した推論過程を使わずに強化学習したDeepSeek-R1-Zeroで、自己反省、検証、戦略変更に見える出力パターンが現れたと報告されています。ただし、これはモデルが人間と同じように内省していることや、生成された推論過程が常に正しいことを証明するものではありません。最終的なDeepSeek-R1の学習には、cold-start dataや複数段階の学習も含まれます。
Qwen3 Technical Reportでは、複雑な多段推論向けのthinking modeと、素早い応答向けのnon-thinking modeを同じモデル系列へ統合しています。さらに、ユーザーや開発者がthinking budgetを設定し、推論時の計算量と応答速度のバランスを調整できます。ただし、計算量を増やせば、すべての問題で必ず正解率が上がるわけではありません。
人間でも、暗算で即答できる問題と、紙に書いて順を追わないと解けない問題がありますよね。推論モデルは、回答時に使う計算量を増やせるようにしたもの、と捉えてください。ただし、どの程度使うかを利用者側で設定する仕組みもあり、長く考えれば必ず正解するわけでもありません。途中でつじつまが合わなくなる失敗も残ります。次の図は、簡単な問題は即答し、難しい問題は分解して検証する経路と、それでも起きる失敗の型を並べたものです。
一方で、LLMが常に正しく考えられるわけではもちろんなく、2026年のサーベイ論文Large Language Model Reasoning Failuresは、既存研究で報告されたLLMの推論失敗を分類し、単純に見える場面でも失敗が残ることをまとめています。入門の段階でも、生成AIを万能の答え合わせ役として扱わず、データ、根拠、評価をセットで確認する姿勢が必要です。このあたりは皆さんのご経験からも、共感できるのではないでしょうか。
13-3. マルチモーダル、エージェント、安全性
最近の生成AIは、文章だけでなく、画像、音声、動画といった異なる種類の情報を組み合わせて扱う方向へ進んでいます。これがマルチモーダルです。表やコードも扱えますが、これらは文脈によってはデータ形式であり、必ずしも画像や音声と同列のモダリティではありません。Multimodal Large Language Modelsのサーベイでは、画像と言語をつなぐモデルの構造、学習方法、評価が大きな研究テーマとして扱われています。
もう1つの流れがエージェントです。LLMエージェントは、モデルによる推論や計画、ツール利用、記憶、外部環境とのやりとりなどを組み合わせた構成です。すべてのエージェントが明示的な計画の仕組みを持つとは限りません。2025年のLLM Agentサーベイでは、エージェントの構成、協調、評価、実用上の課題がまとめられています。
文章を返すだけのモデルと、自分でツールを使って作業を進めるエージェントとでは、任せられる範囲が大きく変わります。ただ、外部を操作できるということは、間違った操作もできてしまうということなので、どこまでの権限を与えるかという線引きが欠かせません。次の図は、複数の入力を扱うマルチモーダルモデルが、計画とツール利用を回しながら、権限や入力検査というゲートを通して外部環境へ働きかける様子を表しています。
ただし、できることが増えるほど、安全性と評価は重くなります。Stanford HAIの2026 AI Indexは、AIの能力と普及が進む一方で、安全性、公平性、透明性、ガバナンスの測定や評価には、なおギャップが残ることを示しています。機械学習を学ぶときは、精度だけでなく、データの偏り、説明責任、プライバシー、権限、失敗時の影響まで見ます。
13-4. ベンチマークと実務評価
AI研究では、ベンチマークの点数がよく話題になります。数学、コード、質問応答、長文脈、画像理解など、タスクごとにモデルの性能を測るためです。ベンチマークは比較に便利ですが、実務の成功をそのまま保証するものではありません。
理由は、実務の入力がきれいではないからです。社内文書には古い記述や例外規定があり、問い合わせには省略や誤字が入り、画像にはぼけや反射があり、データには欠損や表記ゆれがあります。ベンチマークで高得点でも、自社のデータや運用条件で評価しなければ、本当に使えるかは判断できません。
実務評価では、少なくとも次の観点を分けて確認します。
| 観点 | 確認すること |
|---|---|
| 正確性 | 正しい答えを出せるか |
| 根拠 | どの情報に基づいた回答か |
| 安全性 | 危険な出力や権限外の出力がないか |
| 安定性 | 入力が少し変わっても極端に崩れないか |
| コスト | 推論時間、料金、運用負荷が許容範囲か |
ベンチマークは、イメージとしては「整備された」模擬試験です。点数は比べやすいですが、本番の現場には誤字や欠損、古い資料といった、模擬試験には出てこない乱れが混ざります。図では、きれいなベンチマークでの高得点と、そうした乱れを含む実務データを並べ、正確性や根拠、権限、コストといった複数のものさしで見る必要があることを表しています。
特に生成AIでは、平均点だけでは足りません。1%の失敗でも、その失敗が顧客への誤案内、機密情報の漏えい、誤った医療判断につながるなら重大です。評価では、平均性能と失敗事例の両方を確認します。
13-5. データ中心の考え方
モデルの性能は、モデル構造だけでは決まりません。どのデータで学習したか、データに偏りがないか、ラベルが正しいか、古い情報が混ざっていないかが大きく影響します。
たとえば、採用選考の過去データに偏りがある場合、モデルはその偏りも学んでしまいます。顧客対応データに古い規約が混ざっていれば、生成AIが古い案内を出すかもしれません。画像認識で特定の環境の写真だけが多ければ、別の環境で性能が下がることがあります。
同じモデルでも、食べさせるデータの質が変われば結果は変わります。モデルの構造をいじる前に、ラベルの付け方をそろえたり、重複や古いデータを取り除いたりするだけで、成績が上がることは珍しくありません。図では、モデルは変えずに、周りのデータ側を整える工程を回して品質を上げていく考え方を表しています。
データ中心の機械学習では、モデルを変える前に、データの品質を確認します。ラベルの基準をそろえる、欠損や重複を扱う、古いデータを分ける、評価用データを本番に近づける、といった作業です。地味ですが、性能改善の多くはここから始まります。
13-6. MLOpsと継続的な監視
機械学習モデルは、本番で使い始めた後も、データの分布、予測性能、誤りの傾向、推論コストを監視します。
時間が経つと、学習時と本番時で入力データの分布が変わることがあります。これをデータドリフトと呼びます。また、入力と正解の関係そのものが変わるコンセプトドリフトもあります。ユーザーの行動、季節、価格、法律、サービス仕様が変われば、過去に良かったモデルが今も良いとは限りません。
モデルは学習時のデータをもとに作られます。モデル自体は、時間が経っただけでは劣化しません。ただし、世の中や利用環境が変わると学習時の前提が崩れ、性能が下がることがあります。だから、本番に出した後も性能や入力の傾向を見張り、ずれてきたら学習し直す、という手入れの仕組みが要ります。次の図は、データの準備から学習、評価、デプロイ、監視、再学習までを、止まらずに回り続ける輪として表しています。
MLOpsは、この流れを管理する考え方です。データ、モデル、評価、デプロイ、監視、再学習を継続的に扱います。生成AIでも同じで、プロンプト、検索対象文書、評価データ、ガードレール、利用ログの管理が必要になります。
14. 学び方
ここまでお疲れさまでした。最後に、同じ元文系として、どう進めるのかというおすすめをお伝えします。遠回りした自分が、こうすればよかったと思う道くらいに受け取ってください。
14-1. 数学は順番に戻って学ぶ
機械学習の数学は、最初から線形代数、微分、確率統計を全部深く学ばなくても進められます。最初は、一次関数、平均、割合、二乗、グラフの傾きから始めれば十分です。
| 機械学習で出る言葉 | 最初に押さえる数学 |
|---|---|
| 線形回帰 | 一次関数 |
| 損失関数 | 差、二乗、平均 |
| 勾配降下法 | グラフの傾き |
| 分類指標 | 割合 |
| ニューラルネットワーク | 足し算、掛け算、関数 |
数式を見たときは、まず記号を日本語に戻します。Σ は全部足す、n はデータ数、y は正解、ŷ は予測です。これだけでも、式をかなり扱えるようになります。
14-2. 実装は小さいデータから始める
理論だけを眺めても、モデルの癖はつかみにくいです。最初は小さい表データで、線形回帰、ロジスティック回帰、決定木、ランダムフォレストを動かすのが現実的です。
学ぶ順番としては、次の流れが無理なく進められます。
生成AIから入るのも、もちろんアリだと思います。ただ、自分の実感として、機械学習の土台を知らないまま生成AIだけを触っていた頃は、なぜ間違えるのか、なぜ評価が必要なのかがずっとモヤモヤしていました。線形回帰と分類まで戻ってみたら、今のAIの話もかなり腑に落ちたので、急がば回れで損はないと思います。
14-3. 手計算で一度だけ確認する
機械学習の式は、最初からプログラムに任せると中身が遠く感じます。最初の一度だけでよいので、手計算で小さな例を確認すると理解が深まります。
たとえば、広さだけで家賃を予測する式を作ります。
$$
家賃 = 0.2 \times 広さ + 3
$$
広さが30㎡なら、予測は9万円です。正解が10万円なら誤差は1万円です。二乗誤差なら1です。
この小さな計算を一度経験すると、損失関数が何をしているかが見えてきます。ニューラルネットワークも、基本は入力に重みをかけて足し、変換し、外れ具合を測り、重みを少し直す流れです。
面倒に感じるかもしれませんが、電卓でこの1回を手でなぞるだけで、式が急に自分ごとになります。自分も、ここを飛ばして分かった気になっていた間は、ずっと地に足がつきませんでした。
14-4. scikit-learnで基礎を固める
Pythonで最初に触るなら、機械学習ライブラリのscikit-learnが良い入口になります。表データ、前処理、モデル、評価、交差検証がまとまっており、線形モデルから木系モデルまで同じ流れで試せます。
最初に覚える流れはかなり短いです。
この流れは、モデルを変えても大きく変わりません。線形回帰をランダムフォレストに変えても、学習、予測、評価の考え方は同じです。最初はモデルの数を増やすより、同じデータで複数モデルを比べ、どこで差が出るかを確認します。
身構えるかもしれませんが、最初に覚える流れは6行くらいで、モデルを変えても大きくは変わりません。まずは1つのデータで線形回帰と決定木を動かして、点数を比べてみるだけで十分な一歩です。
14-5. 生成AIへ進む前に押さえること
生成AIは便利ですが、機械学習の基礎を飛ばすと、出力をどう評価するかでちょっと苦戦するかと思います。生成AIへ進む前に、少なくとも次の観点は押さえておくと後が楽になります。
| 観点 | 押さえる内容 |
|---|---|
| データ分割 | 学習、検証、テストを分ける理由 |
| 損失関数 | モデルが何を小さくしようとしているか |
| 評価指標 | 正解率だけでは足りない理由 |
| 過学習 | 学習データだけ良くなる危険 |
| 埋め込み | 意味の近さを数字で扱う考え方 |
| RAG | 外部文書を検索して回答に使う考え方 |
大規模言語モデルも、評価しないまま任せると事故につながります。機械学習の基礎は、生成AIを便利なツールとして使いこなしつつ、その出力を評価しながら付き合っていくための土台になるのではないかと、思います。
おわりに
機械学習は、特に元文系だととっつきにくいですよね、すごくよくわかります。しかし、ここまで確認したように、入門部分であれば、簡単な数学のレベルで理解できます。面白いと思っていただけたら、幸いです。
ここまでお付き合いいただきありがとうございます。
ではまた、お会いしましょう。
参考リンク
機械学習の基礎
- 機械学習集中講座 - Google for Developers
- 線形回帰: 勾配降下法 - Google for Developers
- scikit-learn User Guide
- Common pitfalls and recommended practices - scikit-learn
- Cross-validation: evaluating estimator performance - scikit-learn
- Metrics and scoring: quantifying the quality of predictions - scikit-learn
- r2_score - scikit-learn
- Probability calibration - scikit-learn
- Tuning the decision threshold for class prediction - scikit-learn
- Common pitfalls in the interpretation of coefficients of linear models - scikit-learn
- Production ML systems: Monitoring pipelines - Google for Developers
古典的な機械学習と深層学習
- Random Forests - Leo Breiman
- Learning representations by back-propagating errors - Rumelhart, Hinton, Williams
- Backpropagation - Foundations of Computer Vision
- ImageNet Classification with Deep Convolutional Neural Networks - NeurIPS
- Attention Is All You Need - arXiv
- Attention is not Explanation - ACL Anthology
生成AIと最新研究
- On the Opportunities and Risks of Foundation Models - arXiv
- Scaling Laws for Neural Language Models - arXiv
- Training Compute-Optimal Large Language Models - arXiv
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks - arXiv
- RAG and Generative AI - Azure AI Search
- Lost in the Middle: How Language Models Use Long Contexts - arXiv
- LoRA: Low-Rank Adaptation of Large Language Models - arXiv
- Training language models to follow instructions with human feedback - arXiv
- Direct Preference Optimization - arXiv
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding - arXiv
- LLaMA: Open and Efficient Foundation Language Models - arXiv
- DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning - arXiv
- DeepSeek-R1 incentivizes reasoning in LLMs through reinforcement learning - Nature
- Qwen3 Technical Report - arXiv
- Large Language Model Reasoning Failures - arXiv
- A Survey on Multimodal Large Language Models - arXiv
- Large Language Model Agent: A Survey on Methodology, Applications and Challenges - arXiv
- The 2026 AI Index Report - Stanford HAI


































































