现在主要问题在model在training set上的loss不下降
文章目录
1. tree -> sequence
一个node由type,value和children三个属性,没有value的用empty表示,叶子节点不需要由children,
比如x = 7的AST的 sequence
2. NN model
采用Encoder- decoder的结构
2.1 Encoder
Encoder主要是LSTM与Attention mechanism.
1.先对node的type和value建立vocabulary
2. 将node的type和value进行embedding,concatenate在一起
3. LSTM将sequence处理成vector
h
n
h_n
hn
4. 利用context_window里信息,得到attention vector
c
n
c_n
cn
5. 将
h
n
h_n
hn,
c
n
c_n
cn以及要预测node的parent node经过lstm得到的output vector
p
n
p_n
pnconcatenate在一起,经过linear得到ecoder vector。
2.2 decoder层的处理
encoder的vector经过一个linear将hidden_dim长度的vector变成context_window长度的vector经过softmax层。softmax的维度等于context window的长度
3. Question
- 模型花费时间长 (编程问题)
- loss不下降
3.1 模型花费时间长
起初epoch = 8 ,跑一次模型需要13个小时,而且loss不下降。按照网上的machine translation的model 修改了我的模型后,已经加入padding,大于1的 batchsize。
epoch = 8 ,跑一次需要6个多小时
3.2 loss不下降
先排除了编程的问题,
我先按照网上说的调整
如何解决神经网络训练时loss不下降的问题
1.模型结构和特征工程存在问题 (借鉴了loss 下降的seq-to-seq translation)
2.权重初始化方案有问题
3.正则化过度(之前loss不降,才加的dropout)
4.选择合适的激活函数、损失函数
5.选择合适的优化器和学习速率
6.训练时间不足
8.batch size过大
9.数据集未打乱 (加入了shuffle)
10.数据集有问题
4. NDCG
用在code suggestion,因为node由type和value两属性,根据suggestion的结果score。
predicted node | relevent score(rel) |
---|---|
type: True ,value: True | 3 |
type: False ,value: True | 2 |
type: True ,value: False | 1 |
type: False ,value: False | 0 |
然后根据
例如
要预测node: {“type”:“NameLoad”,“value”:“x”}
predicted top5 node | relevent score(rel) |
---|---|
“type”:“NameStore”,“value”:“x” | 2 |
“type”:“NameLoad”,“value”:“x” | 3 |
“type”:“num”,“value”:“6” | 0 |
“type”:“NameLoad”,“value”:“y” | 1 |
“type”:“NameLoad”,“value”:“z” | 1 |
先计算IDCG
I D C G t o p k = ∑ i = 1 ∣ R E L ∣ 2 r e l i − 1 log 2 ( i + 1 ) {\displaystyle \mathrm {IDCG_{topk}} =\sum _{i=1}^{|REL|}{\frac {2^{rel_{i}}-1}{\log _{2}(i+1)}}} IDCGtopk=i=1∑∣REL∣log2(i+1)2reli−1
|REL|是从0到位置k根据相关性从高到低的排序
在计算得到NDCG
N
D
C
G
t
o
p
k
=
D
C
G
p
I
D
C
G
p
{\mathrm {NDCG_{{topk}}}}={\frac {DCG_{{p}}}{IDCG_{{p}}}}
NDCGtopk=IDCGpDCGp