实现
我从头开始编写了整个代码,可以在名为" 人类基因组 " 的公共GitHub存储库中找到它。以下是我发现与该论坛最相关的一些一般要点。
1.管理数据结构
为了获得客观的结果,我们生成五个分支,每个实验一个分支,计算最后的统计变量。
- 拆分和打乱数据
我们将3.5K样本分为训练(60%),验证(20%)和测试(20%)。像往常一样,我们随机打乱数据并标准化值:
2.数据降维
生成嵌入矩阵的过程分为两个步骤:第一步生成每个类的基因型直方图,bincount()第二步对该直方图进行归一化。结果是维数减少了大约十个数量级。
3.连接网络
这就是我们连接网络的方式:在区分模型的第一个隐藏层中,我们使用辅助网络(即嵌入层)的输出来初始化其3000万权重。
4. 训练循环
根据我们的小批量工作来扩大工作范围。
- 小批量和轮次
函数:loss_fn(y, yhat)返回输入y和目标中每个元素之间的均方误差(L2范数平方)。因为我们要计算损失,所以我们需要将该值乘以批次大小,然后汇总每个minibatch的所有返回值。
最后,每个epoch包含最后一节的累计值。因此,为了获得损失,我们需要除以该循环中的minibatch数量。
我强烈建议使用 early stopping,这样做的理由是根据验证损失自动确定何时停止训练并保存最佳的最后模型结果。
构架
以下是一些我认为有用(免费)的好工具:
神经网络库
我必须提到使用Pytorch作为最佳神经网络库的好处,根据我的经验,与许多其他方法相比,它在许多方面都是最佳的。
云端训练
您将受益于在云端训练模型并节省时间。
结果
我回顾了数据科学家在分析结果时遇到的一些已知困难,并发现有必要与你分享这些困难,以便为开发此类网络的动态行为提供可靠的证据。在研究你们的网络的性能时,我发现以下是主要的特征:
- 损失
让我们从损失函数开始:这是网络性能的"面包和黄油",loss在epoch中呈指数级下降。同时,模型的通用性较好,使验证损失保持在训练损失的范围内。原因很简单:模型在训练时而不是验证时,返回一个更高的损失值,如果您遇到这样的情况,你的模型可能是过度拟合的。过拟合的解决方案可以是以下一种或多种:第一种是降低隐藏层单元或去除层以减少自由参数的数量。如前所述,我们的辅助网络可以解决这个问题。其他可能的解决方案是增加Dropout值或规范化。MazidOsseni在他的博客中解释了不同类型的正则化------方法和实现。图3是处理过拟合问题之前(左侧)和之后(右侧)的简化版的损失函数。我的解决方案是降低隐藏单元的大小(从100到50个单元)和增加第一层的dropout值(从0.5到0.8)的组合。辅助网络可能解决了大量自由参数的问题,但正如您所看到的,它仍然是过拟合的。
- 准确性
测试精度是在每种体系结构中计算的。似乎克服过度拟合或减少自由参数的数量并不能保证更高的准确性。图4显示了三种体系结构的测试精度:令人惊讶的是,尽管存在过度拟合问题(在没有辅助网络的情况下更高),但精度更高。
- 批次大小
测试不同批次大小的性能可能会很有趣,KevinShen在他的博客中研究了批次大小对训练动态的影响。根据总训练时间,可能由于数据多样性,批次大小与训练时间成反比(图6)。出于同样的原因,损失与批量大小成正比(图5)。
- 训练时间
图6清楚地显示了在训练时间上使用不同批次大小的行为,两种体系结构都具有相同的效果:批次大小越大,统计上的效率就越高,但不能保证泛化。阅读文章:"Trainlonger, generalize better: closing the generalization gap in large batchtraining of neuralnetworks"以了解更多有关泛化现象和提高泛化性能的方法,同时在使用大批量训练时时保持训练时间不变。
图6:不同批次大小的总训练时间
请注意,根据训练时间更改架构的效果(图7)。具有1500万个免费参数的培训时间明显少于辅助网络。
图7:三种架构的eopch(批处理大小:64)
- 替代机器学习方法
我还将改进的模型的性能与决策树方法进行了比较,特别是在数据科学领域中常用的"theLight Gradient BoostingMachine"。但是,在误分类错误方面,性能超出了我们的限制.。
讨论区
哪个是最好的模型?(最重要的问题)
我描述了两个主要网络:具有和不具有辅助网络以及具有改进参数的附加网络。参数预测网络的好处是,当输入的维数很高时,如遗传序列中那样,它将大大减少模型第一层中自由参数的数量。我展示了如何更改基本网络的参数在过拟合方面如何更好地泛化。我在公开的1000个基因组数据集上验证了这些网络的方法,从而解决了基于SNP数据的祖先预测任务。这项工作证明了神经网络模型解决样本数量与其高维数不匹配的任务方面的潜力。
鉴于血统预测任务中获得的高精度,我相信神经网络技术可以改善遗传数据分析中的标准实践。我希望这些技术将使我们能够应对更具挑战性的遗传关联研究。
附录
使用决策树的结果
除了我强调的神经网络方法外,我还要提及我在Gradient Boosting DecisionTree上的经验结果。可以在LightGBM GitHub中找到实现。该算法的参数为:
结果表明,决策树的分类误差更高,这说明了其原因超出了博客的范围。