PythonとJupyter Notebookを利用した 教科書「詳解確率ロボティクス」の 企画と執筆 千葉工業大学 上田 隆一 @ryuichiueda 第64回システム制御情報学会研究発表講演会(SCI'20)
確率ロボティクス • 確率・統計を駆使したアルゴリズムで自律ロボットを 動かす研究分野 • 実世界の不確かさを克服するため 実用的な移動ロボット、 自動運転車を実現するために 重要な分野 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 2
発表者と確率ロボティクス • RoboCup(ロボットサッカー)のために勉強 (2000年、学部4年~) • ロボットを動かすために必須 • 当時最先端と知らぬまま勉強 (機械学習という言葉すら知らなかった) • リーグに同分野の世界的な研究者がたくさん • 教科書が出たので翻訳 • 大学を辞めて研究を中断するので恩返しに • 日本に定着するだろう 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 3 自分の予想よりは学ぶ人は増えず
確率ロボティクスの学習は大変 • ロボットを動かさないと必要性を実感できない • しかし、動かす機会が少ない • 動かすには準備とメンテナンス、公道利用の許諾などが必要 • シミュレータもバージョンアップ地獄 • 必要な知識が多い • 制御、ベイズ統計学、情報理論、信号処理、画像処理、 プログラミング言語、ミドルウェア、クラウド・・・ • ハードを作る場合はさらに 学習するだけでも準備が 大変な上に敷居が高い 公道や通行人のいる環境 で実験できるのは年数回 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 4
どうすれば敷居が下がるのか • 千葉工大で講義を持ったときに考え出す • 2015年~ • 個人的な状況 • 研究者復帰までサラリーマン経験 • 「シェル芸」というシェルワンライナー普及活動 • 大学とは全く異なる方法での活動 • オープンソース文化に触れる • オープンソース文化 • ソフトがタダで使えるという単純な話ではない • (いろいろ書くことがあるが)一言でいうと、 「知識と道具は上から授けるものではなくシェアするもの」 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 5 最近のシェル芸界隈の事件
先行事例: Atsushi Sakaiさんのブログ • 次の3つが簡潔に掲載されておりとても分かりやすい • サンプルコード • コードを動かしたシミュレーションの動画 • 解説 • 発表者もサラリーマン生活で 完全忘却していたのでお世話に • 硬い教科書よりも入り口として有効 • 「知識のシェア」 • 大学にいたままだと素直にそう思えなかったかも 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 6 講義に取り入れたい
Jupyter Notebook + GitHub の利用(2017年) • Jupyter Notebookで講義資料作成 • Pythonでアルゴリズムを記述 • 3要素(解説・コード・デモ)を配置 • GitHubに作りながら公開 • さっさと世に出す・隠さない • 次のような流れを90分で繰り返す 1. ノートの資料を読んで解説 2. コードを動かして見せる 3. コードを書いてもらう 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 7 資料とコードを一体化 画像を出力
講義の評価 • 評価 • 学生からはそこそこの評価 • 大学のFD委員会からも事例の紹介を依頼される • 自己評価: あまり手応えなし • ノートで講義はしにくい • 手を動かしてもらうには時間が短すぎる • 毎年同じ話をするのは非効率 • 講義の進め方がアドホックで方法論として弱い 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 8 自宅で勉強して、講義でコードを書いてほしい (つまり反転授業を目指す)
自習用ノートブックの作成 • 90分の講義用ではなく、もっと詳細な資料を作成 • 説明もコードも詳細に • コードについてはクラスにまとめる • 上から下に手続き的に進むコードには限界 • コードの順序が説明の順序に 合わなくなり、説明をpdfに分離 • Jupyter Notebookの良さがなくなりいまいち • pdfからコードを見に行くのが面倒 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 9 自習用ノートブック(失敗作) コ ー ド が 肥 大 化
書籍化 • 次のように改善すれば読むのが面倒にならない • Jupyter Notebook: 動くコードを掲載 • ドキュメント: 説明の下に動くコードを抜粋して掲載 • オープンなテキストにするか書籍化するか • これはプロに編集してもらったほうがいい • かなりの作業量なので印税はほしい • コードだけオープンに • Twitterで打診 • 翌日講談社さんから連絡 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 10 書籍の形式
できた書籍: 詳解確率ロボティクス • 2019年10月出版 • 現在3刷 • 好評いただいております • Amazonの評価 • ☆4.4 / 16件 • レビューのあるものはすべて☆5 (2020年5月20日現在) 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 11
詳解確率ロボティクスの構成 • 12章構成 • ひとつの章でひとつのアルゴリズム、 あるいは問題を扱う • 各章では数式を導出してコードに するという繰り返し • コードは図番をつけず、 本文の流れの中に掲載 • コードにはGitHub上のノートブックの セル番号を明記 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 12 コード 図 コード 本文 数式
Jupyter NotebookとGitHubの役割 • コードの閲覧場所 • 書籍から参照される • コードの書き始めから完成に向かって番号 • 動作確認用 • 番号が途中のものは、途中までちゃんと 動くように配慮 • シミュレータ 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 13
Pythonである理由 • 疑似コードの代わりにしやすい • 主観だが、カッコがないのが重要 • ただし、数式の記号がそのまま使えないのは欠点 • ライブラリ • numpy, scipy.stats • matplotlib, nbagg • SymPyも使ってみたい 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 14
苦労した点1:コードをどう掲載するか • 一行一行が長い • 二つ方法がある • スクリーンショット: 解像度に問題 • 文字で渡して編集してもらう: 見た目が変わる • 最終的にスクリーンショット方式で • Macで高解像度のものを撮影 • サイズを揃えること、コードに 変更があるときの差し替えに苦労 • 文字の大きさはギリギリ 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 15 コードと本文の字の大きさの違い(これはKindle版)
苦労した点2: 気力が持たない • この問題については出版社側で楽にしていただいた • 事前に制約があまりないことを伝えられる • ページ数 • カラーの色数 • 締め切りが一度延長 • FastSLAM2.0、変分推論の部分を書かずに提出 →「せっかくだから書きましょう」と編集担当の横山さんに勧められ1か月延長 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 16
出版後の作業 • 教科書だけあっても反転授業にはならない • コロナのこともあり、現在撮影中 • 講義で流すビデオではない • あとは講義の中で出す課題を 準備すれば完成 • Jupyter Notebookで穴埋め問題 • 後期の講義に間に合わせる予定 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 17 講義ビデオ 聞く、読む、(コードを)書く、動かす、 考える、と様々な学習手段を提供
まとめ • 詳解確率ロボティクス • 書いたのは1年弱だが構想や試作に3年 • 簡単ではないですが、自身の経験が踏み台になることを希望 • あまり言わないようにしているが、「上から授ける」に猛烈に反発して執筆 • 自身のシェル芸を通じたコミュニティー活動の経験から • 学会も元来、コミュニティーなのに(以下略) • 講義というものを再定義したい • Jupyter Notebookを用いた講義 • 講義で話ながら使う場合は、コードが少なくて済むなら有効 • 後期の講義に向け、ノートブックで問題を作る予定 2020/5/20 11:00 第64回システム制御情報学会研究発表講演会(SCI'20) 18

PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆