クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ニューラルネットワークの層の役割

このレッスンのあとで: ニューラルネットワークの各層が何をするかを説明できる。

50分のレッスンコマンド2件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

なぜ層を何枚も重ねるのか

ディープラーニング(深層学習)は、層を重ねたニューラルネットワークで答えの出し方を学ぶ方法です。層ごとに何をしているかがわかると、中身は暗い箱ではなくなります。

自転車の貸出店が、気温と雨と曜日から、明日が混むかどうかを知りたいとします。入力は3つの数で、答えは1つです。その間で層が何をするかを見ていきます。

このレッスンのゴール

メモ

ニューラルネットワークの各層が何をするかを説明できる。

キーワード

ことばいみれい
ニューロン重みをかけた入力を足して、数を1つ出すもの
重み1つの入力がどれだけ効くかを表す数
バイアス合計にそのまま足す数
活性化関数合計を、次の層へ渡す数に変える決まりReLU
隠れ層入力と出力のあいだにある層
出力層答えを出す最後の層

学生が入力するセルは、このプレビューでは空白です。

ニューロンは入力を重みで足し合わせる

ニューロンは、入力を1つずつ受け取り、それぞれに重みをかけて足します。最後にバイアスを足すと、合計が1つ出ます。

重みが大きい入力ほど、答えに強く効きます。重みがマイナスなら、その入力は逆の向きに押します。

例: 1日分の入力を足し合わせる

入力値重みかけた値
気温(10度単位)236
雨(cm)1-2-2
週末(平日は0、週末は1)111
バイアス-1
合計4

学生が入力するセルは、このプレビューでは空白です。

同じ計算を Python で

コード: python
# 表の例と同じ計算です。
inputs = [2, 1, 1]
weights = [3, -2, 1]
bias = -1
total = bias
for n in range(3):
    total = total + inputs[n] * weights[n]
print("合計:", total)
# 雨の重みを -2 から -5 に変えて、もう一度実行します。
# 合計はいくつになりますか。

入力の数は表の列で決まる

ラボの hires.csv は、1日が1行の表です。ニューロンの入力は、この表の列から選びます。

次のコマンドは、ファイルの1行目を表示します。そこに列の名前が並んでいて、気温、雨、曜日の列が見つかります。

列の名前を見る

コマンド
docker exec jupyter head -n 1 hires.csv

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

活性化関数が合計を次へ渡す形にする

ニューロンの合計は、そのままでは次の層へ渡しません。活性化関数を通して、別の数に変えます。

ReLU(レルー)は、0より小さい数を0にし、ほかはそのまま返します。ステップ関数は、0より大きければ1、そうでなければ0を返します。切り取り関数は、0より下を0、1より上を1にします。

例: 5つの合計を3つの関数に通す

合計ステップ関数ReLU切り取り関数
-3000
-1000
0000
0.510.50.5
2121

学生が入力するセルは、このプレビューでは空白です。

層は入力層、隠れ層、出力層に分かれる

ニューロンを横に並べたものが層です。入力層は、気温や雨などの値を受け取るだけです。隠れ層は計算をして、次の層へ渡します。出力層は、最後の答えを出します。

層の中のニューロンは、前の層のすべての値を受け取ります。それぞれが自分の重みとバイアスを持ちます。

重みの数は掛け算で数えられる

入力3つ、隠れ4つ、出力2つなら、重みは 3×4 と 4×2 で20個です。バイアスはニューロンごとに1つなので、4+2 の6個です。

次のコマンドは、この数え方を計算します。重みとバイアスの数が、ネットワークの大きさの目安になります。

重みとバイアスの数を数える

コマンド
docker exec jupyter python3 -c "print(3 * 4 + 4 * 2, 4 + 2)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

層を重ねれば、活性化関数がなくても賢くなると考えがちです。しかし、層の間に活性化関数がないと、何層重ねても1層と同じ計算にしかなりません。層の間には必ず活性化関数を入れます。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。