Professional Machine Learning Engineerの学習メモ

# はじめに
Google CloudのProfessional Machine Learning Engineerの学習中のメモとなります。

https://cloud.google.com/learn/certification/machine-learning-engineer?hl=ja

# PrecisionとRecallとF1スコア
## Presicion(適合率)
モデルが正解と予測したデータのうち、実際に正解だった割合。
精度を重要視するときに使用することが多い。(誤検出による影響が大きい場合)

## Recall(再現率)
実際には正解であるデータのうち、どれだけを正しく正解と予測できたかの割合。
網羅性を重要視するときに使用することが多い。(検出漏れによるリスクが大きい場合)
偽陰性(False Negative)を最小限に抑えることに重点を置いている。

## F1スコア
PresicionとRecallをバランスよくとるのに最適。
偽陽性(False Positive)と偽陰性(False Negative)両方を最小限に抑えることに重点を置いている。


# L1正則化とL2正則化
## L1正則化
不要な重みを0に近づけやすくし、モデルがシンプルになる。
多くの重みが0になり、重要な特徴量が残る。
外れ値の影響を受けにくい。

## L2正則化
重みの分散を小さくする。
外れ値の影響を受けやすい。


# 知識ベースフィルタリングと協調フィルタリングモデルの違い
## 知識ベースフィルタリング(knowledge-based filtering model)
ユーザーの好みやニーズを、具体的な知識やルールに基づいて判断する。

### 例
- 「SF小説が好きな人」には、「SFジャンルの小説」をおすすめする。
- ECサイトで、「カメラ」を検索した人に、「カメラ関連のアクセサリー」をおすすめする。

## 協調フィルタリング(collaborative-based filtering model)
ユーザーの過去の行動履歴（評価、購入履歴など）に基づいて、他のユーザーの行動パターンを参考に、おすすめアイテムを予測する。

### 例
- ある映画を「面白い」と評価したユーザーが多かった場合、その映画をまだ見ていないユーザーにおすすめする。
- 音楽ストリーミングサービスで、特定のアーティストの曲をよく聞く人に、同じようなアーティストの曲をおすすめする。

## 参考
https://developers.google.com/machine-learning/recommendation/overview/candidate-generation?hl=ja


# カテゴリカルクロスエントロピーとスパースカテゴリカルクロスエントロピーの違い
## カテゴリカルクロスエントロピー (Categorical Crossentropy)
ラベルの形式がOne-hotエンコーディングされているときの分類問題のときに最適。

### 例
3つのクラス（猫、犬、鳥）を分類する場合、「犬」が正解なら、ラベルは [0, 1, 0] のようになる。

## スパースカテゴリカルクロスエントロピー (Sparse Categorical Crossentropy)
正解ラベルの形式が整数値の分類問題のときに最適。

### 例
3つのクラス（猫、犬、鳥）を分類する場合、「犬」が正解なら、ラベルは 1 のようになる (クラスのインデックス)。

## 参考
https://fmorenovr.medium.com/sparse-categorical-cross-entropy-vs-categorical-cross-entropy-ea01d0392d28

# DataflowでのRunInference API
モデルをエンドポイントにデプロイする代わりに、RunInference APIを使用することでDataflow内で推論可能になる。
レイテンシを最小限に抑えられる。

https://cloud.google.com/dataflow/docs/notebooks/run_custom_inference

# MirroredStrategyとMultiWorkerMirroredStrategyの違い

## MirroredStrategy
1台のマシンの複数のGPUでの分散学習。

## MultiWorkerMirroredStrategy
複数のマシンの複数のGPUでの分散学習。

## 参考
https://www.tensorflow.org/guide/distributed_training?hl=ja#%E3%82%B9%E3%83%88%E3%83%A9%E3%83%86%E3%82%B8%E3%83%BC%E3%81%AE%E7%A8%AE%E9%A1%9E

# スキュー(Skew)とドリフト(Drift)
## スキュー(Skew)
本番環境での特徴データの分布が、モデルのトレーニングに使用される特徴データの分布と異なる状態。

## ドリフト(Drift)
本番環境において特徴データの分布が時間の経過とともに大きく変化する状態。

## 参考
https://cloud.google.com/vertex-ai/docs/model-monitoring/overview?hl=ja#v1


# 機密データを分類するとき
1. データを隔離(Quarantine)バケットに格納する
2. Cloud DLPを使用してデータを検査する
3. 結果を適切なバケット(機密バケット or 非機密バケット)に移動させる

https://cloud.google.com/sensitive-data-protection/docs/automating-classification-of-data-uploaded-to-cloud-storage?hl=ja#building_the_quarantine_and_classification_pipeline

# Vertex AI PipelinesでのTensorFlow Extended(TFX)とKubeflow Pipelinesの使い分け

TensorFlow Extended(TFX)は、テラバイト単位の構造化データまたはテキストデータを処理するTensorFlowを使用する場合に適している。
Kubeflow Pipelinesは、それ以外のケースで使用する。

https://cloud.google.com/vertex-ai/docs/pipelines/build-pipeline?hl=ja#sdk

# TPUにおけるbfloat16とfloat32の違い
 TPUにおいて、bfloat16の演算はfloat32よりも高速に実行できる。
精度を落とした浮動小数点数を使用すると、モデルの精度を失わずに収束までの時間を短縮できる。

https://cloud.google.com/tpu/docs/bfloat16?hl=ja

# BigQueryのデータをTensorFlowで読み込む方法
BigQueryのデータをTensorFlowへ直接読み込むことが可能。
データ取り込みのボトルネックを最小限に抑えられる。

https://www.tensorflow.org/io/api_docs/python/tfio/bigquery

# 不均衡データセットの対応
ダウンサンプリング(Downsampling)とアップウェイト(Upweight)を行う。

## ダウンサンプリング(Downsampling)
多数クラスのデータを減らして、少数クラスとの割合を緩和させる。

## アップウェイト(Upweight)
少数クラスの学習時に重みを付与して、重要度を上げる。

## 参考
https://developers.google.com/machine-learning/crash-course/overfitting/imbalanced-datasets?hl=ja

# カテゴリカル変数をモデルに入力するとき
one-hotエンコーディングを行う。
カテゴリ間の大小関係を誤解させないようにすることができる。

もしカテゴリ変数を整数値に変換してしまうと、大小関係を学習してしまう恐れがある。

# GPUとTPUのデバッグの容易さ
GPUはデバッグがしやすい。
TPUはトレーニングエラーやTPUエラーのデバッグが難しい。

https://cloud.google.com/tpu/docs/system-architecture-tpu-vm?hl=ja#tpu-node-arch

# BigQuery MLの自動特徴前処理
BigQuery MLは、`CREATE MODEL`を使用すると自動前処理が実行される。
自動前処理は、欠損値の補完と特徴量の変換が行われる。

https://cloud.google.com/bigquery/docs/auto-preprocessing?hl=ja

# Tabnet 
Tabnet（Tabular Attention Network）とは、Googleが開発した、テーブルデータ（表形式のデータ）を扱うための深層学習モデル。
モデルがどのように予測に至るのかを説明することが可能。

https://cloud.google.com/blog/ja/products/ai-machine-learning/improved-tabnet-on-vertex-ai

# Reduction Server
WorkerとReducerの2つのノードで、計算を行う仕組み。
Workerは主にGPU上でモデルを実行し勾配を計算する。
ReducerはCPU上でWorkerの結果を集約する。

https://cloud.google.com/blog/ja/products/ai-machine-learning/faster-distributed-training-with-google-clouds-reduction-server

# Vertex AI WorkbenchとColab Enterpriseの使い分け
Vertex AIには、ノートブック環境がVertex AI WorkbenchとColab Enterpriseの2つが用意されている。

## Vertex AI Workbench
VMインスタンスを介してノートブック環境が提供されるので、インフラストラクチャを細かく管理することができる。

## Colab Enterprise
インフラストラクチャの管理に時間を費やさない(マネージド コンピューティング)でノートブック環境を使用できる。
ノートブックを共有して共同編集が可能。

## 参考

https://cloud.google.com/vertex-ai/docs/workbench/notebook-solution?hl=ja