1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

基礎から学ぶ 人工知能の教科書 第5章 章末問題

1
Last updated at Posted at 2020-07-17

はじめに

機械学習の勉強として、「基礎から学ぶ 人工知能の教科書」 を読んでいます。

この本の特徴は、章末問題にPythonの簡単なプログラムが載っていてるところです。

ここでは、それをRubyにて写経しています。

第5章 章末問題

neuralnet.rb
INPUTNO = 2
HIDDENNO = 2

def forward(wh, wo, hi, e)
  HIDDENNO.times do |i|
    u = 0.0
    INPUTNO.times do |j|
      u += e[j] * wh[i][j]
    end
    u -= wh[i][INPUTNO]
    hi[i] = f(u)
  end
  o = 0.0
  HIDDENNO.times do |i|
    o += hi[i] * wo[i]
  end
  o -= wo[HIDDENNO]
  f(o)
end

def f(u)
  return 1.0 if u >= 0
  0.0
end

wh = [[-2, 3, -1], [-2, 1, 0.5]]
wo = [-60, 94, -1]
e = [[0, 0], [0, 1], [1, 0], [1, 1]]
hi = [0] * (HIDDENNO + 1)

e.each do |i|
  puts "#{i}->#{forward(wh, wo, hi, i)}"
end

単純な階層型ニューラルネットの計算で学習なしですが、26行目のインデントに誤りがありますのでお気を付けください**(2019年9月25日 第1版第1刷発行)**

error.py
for i in range(HIDDENNO):     #誤

    for i in range(HIDDENNO): #正

ご存知の通り、Pythonでのインデント誤りは致命的と思われますが、幸い、オーム社の書籍ページよりサンプルコードをダウンロードすることができます。
基礎から学ぶ 人工知能の教科書

step.rb
def f(u)
  return 1.0 if u >= 0
  0.0
end

 # 出力例
[0, 0]->0.0
[0, 1]->1.0
[1, 0]->1.0
[1, 1]->0.0

伝達関数fはステップ関数

Sigmoid.rb
def f(u)
  1 / (1 + Math::E ** -u)
end

 # 出力例
[0, 0]->0.0006265270712940932
[0, 1]->0.6434453861326787
[1, 0]->0.0003334059232134918
[1, 1]->8.512503196901111e-16

伝達関数fはシグモイド関数

ramp.rb
def f(u)
  return u if u >= 0
  0.0
end

 # 出力例
[0, 0]->0.0
[0, 1]->1.0
[1, 0]->0.0
[1, 1]->0.0

伝達関数fはランプ関数

まとめ

  • 第5章まで読んだ
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?