【ゼロから作るDeap Learning】2.1~2.3

181 Views

April 28, 25

スライド概要

profile-image

AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

2025年度前期輪読会 #2 (2025/4/28) 第2章 パーセプトロン (〜2.3節まで) 京都大学大学院理学研究科 M1 松田 拓巳 0

2.

アジェンダ n パーセプトロンとは n 単純パーセプトロン n パーセプトロンの限界 n 多層パーセプトロン n 普遍性定理 1

3.

この節の目標 パーセプトロンの基本を理解し、ニューラルネットワークへの第一歩を踏み出す 本節のゴール パーセプトロンの位置づけ パーセプトロンの仕組みを理解し、 • 1957年に考案された古典的なアルゴリズム 簡単な論理回路を実装できるようになる。 • ニューラルネットワークの起源 • 基本的な考え方が詰まっている 2

4.

パーセプトロンって何? パーセプトロンは、重み付き合計が閾値を超えるかで分類する、基本の線形モデル 問題設定 パーセプトロン 入力 𝑥! , 𝑥" が与えられたとき、それが「0」に 入力情報に重みをつけて足し合わせ、その合計が特 属するか「1」に属するかを分類したい 定の基準(閾値)を超えるかどうかで2つのカテゴ リに分類するモデルを考える 𝑥" 𝑥! 𝑤! 𝑥! 𝑥" >𝜃? 𝑦 𝑤" 3

5.

パーセプトロンの仕組み 各入力の重要度(重み)を加味した合計が、ある基準(閾値)を超えたら「1(信号を流す)」と判断 Step1 重み付き和の計算 Step2 Step3 閾値θとの比較 出力𝒚の決定 各入力𝑥# にその重み𝑤# をかけ 計算した「重み付き和」が、 もし𝑤! 𝑥! + 𝑤" 𝑥" > 𝜃なら→ 𝑦 = 1 (発火する) て、全て足し合わせる。 設定された「閾値θ」より大 もし𝑤! 𝑥! + 𝑤" 𝑥" ≤ 𝜃なら→ 𝑦 = 0 (発火しない) 𝑤! 𝑥! + 𝑤" 𝑥" きいか? 𝑥! 𝑥" 𝑤! >𝜃? 𝑦 𝑤" 𝑦=# 1, 0, 𝑤! 𝑥! + 𝑤" 𝑥" > 𝜃 𝑤! 𝑥! + 𝑤" 𝑥" ≤ 𝜃 4

6.

パーセプトロンで論理回路を表現 ‒ ANDゲートの場合 パーセプトロンは、適切な「重み」と「閾値」を設定することでANDゲートの動きを再現できる ANDゲート パラメータ設定例 2つの入力が「両方とも1」の時だけ出力が1になる 𝑤! = 0.5, 𝑤" = 0.5, 𝜃 = 0.7 として試す。 𝑼 𝑨 𝑩 𝒙𝟏 0 𝒙𝟐 0 𝒚 0 計算確認 1 0 0 𝑥! , 𝑥" = 0,0 ⟹ 0.5×0 + 0.5×0 = 0 ≤ 0.7 ⟹ 𝑦 = 0 0 1 0 1 1 1 𝑥! , 𝑥" = 1,0 ⟹ 0.5×1 + 0.5×0 = 0.5 ≤ 0.7 ⟹ 𝑦 = 0 𝑥! , 𝑥" = 0,1 ⟹ 0.5×0 + 0.5×1 = 0.5 ≤ 0.7 ⟹ 𝑦 = 0 𝑥! , 𝑥" = 1,1 ⟹ 0.5×1 + 0.5×1 = 1 > 0.7 ⟹ 𝑦 = 1 このような出力をする関数を パーセプトロンで表現したい このパラメータでANDゲートが実現できた! 5

7.

パラメータの組み合わせは無限大 条件を満たす「重み」と「閾値」の組み合わせは無数に存在する ANDゲートを実現する (𝑤! , 𝑤" , 𝜃) の組み合わせは、実は無限にある! 他の例 重要なこと 𝑤! = 0.5, 𝑤" = 0.5, 𝜃 = 0.8 でもANDゲートになる。 設定したパラメータが、目的の動作(今回ならAND 𝑤! = 1.0, 𝑤" = 1.0, 𝜃 = 1.0 でもANDゲートになる。 ゲートの真理値表)を満たしているかが重要 (※各自、計算して確かめてみてください) 機械学習では、この「適切なパラメータを探す作業」を コンピュータがデータから自動で学習する 6

8.

重みとバイアス 閾値(θ) を「バイアス(b)」という形に書き換えると、後の計算や実装がよりシンプルになる 元の判定式 (𝑦 = 1の条件) バイアスを用いた式 𝑤! 𝑥! + 𝑤" 𝑥" > 𝜃 𝑤! 𝑥! + 𝑤" 𝑥" + 𝑏 > 0 式変形 𝑦=# 𝑤! 𝑥! + 𝑤" 𝑥" − 𝜃 > 0 1, 0, 𝑤! 𝑥! + 𝑤" 𝑥" + 𝑏 > 0 𝑤! 𝑥! + 𝑤" 𝑥" + 𝑏 ≤ 0 ここで、𝑏 = −𝜃 と置き換える(この𝑏をバイアスと呼ぶ) 𝑤! 𝑥! + 𝑤" 𝑥" + 𝑏 > 0 判定基準が「0」になった! 7

9.

バイアスの役割 バイアスはニューロンがどれだけ「発火しやすいか(出力1になりやすいか)」を調整する役割を持つ パラメータの役割 重み(𝒘𝟏 , 𝒘𝟐 ) 各入力信号の 重要度 を調整。 バイアス(𝒃) ニューロン全体の発火しやすさ(出力が1になるためのハードル)を調整。 バイアスの値による影響 bが大きい(値がプラスに近い、例:-0.1) →ニューロンは発火しやすい。( 𝑤! 𝑥! + 𝑤" 𝑥" が少しでも 0.1 を超えれば発火) bが小さい(値がマイナスに大きい、例:-20.0) →ニューロンは発火しにくい。( 𝑤! 𝑥! + 𝑤" 𝑥" が 20 を超えないと発火しない) 8

10.
[beta]
PythonでANDゲートを実装してみよう
NumPyライブラリを使うと、重み付き和とバイアスの計算を簡潔に実装できる
ANDゲートのパラメータ(バイアス形式)

𝑤! = 0.5, 𝑤" = 0.5, 𝑏 = −0.7 として試す。
(∵ 𝜃 = 0.7だったので𝑏 = −0.7)

import numpy as np
def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7

# 入力を配列に
# 重みを配列に
# バイアス

# ① 重み付き和 + バイアス を計算
tmp = np.sum(w * x) + b
# np.sum(w * x) は w1*x1 + w2*x2
# ② 0より大きいか判定
if tmp <= 0:
return 0
else:
return 1

9

11.

他のゲートへの応用(NAND, OR) AND、NAND、ORゲートは、同じパーセプトロンの構造のまま、パラメータ(重みとバイアス)を変えるだけで実現可 NANDゲート パラメータ設定例 2つの入力が「両方とも1」の時だけ出力が0になる 𝑤! = −0.5, 𝑤" = −0.5, 𝑏 = 0.7 として試す。 𝑼 𝑨 𝑩 𝒙𝟏 0 𝒙𝟐 0 𝒚 1 計算確認 1 0 1 𝑥!, 𝑥" = 0,0 ⟹ −0.5×0 − 0.5×0 + 0.7 = 0.7 > 0 ⟹ 𝑦 = 1 0 1 1 1 1 0 𝑥!, 𝑥" = 1,0 ⟹ −0.5×1 − 0.5×0 + 0.7 = 0.2 > 0 ⟹ 𝑦 = 1 𝑥!, 𝑥" = 0,1 ⟹ −0.5×0 − 0.5×1 + 0.7 = 0.2 > 0 ⟹ 𝑦 = 1 𝑥!, 𝑥" = 1,1 ⟹ −0.5×1 − 0.5×1 + 0.7 = −0.3 ≤ 0 ⟹ 𝑦 = 0 このような出力をする関数を パーセプトロンで表現したい このパラメータでNANDゲートが実現できた! 10

12.

他のゲートへの応用(NAND, OR) AND、NAND、ORゲートは、同じパーセプトロンの構造のまま、パラメータ(重みとバイアス)を変えるだけで実現可 ORゲート パラメータ設定例 2つの入力が「両方とも0」の時だけ出力が0になる 𝑤! = 0.5, 𝑤" = 0.5, 𝑏 = −0.2 として試す。 𝑼 𝑨 𝑩 𝒙𝟏 0 𝒙𝟐 0 𝒚 0 計算確認 1 0 1 𝑥!, 𝑥" = 0,0 ⟹ 0.5×0 + 0.5×0 − 0.2 = −0.2 ≤ 0 ⟹ 𝑦 = 0 0 1 1 1 1 1 𝑥!, 𝑥" = 1,0 ⟹ 0.5×1 + 0.5×0 − 0.2 = 0.3 > 0 ⟹ 𝑦 = 1 𝑥!, 𝑥" = 0,1 ⟹ 0.5×0 + 0.5×1 − 0.2 = 0.3 > 0 ⟹ 𝑦 = 1 𝑥!, 𝑥" = 1,1 ⟹ 0.5×1 + 0.5×1 − 0.2 = 0.8 > 0 ⟹ 𝑦 = 1 このような出力をする関数を パーセプトロンで表現したい このパラメータでORゲートが実現できた! 11

13.

まとめ パーセプトロンは、パラメータを変えるだけで様々な動作を実現できる、ニューラルネットワークに通じる基本の考え方 パーセプトロンとは • 入力に「重み」付けして合計し、「バイアス」と比較 (基準は0) して出力を決める。 • (本質的には、データを直線で2つに分ける線形分類器) • (神経細胞の単純なモデル化) 重要なポイント • 構造が同じでも パラメータ(𝒘, 𝒃)を変える だけで、振る舞い(AND, NAND, OR)を変えられる! • 「適切なパラメータを見つける」こと(=学習)が非常に重要。 限界 • 単純なパーセプトロンは 線形分離可能な問題 しか解けない→この限界を超えるために 多層パーセプトロン へと発展 12