
1. 神经网络的前世今生2006年多伦多大学的Hinton教授在《Science》发表的那篇里程碑式论文彻底点燃了深度学习革命的导火索。当时我在实验室第一次读到这篇论文时那种醍醐灌顶的感觉至今记忆犹新。但鲜为人知的是神经网络的发展其实经历了三次大起大落。上世纪40年代McCulloch和Pitts提出了最早的M-P神经元模型用简单的数学公式模拟生物神经元的工作机制。这个模型现在看来简陋得可笑——它只能做二分类连反向传播都没有。但在当时这已经是个了不起的突破。可惜好景不长1969年Minsky和Papert出版的《Perceptrons》一书直接给第一代神经网络判了死刑。直到1986年Rumelhart等人重新发明了反向传播算法神经网络才迎来第二春。我在90年代读研时实验室里那些用C语言写的三层神经网络代码跑个MNIST识别要整整一周。但很快支持向量机SVM等算法的崛起又把神经网络打入了冷宫。真正的转折发生在2012年。AlexNet在ImageNet竞赛中以压倒性优势夺冠错误率比第二名低了整整10个百分点。这个结果震惊了整个计算机视觉领域也标志着深度学习时代的正式到来。如今我们手机里的人脸识别、语音助手背后都是深度神经网络在支撑。2. 神经网络的生物学基础2.1 生物神经元的工作原理每次我给学生讲解神经网络时都会先带他们看显微镜下的真实神经元。一个典型的生物神经元由三部分组成树突、细胞体和轴突。树突负责接收信号细胞体进行信号整合轴突则将处理后的信号传递给其他神经元。有趣的是神经元之间的信息传递本质上是电化学过程。当输入信号的强度超过某个阈值约-55mV时就会触发动作电位。这个全有或全无的特性后来被M-P模型抽象为激活函数。不过生物神经元的复杂度远超我们的想象——单个神经元可能有多达上万个突触连接而且突触强度还会动态变化这就是著名的赫布理论一起激活的神经元会连接在一起。2.2 从生物到人工的抽象过程第一代人工神经元做了两个关键简化一是将连续的突触强度简化为固定权重二是用简单的数学函数模拟激活过程。典型的M-P模型可以表示为y f(∑w_i x_i b)其中f就是激活函数早期常用的是阶跃函数。这种简化虽然损失了生物真实性但带来了计算上的可行性。我在2010年做过一个对比实验用更接近生物特性的LIF神经元模型做图像识别准确率只比简化模型高2%但计算量却增加了20倍。3. 神经网络的核心构件3.1 激活函数的选择艺术这些年我用过的激活函数少说也有十几种每种都有其独特的个性。Sigmoid是最早被广泛使用的它的输出范围在0到1之间非常适合表示概率。但它在反向传播时有个致命缺点——梯度消失问题。当输入值很大或很小时梯度会趋近于零导致参数无法更新。ReLURectified Linear Unit的出现彻底改变了局面。它的公式简单得令人发指f(x)max(0,x)。我在2015年做过对比实验将CNN中的sigmoid全部替换为ReLU后训练速度提升了6倍。不过ReLU也有自己的问题——神经元死亡现象。一旦某个神经元的输出为0它就再也不会被激活了。后来出现的LeakyReLU和ELU等变体都是为解决这个问题而生的。实战建议对于初学者我的经验是从ReLU开始尝试。如果遇到大量神经元死亡的情况可以通过统计激活率发现再考虑换用LeakyReLU或ELU。不要一开始就追求复杂的激活函数。3.2 损失函数的设计哲学损失函数是神经网络的指挥棒它决定了学习的方向。对于分类任务交叉熵损失几乎是标配。我第一次真正理解它的威力是在2013年当时我在做一个医学图像分类项目。把MSE损失换成交叉熵后准确率直接从78%跳到了85%。回归任务则常用均方误差MSE。不过要注意MSE对异常值非常敏感。有一次我处理房价预测数据时发现模型表现异常。排查后发现是数据中有几套豪宅的价格比其他房子高出一个数量级。后来改用Huber损失这个问题就迎刃而解了。4. 深度学习的本质特征4.1 层次化特征学习传统机器学习需要人工设计特征比如SIFT、HOG等。而深度学习的革命性在于它能自动学习层次化的特征表示。以图像识别为例浅层网络学习的是边缘、纹理等低级特征中间层学习的是局部形状深层则学习到整个物体的语义特征。这个特性在2014年可视化ZFNet的滤波器时得到了完美印证。我记得当时看到第一层学到的确实是各种方向的边缘检测器而更高层的滤波器则对应着更复杂的模式。这种层次化的表示能力正是深度学习在计算机视觉领域所向披靡的关键。4.2 端到端学习范式传统方法通常需要分多个阶段处理数据。比如在语音识别中要先做声学特征提取然后是音素识别最后才是文字转换。而深度学习可以实现真正的端到端学习——输入原始语音波形直接输出文字。我在2016年参与过一个工业质检项目。传统方法需要先做缺陷检测再做分类。而我们设计的端到端网络直接把产品图像映射到质量等级不仅准确率提高了12%而且开发周期缩短了三分之二。不过端到端学习对数据量的要求很高这是需要注意的。5. 现代神经网络架构巡礼5.1 CNN计算机视觉的基石卷积神经网络CNN的发明是深度学习史上的重要里程碑。它的两个核心思想——局部连接和权值共享极大地减少了参数数量。我第一次用CNN处理CIFAR-10数据集时参数量只有全连接网络的1/10但准确率却高了15%。现代CNN架构已经发展出许多经典变体。从早期的LeNet-5到2012年的AlexNet再到后来的VGG、ResNet每一代都有其创新之处。我个人最喜欢的是ResNet的残差连接设计它完美解决了深层网络的梯度消失问题。2017年我在一个人脸识别项目中把网络深度从20层加深到50层准确率提升了7%而训练时间只增加了30%。5.2 RNN序列建模的利器循环神经网络RNN是处理时序数据的标准工具。它的核心是引入了隐状态可以记住之前的信息。但原始RNN有个致命缺陷——长期依赖问题。我在2014年尝试用RNN做股票预测时发现它对超过20个时间步的记忆能力几乎为零。LSTM长短期记忆网络的出现改变了这一局面。它通过精巧设计的门控机制可以选择性地记住或忘记信息。2018年我做新闻标题生成时LSTM模型生成的标题可读性比传统方法好得多。不过现在Transformer正在快速取代RNN这是后话了。6. 训练神经网络的实战技巧6.1 参数初始化方法论神经网络对初始参数非常敏感。早期我习惯用随机高斯分布初始化结果模型经常陷入局部最优。后来发现Xavier初始化效果要好得多特别是配合tanh激活函数时。它的核心思想是保持各层激活值的方差一致。对于ReLU网络He初始化是更好的选择。我记得在2017年的一次实验中使用He初始化的网络收敛速度比随机初始化快了两倍。原理很简单——考虑到ReLU会杀死一半的神经元所以需要把初始化的方差扩大一倍。6.2 正则化技术大全过拟合是神经网络的头号敌人。Dropout是我用过最有效的正则化技术之一它的思想简单粗暴——随机丢弃一部分神经元。第一次看到这个idea时我觉得简直疯了但实验结果证明它确实有效。在我的图像分类项目中Dropout通常能带来3-5%的准确率提升。Batch Normalization是另一个革命性的技术。它不仅起到正则化作用还能加速训练。我做过一个对比在使用BN后学习率可以提高5倍而不发散训练时间缩短了60%。不过要注意BN在小型数据集上可能会适得其反。7. 前沿发展与未来展望注意力机制正在深刻改变深度学习的格局。Transformer架构完全摒弃了传统的循环结构仅靠注意力就能实现更好的序列建模。我在2020年将公司的一个机器翻译系统从LSTM换成Transformer后BLEU分数提高了15%。另一个有趣的方向是神经架构搜索NAS。让算法自动设计网络结构这听起来像是天方夜谭但已经取得了令人瞩目的成果。去年我试用Google的EfficientNet时这个自动搜索出来的架构在同等计算量下准确率比人工设计的模型高了2-3%。不过深度学习仍然面临许多挑战。模型的可解释性一直是个痛点我在医疗项目中经常被医生问为什么模型认为这个病人有肿瘤目前我们还无法给出令人信服的解释。另外深度学习对数据的饥渴也是制约其应用的重要因素。