TensorFlow.jsの実践本を書きました
今年の春頃に以前"Deep Learning in the Browser"を書いた共著者、Christophから、TensorFlow.jsの本を書かないかと話をいただきました。彼が執筆の依頼を受けたらしいのですが、他に本をすでに書いていたらしく私に話がまわってきました。
TensorFlow.jsはとても進化の速いライブラリで"Deep Learning in the Browser"で紹介したことだけではカバーできないような面白いトピックがたくさんありましたので、チャレンジしてみることにしました。
こちらの記事にあるようにこれまで本を書いたことは何度かあるのですが、すべてのコンテンツをひとりで書くのはこれが初めてです。全部で300ページほどの分量に幾分挫けそうになりましたが、なんとかやり遂げることができました。
今回は、春からどのようにこの本を書いていたのかをたどっていきたいと思います。
アウトラインの作成
依頼を受けたときからなんとなく本のテーマは決まったいたのですが、実際にどのようなコンテンツにしていくかということは編集者の方と相談して決めます。出版社はPacktというイギリスの出版社でしたので、メールで何度もやりとりをしました。予め決まっていたこの本のテーマは下記です。
- TensorFlow.jsを使った機械学習のHands-On
- 一般的によく使われる機械学習のアルゴリズム、モデルを網羅した導入的な本にしたい
- できればこれからTensorFlow.jsにどのような機能が追加されるかといった発展的な内容も盛り込みたい
これらの情報を元に私の方でアウトラインを考えます。アウトラインはGoogle Docsで書いては直され、書いては直されを繰り返します。
このやりとりを4往復ほどしたのち、Packtの審査委員的な人たちにアウトラインが送られ最終的なジャッジがくだされます。そのためアウトラインがいまいちだと出版はナシということになります。(あるいは更に直せということになるかもしれません)最終的なアウトラインは下記のようになりました。
Section 1: The Rationale of Machine Learning and the Usage of TensorFlow.js
- Machine Learning for the Web
- Importing Pretrained Models into TensorFlow.js
- TensorFlow.js Ecosystem
Section 2: Real-World Applications of TensorFlow.js
- Polynomial Regression
- Classification with Logistic Regression
- Unsupervised Learning
- Sequential Data Analysis
- Dimensionality Reduction
- Solving the Markov Decision Process
Section 3: Productionizing Machine Learning Applications with TensorFlow.js
- Deploying Machine Learning Applications
- Tuning Applications to Achieve High Performance
- Future Work Around TensorFlow.js
TensorFlow.jsを基本的な機械学習にどう利用できるかというフォーカスがありましたので、ロジスティック回帰やK-Meansなどの昔からあるアルゴリズムを実装するパートを設けています。またDeep LearningやReinforcemeant Learningなど今話題の技術にも触れながら、バランス良くTensorFlow.jsでの実践を学ぶことができる構成になりました。
審査に通ると今度はタイムラインを決めます。どのくらいの期間で執筆が完了できるか、1ページあたり何日書けるかなどを元に各チャプターごとの締切が決められていきます。ちまみに休暇をとる予定も聞かれ、結構細かくスケジュールが決められていきました。
そしてこのあと実際に書いていくことになりました。
執筆
執筆にはTypeCloudというPacktが提供してれたシステムを使用します。画像や数式が書ける上、レビューのステータスなど細かく管理できるのでプロジェクトマネジメントも兼ねたツールとなっていました。
しかし、私は正しい英語をなるべく書いておきたかったので予めGrammarlyというサービスを使って、先に書いておいたものをコピーするスタイルにしました。
フォントや書式はGrammarlyとTypeCloudで異なるのでダイレクトにはコピペできないのですが、少なくとも文法やスペルで大きな間違いがないことを確認できました。図の多くはKeynoteを使って描画しました。
大体1日2ページ書けば間に合うペースの予定だったので、家に帰ってきて寝るまでの時間と週末を使って書いていました。あと休暇予定に入ってた期間も書いて時間稼ぎをしました :)
ドラフトを完成させるまでおよそ半年かかりました。
校正・レビュー
ドラフトを書き終えると校正、レビューがなされます。文章におかしなところがないかはもちろんのこと、テクニカルレビュアーという人がPacktにはおり彼らが記載されているコードが正しく動くかといったところまでチェックします。
下記が最終的なコードリポジトリですが、このディレクトリ構成やREADMEなんかもキレイに書いてくれました。
説明が曖昧だったり、わかりづらい部分を修正するように指摘を受けるので文章を推敲していきます。スペルや文法間違いに関しては編集者の方で意味が変わらない程度にどんどん修正されていったので私の方ですることはほとんどありませんでした。
このプロセスには1ヶ月ほどかかりました。
プロモーション
こういった推敲のプロセスを経て原稿自体はできあがるのですが、最後に本のプロモーションを行うことになります。私はTensorFlow.jsとWebベースでの機械学習が今後どうなるかといったテーマでインタビューを受け、それを記事にしてくれました。下記がPacktのブログに載せられました。
そのほかにも自分のブログに関連記事を書きました。
こういった準備を経て最終的に12月の頭に出版されることとなりました。実際に印刷された本が届くとちょっと感慨深い気持ちになります。
まとめ
なかなか大変な作業でしたが、ひとつの本を書くと多くの学びがあります。
- 英語で文章を書くのは大変
- 1人で1冊書き上げるのは大変
- 中でもアウトラインを決める段階は最も大変
- さらに動くコードを載せないといけないので更に大変
- Packtは執筆のためのサポートが手厚い
今回の本は"Hands-On Machine Learning with TensorFlow.js"というタイトルで出版されました。Webベースでの機械学習に興味がありTensorFlow.jsを使ってみようと思う方がいましたら、ぜひ手にとってみてください。
お読みいただきありがとうございます。もしよければスキやシェアしていただけると大変うれしいです!