你用什么方法调试深度神经网络?这里有四种简单的方式哦
副问题[/!--empirenews.page--]
当你花了几个礼拜构建一个数据集、编码一个神经收集并实习好了模子,然后发明功效并不抱负,接下来你会怎么做? 深度进修凡是被视为一个黑盒子,我并不阻挡这种概念——可是你能讲清晰学到的上万参数的意义吗? 可是黑盒子的概念为呆板进修从颐魅者指出了一个明明的题目:你怎样调试模子? 在这篇文章中,我将会先容一些我们在 Cardiogram 中调试 DeepHeart 时用到的技能,DeepHeart 是行使来自 Apple Watch、 Garmin、和 WearOS 的数据猜测疾病的深度神经收集。 在 Cardiogram 中,我们以为构建 DNN 并不是炼金术,而是工程学。 你的心脏袒露了许多你的信息。DeepHeart 行使来自 Apple Watch、 Garmin、和 WearOS 的心率数据来猜测你患糖尿病、高血压以及就寝窒息症(sleep apnea)的风险。 一、猜测合成输出 通过猜测按照输入数据构建的合成输出使命来测试模子手段。 我们在构建检测就寝窒息症的模子时行使了这个技能。现有关于就寝窒息症筛查的文献行使白天和夜间心率尺度差的差别作为筛查机制。因此我们为每周的输入数据建设了合成输出使命: 尺度差 (白天心率)—尺度差 (夜间心率) 为了进修这个函数,模子要可以或许:
这两个都是猜测就寝窒息症的先决前提,以是我们行使新架构举办尝试的第一步就是搜查它是否能进修这个合成使命。 你也可以通过在合成使命上预实习收集,以半监视的情势来行使相同这样的合成使命。当标志数据很稀缺,而你手头有大量未标志数据时,这种要领很有效。 二、可视化激活值 领略一个实习好的模子的内部机制是很难的。你怎样领略成千上万的矩阵乘法呢? 在这篇优越的 Distill 文章《Four Experiments in Handwriting with a Neural Network》中,作者通过在热图中绘制单位激活值,说明白手写模子。我们发明这是一个「打开 DNN 引擎盖」的好要领。 我们搜查了收集中几个层的激活值,但愿可以或许发明一些语义属性,譬喻,当用户在睡觉、事变可能焦急时,激活的单位是奈何的? 用 Keras 写的从模子中提取激活值的代码很简朴。下面的代码片断建设了一个 Keras 函数 last_output_fn,该函数在给定一些输入数据的环境下,可以或许得到一层的输出(即它的激活值)。
我们可视化了收集好几层的激活值。在搜查第二个卷积层(一个宽为 128 的时刻卷积层)的激活值时,我们留意到了一些稀疏的事: 卷积层的每个单位在每个时刻步长上的激活值。蓝色的阴影代表的是激活值。 激活值竟然不是跟着时刻变革的!它们不受输入值影响,被称为「死神经元」。 ReLU 激活函数,f(x) = max(0, x) 这个架构行使了 ReLU 激活函数,当输入是负数的时辰它输出的是 0。尽量它是这个神经收集中较量浅的层,可是这确实是现实产生的工作。 在实习的某些时辰,较大的梯度会把某一层的全部偏置项都酿成负数,使得 ReLU 函数的输入是很小的负数。因此这层的输出就会所有为 0,由于对小于 0 的输入来说,ReLU 的梯度为零,这个题目无法通过梯度降落来办理。 当一个卷积层的输出所有为零时,后续层的单位就会输出其偏置项的值。这就是这个层每个单位输出一个差异值的缘故起因——由于它们的偏置项差异。 我们通过用 Leaky ReLU 替代 ReLU 办理了这个题目,前者应承梯度撒播,纵然输入为负时。 我们没想到会在此次说明中发明「死神经元」,但最难找到的错误是你没规划找的。 三、梯度说明 梯度的浸染虽然不止是优化丧失函数。在梯度降落中,我们计较与Δparameter 对应的Δloss。尽量凡是意义上梯度计较的是改变一个变量对另一个变量的影响。因为梯度计较在梯度降落要领中是必须的,以是像 TensorFlow 这样的框架都提供了计较梯度的函数。 我们行使梯度说明来确定我们的深度神经收集可否捕获数据中的恒久依靠。DNN 的输入数据出格长:4096 个时刻步长的心率可能计步数据。我们的模子架构可否捕获数据中的恒久依靠很是重要。譬喻,心率的规复时刻可以猜测糖尿病。这就是熬炼后规复至苏息时的心率所耗的时刻。为了计较它,深度神经收集必需可以或许计较出你苏息时的心率,并记着你竣事熬炼的时刻。 权衡模子可否追踪恒久依靠的一种简朴要领是去搜查输入数据的每个时刻步长对输出猜测的影响。假如后头的时刻步长具有出格大的影响,则声名模子没有有用地操作早期数据。 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |