【トピックス】 人工知能でできること,人工知能の歴史,人工知能による社会の変化, 人工知能の種類,データサイエンス,機械学習, ニューラルネットワーク,探索,知識表現,プロダクションシステム,Prolog,自然言語処理
大学で使用した自作の教材を,手直しの上公開している. クリエイティブ・コモンズ BY NC SA.
【目次】
【サイト内の関連ページ】
SlideShare: https://www.slideshare.net/kunihikokaneko1/aa1pptx
トピックス:人工知能でできること,人工知能の種類,データサイエンスでできること,人工知能の現状,人工知能による社会の変化
YouTube 動画: https://www.youtube.com/watch?v=O2Q2ym3hU54
【外部ページへのリンク】
人工知能のデモサイト
作者に感謝します.
SlideShare: https://www.slideshare.net/kunihikokaneko1/aa2-ai
トピックス: 表計算ソフトウェア Excel,散布図(Excel を使用),合計、平均(Excel を使用),分布、密度(Excel を使用),人工知能による分類,特徴抽出,人工知能による生成
YouTube 動画: https://www.youtube.com/watch?v=bJjGqTGXUZI
Excel ファイル(各自の演習に活用)
【外部ページへのリンク】
人工知能のデモサイト
SlideShare: https://www.slideshare.net/kunihikokaneko1/aa3pptx
トピックス:政府統計データ,クロス集計表(Excel を使用),相関(Excel を使用),平均,誤差,オープンデータ,
YouTube 動画: https://www.youtube.com/watch?v=JfsXT9ZQefA
Excel ファイル(各自の演習に活用)
【外部ページへのリンク】
資料で出てくるサイト
SlideShare: https://www.slideshare.net/kunihikokaneko1/aa4pptx
トピックス:機械学習,教師あり学習,教師なし学習,訓練データ,クラスタ分析,線形近似,最適化
YouTube 動画: https://www.youtube.com/watch?v=yK3A4I9phu8
Excel ファイル(各自の演習に活用)
Python プログラム
4-7. 最適化の用途
謝辞:https://docs.scipy.org/doc/scipy/tutorial/optimize.html のプログラムをそのまま使用しています.
import numpy as np from scipy.optimize import minimize def rosen(x): """The Rosenbrock function""" return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0) x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2]) res = minimize(rosen, x0, method='nelder-mead', options={'xtol': 1e-8, 'disp': True}) print(res.x)
SlideShare: https://www.slideshare.net/kunihikokaneko1/aa5-251817395
トピックス:深層学習とニューラルネットワーク,ニューロン,活性化,結合の重み,活性化関数,伝搬,ニューラルネットワークを用いた分類,ューラルネットワークの学習
YouTube 動画: https://www.youtube.com/watch?v=spEQ_kztHAQ
Excel ファイル(各自の演習に活用)
SlideShare: https://www.slideshare.net/kunihikokaneko1/aa6-251926288
トピックス:分類を行うニューラルネットワーク、ニューラルネットワークの作成、ニューラルネットワークの学習、学習曲線、学習不足、過学習、学習のバリエーション、自己学習、強化学習
YouTube 動画: https://www.youtube.com/watch?v=WYoevH_C1Is
今回説明したプログラムは,Google Colaboratory のノートブックで公開している.
Google Colaboratory のページ: https://colab.research.google.com/drive/18Nf9FPFhOvx8_V30z8PdBD2kcyDap8b7?usp=sharing
このリンクをクリックすると,Google Colaboratory のノートブックが開く. そして,Google アカウントでログインすると,Google Colaboratory のノートブック内のコードを実行することができる.
SlideShare: https://www.slideshare.net/kunihikokaneko1/aa7-251926316
トピックス:画素、画像、画像データ、画像分類システム、画像分類を行うニューラルネットワーク、ニューラルネットワークの作成、ニューラルネットワークの学習、MNIST データセット、Fashion-MNIST データセット
YouTube 動画: https://www.youtube.com/watch?v=Qh-pu3Fvvuc
今回説明したプログラムは,Google Colaboratory のノートブックで公開している.
Google Colaboratory のページ: https://colab.research.google.com/drive/1IfArIvhh-FsvJIE9YTNO8T44Qhpi0rIJ?usp=sharing
このリンクをクリックすると,Google Colaboratory のノートブックが開く. そして,Google アカウントでログインすると,Google Colaboratory のノートブック内のコードを実行することができる.
SlideShare: https://www.slideshare.net/kunihikokaneko1/8-252036971
トピックス:ニューラルネットワークの性質,ドロップアウト,コンピュータビジョン,物体検出,セグメンテーション,顔情報処理,キーポイント,姿勢推定,画像分類システム,MNIST データセット
YouTube 動画: https://www.youtube.com/watch?v=8e6YqUl32gQ
今回説明したプログラムは,Google Colaboratory のノートブックで公開している.
Google Colaboratory のページ: https://colab.research.google.com/drive/1-UWl-WEPmmNo-S_O17E5XPkF4tphE6xz?usp=sharing
Google Colaboratory のページ: https://colab.research.google.com/drive/1p98R2XpYcZsz-GZ84mFbw3v9H7AStz8e?usp=sharing
このリンクをクリックすると,Google Colaboratory のノートブックが開く. そして,Google アカウントでログインすると,Google Colaboratory のノートブック内のコードを実行することができる.
SlideShare: https://www.slideshare.net/kunihikokaneko1/aa9-252037023
トピックス:人工知能の種類、知的なゲームのルール、状態空間表現
YouTube 動画: https://www.youtube.com/watch?v=ftSktLFJ3y4
この回で学ぶこと.
GDB online: https://www.onlinegdb.com/
右上の「language」で「Python 3」を選ぶこと.
プログラムの実行開始は「Run」,実行停止は「Stop」
Python プログラムのソースコード
a = 0 while(True): print('a = %d' % a) r = int(input()) if (r == 1) and (a < 21): a = a + 1 if (r == 2) and (a < 21): a = a + 2 if (r == 3) and (a < 21): a = a + 3
GDB online: https://www.onlinegdb.com/
右上の「language」で「Python 3」を選ぶこと.
プログラムの実行開始は「Run」,実行停止は「Stop」
Python プログラムのソースコード
def computer(a): if( a == 1 ): return 3 elif( a == 2 ): return 2 elif( a == 3 ): return 1 elif( a == 5 ): return 3 elif( a == 6 ): return 2 elif( a == 7 ): return 1 elif( a == 9 ): return 3 elif( a == 10 ): return 2 elif( a == 11 ): return 1 elif( a == 13 ): return 3 elif( a == 14 ): return 2 elif( a == 15 ): return 1 elif( a == 17 ): return 3 elif( a == 18 ): return 2 elif( a == 19 ): return 1 else: return 0 def move(a, r): if (r == 1) and (a < 21): a = a + 1 if (r == 2) and (a < 21): a = a + 2 if (r == 3) and (a < 21): a = a + 3 return a a = 0 while(True): print('a = %d' % a) r = int(input()) a = move(a, r) print('a = %d' % a) r = computer(a) print('computer: %d' % r) a = move(a, r)
SlideShare: https://www.slideshare.net/kunihikokaneko1/aa10-252043660
トピックス:総当たり、総当たりのパス、状態空間表現での総当たり、パスと木、Python による総当たり
YouTube 動画: https://www.youtube.com/watch?v=o_Ms27QaSsg
この回で学ぶこと.
GDB online: https://www.onlinegdb.com/
右上の「language」で「Python 3」を選ぶこと.
プログラムの実行開始は「Run」,実行停止は「Stop」
Python プログラムのソースコード
import itertools import sys def move(x, y, r): success = False if (r == 1) and (x < 1): x = x + 1 success = True if (r == 2) and (x > 0): x = x - 1 success = True if (r == 3) and (y < 2): y = y + 1 success = True if (r == 4) and (y > 0): y = y - 1 success = True return(x, y, success) nsteps = 3 seq = [1, 2, 3, 4] success = False for j in list(itertools.product(seq, repeat=nsteps)): x, y = 0, 0 for i in j: x, y, success = move(x, y, i) if(not(success)): break if(success): print("%s %d %d" % (str(j), x, y))
GDB online: https://www.onlinegdb.com/
右上の「language」で「Python 3」を選ぶこと.
プログラムの実行開始は「Run」,実行停止は「Stop」
Python プログラムのソースコード
パスの長さ 2 で,総当りで調べるプログラム
import itertools import sys def move(x, y, r): success = False if (r == 1) and (x < 4): x = 4 success = True if (r == 2) and (x > 0): x = 0 success = True if (r == 3) and ((x + y) >= 3) and (y < 3): x, y = x + y - 3, 3 success = True if (r == 4) and ((x + y) <= 3) and (x > 0): x, y = 0, x + y success = True if (r == 5) and (y < 3): y = 3 success = True if (r == 6) and (y > 0): x = 0 success = True if (r == 7) and ((x + y) >= 4) and (x < 4): x, y = 4, x + y - 4 success = True if (r == 8) and ((x + y) <= 4) and (y > 0): x, y = x + y, 0 success = True return(x, y, success) nsteps = 2 seq = [1, 2, 3, 4, 5, 6, 7, 8] success = False for j in list(itertools.product(seq, repeat=nsteps)): x, y = 0, 0 for i in j: x, y, success = move(x, y, i) if(not(success)): break if(success): print("%s %d %d" % (str(j), x, y))
パスの長さ 3 の総当りにより,ゴール状態にできるかを調べるプログラム
import itertools import sys nsteps = 3 goal = (3, 0) path=[1,2,3,4,5,6,7,8] for j in list(itertools.product(path, repeat=nsteps)): x, y = 0, 0 for i in j: if i == 1 and x < 4: x, y = 4, y elif i == 2 and y < 3: x, y = x, 3 elif i == 3 and x > 0: x, y = 0, y elif i == 4 and y > 0: x, y = x, 0 elif i == 5 and (x + y) >= 3 and y < 3: x, y = x + y - 3, 3 elif i == 6 and (x + y) >= 4 and x < 4: x, y = 4, x + y - 4 elif i == 7 and (x + y) <= 3 and x < 0: x, y = 0, x + y elif i == 8 and (x + y) <= 4 and y > 0: x, y = x + y, 0 if ( goal == (x, y) ): print("%s %d %d" % (str(j), x, y))
YouTube 動画: https://www.youtube.com/watch?v=72AKU8Nh8tY
この回で学ぶこと
外部ページへのリンク(作者に感謝します).
最小全域木を選ぶ.全域木は,グラフの全ノードを網羅する木
迷路作成,A* 法と総当たりでの迷路探索の違いを見る
YouTube 動画: https://www.youtube.com/watch?v=72AKU8Nh8tY
この回で学ぶこと.
プロダクションシステム
作業領域には「知識」のデータを置く。知識は、変化するものである。 知識は、次のような形で書くことができる。
['体毛', 'ある']
['肉食', 'する']
ルールを用いて作業領域を変化させるという推論を行う
ルールは既存の知識から新しい知識を生み出したり、知識を変化させるためのルールである。 次のように書くことができる。
'体毛' = 'ある'→ ['種類', '哺乳類']
'種類' = '哺乳類' and '肉食' = 'する' → ['種類', '肉食動物']
GDB online: https://www.onlinegdb.com/
右上の「language」で「Python 3」を選ぶこと.
プログラムの実行開始は「Run」,実行停止は「Stop」
m = {'x': 0, 'y': 0} print(m)
m = {'taimou': True, 'nikusyoku': True} print(m)
m = {'taimou': True, 'nikusyoku': True} def rule(m): changed = False if m['taimou'] == True: m['syurui'] = 'honyurui' changed = True if m['syurui'] == 'honyurui' and m['nikusyoku'] == True: m['syurui'] = 'nikusyokudoubutsu' changed = True print('----start----') print(m) while(True): if rule(m) != True: break print('----finished----') print(m)
m = {'ichiro': {'has': 'ball'}, 'jiro': {'has': 'none'}, 'saburo': {'has': 'none'}} print(m)
別のプログラム
m = {'ichiro': {'has': 'ball'}, 'jiro': {'has': 'none'}, 'saburo': {'has': 'none'}} def rule(m): changed = False if m['ichiro']['has'] == 'ball': m['ichiro']['has'] = 'none' m['jiro']['has'] = 'ball' changed = True return changed print('----start----') print(m) while(True): if rule(m) != True: break print('----finished----') print(m)
今回の授業で学ぶこと.
male(john). 1項
parent(mike, john). 2項
複数項のときは,カンマで区切る
X が Y の parent (親) ならば, Y は X の child (子供) である
child(Y, X) :- parent(X, Y).
X,Y は変数
Prolog では,問い合わせに対し事実との照合や推論を行う. 問い合わせでは, 値 false, trueを回答したり, 変数値 X = hanako, X = taro を回答する能力を持つ
この回で学ぶこと
人間の言葉を、コンピュータが処理すること
import tensorflow as tf import keras from keras.models import Sequential m = Sequential() from keras.layers import Dense, Activation, Dropout import keras.optimizers m.add(Dense(units=64, activation='relu'))', input_dim=4)) m.add(Dense(units=3, activation='softmax'))')) m.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
ニューラルネットワークの確認表示 (Python)
print(m.summary())
ニューラルネットワークの学習を行うプログラム (Python)
import numpy as np x = np.array( [[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [0, 0, 1, 1], [0, 1, 0, 0], [0, 1, 0, 1], [0, 1, 1, 0], [0, 1, 1, 1], [1, 0, 0, 0], [1, 0, 0, 1], [1, 0, 1, 0], [1, 0, 1, 1], [1, 1, 0, 0], [1, 1, 0, 1], [1, 1, 1, 0], [1, 1, 1, 1]]) y = np.array( [0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0]) m.fit(x, keras.utils.to_categorical(y), epochs=500)
ニューラルネットワークによる分類 (Python)
m.predict( np.array([[0, 1, 0, 1]]) )
m.predict( np.array([[1, 0, 1, 0]]) )
m.predict( np.array([[1, 1, 0, 0]]) )
m.predict( np.array([[0, 0, 1, 1]]) )
第1層と第2層の間の結合の重みを表示 (Python)
m.get_weights()[2]
説明資料:
外部ページへのリンク(作者に感謝します).
最小全域木を選ぶ.全域木は,グラフの全ノードを網羅する木
外部ページへのリンク(作者に感謝します).
迷路作成,A* 法と総当たりでの迷路探索の違いを見る
GDB online: https://www.onlinegdb.com/
右上の「language」で「Python 3」を選ぶこと.
プログラムの実行開始は「Run」,実行停止は「Stop」
m = [['x', 0], [y', 0]] print(m)
外部ページへのリンク(作者に感謝します).
Prolog プログラムのソースコード
human(hanako). human(taro). think(X) :- human(X).
外部ページへのリンク(作者に感謝します).
Prolog プログラムのソースコード
male(ali). female(zeyn). female(anne). parent(ali, anne). parent(zeyn, anne). child(Y, X) :- parent(X, Y).
強化学習により,コンピュータは,迷路からの脱出に上達する.
迷路は配列(アレイ)で作っている.サイズは 9 × 9. 値「1」は壁で,値「0」が通路.迷路の出口は,一番右下の「0」としている.
下のプログラムでは 200回の学習を繰り返している
強化学習による迷路脱出プログラム.「下に行くべき」のスコア算出 (Python)
import numpy as np from scipy import * import sys, time from pybrain.rl.environments.mazes import Maze, MDPMazeTask from pybrain.rl.learners.valuebased import ActionValueTable from pybrain.rl.agents import LearningAgent from pybrain.rl.learners import Q, SARSA from pybrain.rl.experiments import Experiment from pybrain.rl.environments import Task structure = array([[1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 1, 0, 0, 0, 0, 1], [1, 0, 0, 1, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 1, 0, 1], [1, 1, 1, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1]]) environment = Maze(structure, (7, 7)) controller = ActionValueTable(81, 4) controller.initialize(1.) learner = Q() agent = LearningAgent(controller, learner) task = MDPMazeTask(environment) experiment = Experiment(task, agent) for i in range(200): experiment.doInteractions(100) agent.learn() agent.reset() print( np.round( controller.params.reshape(81,4)[:,0].reshape(9,9), 2) )
強化学習による迷路脱出プログラム.「右に行くべき」のスコア算出
import numpy as np from scipy import * import sys, time from pybrain.rl.environments.mazes import Maze, MDPMazeTask from pybrain.rl.learners.valuebased import ActionValueTable from pybrain.rl.agents import LearningAgent from pybrain.rl.learners import Q, SARSA from pybrain.rl.experiments import Experiment from pybrain.rl.environments import Task structure = array([[1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 1, 0, 0, 0, 0, 1], [1, 0, 0, 1, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 1, 0, 1], [1, 1, 1, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1]]) environment = Maze(structure, (7, 7)) controller = ActionValueTable(81, 4) controller.initialize(1.) learner = Q() agent = LearningAgent(controller, learner) task = MDPMazeTask(environment) experiment = Experiment(task, agent) for i in range(200): experiment.doInteractions(100) agent.learn() agent.reset() print( np.round( controller.params.reshape(81,4)[:,1].reshape(9,9), 2) )