关于深入分析神经网络的对话与思考

故事开始是这样的,在一个深度学习群里,有名叫程子的群友提出了一个问题:

在丢弃权重值最低的特征后,最后网络的准确率相比之前特别低。

群友也不知道是什么情况,只能用目前对深度学习的一致评价:玄学,来概括。我却觉得不应该是这样的状况,应该对有疑问的现象进行小心仔细的推理分析。于是就有了后面的对话。

我:@程子,我在想,要是可以像生物里面标记的荧光蛋白一样标记网络的某些特征,那就可以查看这些特征的具体变化过程和影响。

荧光蛋白是我对现代生物技术的一种朴素印象,印象中还是中学生物课里的实验,但是它在生物学里的地位还是很有启发性的。最重要的是,它所采用的实验方法及其实验现象给我留下了深刻的印象。利用可发光的荧光蛋白标记在生物组织内,只要追踪荧光蛋白,就可以观察对应组织在细胞内的生物活动。如此简单而巧妙的实验,使实验者能够深入观察特定目标的过程及其影响,从而具体分析得出结论。同样的实验设计理念应该可以适用于神经网络的探索里。

这时候程子说:没懂。。

我于是开始针对这个问题的现象进行具体分析。

我:你丢弃了权重最低的特征,结果却有很大的影响。那说明权重最低的特征和我们实验前的预期不符。(这里前提假设权重值低的特征对网络性能影响不大,丢弃后变化不大)

程子(提出问题的群友):然后呢?

我:权重最低影响却很大,要是两次实验其他参数都没有变化的话,那肯定是除了权重以外别的原因导致的。

我:我们可以查看丢弃的权重的这条从输入到输出的通路,以及相应的激活层的输出,看有没有什么发现。

这时候我的想法是,既然出现权重值较小的特征改变而影响很大的现象,目前也解释不清,那就深入探究可能出现问题的网络内部发生的变化。

程子继续说:这条通路对任意一个通道的特征都是对称的呀!

面对突然提出的通道对称,我明白他说这句话的意思,可是一时不太清楚在这里说这句话的目的。

我想了想:每个通道应该也是独立的吧。

说完我就心生怯意,真是这样吗?于是我赶紧翻看手边的《深度学习》这本奠基深度学习的著作,刚好看到卷积网络里面讲前馈卷积网络的三种运算——卷积、从输出到权重的反向传播和从输出到输入的反向传播。上面那张输入到输出的通道之间的连接图,确实是独立的。这时候才稍微长舒了一口气。但转念一想,为什么通道之间没有加入信息交互的连接呢?通道之间存在连接会怎们样?哪怕只有一个连接。

 

 

我还在想,群里又发来了新的消息。

程子说:是啊!

我接着说道:如果是的话,那就只需要查看单个通道内丢弃权重对每层的输出的影响,最后对准确率的影响。

程子发来了一个一脸无奈的表情,没有说话。

其实无奈我也是有的,尽管脑海里存在对神经网络和深度学习的各种疑问,也包含对这些疑问的大胆猜想和自认为独到的分析,但囿于自己python编码能力实在不敢称道,不足以单独用程序来实现这些想法,从而验证推理分析的正确与否,更别谈在实验的过程中发现什么惊为天人的秘密了。我目前确实处在这样的困境中,而且这可能也是其中一部分从事深度学习的同业者所面临的困境。但我依然为之振奋的是,面对出现在眼前不能解释的现象,如果可以用现有的或者自己掌握的知识和基本原理,来对其进行尽可能的分析,深入挖掘网络内部的细节变化,说不定能找到影响问题的关键,意料之外的收获也是不无可能的。

于是我在群里说:主要是我很好奇网络内部的细节变化,而不只是作为一个黑盒子,用反向传播调整权重来减少损失。

说到黑盒子,现在的神经网络内部就是这样。网络参数是从输入数据到输出数据的内部神经元之间的连接权重与偏置,在一次训练回合中,计算出输出的损失函数值,然后沿着减小损失函数的方向继续训练网络。在回合结束后,利用反向传播算法调整网络参数。其最终目标是让损失函数降低至最小,从而达到网络输出预测值与真实值尽可能接近并拟合的效果。至于如何确定损失函数减小的方向,则采用了梯度下降的概念。随机取一部分输入数据作为一批,计算其梯度,沿着梯度下降(减小)的方向就是损失函数减小的方向。(还需要进一步细化分析)

随着网络结构的深度不断增加,网络内部的隐藏单元及其参数就更加庞大,参数量可以达到百万级甚至上亿级。这个“黑盒子”就更加神秘莫测了。但是归根到底,只有一层隐藏层和高达上千层的隐藏层,这两者之间或许没有本质上的区别。还是在于对网络内部的细节变化规律的掌握。这样“黑盒子”才能在世人面前揭开神秘的面纱,变成透明的“白盒子”。

 

 

这个时候,一个叫菜鸡的群友发了一个消息。(好像一般叫菜鸡的都不菜)

菜鸡:听起来挺有意思的,但是你这么做感觉还是不知道哪一层是什么啊?不如看看可视化的论文。

看到他说的,仔细揣摩,确实有道理。如果只是看一个通路,中间的每一层都有变化,细节还是会被忽略。那进一步说,如果要看单独一层的变化的话,就需要同时固定其他的参数,仅仅只看一层的变化。在这里,控制变量法是我所知道的其中一种科学分析的方法。

我无意的往前翻看群里的聊天记录,想着每个人说的话。正在这个时候,我突然看到最开始问题提出来的地方,并且意识到可能我们一开始讨论的方向就错了。群友提出的问题明明是权重值最小的“特征”,而我却把它误认为是权重值最小的“神经元”。失之毫厘,差之千里。特征和神经元之间简直天壤之别。我于是赶紧在群里说到,

我:我突然想起来dropout是随机丢弃神经元,你这是丢弃的特定特征呀!

程子很肯定的回答:是。

顺便提一下,上面的dropout名为弃权,是神经网络中常用的一种改善网络过拟合的技术。采用的方法是随机丢弃输入的神经元,以此来减轻因神经元数量过多而导致的过拟合效果。据说开发这种技术的作者是因为在银行排队取钱,注意到柜台人员间隔一段时间换人而触发的灵感。

 

 

可能我们的讨论逐渐展开了,慢慢引起了群里更多人的注意。像这样自由而发散的讨论,不正是思想相互碰撞的乐趣吗?

后面又来一个群友发言了,昵称是“人民广场吃炸鸡”。为叙述方便,先简称为“炸鸡”。

炸鸡问道:有每一层可视化的论文?

他好像对神经网络的可视化很感兴趣。也是,我们都太想知道网络这个“黑盒子”里到底发生了什么。他又说到,

炸鸡:这不是没研究明白吗。

我则继续刚才的推理,在比较神经元与特征之间的区别后,那就只能得出一个结论。那就是,

我:你的实验佐证了特征的权重虽小,重要性却很高。

这样看来的话,前面的推测就是一个因误会引起的不同方向的讨论了。反过来却也证实了特征无论权重大小,都存在对网络预测的重要性。沿着这个思路,我继续想着dropout的做法,既然随机丢弃神经元能够抑制过拟合,那么按照刚才阴差阳错的办法,将丢弃的特征改为神经元,对权重值最低的神经元进行丢弃操作,会不会有同样的效果呢?仔细思考后,我在群里说到,

我:我倒想了一个dropout的变种,把网络最后训练的权重矩阵中小于一定阈值,比如 <0.1的权重全部丢弃,置0。类似于决策树里面的剪枝,看对结果有什么影响。

我还在想自己有没有表达清楚意思,群里马上就有消息回复了。

这时候有个叫“print"Hello World"”的群友也加入讨论,同样简称为Hello World吧。他说了一句,

Hello World:过拟合

而炸鸡好像一直都在观摩,也马上发了消息,对我的说法作出回应。

炸鸡:@我,这个做法没有意义。

他继续说到,

炸鸡:本身就是正则化,你还人为干扰

他提到了正则化,我对正则化的部分理解是在机器学习中使用L1/L2正则化,那时候是在数据处理中使用的技术,L1正则化在可视化中的表现是使随机数据聚集在少数几个点上,L2正则化是使随机数据在全局上更加聚拢,更加收敛。在深度学习中,正则化的认识则是在梯度下降中,对权重的不同衰减方式。L2正则化因此又名权重衰减。所以对正则化还没有更深入的数学认知与分析,仅仅只停留在算法使用的层面上,于是这么想了有一会儿,便说到,

我:正则化是让数据更加收敛吧。

 

 

可能是前面讨论的停顿,我发完消息后,没有像之前那样立刻有人在群里回复了。我整理完思绪后,不知不觉中又想起这段时间的经历。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值