⇅ 向量特征
向量特征支持在单个特征中提供一组有序的数值。
这对于提供预训练的表示或从其他模型获得的激活,或提供多变量输入和输出非常有用。向量特征的一个有趣用途是,对于多类别分类问题,它能够提供概率分布作为输出,而不是像类别特征那样提供单个正确类别。向量输出特征对于知识蒸馏和噪声感知损失也很有用。
预处理¶
数据应为以空格分隔的数值。示例:"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,用于替换缺失值的值。
预处理参数也可以在类型全局预处理部分定义一次,并应用于所有向量输入特征。
输入特征¶
向量特征支持两种编码器:dense
和 passthrough
。
在特征级别指定的编码器参数是
tied
(默认null
): 与之绑定编码器权重的输入特征名称。它必须是相同类型且具有相同编码器参数的特征名称。
输入特征列表中的向量特征条目示例
name: vector_column_name
type: vector
tied: null
encoder:
type: dense
可用的编码器参数是
type
(默认dense
): 可能的值是passthrough
和dense
。passthrough
直接输出原始向量值,不做任何改变。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_initializer
和weights_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
(求和)、mean
或avg
(求平均)、max
(求最大值)、concat
(沿第一个维度拼接)、last
(返回第一个维度的最后一个向量)。dependencies
(默认[]
): 此输出特征依赖的其他输出特征。有关详细解释,请参阅输出特征依赖性。reduce_dependencies
(默认sum
): 定义如何将非向量(而是矩阵或更高阶张量)的依赖特征的输出在第一个维度(如果计算批量维度则是第二个)上进行归约。可用值:sum
(求和)、mean
或avg
(求平均)、max
(求最大值)、concat
(沿第一个维度拼接)、last
(返回第一个维度的最后一个向量)。softmax
(默认false
): 确定是否在解码器末尾应用 softmax。这对于预测总和为 1 且可解释为概率的向量非常有用。loss
(默认{type: mean_squared_error}
): 一个包含损失type
的字典。可用的损失type
包括mean_squared_error
,mean_absolute_error
和softmax_cross_entropy
(仅当softmax
为true
时使用)。详见损失。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_initializer
和weights_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
。