VISION / LESSON 14

学んだ特徴を新しい課題に生かす

学習済みモデルが見つけた特徴を再利用し、新しい課題に取り組もう。

図から学ぶ
学んだ特徴を新しい課題に生かすを表すキャラクターと学習内容のイラスト
TODAY'S GOAL

この回でつかむこと

特徴抽出部の固定と新しい分類部の役割を言える。

ことばの窓
01 / SEE THE IDEA

学んだ特徴を新しい課題に生かすって何だろう?

転移学習は、ある課題で学んだモデルを別の課題へ使う考え方です。特徴抽出部を固定して新しい分類部だけ学習する方法があります。全体を再学習する方法はファインチューニングと呼ばれます。

あおい

ゼロから全部学び直さなくてもいいの?

AI先生

そうなんだよ。前の課題で学んだ特徴を借りる方法が転移学習だね。

はる

どの層を固定し、どの層を学習するかが重要です。

学んだ特徴を再利用。前半の特徴抽出部を固定。新しい分類部を学習。課題が似ているかも確認。
図14 学んだ特徴を再利用。前半の特徴抽出部を固定。新しい分類部を学習。課題が似ているかも確認。

はる 固定した部分も計算には使い、重みの更新だけ止めます。

図を読むと

転移学習では、すでに学んだ特徴抽出部を再利用できる。 転移学習は、ある課題で学んだモデルを別の課題へ使う考え方です。特徴抽出部を固定して新しい分類部だけ学習する方法があります。全体を再学習する方法はファインチューニングと呼ばれます。

小さなコードで確かめるまず結果を予想しよう
import torch
from torch import nn
features = nn.Sequential(nn.Linear(2,8),nn.ReLU())
head = nn.Linear(8,2)
for parameter in features.parameters():
    parameter.requires_grad = False
print(sum(p.requires_grad for p in features.parameters()))
実行結果0

なぜそうなる? 特徴抽出部のパラメータは更新対象から外れました。

02 / GO ONE STEP FURTHER

新しい分類部だけ選ぶ

固定した部分も推論には使いますが、更新するのは新しい分類部の重みだけです。

model = nn.Sequential(features,head)
optimizer = torch.optim.SGD(head.parameters(),lr=0.1)
print(model(torch.zeros(1,2)).shape)
実行結果torch.Size([1, 2])

ここに注目 出力は2クラス分です。ノートブックでは小さな合成データを使い、固定前後を観察します。

03 / YOUR TURN

予想して、理由を話そう

答えを選んで、説明を確かめよう。外れても発見が一つ増えるよ。

特徴抽出部を固定すると?

答えを選ぶと理由が表示されます。

04 / TRY ON COLAB

Colabで試してみよう

コードの実行はColaboratoryの実行環境で行います。まずノートブックを保存し、Colabで「ファイル → ノートブックをアップロード」から開いてください。上から順に実行し、最後に値を変えてみましょう。

保存ボタンを押しても画面は切り替わりません。通常はブラウザの「ダウンロード」フォルダに .ipynb が保存されます。見つからない場合はダウンロード履歴を確認してください。Colabの実習は小さな例から始められます。

COFFEE BREAK

身近な技術とつなげてみよう

AI先生

AI先生:別の場所で学んだ道具の使い方を、新しい仕事にも生かす感じだね。ただし題材が大きく違えば、借りた特徴が合わないこともあるよ。

KEY TERMS

この回の重要な用語

本文で出会った言葉を、ここで意味と一緒に振り返ろう。上の「ことばの窓」からも説明を開けるよ。

転移学習
先に学んだモデルの特徴を別の課題で再利用する方法です。
特徴抽出部
入力から分類に役立つ表現を作る部分です。
ファインチューニング
学習済みの重みを初期値にして、必要な層を改めて学習することです。