DEEP LEARNING / LESSON 06

PyTorchで学習の準備

テンソル、勾配、更新。学習の流れを一度つなげてみよう。

図から学ぶ
PyTorchで学習の準備を表すキャラクターと学習内容のイラスト
TODAY'S GOAL

この回でつかむこと

予測→損失→勾配→更新の順番を追える。

ことばの窓
01 / SEE THE IDEA

PyTorchで学習の準備って何だろう?

PyTorchのtensorは、一つまたは複数の数値をまとめて扱うデータ形式です。requires_grad=Trueにすると、計算をたどって勾配を求められます。勾配は『どちらへ少し動かすと損失が変わるか』の手掛かりです。

あおい

値を入れただけなのに、どうやって上手になるの?

AI先生

予測と正解のずれから、どの値を直すとよいか計算するんだよ。

はる

勾配を使ってパラメータを更新するのですね。

損失を手掛かりに更新。予測2と正解6を比べる。損失16から勾配を求める。重みを直してもう一度。
図6 損失を手掛かりに更新。予測2と正解6を比べる。損失16から勾配を求める。重みを直してもう一度。

ROBORON ピコン! ずれを見て、次の予測を少し直してみよう。

図を読むと

学習は、同じデータを丸暗記する操作ではなく、ずれを小さくする反復。 PyTorchのtensorは、一つまたは複数の数値をまとめて扱うデータ形式です。requires_grad=Trueにすると、計算をたどって勾配を求められます。勾配は『どちらへ少し動かすと損失が変わるか』の手掛かりです。

小さなコードで確かめるまず結果を予想しよう
import torch
w = torch.tensor(1.0,requires_grad=True)
loss = (w*2-6)**2
loss.backward()
print(w.grad.item())
実行結果-16.0

なぜそうなる? wを少し増やすと損失が下がる方向なので、勾配は負です。

02 / GO ONE STEP FURTHER

更新を1回だけ試す

勾配が出たら、学習率を掛けて重みを直します。繰り返し学習では、前回の勾配を消してから次を計算します。

with torch.no_grad():
    w -= 0.1*w.grad
print(round(w.item(),2))
print(round((w*2-6).pow(2).item(),2))
実行結果w=2.6、損失0.64

ここに注目 最初の損失16から小さくなりました。学習率を大きくしすぎると逆に不安定になります。

03 / YOUR TURN

予想して、理由を話そう

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

更新の前に必要なのは?

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

04 / TRY ON COLAB

Colabで試してみよう

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

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

COFFEE BREAK

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

AI先生

AI先生:ROBORONの歩幅が大きすぎると、目標を通り越して行ったり来たり。学習率も似ているね。

KEY TERMS

この回の重要な用語

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

テンソル
PyTorchで数や配列を扱う基本データです。
損失
予測と正解のずれを一つの値で表したものです。
勾配
値を少し動かしたとき、損失がどう変わるかを示す量です。
学習率
1回の更新で重みをどの程度動かすかを決める値です。