AI tricks 整理1
在CV/NLP/DL领域中,有哪些修改一行代码或者几行代码提升性能的算法?¶
想起来些非常经典的东西
1. relu:用极简的方式实现非线性激活,还缓解了梯度消失
x = max(x, 0)2. normalization:提高网络训练稳定性
x = (x - x.mean()) / x.std()3. gradient clipping:直击靶心 避免梯度爆炸hhh
grad [grad > THRESHOLD] = THRESHOLD # THRESHOLD是设定的最大梯度阈值4. dropout:随机丢弃,抑制过拟合,提高模型鲁棒性
x = torch.nn.functional.dropout(x, p=p, training=training) # 哈哈哈调皮了,因为实际dropout还有很多其他操作
# 不够仅丢弃这一步确实可以一行搞定
x = x * np.random.binomial(n=1, p=p, size=x.shape) # 这里p是想保留的概率,上面那是丢弃的概率5. skip connection(residual learning):提供恒等映射的能力,保证模型不会因网络变深而退化
F(x) = F(x) + x6. focal loss:用预测概率对不同类别的loss进行加权,缓解类别不平衡问题
loss = -np.log(p) # 原始交叉熵损失, p是模型预测的真实类别的概率,
loss = (1-p)**GAMMA * loss # GAMMA是调制系数7. attention mechanism:用query和原始特征的相似度对原始特征进行加权,关注想要的信息
attn = torch.softmax(torch.matmul(q, k), dim) #用Transformer里KQV那套范式为例
v = torch.matmul(attn, v)8. subword embedding(char或char ngram):基本解决OOV(out of vocabulary)问题、分词问题。这个对encode应该比较有效,但对decode不太友好
x = [char for char in sentence] # char-level
浙公网安备 33010602011771号