我正在使用LSTM网络来解决多类(3类)分类问题。如果不进行正则化,则模型会在5个时期内过拟合(val损失开始增加,而训练损失则继续减少)。对于不规范的网络,开始增加之前的最低val损失约为0.4。
当我开始进行正则化时,无论我使用哪种正则化技术(批量归一化,高斯噪声,辍学,l1和l2正则化)都没有关系,唯一改变的是网络到达val的速度损失0.4(相比5减少了20到30个纪元),而不是实际超过0.4。
这是正则化的预期行为,仅仅是为了减慢网络的学习速度,从而在以后的某个时期发生过度拟合吗?
这是我的未规范模型:
text = Input(shape=(news_text.shape[1],), name='text')
symbol = Input(shape=(symbol_name.shape[1],), name='symbol')
price = Input(shape=(8, 1), name='price')
text_layer = Embedding(
embedding_matrix.shape[0],
embedding_matrix.shape[1],
weights=[embedding_matrix],
mask_zero=True
)(text)
text_layer = Lambda(lambda x: x, output_shape=lambda s: s)(text_layer)
text_layer = LSTM(units=64)(text_layer)
symbol_layer = Embedding(
embedding_matrix.shape[0],
embedding_matrix.shape[1],
weights=[embedding_matrix],
mask_zero=True
)(symbol)
symbol_layer = Lambda(lambda x: x, output_shape=lambda s: s)(symbol_layer)
symbol_layer = LSTM(units=32)(symbol_layer)
text_layer = RepeatVector(8)(text_layer)
symbol_layer = RepeatVector(8)(symbol_layer)
price_layer = Dense(units=64)(price)
inputs = concatenate([
text_layer,
symbol_layer,
price_layer
])
output = LSTM(units=64)(inputs)
output = Dense(units=3, activation='softmax', name='output')(output)
model = Model(
inputs=[text, symbol, price],
outputs=[output]
)
model = multi_gpu_model(model, gpus=2)
optimizer = Adam()
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
注意:文本和符号输入都是经过适当预处理的文本,并且使用StandardScaler对价格输入进行了标准化。