第17名方案 - 4特征模型
第17名方案 - 4特征模型
作者: Nikola Bacic | 比赛排名: 第17名
我的方案基于3个模型的堆叠:
更新:代码链接
- Transformer(Encoder) - 验证集分数: 0.8100
- LSTM - 验证集分数: 0.8062
- GRU - 验证集分数: 0.8060
用于堆叠的 LightGBM:验证集分数: 0.8119,线上分数: 0.814x
我在新用户(250万行数据)上进行了验证。这个验证策略虽然很好,但对我来说计算成本太高了。
所有三个模型都使用了4个特征:
- 题目ID嵌入
- 上一题的回答情况(1-正确,0-错误)
- ln(lag+1) * minute_embedding:对 lag 取 ln(x+1) 一开始让我的分数提升了约 0.01。我很想知道这是否也能提升你们的模型效果
- ln(prior_elapsed_time+1) * minute_embedding
输入是这4个嵌入的总和。
参数设置
共享参数(所有三个模型):
- max_quest = 300(窗口大小)
- slide = 150
- 优化器:Adam
- 学习率调度器:cosine lr scheduler
- 损失函数:BCE loss
- xavier_uniform_ 权重初始化(相比 PyTorch 默认初始化提升了 0.004)
我使用了 Optuna 在 20% 的数据上进行超参数搜索。这是我第一次使用它,它是一个非常棒的工具!
Transformer 超参数:
- nhead = 8
- head_dim = 60
- dim_feedforward = 2048
- num_encoder_layers = 8
- epochs = 6
- batch_size = 64
- lr = 0.00019809259513409007
- warmup_steps = 150*5
LSTM 超参数:
- input_size_lstm = 384
- hidden_size_lstm = 768
- num_layers_lstm = 4
- epochs = 4
- batch_size = 64
- lr = 0.0007019926812886481
- warmup_steps = 100
GRU 超参数:
- input_size_gru = 320
- hidden_size_gru = 512
- num_layers_gru = 3
- epochs = 4
- batch_size = 64
- lr = 0.0008419253431185227
- warmup_steps = 80
无效尝试:
- 讲座数据
- 题目元数据
- 位置编码:包括可学习和硬编码两种
- 预测用户回答 而非正确与否
- 梯度裁剪
- 标签平滑
- Dropout
- ...
gg(结束)