[メモ]ゼロから作るDeep Learning 1章・2章

· ·

ゼロから作る Deep Learning ―Python で学ぶディープラーニングの理論と実装」は以前途中まで読んでいたけれども復習もかねて。

1 章 Python 入門 🔗

Python 環境は docker-compose で構築。ローカルの work フォルダを同期。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
version: "3"
services:
  notebook:
    image: jupyter/datascience-notebook
    ports:
      - "8888:8888"
    environment:
      - JUPYTER_ENABLE_LAB=yes
    volumes:
      - ./work:/home/jovyan/work
    command: start-notebook.sh --NotebookApp.token=''

2 章 パーセプトロン 🔗

  • ニューラルネットワークの起源
  • $x_1, x_2$ : 入力信号
  • $y$ : 出力信号
  • $w_1, w_2$ : 重み(weight)
  • 入力信号に固有の重みが乗算( $w_1x_1$, w_2x_2$ )
  • 総和がある限界値を超えた場合のみ 1 を出力。その閾値を $\theta$ という記号で表す

$$ y=\begin{cases} 0 & (w_1 x_1 +w_2 x_2 \leq \theta )\\ 1 & ( w_1 x_1 +w_2 x_2 >\theta )\end{cases}$$

  • 重み = その入力信号の重要性をコントロールする要素
  • 学習とは、適切なパラメエータを決める作業であり、人が行う仕事は、パーセプトロンの構造(モデル)を考え、コンピュータに学習データを与えることになる

論理回路(AND) 🔗

1
2
3
4
5
6
7
def AND(x1, x2) :
  w1, w2, theta = 0.5, 0.5, 0.7
  tmp = x1*w1 + x2*w2
  if tmp <= theta:
    return 0
  elif tmp > theta :
    return 1
  • $\theta$ -> $-b$ (バイアス)と置くと

$$ y=\begin{cases} 0 & (w_1 x_1 +w_2 x_2 + b \leq 0 )\\ 1 & ( w_1 x_1 +w_2 x_2 + b > 0)\end{cases}$$

1
2
3
4
5
6
7
8
9
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 # 0.5*x1 + 0.5*x2
  if tmp <= 0:
    return 0
  elif tmp > 0 :
    return 1

論理回路(NAND) 🔗

NAND は重みとバイアスだけ符号を変える

1
2
3
4
5
6
7
8
9
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
  if tmp <= 0:
    return 0
  elif tmp > 0 :
    return 1

論理回路(OR) 🔗

バイアスのみ変更

1
2
3
4
5
6
7
8
9
def AND(x1, x2) :
  x = np.array([x1, x2])
  w = np.array([0.5, 0.5])
  b = -0.2
  tmp = np.sum(w * x) + b
  if tmp <= 0:
    return 0
  elif tmp > 0 :
    return 1
  • パーセプトロンで XOR は表現不可。図で考えた場合直線で 0,1 を分けることができない
  • パーセプトロンは、層を重ねること(そうを深くすること)ができ、柔軟な表現が可能となる(多層パーセプトロン)
comments powered by Disqus