最近、人工知能の話題が新聞やネットなどをにぎわしています。
ヒトと人工知能がチェスや将棋で戦ったり、
人工知能による画像や音声の認識精度がヒトと同じレベルまで高まったり、
自動運転技術は、公道で実験がはじまったりしています。
もっと身近な例としては、会話アプリも人工知能の応用例の1つです。
(人工知能が会話を理解しているかは別として)ヒトと人工知能は、違和感のない会話のやり取りが可能になってきています。
これらは「チャットボット」とも呼ばれますが、コールセンターなど定型的な会話業務は、人工知能によって代替されつつあるようです。
ゲームでも人工知能を使うことで、キャラクターにより人間らしい反応をさせることに役立っています。他にもスーパーマリオを高得点でクリアするような人工知能が開発されたりもしています。
最近とくに注目されている「深層学習(ディープラーニング)」は、人工知能の中のプログラミング(アルゴリズム)の1つです。
ディープラーニングは、画像認識や音声認識では優れた性能を出すことがわかっています。
その他のものについては、まだまだうまく適用されておらず、これからの発展が期待されています。
こういった現状の中で、特にエンジニアの方であれば、人工知能を利用したアプリケーションをつくる機会も増えてくるのではないでしょうか。
一言で人工知能といっても、じつはさまざまな分野やアルゴリズムがあり、
それらを幅広く身につけておくことは、これからアドバンテージになってくるのではないかと思います。
そこで本記事では、人工知能の目的や知っておくべき概念などをまとめて、
人工知能の様々なアルゴリズムをサクッと学べる良書をご紹介します。
本記事の概要
人工知能の目的とは?
人工知能の目的の1つは、人間の知能をコンピュータ上に再現することです。そのためには、どんな技術が必要でしょうか?
これは知能の定義とも関係してきます。北陸先端科学技術大学院大学の溝口理一郎先生によると、知能には次の6つの要素があるということです。
- 推論と思考
- 学習と記憶
- 問題解決
- 言語とコミュニケーション
- 自己認識とメタ認知
- これら5つを実現するために、実世界とコンピュータの世界の双方向変換
これらをプログラミングできれば、人工知能が実現するかもしれないわけです。
人工知能の実現に必要なプログラミングとは?
上で紹介した知能の定義について、もう少し具体的に考えてみましょう。
チェスや将棋、囲碁の人工知能では、勝つためには、可能な選択肢の中から最良の一手を「探索」することが不可欠です。
また、各選択肢が良いのか悪いのかを「決定」する必要もあります。この探索と決定がうまくいくことで、強い将棋プレイヤーが生まれるわけです。
- 人工知能のプログラミングには、探索や決定するアルゴリズムが必要です。これは先ほどの知能の要件の、推論・思考、問題解決などと関係があります。
他には、
- 人工知能が東大に合格できるか?
ということで話題になった「東ロボくん」を考えてみます。
入試問題を解くには、言語を理解したり、言葉や数式の「論理」を扱うことが必要になります。
これらをきちんと処理できないと、高得点は得られません。
なので、人工知能のプログラミングには、「論理」や「推論」、「自然言語処理」が必要となります。
- これは、推論・思考、言語とコミュニケーションなどと関係があります
加えて、上で述べた機能を発揮するには、、多くの情報を記憶して蓄えることが欠かせません。
蓄えた情報は、整理して、その中にあるパターンを見つけ出しておくことでより高次元の概念を獲得することもできます。
深層学習はこのパターン認識能力がとくに優れています。
- これを実現するための人工知能プログラミングには、「クラスタリング」や「パターン認識」があります。これは、学習・記憶、自己認識・メタ認知などと関係があります。
このように、ひとことで人工知能といっても、そのプログラミング技術は、多岐にわたっていることがわかっていただけたのではないでしょうか。
こんなにたくさん勉強するのは大変だなぁ〜
と思われたかたもおられるかもしれません。
たしかに日々の仕事などで忙しいあなたは、
できるだけ短時間で、効率的にサクッと学びたいですよね〜
そんなあなたにおすすめなのがこちらです↓
「人工知能プログラミング」を、効率的にサクッと学びたい
本書では、プログラミングをしながら手を動かして身につけることを主眼にしています。
論文や専門書に多い数式表現や、長い複雑なプログラムではなく、アルゴリズムの本質をシンプルにし、エッセンスを効率的に学べる1冊となっています。ですので、高度な内容も平易に理解することができます。
サンプルプログラムを読みながら、人工知能のさまざまなプログラミング(アルゴリズム)を理解できるので、
数式に馴染みがない方も、ソースコードを見ていくことで、人工知能プログラミングの本質をつかむことができてしまいます。
本書では、プログラミング言語に、Scala を用いています。
Scala は関数型とオブジェクト指向型の両方を備えていて、人工知能のプログラミングの記述に向いており、コードをシンプルに書ける特徴があります。また、並列演算も簡単に実装できるので、高速化が可能です。
このように、本書はシンプルなものを動かしながら、人工知能のプログラミングの本質や長所・短所など、効率的にサクッと学べる1冊となっています。
ちなみに、Scala って使ったことないんだけどなぁ~
って方には、Javaのバージョンもあります↓(内容はほぼ同等です)
本書の構成は以下の通りです
第1章 再帰処理と副問題への分割
1−1、再帰的プログラミング
再帰処理とは
再帰処理の過程
再帰処理のトレースプログラム
1−2、ハノイの塔
目標と副問題への分割
ハノイの塔プログラム
1−3、フラクタルカーブ
グラフィックス処理の基礎プログラム
コッホ曲線プログラム
ドラゴン曲線プログラム
シェルピンスキー曲線プログラム
ツリー曲線プログラム
第2章 解の探索とバックトラッキング
2−1、Nクイーン問題
解の探索と状態空間
Nクイーン問題プログラム
2−2、騎士の巡回問題
ルート探索とバックトラッキング
岸の巡回問題プログラム
第3章 論理パズル
3−1、宣教師と目標状態
ルールと目標状態
宣教師とモンスター問題プログラム
3−2、農民と狼とヤギとキャベツ
ルールと目標状態
農民と狼とヤギとキャベツ問題プログラム
第4章 ゲーム木理論
4−1、ゼロサムゲーム
二人零和有限確定完全情報ゲーム
4−2、TicTacToe
ルールと勝敗
TicTacToe 基本プログラム
TicTacToe グラフィックスプログラム
4−3、ミニマックス戦略
最良の手を打つ戦略
TicTacToe ミニマックスプログラム
4−4、アルファベータカット
目的とアルゴリズム
TicTacToe アルファベータカットプログラム
第5章 推論と知識ベース
5−1、推論エンジン
プロダクションシステムと推論エンジン
前向き推論と後ろ向き推論
5−2、前向き推論
前向き推論エンジンプログラム
前向き推論実行プログラム
5−3、後ろ向き推論
後ろ向き推論エンジンプログラム
後ろ向き推論実行プログラム
第6章 人工知能とNPC
6−1、ランダムな動き
移動方向と方向転換のランダム決定
ランダム移動方向プログラム
ランダム方向転換プログラム
6−2、Boid アルゴリズム
群れのルール
Boid プログラム
6−3、ノンプレイヤーキャラクタとゲームスレッド
ゲームの構成
マップ構築プログラム
キャラクタ基本要素プログラム
プレイヤー生成プログラム
NPC生成プログラム
ゲームループとマルチスレッドプログラム
第7章 自律行動と追跡
7−1、パンくず拾い
手がかりを見つけて追跡する
パンくず拾い探索エンジンプログラム
パンくず拾い探索ゲームプログラム
7−2、A*アルゴリズム
ターゲットまでの最適ルート
A*アルゴリズム追跡エンジンプログラム
A*アルゴリズム追跡ゲームプログラム
7−3、有限状態マシン
NPCの自律行動システム
有限状態マシンプログラム
有限状態マシンゲームプログラム
第8章 機械学習とニューラルネットワーク
8−1、ニューラルネットワーク
ニューロンモデル
ロジスティック回帰と学習
ロジスティック回帰プログラム
ロジスティック回帰パターン認識プログラム
8−2、多層パーセプトロン
線形分離不可能問題
多層パーセプトロンとバックプロパゲーション
多層パーセプトロンプログラム
多層パーセプトロン実行プログラム
第9章 ディープラーニングの基礎
9−1、深層学習の準備
ディープラーニング
手書き文字データ読み込みプログラム
可視化プログラム
9−2、オートエンコーダ
オートエンコーダの機能と構造
オートエンコーダプログラム
オートエンコーダ実行プログラム
9−3、デノイジングオートエンコーダと並列演算
デノイジングオートエンコーダプログラム
デノイジングオートエンコーダ実行プログラム
デノイジングオートエンコーダ並列計算プログラム
9−4、ディープニューラルネットワーク
多層デノイジングオートエンコーダの構成
多層デノイジングオートエンコーダプログラム
手書き文字認識のディープラーニングプログラム
付録 Scala環境の導入と基本
A-1、Scalaと開発環境
Scalaの特徴
EclipseとScalaプラグリンの導入
プロジェクトとパッケージの作成
Helloプログラムの作成
A-2、Scala言語機能
クラスについて
objectについて
val変数とvar変数
配列とリスト
メソッド
関数
参考
索引
となっています。
Scala がはじめての方でも、付録にScalaの説明がありますので、無理なく理解できます。
また、Javaがわかる方であればさらにScalaはわかりやすいと思います。
また本書では、人工知能の要素技術である
- 再帰処理
- 解の探索
- 論理パズル
- ゲーム木理論
- 推論・知識ベース
- 自律行動と追跡
- 機械学習
- ディープラーニング
を網羅しており、これらをシンプルで本質的なコードをみながら、人工知能プログラミングを効率よく身につけることができるおすすめの1冊です↓
関数型オブジェクト指向AI プログラミング―Scala による人工知能の実装
Java人工知能プログラミング -オブジェクト指向と関数スタイルによるAIの実装-
絵でわかる人工知能 明日使いたくなるキーワード68 (サイエンス・アイ新書)
トコトンやさしい人工知能の本 (今日からモノ知りシリーズ)
機械学習のエッセンス -実装しながら学ぶPython,数学,アルゴリズム- (Machine Learning)
Python機械学習プログラミング[PyTorch&scikit-learn編] (impress top gear)
人狼知能で学ぶAIプログラミング ~ 欺瞞・推理・会話で不完全情報ゲームを戦う人工知能の作り方~
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロから学ぶScala
Guide to ScalaーScalaプログラミング入門
Scalaをはじめよう! ─マルチパラダイム言語への招待─ (技術書典シリーズ(NextPublishing))
実践Scala入門
Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)
オブジェクト指向をきちんと使いたいあなたへ (Software Design別冊)