关于谷歌云机器学习工程师专家认证
Feb 7, 2025
对认证这类一直并无多大兴致,不过随着年龄渐长以及市场变化,却又似乎需要它来“证明”资历。尽管从多年前接触投放分析到现在,实操和应用环境会遇到的问题大致清楚,但缺乏系统性的知识结构。
考试本身问题不会太大,在webassessor注册考试,单科目费用是200美金,可以查询附近的授权考点,如果网络允许也可以远程考试,这需要全程视频监考,且限制性条件很多,一定要充分熟悉规则和流程。考试语言可以选择英语和日语等,没有中文。整体上全程还是很顺利。考前在reddit上看到一些经验传授,确实对基础概念的认识至关重要,但应用场景还是更为关键。试题内容都是应用题(假设场景选择方案),这样的感觉也很新鲜。
这次花了一些时间,参照官方指南简单过了一下谷歌云机器学习的知识结构,在Gemini的帮助下做个整理:
1. ML基础与问题建模
- 业务用例转为 ML 问题:
- 核心: 识别业务目标 -> 找到匹配的 ML 方法。
- 考虑: 影响、成功标准、可用数据、预算、时间线。
- 案例: 预测房价 (回归), 识别图像中的物体 (分类)。
- 机器学习方法 (类型):
- 监督学习 (Supervised): 数据有标签。
- 用途: 分类 (预测类别,如狗/猫)、回归 (预测数值,如房价)。
- 案例: 图像分类 (狗 vs 猫)。
- 无监督学习 (Unsupervised): 数据无标签。
- 用途: 聚类 (分组,如按位置聚集房屋)、主题建模 (分组文档)。
- 案例: 将房屋按地理位置分组。
- 半监督学习 (Semi-supervised): 少量标签数据 + 大量无标签数据。
- 用途: 当标签数据稀缺时扩展训练集。
- 案例: 欺诈检测 (已知部分欺诈案例)。
- 监督学习 (Supervised): 数据有标签。
- ML 成功指标: 衡量模型性能。
- 分类:
- Accuracy: 总正确率 (简单用例)。
- Precision: 预测为正例中实际为正例的比例 (降低假正例)。
- 案例: 垃圾邮件检测 (不希望将非垃圾邮件标记为垃圾邮件)。
- Recall: 实际为正例中预测为正例的比例 (降低假负例)。
- 案例: 疾病检测 (不希望漏检病人)。
- F1: Precision 和 Recall 的调和平均值。
- AUC ROC: 衡量分类器区分正负例的能力 (平衡数据)。
- AUC PR: Precision-Recall 曲线下面面积 (不平衡数据)。
- 案例: 信用欺诈检测 (欺诈案例很少)。
- 回归:
- MAE: 平均绝对误差 (对异常值鲁棒)。
- RMSE: 均方根误差 (惩罚大错误)。
- 案例: 预测房价,不希望出现极大预测误差。
- RMSLE: 均方根对数误差 (惩罚低估)。
- 分类:
- 负责任的 AI: 考虑公平性、可解释性、隐私、安全。
- 公平性 (Fairness): 检测并减轻模型中的偏见。
- 案例: 信用评分不因种族/性别产生偏见。
- 可解释性 (Explainability): 理解模型为何做出特定预测。
- 案例: 解释拒绝贷款申请的原因。
- 隐私 (Privacy): 保护敏感数据。
- 案例: 训练数据包含病人的医疗记录。
- 安全 (Security): 防止模型/数据的意外泄露或攻击。
- 公平性 (Fairness): 检测并减轻模型中的偏见。
2. 数据与特征工程
-
数据可视化: 探索和理解数据。
- 箱线图 (Box Plot): 显示分位数、中位数、异常值。
- 用途: 理解数据分布、识别异常值。
- 散点图 (Scatterplot): 显示两个变量关系。
- 用途: 查找特征间的相关性。
- 箱线图 (Box Plot): 显示分位数、中位数、异常值。
-
统计基础:
- 均值 (Mean): 平均值 (受异常值影响)。
- 中位数 (Median): 中间值 (对异常值鲁棒)。
- 众数 (Mode): 出现次数最多的值。
- 标准差 (Standard Deviation): 数据分散程度 (用于识别异常值)。
- 相关性 (Correlation): 特征间关系的归一化度量 (-1到+1)。
- 用途: 检测特征间的强关系、潜在的标签泄露。
- 案例: 预测疾病时,医院名称与目标变量高度相关。
-
数据质量与可靠性:
- 数据偏差 (Data Skew): 数据分布不均匀 (如收入分布)。
- 处理: Log 缩放、归一化、欠采样/过采样。
- 异常值检测 (Outlier Detection): 值远超其他数据点 (如收入中的亿万富翁)。
- 处理: 删除、填充 (均值/中位数/众数)、剪裁 (Clipping)。
- 缺失数据 (Missing Data): 数据缺失。
- 处理: 删除行/列 (如果缺失多)、填充 (Impute: 均值/中位数/众数/最频繁值)、LOCF (Last Observation Carried Forward)、插值 (时间序列)、使用可处理缺失值的算法。
- 数据偏差 (Data Skew): 数据分布不均匀 (如收入分布)。
-
建立数据约束: 定义数据模式 (Schema: 类型、范围、格式、分布)。
- 工具: TensorFlow Data Validation (TFDV)。
- 用途: 在管道中一致地验证数据、捕获异常 (Skew/Drift)。
-
数据拆分策略:
- 随机拆分: 简单用例。
- 基于时间拆分: 时间序列数据或在线系统,训练数据早于测试/验证数据。
- 案例: 预测未来 30 天用户生命周期价值 (LTV),训练用前 29 天数据,验证用第 30 天数据。
- 处理不平衡数据: 下采样多数类,同时给少数类更高权重 (Downsample/Upweight)。
- 案例: 1000 个非欺诈交易,5 个欺诈交易。
-
数据泄露 (Data Leakage): 测试集信息意外泄露到训练集。
- 原因: 目标变量作为特征、随机拆分时间序列、对完整数据集进行预处理。
- 避免: 基于时间拆分、对训练/测试集独立预处理。
-
特征工程 (Methods): 将原始数据转换为有用特征。
- 一致的数据预处理: 训练和服务期间应用相同转换。
- 方法: 预训练转换 (转换代码独立) vs 模型内转换 (转换代码在模型内)。
- 工具: tf.Transform (确保预处理一致性,避免训练-服务偏差)。
- 编码结构化数据类型:
- 数值特征: 归一化 (Normalization: Min-Max, Z-score)、缩放 (Scaling)、分桶 (Bucketing)。
- 用途: 帮助梯度下降收敛、防止 NaN、处理宽范围/偏差数据。
- 类别特征:
- 标签编码 (Label Encoding)/整数编码: 赋整数 (适合有序/小词汇量)。
- 独热编码 (One-Hot Encoding): 创建二元列 (适合无序)。
- 案例: 编码颜色 (红 -> 00, 蓝 -> 01)。
- 词汇表外 (OOV): 将稀有类别归为一类 (减少训练时间)。
- 特征哈希 (Feature Hashing): 应用哈希函数直接映射到索引 (适合大词汇量,无需词汇表)。
- Embedding: 密集向量表示 (文本、大词汇量)。
- 数值特征: 归一化 (Normalization: Min-Max, Z-score)、缩放 (Scaling)、分桶 (Bucketing)。
- 特征交叉 (Feature Crosses): 组合两个或多个特征来捕捉非线性关系。
- 案例: 纬度 x 经度 x 时间段 预测区域人群密度。
- 特征选择: 选择最重要的特征子集。
- 用途: 减少噪音、训练时间、计算资源、提高性能。
- 方法: 降维 (Dimensionality Reduction: PCA, t-SNE)、基于模型的选择 (如随机森林特征重要性)。
- 一致的数据预处理: 训练和服务期间应用相同转换。
-
类不平衡: 训练数据中不同类的样本数量不等。
- 处理: 下采样、上采样、类权重 (Upweighting)。
- 影响: 导致模型偏向多数类。Precision/Recall/AUC PR 是关键指标。
3. 模型构建与训练
-
框架选择与模型并行:
- 分布式训练: 在多节点/多 GPU 上训练大模型。
- 数据并行 (Data Parallelism): 数据分块,模型复制到每个节点/GPU。同步 (Synchronous) vs 异步 (Asynchronous)。
- 模型并行 (Model Parallelism): 模型层/部分分到不同 GPU (解决模型过大单 GPU 放不下)。
- TensorFlow 分布式策略:
tf.distribute.Strategy
(Mirrored, MultiWorkerMirrored, TPUStrategy, ParameterServerStrategy)。
-
建模技术:
- 神经网络: ANN (一层隐藏层), DNN (多层隐藏层), CNN (图像), RNN/LSTM (序列数据)。
- 损失函数 (Loss Function): 衡量预测误差 (与输出层激活函数/问题类型相关)。
- 案例: 均方误差 (回归),二元交叉熵 (二元分类),分类交叉熵 (多类分类)。
- 梯度下降 (Gradient Descent): 优化算法,调整模型权重。
- 学习率 (Learning Rate): 调整步长 (太小慢,太大跳过最优值)。
- 批量大小 (Batch Size): 每次梯度更新使用的样本数 (大小影响训练速度和泛化能力)。
- Epoch: 完整数据集遍历一次。
-
超参数 (Hyperparameters): 模型训练前设置的参数 (学习率、批量大小、层数、单元数)。
- 调优重要性: 影响模型性能和收敛。
-
迁移学习 (Transfer Learning): 在一个任务上训练的模型,复用于另一个相关任务。
- 用途: 利用预训练模型快速启动、处理数据量少的情况。
- 案例: 使用 ImageNet 预训练模型识别特定物体。
- 用途: 利用预训练模型快速启动、处理数据量少的情况。
-
半监督学习 (Semi-supervised Learning): 利用少量标签数据指导大量无标签数据的学习。
- 用途: 标签数据稀缺时的分类或聚类。
-
数据增强 (Data Augmentation): 对现有数据进行微小修改以生成新训练样本。
- 用途: 增加训练数据量、减轻过拟合。
- 方法: 离线 (预生成) vs 在线 (训练时即时生成)。
- 案例: 旋转、翻转、剪裁图像。
-
模型泛化 (Generalization): 模型在新数据上表现良好。
- 欠拟合 (Underfitting): 模型太简单,无法学习到数据模式 (高 Bias, 低 Variance)。
- 处理: 增加模型复杂度、增加特征、增加 Epoch。
- 过拟合 (Overfitting): 模型学习到训练数据的噪音 (低 Bias, 高 Variance)。
- 处理: 正则化、Dropout、Early Stopping、数据增强、交叉验证。
- Bias-Variance Trade-Off: 模型复杂度和泛化能力之间的权衡。
- 正则化 (Regularization): 在损失函数中加入惩罚项,限制模型复杂度。
- L1 (Lasso): 强制权重接近 0 (特征选择)。
- L2 (Ridge): 强制权重变小但不为 0 (模型更稳定)。
- 梯度问题:
- 梯度爆炸 (Exploding Gradients): 梯度变得非常大 (处理: Batch Normalization, 降低学习率)。
- 梯度消失 (Vanishing Gradients): 梯度变得非常小 (处理: ReLU 激活函数)。
- 欠拟合 (Underfitting): 模型太简单,无法学习到数据模式 (高 Bias, 低 Variance)。
-
模型训练与超参数调优 (Vertex AI): 在 Vertex AI 中运行训练。
- Vertex AI Workbench: 基于 JupyterLab 的开发环境。
- 用途: 探索数据、开发模型、与 GCP 服务集成。
- 笔记本类型: 用户管理 (更多控制) vs 托管 (更易管理,自动关机、集成存储)。
- 功能: 集成 GCS/BigQuery、Git 集成、可调整计算资源 (CPU/GPU)、可执行/计划笔记本。
- Vertex AI 训练: 托管服务运行训练作业。
- 作业类型: 自定义作业 (运行自定义代码)、超参数调优作业、训练管道。
- 数据集选项: 非托管 (直接 GCS/BQ) vs 托管 (Vertex AI Dataset,用于标签、谱系、自动拆分)。
- 容器选项: 预构建容器 (支持流行框架)、自定义容器 (打包自己的环境/代码)。
- 分布式训练: 配置 Worker Pool 指定机器类型、副本数、加速器。
- 超参数调优: Vertex AI 的一项功能,自动搜索最佳超参数组合。
- 原理: 运行多次试验 (Trials),优化指定指标。默认使用 Bayesian Optimization。
- Vertex AI Vizier: 独立的黑盒优化服务,可用于 ML 和非 ML 场景。
- 跟踪训练指标: 监控训练过程。
- 工具: Interactive Shell (调试容器内部)、TensorFlow Profiler (性能分析)、What-If Tool (模型行为、预测解释)。
- Vertex AI Workbench: 基于 JupyterLab 的开发环境。
-
再训练/重新部署评估:
- 数据漂移 (Data Drift): 生产数据统计分布变化 (输入数据本身)。
- 概念漂移 (Concept Drift): 输入与目标变量关系变化。
- 何时再训练: 定期、基于性能下降、基于数据变化。
4. 部署与服务
- 伸缩预测服务: 将训练好的模型投入生产。
- TensorFlow Serving: 托管 TensorFlow SavedModel、处理模型版本和服务。
- SavedModel: 训练输出,包含完整图和参数,无需原始代码。
- 预测请求: REST/gRPC,输入数据通常为 JSON。
- SignatureDef: 定义模型的输入/输出格式。
- TensorFlow Serving: 托管 TensorFlow SavedModel、处理模型版本和服务。
- 服务选项 (Google Cloud):
- Vertex AI Prediction: 托管在线和批量预测服务。
- 在线预测 (Online Prediction): 实时低延迟预测。
- 部署: 部署 Model 到 Endpoint。
- 流量拆分: 将流量按比例路由到不同模型版本 (A/B测试)。
- 卸载 Endpoint: 不使用时停止计费。
- 批量预测 (Batch Prediction): 对批量数据进行预测 (关注吞吐量/成本)。
- 输入: 指向 BigQuery 表或 Cloud Storage 文件 (JSONL, TFRecord, CSV)。
- 输出: 保存到 BigQuery 表或 Cloud Storage。
- 实时特征:
- 静态特征: 值不随时间快速变化 (存储在低延迟 NoSQL DBs)。
- 架构: Dataflow 处理 -> Datastore/Firestore 存储 -> ML Gateway (App Engine) 查询。
- 动态特征: 基于实时事件计算/聚合 (需要流式处理)。
- 架构: Pub/Sub -> Dataflow (流处理/聚合) -> Bigtable (低延迟存储) -> ML Gateway。
- 静态特征: 值不随时间快速变化 (存储在低延迟 NoSQL DBs)。
- 预测缓存: 预计算批量预测结果到低延迟存储,在线服务直接查询 (降低延迟)。
- 架构: 批量预测作业 -> Firestore (Predictions Store) -> ML Gateway。
- 最小化延迟:
- 模型层面: 使用更小/更简单的模型。
- 服务层面: 使用低延迟存储、缓存、高效硬件。
- 测试目标性能: 确保模型在生产环境中按预期工作。
- 检查: 训练-服务偏差 (Training-serving skew)、数据质量、模型年龄、数值稳定性 (NaN/null)。
- 工具: Vertex AI Model Monitoring, Vertex AI Feature Store。
- 配置触发器与管道调度: 自动化训练和预测作业。
- 工具: Cloud Scheduler (Cron 作业), Vertex AI Managed Notebooks (内置调度), Cloud Build (CI/CD 触发), Cloud Functions (事件触发, Pub/Sub), Cloud Workflows (编排服务链)。
5. MLOps 与维护
-
自动化与编排 ML 管道:
- MLOps 管道: 自动化机器学习工作流的步骤 (数据处理、训练、部署)。
- 编排框架: 管理和调度管道。
- Vertex AI Pipelines: 托管、无服务器、集成元数据/谱系、运行 Kubeflow/TFX 管道。
- Kubeflow Pipelines: 基于 Kubernetes,可移植、灵活 DSL,运行在 GKE 或本地。
- Apache Airflow (Cloud Composer): 托管、基于 Python DAG,通用工作流编排 (尤其 ETL/ELT)。
- TFX (TensorFlow Extended): 基于 TensorFlow,提供预构建组件 (数据验证、转换、训练等),可由上述框架编排。
- 系统设计:
- Kubeflow DSL: 使用 Python 定义管道组件和关系。
- TFX: 使用 TFX 库和组件构建管道。
- 调度管道:
- Vertex AI Pipelines: Cloud Scheduler 或 Cloud Function (Pub/Sub 触发)。
- Kubeflow Pipelines: Cloud Scheduler, Pub/Sub/Cloud Functions 事件触发, 或内置调度 (Argo)。
-
自动化模型再训练:
- 再训练策略: 基于性能下降、数据变化 (Data/Concept Drift) 或定期。
- CI/CD: 集成持续集成/持续交付到 ML 管道 (Level 2 MLOps)。
-
跟踪与审计元数据:
- Vertex ML Metadata: 托管服务,记录和查询 ML 系统产生的元数据和 artifacts。
- 数据模型: Artifacts (数据、模型等)、Context (分组,如实验)、Execution (步骤)。
- 谱系 (Lineage): 跟踪 artifacts 的来源和关系。
- 模型监控: Vertex AI Model Monitoring。
- Vertex ML Metadata: 托管服务,记录和查询 ML 系统产生的元数据和 artifacts。
-
识别 ML 解决方案风险:
- 构建安全 ML 系统: 加密 (静止、传输、使用), IAM (权限)。
- 负责任的 AI 实践: Bias, Fairness。
- 模型可解释性: Vertex Explainable AI。
-
维护 ML 解决方案 (MLOps 细节):
- MLOps 成熟度级别:
- Level 0 (手动/战术): 手动步骤,模型文件移交部署团队。
- Level 1 (战略自动化): 自动化持续训练 (CT),基于新数据触发。模型训练过程编排。
- Level 2 (CI/CD 自动化): 自动化 CI/CD 流程,从代码到部署完全自动化。集成测试。
- 再训练与版本控制:
- 再训练触发: 基于性能下降、数据变化、定期。考虑成本和再训练时间。
- 模型版本控制: 对输入/输出相似且用途相同的模型,部署新版本 (解决向后兼容)。Model Registry 跟踪。
- 模型 vs 版本: 行为不同/用途不同时部署新模型,行为相似/用途相同时部署新版本。
- Feature Store (详见 Ch12):
- 问题: 特征 ad hoc、难以共享、训练/服务差异。
- 解决方案: 集中式存储、版本控制、批/在线访问。
- Vertex AI Feature Store: 托管服务。数据模型: Featurestore -> EntityType -> Feature -> FeatureValue (时间序列模型)。支持批/流摄取。
- Vertex AI 权限模型: IAM (项目级、资源级角色)。自定义服务账号 (最小权限)。
- 访问透明度: Cloud Audit Logs, Access Transparency Logs (记录 Google 员工访问)。
- 常见训练/服务错误: 输入格式/编码、Tensor Shape 不匹配、内存不足、签名不匹配。
- MLOps 成熟度级别:
6. BigQuery ML
- 是什么: 在 BigQuery 中使用 SQL 进行 ML。无服务器、易于使用,适合数据分析师。
- 数据访问:
- BigQuery Web Console: 直接写 SQL 查询。
- Vertex AI Workbench Notebooks: 使用 BigQuery Magic (%%bigquery) 或 Python Client API。
- Python API:
google.cloud.bigquery
库。
- BigQuery ML 算法: 支持回归、分类、预测 (ARIMA_PLUS)、聚类 (KMEANS)、矩阵分解 (推荐系统)、降维 (PCA, AUTOENCODER)、DNN (DNN_CLASSIFIER, DNN_REGRESSOR 等)。
- 创建模型:
CREATE MODEL model_name OPTIONS(...) AS SELECT ...
。指定model_type
(回归, 分类, 预测, 聚类等),input_label_cols
(目标列)。SELECT 语句用于准备训练数据。
- 创建模型:
- 模型训练:
CREATE MODEL
语句触发训练作业。 - 模型评估:
ML.EVALUATE(MODEL model_name, table_name)
。 - 预测:
ML.PREDICT(MODEL model_name, table_name)
。输出包含预测结果和输入列的表。 - 可解释性: 在
CREATE MODEL
时设置OPTIONS(enable_global_explain=TRUE)
。- 全局解释:
ML.GLOBAL_EXPLAIN(MODEL model_name)
(特征重要性)。 - 预测解释:
ML.EXPLAIN_PREDICT(MODEL model_name, table_name)
(单个预测归因)。
- 全局解释:
- BigQuery ML vs Vertex AI Tables:
- BQML: 适合分析师 (熟悉 SQL, 表格数据)。
- Vertex AI Tables: 适合 ML 工程师 (熟悉 Python/框架, 所有数据类型, 更多控制)。
- 与 Vertex AI 的互操作性:
- 访问公共数据集: 在 BQ 和 Vertex AI 中均可访问 BQ 公共数据集。
- 导入数据: 从 BQ 直接导入数据到 Vertex AI Dataset。
- Vertex AI Workbench: 直接访问 BQ 表。
- 分析测试预测数据: 从 Vertex AI 导出预测结果到 BQ 进行分析。
- 导出 BQML 模型: 导出到 Vertex AI Model Registry (注意: 包含
TRANSFORM
的模型不可导出)。
- BigQuery 设计模式:
- Hashed Feature: 使用哈希函数 (如
FARM_FINGERPRINT
) 处理高基数类别特征。- 解决: 词汇表不完整、高基数缩放问题、冷启动。
- Transforms: 在
CREATE MODEL
中使用TRANSFORM
子句进行特征预处理 (如ML.FEATURE_CROSS
,ML.QUANTILE_BUCKETIZE
)。- 用途: 确保训练和预测预处理一致性。
- 注意: 包含
TRANSFORM
的 BQML 模型不可导出到 Vertex AI。
- Hashed Feature: 使用哈希函数 (如