DEEP LEARNING / LESSON 05

1つのニューロンをのぞく

入力に重みを掛け、足し合わせる。学習の最小単位を追いかけよう。

図から学ぶ
1つのニューロンをのぞくを表すキャラクターと学習内容のイラスト
TODAY'S GOAL

この回でつかむこと

y = wx + b の各値の役割を説明できる。

ことばの窓
01 / SEE THE IDEA

1つのニューロンをのぞくって何だろう?

入力xに重みwを掛け、バイアスbを足すと出力yになります。重みは入力の影響の大きさ、バイアスは基準位置を調整します。

あおい

ニューロンって、頭の中の細胞をそのまま入れるの?

AI先生

脳の細胞そのものを入れるわけではないんだよ。生物のしくみをヒントにした、数を掛けて足す計算なんだ。

はる

重みとバイアスを変えると、同じ入力でも出力が変わります。

一つの出力の作り方。入力3に重み2を掛ける。バイアス1を足す。出力は7になる。
図5 一つの出力の作り方。入力3に重み2を掛ける。バイアス1を足す。出力は7になる。

あおい 3+2+1じゃなくて、まず3×2なんだね!

図を読むと

1つのニューロンの基本計算。重みとバイアスは学習で変わる。 入力xに重みwを掛け、バイアスbを足すと出力yになります。重みは入力の影響の大きさ、バイアスは基準位置を調整します。

小さなコードで確かめるまず結果を予想しよう
import torch
from torch import nn
layer = nn.Linear(1,1)
with torch.no_grad():
    layer.weight.fill_(2.0); layer.bias.fill_(1.0)
x = torch.tensor([[3.0]])
print(layer(x).item())
実行結果7.0

なぜそうなる? 2×3+1をPyTorchのLinear層が計算します。ここでは値を手で設定しました。

02 / GO ONE STEP FURTHER

ReLUで表せる形を増やす

掛け算と足し算だけを重ねても、表せる関係には限りがあります。途中にReLUのような活性化関数を入れると、直線だけでは表しにくい境界も扱えるようになります。

relu = nn.ReLU()
print(relu(torch.tensor([-2.0, 3.0])))
実行結果tensor([0., 3.])

ここに注目 ReLUは負の値を0にし、正の値をそのまま通します。

03 / YOUR TURN

予想して、理由を話そう

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

x=4、w=2、b=1なら?

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

04 / TRY ON COLAB

Colabで試してみよう

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

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

COFFEE BREAK

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

AI先生

AI先生:温度センサーの値にも重みを付けられるけれど、重みが大きいだけで『原因』と決めつけないでね。

KEY TERMS

この回の重要な用語

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

ニューロン
入力を重み付きでまとめ、次の値を作る計算単位です。
重み
入力が出力に与える影響を調整する値です。
バイアス
重み付きの和へ加え、出力の基準をずらす値です。
ReLU
Rectified Linear Unit。負の値を0にする代表的な活性化関数です。