跳到内容

⇅ 向量特征

向量特征支持在单个特征中提供一组有序的数值。

这对于提供预训练的表示或从其他模型获得的激活,或提供多变量输入和输出非常有用。向量特征的一个有趣用途是,对于多类别分类问题,它能够提供概率分布作为输出,而不是像类别特征那样提供单个正确类别。向量输出特征对于知识蒸馏和噪声感知损失也很有用。

预处理

数据应为以空格分隔的数值。示例:"1.0 0.0 1.04 10.49"。所有向量的尺寸应相同。

preprocessing:
    vector_size: null
    missing_value_strategy: fill_with_const
    fill_value: ''

参数

  • vector_size (默认: null) : 向量的尺寸。如果为 None,将从数据中推断向量尺寸。
  • missing_value_strategy (默认: fill_with_const) : 当向量列中存在缺失值时采取的策略。选项包括:fill_with_const, fill_with_mode, bfill, ffill, drop_row。详见缺失值策略
  • fill_value (默认: ``): 如果缺失值策略是 fill_with_const,用于替换缺失值的值。

预处理参数也可以在类型全局预处理部分定义一次,并应用于所有向量输入特征。

输入特征

向量特征支持两种编码器:densepassthrough

在特征级别指定的编码器参数是

  • tied (默认 null): 与之绑定编码器权重的输入特征名称。它必须是相同类型且具有相同编码器参数的特征名称。

输入特征列表中的向量特征条目示例

name: vector_column_name
type: vector
tied: null
encoder: 
    type: dense

可用的编码器参数是

  • type (默认 dense): 可能的值是 passthroughdensepassthrough 直接输出原始向量值,不做任何改变。dense 使用一叠全连接层来创建嵌入矩阵。

编码器类型和编码器参数也可以在类型全局编码器部分定义一次,并应用于所有向量输入特征。

编码器

透传编码器

encoder:
    type: passthrough

passthrough 编码器没有附加参数。

密集编码器

对于向量特征,可以使用密集编码器(一叠全连接层)对向量进行编码。

encoder:
    type: dense
    dropout: 0.0
    output_size: 256
    norm: null
    num_layers: 1
    activation: relu
    use_bias: true
    bias_initializer: zeros
    weights_initializer: xavier_uniform
    norm_params: null
    fc_layers: null

参数

  • dropout (默认: 0.0) : 应用于全连接层的默认 dropout 率。增加 dropout 是对抗过拟合的常见正则化形式。dropout 表示一个元素被归零的概率(0.0 表示没有 dropout)。
  • output_size (默认: 256) : 特征的输出尺寸。
  • norm (默认: null) : 应用于全连接层开始的默认归一化。选项:batch, layer, ghost, null。详见归一化
  • num_layers (默认: 1) : 应用的堆叠全连接层数量。增加层数可以增加模型的容量,使其能够学习更复杂的特征交互。
  • activation (默认: relu): 应用于全连接层输出的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • use_bias (默认: true): 层是否使用偏置向量。选项:true, false
  • bias_initializer (默认: zeros): 偏置向量的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。此外,也可以指定一个字典,其中包含一个标识初始化器类型的键 type 和其他用于其参数的键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器参数的描述,请参阅torch.nn.init

  • weights_initializer (默认: xavier_uniform): 权重矩阵的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。此外,也可以指定一个字典,其中包含一个标识初始化器类型的键 type 和其他用于其参数的键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器参数的描述,请参阅torch.nn.init

  • norm_params (默认: null): 传递给 norm 模块的默认参数。

  • fc_layers (默认: null): 包含所有全连接层参数的字典列表。列表的长度决定了堆叠的全连接层数量,每个字典的内容决定了特定层的参数。每个层的可用参数包括:activation, dropout, norm, norm_params, output_size, use_bias, bias_initializerweights_initializer。如果字典中缺少这些值中的任何一个,将使用提供的作为独立参数的默认值代替。

输出特征

graph LR
  A["Combiner Output"] --> B["Fully\n Connected\n Layers"];
  B --> C["Projection into\nVector Size"] --> D["Softmax"];
  subgraph DEC["DECODER.."]
  B
  C
  D
  end

当需要使用噪声感知损失进行多类别分类或任务是多变量回归时,可以使用向量特征。

向量特征只有一个可用的解码器:一个(可能为空的)全连接层堆栈,然后投影到向量尺寸的张量(在多类别分类情况下,可选地跟着一个 softmax)。

使用默认参数的向量输出特征示例

name: vector_column_name
type: vector
reduce_input: sum
dependencies: []
reduce_dependencies: sum
loss:
    type: sigmoid_cross_entropy
decoder:
    type: projector

参数

  • reduce_input (默认 sum): 定义如何将非向量(而是矩阵或更高阶张量)的输入在第一个维度(如果计算批量维度则是第二个)上进行归约。可用值:sum(求和)、meanavg(求平均)、max(求最大值)、concat(沿第一个维度拼接)、last(返回第一个维度的最后一个向量)。
  • dependencies (默认 []): 此输出特征依赖的其他输出特征。有关详细解释,请参阅输出特征依赖性
  • reduce_dependencies (默认 sum): 定义如何将非向量(而是矩阵或更高阶张量)的依赖特征的输出在第一个维度(如果计算批量维度则是第二个)上进行归约。可用值:sum(求和)、meanavg(求平均)、max(求最大值)、concat(沿第一个维度拼接)、last(返回第一个维度的最后一个向量)。
  • softmax (默认 false): 确定是否在解码器末尾应用 softmax。这对于预测总和为 1 且可解释为概率的向量非常有用。
  • loss (默认 {type: mean_squared_error}): 一个包含损失 type 的字典。可用的损失 type 包括 mean_squared_error, mean_absolute_errorsoftmax_cross_entropy(仅当 softmaxtrue 时使用)。详见损失
  • decoder (默认: {"type": "projector"}): 用于所需任务的解码器。选项:projector。详见解码器

解码器

Projector

decoder:
    type: projector
    num_fc_layers: 0
    fc_output_size: 256
    fc_norm: null
    fc_dropout: 0.0
    output_size: null
    fc_activation: relu
    activation: null
    fc_layers: null
    fc_use_bias: true
    fc_weights_initializer: xavier_uniform
    fc_bias_initializer: zeros
    fc_norm_params: null
    use_bias: true
    weights_initializer: xavier_uniform
    bias_initializer: zeros
    clip: null
    multiplier: 1.0

参数

  • num_fc_layers (默认: 0) : 如果未指定 fc_layers,则为全连接层数量。增加层数可以增加模型的容量,使其能够学习更复杂的特征交互。
  • fc_output_size (默认: 256) : 全连接堆栈的输出尺寸。
  • fc_norm (默认: null) : 应用于全连接层开始的默认归一化。选项:batch, layer, ghost, null。详见归一化
  • fc_dropout (默认: 0.0) : 应用于全连接层的默认 dropout 率。增加 dropout 是对抗过拟合的常见正则化形式。dropout 表示一个元素被归零的概率(0.0 表示没有 dropout)。
  • output_size (默认: null) : 解码器的输出尺寸。
  • fc_activation (默认: relu): 应用于全连接层输出的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • activation (默认: null): 指示应用于输出的激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • fc_layers (默认: null): 包含所有全连接层参数的字典列表。列表的长度决定了堆叠的全连接层数量,每个字典的内容决定了特定层的参数。每个层的可用参数包括:activation, dropout, norm, norm_params, output_size, use_bias, bias_initializerweights_initializer。如果字典中缺少这些值中的任何一个,将使用提供的作为独立参数的默认值代替。
  • fc_use_bias (默认: true): fc_stack 中的层是否使用偏置向量。选项:true, false
  • fc_weights_initializer (默认: xavier_uniform): 用于 fc_stack 中层的权重初始化器。
  • fc_bias_initializer (默认: zeros): 用于 fc_stack 中层的偏置初始化器。
  • fc_norm_params (默认: null): 传递给 norm 模块的默认参数。
  • use_bias (默认: true): 层是否使用偏置向量。选项:true, false
  • weights_initializer (默认: xavier_uniform): 权重矩阵的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity
  • bias_initializer (默认: zeros): 偏置向量的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity
  • clip (默认: null): 将解码器的输出裁剪到给定范围内。

  • multiplier (默认: 1.0): 用于缩放激活后输出的乘数。当将 activation 设置为输出 [-1, 1] 范围值的函数(如 tanh)时非常有用,可以将值缩放回您尝试预测的数据的大致数量级。在这种情况下,一个好的经验法则是选择一个类似于 x * (max - min) 的值,其中 x 是 [1, 2] 范围内的标量。例如,如果您试图预测温度,选择一个数量级为 100 的乘数可能比较合适。

解码器类型和解码器参数也可以在类型全局解码器部分定义一次,并应用于所有向量输出特征。

损失

均方误差 (MSE)

loss:
    type: mean_squared_error
    weight: 1.0

参数

  • weight (默认: 1.0): 损失的权重。

平均绝对误差 (MAE)

loss:
    type: mean_absolute_error
    weight: 1.0

参数

  • weight (默认: 1.0): 损失的权重。

平均绝对百分误差 (MAPE)

loss:
    type: mean_absolute_percentage_error
    weight: 1.0

参数

  • weight (默认: 1.0): 损失的权重。

Softmax 交叉熵

loss:
    type: softmax_cross_entropy
    class_weights: null
    weight: 1.0
    robust_lambda: 0
    confidence_penalty: 0
    class_similarities: null
    class_similarities_temperature: 0

参数

  • class_weights (默认: null) : 应用于损失中每个类别的权重。如果未指定,所有类别权重相等。该值可以是一个权重向量,每个类别对应一个权重,用于乘以以该类别为真实值的数据点的损失。这是在类别分布不平衡情况下的一种替代过采样的方法。向量的顺序遵循 JSON 元数据文件中类别到整数 ID 的映射(需要包含 <UNK> 类别)。此外,该值也可以是一个字典,键为类别字符串,值为权重,例如 {class_a: 0.5, class_b: 0.7, ...}
  • weight (默认: 1.0): 损失的权重。
  • robust_lambda (默认: 0): 将损失替换为 (1 - robust_lambda) * loss + robust_lambda / c,其中 c 是类别数量。在标签噪声情况下很有用。
  • confidence_penalty (默认: 0): 通过添加一个额外的项来惩罚过于自信的预测(低熵),该项通过添加一个 a * (max_entropy - entropy) / max_entropy 项到损失中来惩罚过于自信的预测,其中 a 是此参数的值。在标签噪声情况下很有用。
  • class_similarities (默认: null): 如果不为 null,则它是一个列表嵌套列表形式的 c x c 矩阵,其中包含类别的相互相似度。当 class_similarities_temperature 大于 0 时使用。向量的顺序遵循 JSON 元数据文件中类别到整数 ID 的映射(需要包含 <UNK> 类别)。
  • class_similarities_temperature (默认: 0): 在 class_similarities 的每一行上执行的 softmax 的温度参数。softmax 的输出用于确定提供给每个数据点的监督向量,而不是原本会提供的一热向量。其直觉是,相似类别之间的错误比真正不同类别之间的错误更容易容忍。

Huber 损失

loss:
    type: huber
    weight: 1.0
    delta: 1.0

参数

  • weight (默认: 1.0): 损失的权重。
  • delta (默认: 1.0): 在 delta 缩放的 L1 和 L2 损失之间切换的阈值。

损失类型和损失相关参数也可以在类型全局损失部分定义一次,并应用于所有向量输出特征。

指标

每个 epoch 计算并可用于 set 特征的指标是 mean_squared_error, mean_absolute_error, r2,以及 loss 本身。

如果将配置的 training 部分中的 validation_field 设置为向量特征的名称,可以将它们中的任何一个设置为 validation_metric