【トピックス】 人工知能でできること,人工知能の歴史,人工知能による社会の変化, 人工知能の種類,データサイエンス,機械学習, ニューラルネットワーク,探索,知識表現,プロダクションシステム,Prolog,自然言語処理
大学で使用した自作の資料等を,手直しの上公開している. クリエイティブ・コモンズ BY NC SA.
【目次】
【サイト内の関連ページ】
【トピックス】
人工知能, 人工知能でできること, 人工知能の種類, 人工知能でできること, 人工知能の現状, 人工知能の歴史, 人工知能による社会の変化
【概要】
人工知能(AI)はコンピュータが知的能力を持つ技術で、思考、判断、学習などの機能を有する。 AIは医療、金融、製造、農業など幅広い分野で用いられ、仕事の補助や代行といった役割を果たす。 AIの種類には機械学習や知的なITシステムがあり、用途によって選択する。 AIによる合成や生成は偽情報の拡散や倫理的な問題を引き起こす可能性があるため、注意が必要である。 AIの技術は急激に進歩してる。AIが引き起こす社会への影響や倫理的な問題も注視が必要である。 AIの発達は人間がよりクリエイティブになるためのツールともなり得る。
【関連するページ等】
【関連する外部ページ】 人工知能による合成
創作, 人工知能による支援
翻訳
TensorFlow の仕組み
【トピックス】
人工知能, データサイエンス, 表計算ソフトウエア Excel, 散布図(Excel を使用), 合計, 平均(Excel を使用), 分布, 密度(Excel を使用), 人工知能と機械学習
【概要】
データサイエンスとAIは、データ活用に欠かせない分野である。 データサイエンスはデータから有益な情報を導き出す学問で、機械学習は大量のデータからパターンを学び、未知のデータに対する予測能力を持つ。 Excelを用いてデータを視覚的に表現し分析するという実践的なスキルを身につけることも重要。 これらを理解し、実践的経験を積むことが将来の活躍につながる。
【関連するページ等】
【関連する外部ページ】
Excel ファイル(各自の演習に活用)
【トピックス】
人工知能, オープンデータ, 政府統計データ, クロス集計表(Excel を使用), 相関(Excel を使用)
【概要】
データサイエンスとAI、特にオープンデータとその利用について説明する。 オープンデータは公開されたデータで、一定の条件下で自由に利用できる。 これらは新しいビジネスやサービスの創造、コスト節約、透明性の向上に寄与する。 しかし、データの信頼性やプライバシーを確認し、著作権を尊重する必要がある。 また、オープンデータはAI、特に機械学習の重要なデータソースであり、AI研究者向けに公開されたサイトもあります。 政府統計データがどのように取得し利用されるかを示す。 そして、クロス集計表と相関の概念を紹介し、それらを使用した分析の例を見ていく。
【関連するページ等】
【関連する外部ページ】
Excel ファイル(各自の演習に活用)
【トピックス】
人工知能, ニューラルネットワーク, ニューラルネットワークの種類, 線形近似, 最適化
【概要】
機械学習は、コンピュータがデータを使用して学習し、知的能力を向上させる技術である。 そのメリットとして、パターンや関連性を抽出し、複雑なプログラミングを省略でき、問題解決への他の手法の限界を超える可能性がある。 ニューラルネットワークは、生物の脳を模倣し、多くのユニットとその間の結合からなるネットワークであり、機械学習に広く活用されている。 自己符号化や分類、予測などの技術を利用して、データの特徴を抽出や予測結果を導くことが可能である。 また、線形近似は、データの特徴を把握する手法の一つであり、最適化は、目的関数を最小化または最大化するための調整を行う重要なプロセスである。
【関連するページ等】
【関連する外部ページ】
Excel ファイル(各自の演習に活用)
Python プログラム
最適化の用途
謝辞: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)
【トピックス】
人工知能, ニューラルネットワーク, ディープラーニング, ユニット, 活性化, 結合の重み, 活性化関数, 伝搬, ニューラルネットワークを用いた分類, ニューラルネットワークを用いた学習
【概要】
ニューラルネットワークは、複数のユニットが結合し、各ユニットは入力の重み付けや活性化関数の適用を行う。 構造は、層構造で全結合のものが最もシンプルで、データは入力から出力への一方向に流れ、各層のユニットは全結合される。 結合の重みやバイアスの調整により望みの出力を得る。 ディープニューラルネットワークは層が多いニューラルネットワークで、多層でも学習が成功するためのさまざまな工夫が必要とされる。
【関連するページ等】
【関連する外部ページ】
Excel ファイル(各自の演習に活用)
【トピックス】
人工知能, 画像と画素, 濃淡画像のデータ, ニューラルネットワークを用いた分類, 画像分類システム, ニューラルネットワークの作成, 学習, 画像分類
【概要】
画像分類システムは、画像を特定のカテゴリに分類するもので、 手書き文字認識やパターン認識等に応用される。 画像分類は、ニューラルネットワークを使用して可能である。 ニューラルネットワークは機械学習の一種で、パターンや関連性を学習する。 画像分類システムでは、ニューラルネットワークの最終層のユニットで最も活性度の高いものを選択するという仕組みで分類が行われる。 画像分類システムは広範に活用されており、具体的な学習はTensorFlowの公式チュートリアル等を通じて可能である。
【関連するページ等】
【関連する外部ページ】
【トピックス】
人工知能, 機械学習, 汎化, 汎化の失敗, 学習の繰り返し, 学習曲線
【概要】
機械学習は訓練データから学習し、未知のデータに対しても適切に処理できる「汎化」能力を持つ。 学習の過程は、訓練データでの誤差を減らすよう重み調整し繰り返すものだが、過学習となり未知データでの誤答が増える場合がある。 そのため、検証データを用いて過学習の確認が必要で、学習曲線はその一助となる。 最近の技術進展により過学習防止の技術が進展している。過学習の防止には大量データによる学習も大切である、コンピュータの高速化も一定の助けとなっている。
【関連するページ等】
【関連する外部ページ】
【トピックス】
人工知能, コンピュータビジョン, 畳み込み, プーリング, 畳み込みニューラルネットワーク, 物体検出, セグメンテーション, 顔情報処理, 姿勢推定
【概要】
コンピュータビジョンはコンピュータが実世界を理解・活用する技術で、 画像理解、物体検出、セグメンテーションなどが重要な要素である。 ディープニューラルネットワークや畳み込みにより、これらの精度向上が進んでいる。 畳み込みはデータとカーネルを重ね合わせて一つの値にまとめる手法である。 コンピュータビジョンは他にもある。 顔情報処理は顔検出、顔ランドマーク、顔のコード化、顔識別などがあり、 本人確認や表情推定、年齢判定など多岐にわたり利用される。 姿勢推定は人体の姿勢をAIで把握する技術で、 状況把握、行動予測、行動検知、危険察知などに応用される。
【関連するページ等】
【関連する外部ページ】
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) )