作って学ぶニューラルネットワーク - 機械学習の基礎から追加学習まで -

作って学ぶニューラルネットワーク - 機械学習の基礎から追加学習まで -

人工知能・機械学習の問題点と限界を学び,その仕組みの理解をより深いものにする。

ジャンル
発行年月日
2020/10/13
判型
A5
ページ数
144ページ
ISBN
978-4-339-02911-6
作って学ぶニューラルネットワーク - 機械学習の基礎から追加学習まで -
在庫あり

定価

2,090(本体1,900円+税)

カートに入れる

購入案内

  • 内容紹介
  • まえがき
  • 目次
  • レビュー
  • 著者紹介
  • 広告掲載情報

【書籍の紹介】
質のよい人工知能を構築するには,その構造・メカニズムを深く理解することが重要である。そのために必要なのは,その数理的な知識のみならず,実際にプログラミングをしてニューラルネットワークを構築する経験であろう。

この観点から,本書では2章に「機械学習の基礎」を配置し,機械学習の基本的な意味理解と応用を行うにあたって,最低限理解しておく必要があるパターン認識の数学的な意味について解説した。また,その理解の助けとなるよう,確率密度関数やベクトル,テンソルについては「学び直しコラム」を用意したので必要に応じてご活用いただきたい。

さらに,この章で得た知識をもとに理解が深まるよう,3章に「ニューラルネットワーク」を配置した。ニューラルネットワークのメカニズムを説明する過程では,それを理解するのに必要な数学的知識をその場で学べるように配慮した。また,Pythonのプログラムをニューラルネットワーク専用のライブラリを使用せずに構築することで,理論と実際の動作とを結びつけられるようにした。

以上を踏まえたうえで,4章の「追加学習」ではその理論を解説するとともに,これをPyTorchを使って記述し,これまで学んできた内容をどのようにライブラリで記述できるのかを学べるようにした。

【読者へのメッセージ】
小学校の頃を思い出してほしい。私たちは新しい数字や漢字を毎日少しずつ追加的に覚えていった。これはごく自然な学習スタイルなので,現在の人工知能ブームの主役に躍り出た学習マシン:ニューラルネットワークについても,私たち人間と同じような追加的な学習ができるものだと思っている人がほとんどであろう。だが,なんとこれがニューラルネットワークには難しいのである!

仮に6年生までの知識をマスターしたニューラルネットワークがあったとしたら,これに新しい1文字の漢字を追加的に学習させると,過去の記憶をほぼ全て喪失する「破滅的忘却」が起きてしまうのである。つまりこのような新しい知識をニューラルネットワークに記憶させるには,再度1年生から6年生までの漢字と新しい1文字の漢字とを学習させ直す必要がある。このような状況でニューラルネットワークを人のように日々学習して賢く成長しながら与えられた課題を解決できるようにするには,膨大な手間がかかってしまうことは言うまでもない。

この問題を解決するべく,近年新しい学習手法が開発されつつある。それが「追加学習法」である。しかし実のところその歴史は古く,現在に至るまで著者も含めて多くの研究者が様々なアプローチでこの問題の解決に努めてきた。この最新手法を学ぶべく,本書は基礎からプログラミングしながら学べるようにしてある。

ところで皆さんは,教科書を読んで「理解できた!」と感じていたにも関わらず,いざプログラミングしてシステムを構築しようとすると途端に良く分からない事柄が沢山あることに気が付いたご経験はないだろうか? 本書は理論を学び,手を動かしてプログラミングすることを両輪のように進めて確実に理解できるようにすることを目指した。本書を活用して学習した皆さんの中から更なる新しい学習理論を提唱する人が現れることを願ってやまない。

はじめに

最近の人工知能技術の基本はニューラルネットワークである。ニューラルネットワークはもとは神経細胞(ニューロン)のモデルであり,古くから行われてきた神経生理学的研究と計算論的な神経細胞とそのネットワークのモデル化の研究の賜物である。

現在の人工知能技術は,人に近づき,一部では人を超えて人が太刀打ちできないレベルにある。その学習方式には大きく分けてオフライン学習法とオンライン学習法とが存在する。オフライン学習は「十分に学んだ後で仕事をする」方式である。一方,オンライン学習は「学びながら仕事をする」方式である。実際にはオンライン学習にもさまざまな方式があるが,その多くは「学びながら仕事をする」というよりはオフライン学習を簡潔な計算で近似していると表現したほうが適切かもしれない。

いずれにしても,あらかじめ学習用のデータが十分に存在するならばオフライン学習を使うことができて,確実な学習をさせることができる。しかし,現実には学習データは五月雨式に降ってくるほうが多いのではないだろうか。そのような場合に人工知能に学習させるには,学習済みの知識を保持しながら新しい知識を学習させる必要があり,そうしたときに後者のオンライン学習法を使うことになる。だが,オンライン学習法は基本的には過去の学習データを勘案せず,今与えられているデータだけを使って学習する方式のため,過去の記憶をすっかり忘れてしまう「破滅的忘却」問題が生じてしまうのである。

現在の機械学習(人工知能が学習する技術)の最前線では,これを克服するために多くの研究がなされている。それらの研究が今後の機械学習システムの基幹技術となっていくであろうことは想像に難くない。本書ではこの技術の概要を初心者であっても理解できるように構成した。

最近の人工知能は大規模なニューラルネットワークである。この巨大なネットワークを効率よく構築し,さらに効率よく学習させるためにPythonを基本とするライブラリ群が多用されている。このライブラリは利便性を高める一方,その内部構造は難解であり,その基本的な仕組みを理解する者は少数であるといわざるを得ない。

質のよい人工知能を構築するには,その構造・メカニズムを深く理解することが重要である。そのために必要なのは,その数理的な知識のみならず,実際にプログラミングをしてニューラルネットワークを構築する経験であろう。これらがあって初めて,既存のライブラリをスムーズに活用できると確信する。

このような観点から,本書ではつぎのような工夫をした。
・ニューラルネットワークの理論を理解することを読者の目的として設定した。
・ニューラルネットワークのメカニズムを説明する過程で,それを理解するのに必要な数学的知識をその場で学べるようにした。
・Pythonのプログラムをニューラルネットワーク専用のライブラリを使用せずに構築することで,理論と実際の動作とを結びつけられるようにした。
・以上を踏まえたうえで,4章で追加学習に関する理論を解説するとともに,これをPyTorchを使って記述し,これまで学んできた内容をどのようにライブラリで記述できるのかを学べるようにした。

プログラミングを通して読者の疑問が明らかとなり,ニューラルネットワークについてさらに理解を深めるきっかけになれば幸いである。

2020年8月
山内康一郎

1.人工知能とは
1.1 人工知能の定義と歴史
1.2 人工知能における機械学習とは

2.機械学習の基礎
2.1 プロトタイプとパターン認識
2.2 ベイズ識別境界
2.3 識別境界線の表現方法
課題

3.ニューラルネットワーク
3.1 ニューロンとそのモデル
 3.1.1 ニューロンの工学的モデル
 3.1.2 形式ニューロンモデルを使った情報処理
3.2 単層ニューラルネットワークの構築
 3.2.1 最近傍法と等価なパーセプトロン
 3.2.2 必要なデータ構造
3.3 3層ニューラルネットワークの構築
 3.3.1 学習法
 3.3.2 誤差逆伝搬法
 3.3.3 多層パーセプトロンのプログラム
 3.3.4 実行例
3.4 ニューラルネットワークの評価
 3.4.1 タスクと評価関数
 3.4.2 汎化能力とその計測手法
3.5 3層以上のニューラルネットワークの構築
 3.5.1 PyTorchを使った多層ニューラルネットワークの構築
 3.5.2 実行準備
 3.5.3 実行
 3.5.4 ドロップアウト法の追加
課題

4.追加学習
4.1 破滅的忘却
4.2 再学習を行わせる手法
 4.2.1 手法および実装例
 4.2.2 実行例
4.3 一部のパラメータの変化量を制限する手法
 4.3.1 手法の解説
 4.3.2 実装例
 4.3.3 実行例
4.4 忘却を起こしにくい学習機械の使用
 4.4.1 双子ニューラルネットワーク
 4.4.2 双子ニューラルネットワークを使った少数ショット学習プログラム
 4.4.3 学習アルゴリズムとデータセットの準備
 4.4.4 実行例
4.5 その他の手法
課題

付録:オブジェクト指向言語Python

引用・参考文献
課題解答例
おわりに
索引

読者モニターレビュー【小林将大 様(大学院生,専門:自然言語処理)】

本書は,多層ニューラルネットワークモデルを追加学習させる際に発生しうる問題の1つである『破滅的忘却catastrophic forgetting)』に関して,その対処法を大きく3つ,簡潔に解説しています。

本書の特徴としては,
1. 前半で,人工知能・機械学習・ニューラルネットワークの簡単な説明
2. 後半で,『破滅的忘却』に関して,その簡潔な理論的説明と,Python(とそのライブラリであるPyTorch)を用いた実践学習
の2つが挙げられます。

ニューラルネットの追加学習に関して,全体的な視野を養いたい初学者には良い入門書として機能するのではないでしょうか。

工学書としては比較的ページ数は少なく,全体として150ページほどのボリュームで各トピックが簡潔にまとめられています。また『破滅的忘却』に関する説明では,多くの参考文献が記されているため,より専門的な知識をつけるための足がかりとして,本書を利用することも可能かと思います。

各章(第一章除く)の章末には演習問題も設定されており,簡単な回答も本書の最後に掲載されているため,独学で学習を進める際にも使用しやすいかと思います。

一方で,簡潔性の代償として,特に上記1の詳細な説明はされていませんので,そうしたトピックの専門的学習としての本書の理由は注意が必要かと思います。また,本書のPythonコードの仕様として,類書ではGoogle colaboratoryやJupyter notebook上での動作を前提として書かれているものが多い中,コマンドラインでの動作を前提としています。そうした点は,読者によってはスキルに応じて一考すべきかもしれません。

これらの点をふまえ,本書の対象読者は,大学初年度レベルの微分積分・線形代数・統計確率の知識を持ち,またPythonの基本的な文法知識のある方で,とりわけニューラルネットモデルの追加学習に興味を持っている方になるかと思います。

読者モニターレビュー【高橋亮介(仮名)様(大学院生,専門:数理科学)】

本書では,ニューラルネットの基本と追加学習について簡潔にまとめられています。

前提知識として
・微積分(偏微分),線型代数(行列の演算),確率・統計の初歩(ベイズの定理,尤度)
・Python,Numpyの基本文法
を知っているとスラスラ読むことができます。

章立ては約半分までで機械学習の導入とニューラルネットの説明をし,それ以降は,追加学習を詳細に説明しています。

おすすめポイントを2つ挙げます。
・1つ目
Pythonのコードが豊富に掲載されており,各行のコメントに加え,大局的な説明がありわかりやすいです。また,C言語と比較している箇所があるおかげで,Pythonを使うメリットが理解できました。
・2つ目
追加学習を扱う入門書は珍しく,本書の特色です。破滅的忘却が起きる理由と,その対策手法をコード付きで複数挙げています。根気よくコードを読み込めば,手法を確実に身につけることができるでしょう。

山内 康一郎(ヤマウチ コウイチロウ)

掲載日:2020/10/01

「電子情報通信学会誌」2020年10月号広告

【追加学習とは】

4章で扱う「追加学習」とは,ニューラルネットワークの欠点の一つである「破滅的忘却」を防ぐための学習手法全般を指す。ニューラルネットワークに私たちの業務の一部を代行させることを考えたとき,あらかじめニューラルネットワークが精通した業務内容ならば支障はない。しかし実際にはニューラルネットワークが未だ精通していない新たな課題が次々と現れるものである。そこで新たに覚えなければならない事柄を,ニューラルネットワークに追加的に学習させる必要がある。しかし,これを通常の学習法を用いて学習させると,新しい事柄は覚えられるものの,それまでに精通していたはずの記憶をすべて忘却してしまう「破滅的忘却」現象が起きてしまう。この深刻な欠点を解決しない限り,ニューラルネットワークを日々の業務で普通に使うことが難しいだろう。この追加学習のプログラミングにはニューラルネットワークの学習理論への深い理解が必要である。本書はこのプログラミングを通してニューラルネットワークの学習理論を深く理解できるように配慮した。