BigQuery ML Linear Regressor设置多轮迭代却仅训练1次停止问题
问题描述
我在BigQuery中训练Linear Regressor,使用约20000行数据,目标输出列取值为{0, 1}。我将EARLY_STOP选项设为False,MAX_ITERATIONS选项设为10,但训练始终在1轮迭代后停止,此时MAE约为0.2。
以下是我的创建模型查询:
CREATE OR REPLACE MODEL `sketching.linear_regressor_08-13--11-59-03.811249` OPTIONS (model_type=@model_type, input_label_cols=@input_label_cols, max_iterations=@max_iterations, data_split_method=@data_split_method, early_stop=@early_stop) AS SELECT * FROM `ds.training_table`
查询中使用的参数如下(Python对象打印结果):
[ScalarQueryParameter('model_type', 'STRING', 'linear_reg'), ArrayQueryParameter('input_label_cols', 'STRING', ['target_output']), ScalarQueryParameter('max_iterations', 'INT64', 10), ScalarQueryParameter('data_split_method', 'STRING', 'RANDOM'), ScalarQueryParameter('early_stop', 'BOOL', False)]
备注:我已检查QueryJob的bytes_processed指标,确认其正常处理了全表数据。
更新1
看起来BQ忽略了我传入的大部分模型选项,我在BigQuery Web界面的模型状态页看到,训练选项区域没有展示我配置的参数,反而显示了我未设置的选项,仅修改data_split_method参数时界面会同步变更。
更新2
我额外添加L1_REG参数并设为0.1后,问题得到解决,训练正常执行到我设置的10轮迭代;如果不添加任何可选参数或仅配置early_stop参数,模型仍仅训练1轮就停止。请问该问题的根本原因是什么?有无其他解决方案?
回答
根本原因
这是BigQuery ML线性回归模型的默认优化逻辑导致的:
- 当你没有显式设置L1_REG、L2_REG这类正则化参数时,BQ ML会自动启用闭式解(closed-form solution) 替代梯度下降来训练线性模型,闭式解可以一步直接算出最优参数,不需要多轮迭代,所以不管你设置多大的MAX_ITERATIONS,训练都会在1轮结束。
- 只有当你显式设置了正则化参数(L1_REG>0 或者 L2_REG>0),或者训练数据量过大导致闭式解计算效率太低时,BQ ML才会切换到迭代式的梯度下降优化算法,此时你设置的MAX_ITERATIONS、EARLY_STOP这类迭代相关的参数才会生效。
- 你看到的「参数未在界面显示」也是同理:闭式解训练模式下,迭代相关的参数本身不生效,界面就不会展示这类不生效的配置项,只有属于当前训练模式的参数(比如data_split_method)才会正常展示。
其他解决方案
除了设置L1_REG之外,你还可以通过以下方式触发迭代训练,让MAX_ITERATIONS配置生效:
- 显式设置L2_REG参数为非0值,效果和设置L1_REG一致
- 手动指定优化器参数
optimize_strategy='BATCH_GRADIENT_DESCENT',强制使用梯度下降优化,不需要额外加正则化参数也能按你设置的迭代次数运行
内容的提问来源于stack exchange,提问作者user2268997
相关产品推荐
相关产品推荐

