人工知能の基礎(全15回)

【トピックス】 人工知能でできること,人工知能の歴史,人工知能による社会の変化, 人工知能の種類,データサイエンス,機械学習, ニューラルネットワーク,探索,知識表現,プロダクションシステム,Prolog,自然言語処理

大学で使用した自作の資料等を,手直しの上公開している. クリエイティブ・コモンズ BY NC SA.

目次

  1. aa-1. データサイエンス・AIでできること、社会の変化(人工知能社会の到来、最新の技術、産業の変化、社会や生活の変化など)
  2. aa-2. データサイエンス・AIの事例、技術(散布図、データの分布や密度、AIによる分類や特徴抽出や生成など)
  3. aa-3. 実データによるデータサイエンス・AIの演習(オープンデータ、政府統計データ、クロス集計表、相関
  4. aa-4. 機械学習,ニューラルネットワーク
  5. aa-5. 深層学習(ディープラーニング)
  6. aa-6. 画像分類システム
  7. aa-7. 学習と検証,学習不足,過学習,学習曲線
  8. aa-8. 人工知能とコンピュータビジョン
  9. aa-9. 遷移関数、知的なゲーム世界の実現
  10. aa-10. 遷移関数、探索、総当たり
  11. aa-11. パス、木、発見的探索
  12. aa-12. プロダクションシステム,知識表現,推論エンジン
  13. aa-13. 述語、Prolog
  14. aa-14. 自然言語処理
  15. aa-15. 全体まとめ,発展

その他の関連資料

【サイト内の関連ページ】

資料

aa-1. データサイエンス・AIでできること、社会の変化(人工知能社会の到来、最新の技術、産業の変化、社会や生活の変化など)

資料: [PDF], [パワーポイント]

【トピックス】

人工知能, 人工知能でできること, 人工知能の種類, 人工知能でできること, 人工知能の現状, 人工知能の歴史, 人工知能による社会の変化

概要

人工知能(AI)はコンピュータが知的能力を持つ技術で、思考、判断、学習などの機能を有する。 AIは医療、金融、製造、農業など幅広い分野で用いられ、仕事の補助や代行といった役割を果たす。 AIの種類には機械学習や知的なITシステムがあり、用途によって選択する。 AIによる合成や生成は偽情報の拡散や倫理的な問題を引き起こす可能性があるため、注意が必要である。 AIの技術は急激に進歩してる。AIが引き起こす社会への影響や倫理的な問題も注視が必要である。 AIの発達は人間がよりクリエイティブになるためのツールともなり得る。

【関連するページ等】

【関連する外部ページ】  人工知能による合成

創作, 人工知能による支援

翻訳

TensorFlow の仕組み

aa-2. データサイエンス・AIの事例、技術(散布図、データの分布や密度、AIによる分類や特徴抽出や生成など)

資料: [PDF], [パワーポイント]

【トピックス】

人工知能, データサイエンス, 表計算ソフトウエア Excel, 散布図(Excel を使用), 合計, 平均(Excel を使用), 分布, 密度(Excel を使用), 人工知能と機械学習

概要

データサイエンスとAIは、データ活用に欠かせない分野である。 データサイエンスはデータから有益な情報を導き出す学問で、機械学習は大量のデータからパターンを学び、未知のデータに対する予測能力を持つ。 Excelを用いてデータを視覚的に表現し分析するという実践的なスキルを身につけることも重要。 これらを理解し、実践的経験を積むことが将来の活躍につながる。

【関連するページ等】

【関連する外部ページ】 

  • Office 365 オンライン版 https://portal.office.com

    Excel ファイル(各自の演習に活用)

    aa-3. 実データによるデータサイエンス・AIの演習(オープンデータ、政府統計データ、クロス集計表、相関

    資料: [PDF], [パワーポイント]

    【トピックス】

    人工知能, オープンデータ, 政府統計データ, クロス集計表(Excel を使用), 相関(Excel を使用)

    概要

    データサイエンスとAI、特にオープンデータとその利用について説明する。 オープンデータは公開されたデータで、一定の条件下で自由に利用できる。 これらは新しいビジネスやサービスの創造、コスト節約、透明性の向上に寄与する。 しかし、データの信頼性やプライバシーを確認し、著作権を尊重する必要がある。 また、オープンデータはAI、特に機械学習の重要なデータソースであり、AI研究者向けに公開されたサイトもあります。 政府統計データがどのように取得し利用されるかを示す。 そして、クロス集計表と相関の概念を紹介し、それらを使用した分析の例を見ていく。

    【関連するページ等】

    【関連する外部ページ】

    Excel ファイル(各自の演習に活用)

    aa-4. 機械学習,ニューラルネットワーク

    資料: [PDF], [パワーポイント]

    【トピックス】

    人工知能, ニューラルネットワーク, ニューラルネットワークの種類, 線形近似, 最適化

    概要

    機械学習は、コンピュータがデータを使用して学習し、知的能力を向上させる技術である。 そのメリットとして、パターンや関連性を抽出し、複雑なプログラミングを省略でき、問題解決への他の手法の限界を超える可能性がある。 ニューラルネットワークは、生物の脳を模倣し、多くのユニットとその間の結合からなるネットワークであり、機械学習に広く活用されている。 自己符号化や分類、予測などの技術を利用して、データの特徴を抽出や予測結果を導くことが可能である。 また、線形近似は、データの特徴を把握する手法の一つであり、最適化は、目的関数を最小化または最大化するための調整を行う重要なプロセスである。

    【関連するページ等】

    【関連する外部ページ】 

    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)
    

    aa-5. 深層学習(ディープラーニング)

    資料: [PDF], [パワーポイント]

    【トピックス】

    人工知能, ニューラルネットワーク, ディープラーニング, ユニット, 活性化, 結合の重み, 活性化関数, 伝搬, ニューラルネットワークを用いた分類, ニューラルネットワークを用いた学習

    概要

    ニューラルネットワークは、複数のユニットが結合し、各ユニットは入力の重み付けや活性化関数の適用を行う。 構造は、層構造で全結合のものが最もシンプルで、データは入力から出力への一方向に流れ、各層のユニットは全結合される。 結合の重みやバイアスの調整により望みの出力を得る。 ディープニューラルネットワークは層が多いニューラルネットワークで、多層でも学習が成功するためのさまざまな工夫が必要とされる。

    【関連するページ等】

    【関連する外部ページ】 

    • Office 365 オンライン版 https://portal.office.com
    • TensorFlow の仕組み https://playground.tensorflow.org

    Excel ファイル(各自の演習に活用)

    aa-6. 画像分類システム

    資料: [PDF], [パワーポイント]

    【トピックス】

    人工知能, 画像と画素, 濃淡画像のデータ, ニューラルネットワークを用いた分類, 画像分類システム, ニューラルネットワークの作成, 学習, 画像分類

    概要

    画像分類システムは、画像を特定のカテゴリに分類するもので、 手書き文字認識やパターン認識等に応用される。 画像分類は、ニューラルネットワークを使用して可能である。 ニューラルネットワークは機械学習の一種で、パターンや関連性を学習する。 画像分類システムでは、ニューラルネットワークの最終層のユニットで最も活性度の高いものを選択するという仕組みで分類が行われる。 画像分類システムは広範に活用されており、具体的な学習はTensorFlowの公式チュートリアル等を通じて可能である。

    【関連するページ等】

    • 手書き文字認識(Google Colaboratory) 実行結果とプログラムと説明を見るだけなら, Google アカウントは不要 https://colab.research.google.com/drive/1IfArIvhh-FsvJIE9YTNO8T44Qhpi0rIJ?usp=sharing
    • YouTube 動画 https://www.youtube.com/watch?v=WYoevH_C1Is
    • SlideShare: https://www.slideshare.net/kunihikokaneko1/mi6-258347399

    【関連する外部ページ】 

    • 画像分類(TensorFlowの公式チュートリアル) 左側のメニューで「KerasによるMLの基本」を展開し, 「基本的な画像分類」をクリック 画像を10種類に分類。訓練データは60,000枚の画像と正解。検証データは10,000枚の画像と正解 https://www.tensorflow.org/tutorials

    aa-7. 学習と検証,学習不足,過学習,学習曲線

    資料: [PDF], [パワーポイント]

    【トピックス】

    人工知能, 機械学習, 汎化, 汎化の失敗, 学習の繰り返し, 学習曲線

    概要

    機械学習は訓練データから学習し、未知のデータに対しても適切に処理できる「汎化」能力を持つ。 学習の過程は、訓練データでの誤差を減らすよう重み調整し繰り返すものだが、過学習となり未知データでの誤答が増える場合がある。 そのため、検証データを用いて過学習の確認が必要で、学習曲線はその一助となる。 最近の技術進展により過学習防止の技術が進展している。過学習の防止には大量データによる学習も大切である、コンピュータの高速化も一定の助けとなっている。

    【関連するページ等】

    • 手書き文字認識(Google Colaboratory) 実行結果とプログラムと説明を見るだけなら, Google アカウントは不要 https://colab.research.google.com/drive/1IfArIvhh-FsvJIE9YTNO8T44Qhpi0rIJ?usp=sharing
    • YouTube 動画 https://www.youtube.com/watch?v=Qh-pu3Fvvuc
    • SlideShare: https://www.slideshare.net/kunihikokaneko1/mi7-258347414

    【関連する外部ページ】 

    • オーバーフィットとアンダーフィット(TensorFlowの公式チュートリアル) https://www.tensorflow.org/tutorials/keras/overfit_and_underfit?hl=ja

    aa-8. 人工知能とコンピュータビジョン

    資料: [PDF], [パワーポイント]

    【トピックス】

    人工知能, コンピュータビジョン, 畳み込み, プーリング, 畳み込みニューラルネットワーク, 物体検出, セグメンテーション, 顔情報処理, 姿勢推定

    概要

    コンピュータビジョンはコンピュータが実世界を理解・活用する技術で、 画像理解、物体検出、セグメンテーションなどが重要な要素である。 ディープニューラルネットワークや畳み込みにより、これらの精度向上が進んでいる。 畳み込みはデータとカーネルを重ね合わせて一つの値にまとめる手法である。 コンピュータビジョンは他にもある。 顔情報処理は顔検出、顔ランドマーク、顔のコード化、顔識別などがあり、 本人確認や表情推定、年齢判定など多岐にわたり利用される。 姿勢推定は人体の姿勢をAIで把握する技術で、 状況把握、行動予測、行動検知、危険察知などに応用される。

    【関連するページ等】

    • 畳み込みニューラルネットワーク, 学習, 検証, 学習曲線について https://colab.research.google.com/drive/18IPPkY96Oc6jkYD2su4cFgWcoYAskLo_?usp=sharing
    • YouTube 動画 https://www.youtube.com/watch?v=8e6YqUl32gQ
    • SlideShare: https://www.slideshare.net/kunihikokaneko1/mi8-258347436

    【関連する外部ページ】 

    • CNN Explainer ジョージア工科大学 Polo Club 畳み込み層などの仕組みをビジュアルに学ぶことができるサイト https://poloclub.github.io/cnn-explainer/
    • OneFormer のデモサイト 画像のセグメンテーション https://huggingface.co/spaces/shi-labs/OneFormer
    • コンピュータビジョンのデモサイト https://cloud.google.com/vision/docs/drag-and-drop

    aa-9. 遷移関数、知的なゲーム世界の実現

    SlideShare: https://www.slideshare.net/slideshow/aa9-252037023/252037023

    【トピックス】

    人工知能の種類、知的なゲームのルール、状態空間表現

    資料: [PDF], [パワーポイント]

    YouTube 動画: https://www.youtube.com/watch?v=ftSktLFJ3y4

    この回で学ぶこと.

    • 知的なゲームのルール,コンピュータプレイヤーがゲームに参加,状態空間表現
    • 知的なゲーム(ゲームのルールと勝利条件が定まっているもの)で, コンピュータが,ゲームのプレイヤーになる.
    • そのための基礎として「状態空間表現」という方法を使い,コンピュータでもゲームのルールを扱えるようにすることを学ぶ.
    • 9-3. ゲームのルールのプログラミング

      【関連する外部ページ】

      OnlineGDB の URL: 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
      
    • 9-4. コンピュータ・プレイヤーがゲームに参加

      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)
      

    aa-10. 遷移関数、探索、総当たり

    SlideShare: https://www.slideshare.net/slideshow/aa10-252043660/252043660

    【トピックス】

    総当たり、総当たりのパス、状態空間表現での総当たり、パスと木、Python による総当たり

    資料: [PDF], [パワーポイント]

    YouTube 動画: https://www.youtube.com/watch?v=o_Ms27QaSsg

    この回で学ぶこと.

    • 総当たりにより,正解を探索する.
    • 総当たりは「正解を確実に探索できる方法」とも考えることができる.
    • 状態空間表現(世界の状態が変数で表されている)でのルールをもとに 変数値を変化させてゴール(目的とする変数の値)に至ることを探索.
    • 10-4. 状態空間表現での総当たりをコンピュータで動かす

      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))
      
    • 10-6. 2つの水差しを総当たりで扱う

      GDB online: https://www.onlinegdb.com/

      右上の「language」で「Python 3」を選ぶこと.

      プログラムの実行開始は「Run」,実行停止は「Stop」

      Python プログラムのソースコード

      パスの長さ 2 で,総当りで調べるプログラム

      • 2つの水差し(4リットルと,3リットル).
      • 初期状態: x=0, y=0
      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))
      
    • 10-6. 2つの水差しを総当たりで扱う

      パスの長さ 3 の総当りにより,ゴール状態にできるかを調べるプログラム

      • 2つの水差し(4リットルと,3リットル).
      • 初期状態: x=0, y=0
      • ゴール状態: x=3, y=0
      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))
      

    aa-11. パス、木、発見的探索

    資料: [PDF], [パワーポイント]

    YouTube 動画: https://www.youtube.com/watch?v=72AKU8Nh8tY

    この回で学ぶこと

    • パス,木,グラフは,情報を見通し良く扱えるための考え方
    • 総当たりはすべての経路(パス)を試すもの.経路 (パス)の情報を見通し良く扱うには,木が有効.
    • 探索は,木の中のスタートの場所と,ゴールの状態 を指定して経路(パス)を探す.
    • 探索は,正解に至る経路(パス)があるのであれば,必ず経路(パス)を見つけることができる.
    • 探索には,種々の方法があるが,正解に至る経路(パス)があるのであれば,必ず経路(パス)を見つけることができることに変わりはない.

    外部ページへのリンク(作者に感謝します).

    aa-12. プロダクションシステム,知識表現,推論エンジン

    資料: [PDF], [パワーポイント]

    YouTube 動画: https://www.youtube.com/watch?v=72AKU8Nh8tY

    この回で学ぶこと.

    プロダクションシステム

    • 作業領域

      作業領域には「知識」のデータを置く。知識は、変化するものである。 知識は、次のような形で書くことができる。

      ['体毛', 'ある']

      ['肉食', 'する']

    • 推論エンジン

      ルールを用いて作業領域を変化させるという推論を行う

    • ルール

      ルールは既存の知識から新しい知識を生み出したり、知識を変化させるためのルールである。 次のように書くことができる。

      '体毛' = 'ある'→ ['種類', '哺乳類']

      '種類' = '哺乳類' and '肉食' = 'する' → ['種類', '肉食動物']

    GDB online: https://www.onlinegdb.com/

    右上の「language」で「Python 3」を選ぶこと.

    プログラムの実行開始は「Run」,実行停止は「Stop」

    • 12-1. 知識表現
      m = {'x': 0, 'y': 0}
      print(m)
      
    • 12-2. 知識表現の例
      m = {'taimou': True, 'nikusyoku': True}
      print(m)
      
    • 12-3 プロダクションシステム
      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)
      
    • 12-4. 知識表現のバリエーション
      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)
      

    aa-13. 述語、Prolog

    資料: [PDF], [パワーポイント]

    今回の授業で学ぶこと.

    • 事実を述語の形で書くことができる.述語は,1項,あるいは,複数項の関係のこと
      • john は男である

        male(john). 1項

      • mike は john の親である

        parent(mike, john). 2項

      複数項のときは,カンマで区切る

    • 述語でのルールの例

      X が Y の parent (親) ならば, Y は X の child (子供) である

      child(Y, X) :- parent(X, Y).

      X,Y は変数

    • Prolog

      Prolog では,問い合わせに対し事実との照合や推論を行う. 問い合わせでは, 値 false, trueを回答したり, 変数値 X = hanako, X = taro を回答する能力を持つ

    aa-14. 自然言語処理

    資料: [PDF], [パワーポイント]

    この回で学ぶこと

    • 自然言語処理

      人間の言葉を、コンピュータが処理すること

    • 自然言語処理の種類
      • 単語の切り出し
      • 品詞の判定
      • 構文解析(係り受けなどの関係の分析)
      • 意味解析

    aa-15. 全体まとめ,発展

    資料: [PDF], [パワーポイント]

    Python プログラムのソースコードなど

    • ニューラルネットワークを作るプログラム (Python)
      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]
      

      説明資料:

    • 11. グラフと全域木

      外部ページへのリンク(作者に感謝します).

    • 11. A*法の実演(迷路作成,A*法と総当たりでの探索の違い)

      外部ページへのリンク(作者に感謝します).

      GDB online: https://www.onlinegdb.com/

      右上の「language」で「Python 3」を選ぶこと.

      プログラムの実行開始は「Run」,実行停止は「Stop」

      m = [['x', 0], [y', 0]]
      print(m)
      
    • 13. Prolog の実演

      外部ページへのリンク(作者に感謝します).

      Prolog プログラムのソースコード

      human(hanako).
      human(taro).
      think(X) :- human(X).
      
    • 13. Prolog の実演(true, false を得る問い合わせ)

      外部ページへのリンク(作者に感謝します).

      Prolog プログラムのソースコード

      male(ali).
      female(zeyn).
      female(anne).
      parent(ali, anne).
      parent(zeyn, anne).
      child(Y, X) :- parent(X, Y).
      
    • 15. 強化学習

      強化学習により,コンピュータは,迷路からの脱出に上達する.

      迷路は配列(アレイ)で作っている.サイズは 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) )
      

    人工知能デモサイトの紹介