途切れにくい輪読会スタイルの提案

# 1. はじめに
こんにちは [ミクシィアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/mixi) の16日目の記事です。

機械学習関連本で輪読会してます。現在、2冊目が終わったタイミングで下手したら、解散になります。部署をまたいだメンバーで実施しており、個人的に結構好きなので、継続する方法を模索しています。なので、輪読会が途切れないスタイルをなるべく参加者の労力増やさない方向で考えてみます。

~~対象読者が10人を切りそうですが気にせず書きます~~

機械学習に関連するエンジニアは、それ専門会社:Preferred Networks、Tier IVなどでもない限りそれほど多くならない印象なので、機械学習を使うプロジェクト「も」あるけれど、MLにかかわらないエンジニアのほうが何倍も多い組織にはこの記事が参考になるかもしれません。

他には、どのプロジェクトでもつかわれるわけではないけど、分野として確立している、例えば、(スマホでもフロントエンドでもなく)iOSのみ開発とかに絞って輪読会をしている人にも参考になるかもしれません。
-> 私見ですが、iOSエンジニアはML or MLOpsエンジニアより多そう


# 2. 個人的オススメ輪読会スタイル
先に個人的な結論を書いておきます。
- 担当者の準備: 資料と説明動画作成
- 参加者の準備: 特に無し。事前に本と資料と動画を事前に見てもOK
- 輪読会でやること: 説明動画視聴とその後に質疑応答や紹介された方法が使えそう/使いにくそう等の議論


# 3. 輪読会のスタイルの現状、問題点、理想
## 3.1. 現状

前提として、

- 毎週決まった時間に実施
- コロナ禍なので、Google Meet で集合
- 2人以上おやすみなら次週にスキップ
- 資料をdocbase(以外でもOK)にまとめて、発表者が当日に説明
- 輪読内容
    - 種本を選んで、通読
    - 1開催あたり、1人1時間以内で話せるくらい。本でいうと1章分が大体該当
- 担当者の決め方
    - 希望する章があれば、そこを担当できる。特になければ、順番に割当


## 3.2. 問題点(as is)
あくまで、私個人が感じた問題点です。
この輪読会自体、有志が集まって実施しているので、催促しすぎな印象もあります。

問題点
    1. 本業があるので、準備が間に合わない。自身の業務が忙しい週に担当になると準備が大変。
    2. 本業の突発的な差し込みがあるので、出席できない&N人以上休みだとその週はスキップというルール。この場合、次週開催になる。2週進まなかったことあり。
    4. テーマ(≒種本)設定が割と難しい。人それぞれ興味の範囲が異なるものの、興味のある回だけ出席するみたいなことが難しい。

## 3.3. 理想(to be)

あるべき

1. 継続的に輪読会を行う(なるべくスキップを防ぐ)
2. 新しい情報を得る(必ずしも種本に限らない)
3. 何かしらの情報・意見に対して、読んだ側の意見を交換すること
    - e.g.
    - ウチのプロジェクトで使うなら、こうするかな。
    - この手法、テーブルデータには使えるけれど、画像処理、自然言語処理には使えない手法にみえるなど

以下、具体的な対策案です。

### 3.3.1. 継続的に輪読会を行う(なるべくスキップを防ぐ)ために
#### 3.3.1.1 提案

本の内容を説明する動画を先に撮っておいて、輪読会の前半で流す。
後半はその内容を元に議論 or 感想をいうという方法が一案です。
本の内容を説明する動画は、参加者がアクセスできるところに残します。
後半は、特に残しません。

##### 3.3.1.2 理由

1時間参加するのが大変なときがありますし、有給を取っている場合もあります。ただし、輪読会がスキップされるのはデメリットに感じます。欠席した回に、どういうことが発表されたのかわかれば、あとから追えます。
現状、docbaseに残っています。残っていないのは、Google Meet上の情報(≒動画)です。細分化すると、前半の本自体の説明と後半の本の内容の質疑応答です。前半が残っていると、途中から参加したい人の敷居が下がるという効果もあります。

#### 3.3.1.3. 説明動画作成
これまで、その回の担当者が輪読会時に話していた内容を撮影しておけばよいです。Google Meetで1人Meetingをして録画機能をつかうと一番お手軽ですが、手段は何でも良いと思います。

説明動画は、大体30〜45分の分量になるように割り当てると良さそうです。
これは、種本の輪読以外をしたくなったとき(後述)に、30〜45分の動画になる分量にすればよいという目安にもできると思います。

担当者は輪読会が始まるまでに動画を用意します。もっと早くてもよいです。むしろ推奨されます。

余談1
Udemy userからすると、動画1本撮りをするより、節などの単位で細かく分けたほうが良いです。
間違えたことがわかったときに撮りなおししやすいので。

余談2
動画を撮って記録すると、資料を1週間前に作ったけど、当日資料を見たら結構忘れていたということを防げるところもおすすめポイントです。


### 3.3.2.  新しい情報を得る(必ずしも種本に限らない)

ある程度種本は決まっている方がテーマがわかっているのがメリットですが、強くこだわる必要はないと思っています。例えば、特定の情報媒体(今は本ですが、論文や技術記事でも良い)で、自分が良いと思ったところだけ紹介してもいいですし、種本をすべて読む必要もなく、興味のある章だけ拾い読みでもいいと思っています。

現状、担当の割当がほぼ順番になっていますが、個々人で興味の対象が異なるはずなので、興味のない本 or 興味のない章なら不参加で、興味のある章と担当を交換するのはありだと思います。モデリングをメインにやっているひとは、論文の紹介でもいいですし、機械学習に関連するライブラリやクラウドサービスの紹介というパターンも考えられます。本の輪読に絞るなら、1,2章は読むけど、3章は誰もしたがらないので飛ばして、4章は読むというような進め方です。


■進め方の例

機械学習デザインパターン を輪読すると仮定して書きます。


<details><summary> 機械学習デザインパターンの目次(長いので折りたたみ) </summary><div>

https://www.oreilly.co.jp/books/9784873119564/ より抜粋

```text
1章　機械学習デザインパターンの必要性
    1.1　デザインパターンとは
    1.2　本書の利用方法
    1.3　機械学習の用語
    1.4　機械学習の共通課題
    1.5　まとめ

2章　データ表現のパターン
    2.1　シンプルなデータ表現
    2.2　デザインパターン1：特徴量ハッシュ（Hashed Feature）
    2.3　デザインパターン2：埋め込み（Embeddings）
    2.4　デザインパターン3：特徴量クロス（Feature Cross）
    2.5　デザインパターン4：マルチモーダル入力（Multimodal Input）
    2.6　まとめ

3章　問題表現のパターン
    3.1　デザインパターン5：問題再設定（Reframing）
    3.2　デザインパターン6：マルチラベル（Multilabel）
    3.3　デザインパターン7：アンサンブル学習（Ensemble）
    3.4　デザインパターン8：カスケード（Cascade）
    3.5　デザインパターン9：中立クラス（Neutral Class）
    3.7　まとめ

4章　モデル訓練のパターン
    4.1　典型的な訓練ループ
    4.2　デザインパターン11：価値ある過学習（Useful Overfitting）
    4.3　デザインパターン12：チェックポイント（Checkpoints）
    4.4　デザインパターン13：転移学習（Transfer Learning）
    4.5　デザインパターン14：分散戦略（Distribution Strategy）
    4.6　デザインパターン15：ハイパーパラメータチューニング（Hyperparameter Tuning）
    4.7　まとめ

5章　対応性のある運用のパターン
    5.1　デザインパターン16：ステートレスサービング関数（Stateless Serving Function）
    5.2　デザインパターン17：バッチサービング（Batch Serving）
    5.3　デザインパターン18：継続的モデル評価（Continued Model Evaluation）
    5.4　デザインパターン19：2段階予測（Two-Phase Predictions）
    5.5　デザインパターン20：キー付き予測（Keyed Predictions）
    5.6　まとめ

6章　再現性のパターン
    6.1　デザインパターン21：変換（Transform）
    6.2　デザインパターン22：繰り返し可能な分割（Repeatable Splitting）
    6.3　デザインパターン23：スキーマブリッジ（Bridged Schema）
    6.4　デザインパターン24：ウィンドウ推論（Windowed Inference）
    6.5　デザインパターン25：ワークフローパイプライン（Workflow Pipeline）
    6.6　デザインパターン26：特徴量ストア（Feature Store）
    6.7　デザインパターン27：モデルバージョニング（Model Versioning）
    6.8　まとめ

7章　責任あるAIのパターン
    7.1　デザインパターン28：経験的ベンチマーク（Heuristic Benchmark）
    7.2　デザインパターン29：説明可能な予測（Explainable Predictions）
    7.3　デザインパターン30：公平性レンズ（Fairness Lens）
    7.4　まとめ

8章　パターンのつながり
    8.1　パターンの一覧
    8.2　パターン間の相互作用
    8.3　機械学習プロジェクトにおけるパターン
    8.4　利用場面とデータ種別ごとに共通のパターン
```
余談ですが、「機械学習デザインパターン」の参考情報
- 原著:[Machine Learning Design Patterns](https://www.oreilly.com/library/view/machine-learning-design/9781098115777/) 2020年10月出版
- 筆者謹製リポジトリ:https://github.com/GoogleCloudPlatform/ml-design-patterns
- 筆者による解説とその字幕: https://cloudonair.withgoogle.com/events/google-mlsummit/watch?talk=d1-session5

</div></details>


例1 モデリングが関心事のMLエンジニアの場合、
2,3,4章に興味ありなので、どれかを担当。(分量的には、3or4節くらいが良さそう)

例2 運用を効率化したいMLOpsエンジニアの場合
5,6章に興味ありなので、どれかを担当。(分量的には、3or4節くらいが良さそう)

例3 希望者がいない章、節の場合
8章は興味ありの人が居なかった or N人以下だったので、輪読会の対象外。

例4 輪読中の本以外で興味のあった情報
- KaggleのXXXのコンペが面白かったので紹介。
- feature storeでAWS向けのプロダクトが知りたかったので、SageMaker Feature Storeを調べたので紹介。

など

### 3. 何かしらの情報・意見に対して、読んだ側の意見を交換すること

内容説明の動画ができている前提なので、前半は動画視聴時間です。すでに見ている人は内職OK or 後半から参加で良いと思います。
説明動画を見るだけだと、Udemyを見ているのと何も変わらないので、せっかく集まっていることを活かして、後半に質疑応答や情報交換をするのは継続したいです。プロジェクト固有の録画しないほうがいい話などは、こちらで話すことを想定しています。


# 4. おわりに
輪読会が途切れないスタイルをなるべく参加者の労力増やさない案で考えてみました。もともと輪読会中に説明していた内容を事前に録画するというところだけが変わるので、準備の時間はそれほど増えない割に、メリットが複数ある方法だと思います。輪読会は、機械学習に限らず行われるので、よかったらこのスタイルを使ってみてください。