3.深度前馈网络

激活函数的作用:向网络中引入非线性因素,防止深度网络退化成了单层线性模型,无法解决复杂的非线性问题。

激活函数:sigmoid:

数学公式:σ(x)=(1+e-x)-1

导数公式:σ'(x)=σ(x)(1-σ(x))

梯度消失:当输入x非常大或非常小时,函数的梯度趋近于0。在反向传播时,这个接近0的梯度乘以其他层的梯度,会导致前面的层根本拿不到梯度,参数无法更新。

relu函数:f(x)=max(0,x)

缺点:标准ReLU在z<0时导数为0,如果一个神经元不幸长期处于z<0,它就会死掉且无法再被唤醒。

双曲正切激活函数:tanh(x)=2σ(2x)−1

softmax激活函数:

交叉熵损失函数(Binary Cross Entropy):

L=−ylog(y^)-(1−y)log(1−y^)

多分类交叉熵(Cross Entropy):

万能近似定理:一个普通的前馈神经网络(MLP),只要包含至少一层带有“挤压”性质(如 Sigmoid、Tanh,或者更广泛的ReLU等)的隐藏层,并且给予它足够多(可能是无限多)的隐藏单元,它理论上就可以在有界闭集(有范围、包含边界的区域)上,以任意精度去逼近任何连续函数或Borel可测函数(几乎所有实际遇到的数学函数)。

虽然单层神经网络理论上什么都能表达,但为了不让神经元数量在实际中爆炸,我们必须把网络变深。深度网络利用“层层嵌套”的结构,可以用极少的资源(参数)实现极其复杂的函数表达。

多层感知机(MLP):神经网络的一种

特征1:全连接。上一层的每一个神经元,必须和下一层的每一个神经元相连,没有任何遗漏。

特征2:前馈。信号只能从输入层->隐藏层->输出层,一路向前单向传递,绝对不能回头(不像循环神经网络那样绕圈),层与层之间也没有跨层连接。

  1. 深度学习正则化

正则化的核心目的:防止过拟合。

加惩罚项(拉格朗日形式)等价于给参数强行划定一个约束形式。

为了解决惩罚可能会使算法陷入局部极小,现代高级训练会使用显式约束+投影梯度下降法。

数据集增强:水平翻转,随机裁剪和缩放,变色,平移,旋转,伸缩,裁剪,扭曲的任意组合。

基于半监督学习的正则化:利用大量没有标签的便宜数据,来帮有标签的昂贵数据带路,从而防止模型在小数据上过拟合。

基于多任务学习的正则化:让一个网络同时学几门不同的功课,各门功课互相监督,谁也别想死记硬背。

一种非常经典、简单且极其有效的正则化:提前终止(提前终止在数学上等价于L2正则化)。

Dropout:在特征空间里随机删除特征。

Bagging(自助采样集成):训练多个不同的模型,然后把它们的结果平均(或投票)起来。

Dropout≈ Bagging,一个Dropout网络≈大量子网络的集合

Bagging:

训练很多独立模型,然后平均

Dropout:

每次随机删除神经元,形成一个子网络,一个Dropout网络≈指数多个共享参数的子网络,训练时随机采样一个子网络,测试时相当于把所有子网络的结果做平均

Dropout=一种正则化

Dropout可以看成向输入加入乘性噪声,二阶泰勒展开表明Dropout近似于L2正则化,正则项中存在p(1-p),预测越不确定,惩罚越大,预测越确定,惩罚越小,所以Dropout倾向于学习更加稳定、置信度更高的预测结果。

权重比例推断:

为什么说它是精确的:

Dropout的Bagging解释:

每个掩码μ对应一个子网络。假设有 n 个神经元,对每个神经元:保留或者删除两种状态。子网络有2n ,因此Dropout其实是在训练2n个模型的集成。测试时不是显式运行所有模型,而是利用权重缩放(w→pw),近似得到pensemble(所有子模型的平均预测)。

Dropout的随机性:

真正重要的不是随机,而是权值共享。Dropout里所有子网络共享参数θ才是关键。

Dropout的随机性:

时间开销O(n)

空间开销O(n)

在训练样本极少时,Dropout不会很有效果,数据集越大Dropout效果越好。

DropConnect:随机的将隐层节点的输出变成0。

1.数据增强的前提是标签语义不变,否则会引入错误监督信号。

例如:

图像分类:翻转猫狗图片通常没问题

OCR识别:数字6翻转后可能变成9

此时增强会改变标签含义,反而降低性能。

2.Dropout为什么能防止过拟合

训练时随机丢弃神经元:

hi←mihi

其中:mi∈{0,1}

相当于每次训练一个不同的子网络。

作用:降低神经元间的依赖,防止协同适应,提高泛化能力。

3.为什么测试时不再随机丢弃

训练阶段:实际是在训练大量不同子网络

测试阶段:希望得到所有子网络的平均效果

因此:不再随机丢弃神经元,而是采用:w←pw(权重缩放),来近似整个集成模型的平均预测,这样输出更稳定。

4.神经网络天然适合Bagging

神经网络训练过程本身具有随机性:随机初始化,Mini-batch采样,非凸优化

即使网络结构和数据相同,训练出来的模型往往也不同。因此天然具有模型多样性,适合集成学习(Bagging)。

5.Dropout与Bagging的本质区别

Bagging:训练多个独立模型:f1,f2,⋯,fn

特点:参数不共享,存储和训练成本高

Dropout训练一个网络产生大量子网络:f(x,μ)

特点:参数共享和计算成本低

因此Dropout≈参数共享的Bagging

6.为什么微小扰动会产生巨大影响

神经网络局部可以近似看成f(x)≈Ax+b(局部线性)

而高维空间中,即使输入只发生很小变化:x+Δx,经过大量维度累积后,AΔx可能被放大很多倍。因此微小噪声,对抗扰动,输入误差都可能导致预测结果发生明显变化。

5.深度学习中的优化方法

机器学习和数值优化之间的区别:

优化视角

学习视角

找最小训练损失

找最好泛化能力

追求梯度=0

可以提前终止

关注极小点

关注测试误差

优化真实目标

优化代理损失

Batch 更精确

Mini-batch 更实用

损失越低越好

不一定,可能过拟合

算法列表:

SGD:随机梯度下降Wt+1=Wt-αgt

SGD+动量:下山时,不仅看当前的梯度,还要加上上一步的下滑速度。

RMSProp:如果某个方向过去一直在剧烈震荡,算出来的平方和就会很大。

RMSProp+动量:

AdaDelta:

Adam:

1.经验风险最小化(ERM)vs结构风险最小化(SRM)

2.损失(Loss)vs代理损失(Surrogate Loss)

机器学习关注代理损失下降后是否能带来测试误差下降。

3.局部极小点 vs 提前终止(Early Stopping)

机器学习不追求最优训练误差,追求最优泛化误差。

4.为什么提前终止时导数仍然很大?

优化理论∇J(w)=0才算收敛,但Early Stopping可能训练到一半就停。此时∣∣∇J(w)∣∣≫0,因为继续下降训练误差会开始记忆噪声,导致Test Error↑。因此提前终止本质上是一种正则化,相当于限制参数增长。

5.批量算法(Batch)vs小批量算法(Mini-batch)

神经网络优化中的挑战:

1.病态问题 (Ill-Conditioning)
核心痛点:梯度下降在某些地方会 “卡住” 或反复震荡,即使你把学习率(步长 ξ)调得非常小,代价函数不仅不下降,反而还会上升。
数学本质:这里的“病态”通常指 Hessian 矩阵(二阶导数矩阵)的条件数太大。通过二阶泰勒展开可以预测,当你沿着梯度方向更新 时,代价函数的变化量中包含一项二阶项

 和一项一阶项
后果:当二阶项的增长速度远超一阶项时(即 ),梯度的病态就成了大问题。在成功训练的神经网络中,梯度范数(Gradient norm)在训练过程中甚至可能显著增加,这说明算法必须在极其崎岖、不平坦的能量峡谷中摸索前行。

2.局部最小值 (Local Minima)
核心痛点:优化算法会不会在一开始就掉进一个 “代价很高” 的局部小坑里,导致模型永远训练不好?
客观现实:神经网络的局部极小值非常多,甚至因为权重空间对称性(比如交换同一层两个神经元的传入和传出权重,模型的输出和代价完全等价),存在不可数无限多的局部极小值。
好消息:对于足够大的现代神经网络而言,绝大部分局部极小值都具有很小的代价函数值(即它们的效果其实和全局最优差不多)。
如何排查:如果你怀疑模型卡在局部最小值,可以画出梯度范数随时间的变化曲线。如果梯度范数没有缩小到接近0的微小值,说明当前位置压根连临界点都不是,更不可能是局部最小值,问题可能出在其他地方(如病态或高原)。

3.高原、鞍点和其他平坦区域 (Saddle Points)
核心痛点:在高维空间中,阻碍优化的真正元凶往往不是局部最小值,而是鞍点(Saddle Points)。
什么是鞍点:在这个点上,某些方向上代价是增加的(像山谷),另一些方向上代价是减少的(像山峰),它的 Hessian 矩阵同时具有正负特征值。
挑战所在:在高维非凸函数里,鞍点的数量远多于局部极小值。在低代价值(接近优化终点)的区域,Hessian 特征值为正的概率更高(更容易遇到极小值);但在高代价值(训练初期)的区域,极易遇到包含很多下降方向的高代价鞍点。
标准的牛顿法(Newton's Method)极易直接跳进鞍点并卡死,因此在深度学习中需要使用诸如“无鞍牛顿法”或带有动力的随机梯度下降(SGD with Momentum)来逃离鞍点。

4.悬崖和梯度爆炸(Cliffs and Exploding Gradients)
核心痛点:损失函数的表面有时会突然出现像“悬崖”一样的剧烈陡峭区域(常见于循环神经网络RNN)。
灾难后果:当参数移动到悬崖边缘时,梯度值会瞬间变得极其巨大。此时,梯度下降的更新公式()会因为g太大,把参数瞬间弹射到非常远的地方。这会直接破坏掉之前几百个 Epoch 辛辛苦苦优化好的参数结果,导致训练彻底崩盘。
解决方案: 采用梯度截断(Gradient Clipping)。一旦梯度的模长超过某个阈值,就强制把它拉回安全范围内,防止参数“飞出去”。

5.长期依赖与梯度消失/爆炸 (Long-Term Dependencies)
核心痛点:极深的前馈网络或循环网络(RNN)在处理长序列时,信息需要传递很多代。
数学本质:在计算图上,长距离的反向传播类似于同一个权重矩阵W 的连续t 次连乘(Wt)。通过特征值分解 ,经过t 步后,等价于特征值的t 次方()。
双重危机:
梯度爆炸():特征值稍微大于 1,经过几十次幂运算后就会变成天文数字,导致学习极不稳定。
梯度消失():特征值稍微小于 1,连乘后会迅速衰减趋近于 0。此时模型根本不知道参数朝哪个方向移动才能改进代价函数,导致网络失去了学习长期记忆的能力。
幂方法效应:重复相乘类似于数学中的“幂方法”,它会导致反向传播的梯度最终只剩下了与W的最大特征值(主特征向量)平行的分量,而丢弃了其他所有正交方向的重要有用信息。

随机梯度下降:

学习率的设置:选择一个比当前表现最好的学习率还要稍微大一点点的初始学习率。

随机梯度下降的收敛率:额外误差来衡量当前参数和完美最优参数之间的差距。

SGD:损失函数病态时,SGD下降很慢。

普通 SGD(无动量):就像一个没有记忆的人在下山。每走一步,他只看这一步脚下的斜率(当前梯度)是怎样的。如果脚下是个坑洼或者左冲右突的狭窄峡谷,他就会在左右两边疯狂震荡,走得很慢。

动量法(SGD + Momentum):就像一个有质量的重力小球从山上滚下来。小球不仅受到当前位置的重力推着它往前(当前梯度),还自带惯性(动量)。如果前几次迭代都是朝某个方向走,小球就会在这个方向上越滚越快;而如果遇到左右震荡的崎岖路面,由于惯性的相互抵消,左右震荡会被抚平,而向下的速度会被累加。

Nesterov动量和普通动量:

特性

标准动量法 (Momentum)

Nesterov 动量法 (NAG)

梯度计算位置

当前参数位置θ

施加惯性后的未来预测位置θ̃

核心优势

稳定前进,冲出平坦高原和鞍点

具有预判和修正能力,收敛更平稳

行为特点

容易在最优点附近冲过头,产生震荡

在快冲过头时能自动减速刹车减少震荡

自适应学习率算法:

AdaGrad:给每一个参数定制属于它自己的学习率。

缺点:

RMSProp:引入遗忘机制,用“指数加权移动平均”代替“盲目累加”,只关注最近一段时间的梯度。

RMSProp+ Nesterov动量:能够提前预判、提前刹车

Adam(Adaptive Moment Estimation,自适应矩估计):把“动量法”和“RMSProp”完美结合在一起。

①方向问题(一阶矩≈速度):利用历史梯度的动量,让模型更新的方向更平滑,不至于在崎岖的峡谷两壁反复横跳。

②步长问题(二阶矩≈缩放):利用历史梯度平方的移动平均,最近更新剧烈的参数步子迈小点,更新稀疏的参数步子迈大点。

学习率设置:学习率的好坏决定损失下降的速度

一阶优化:仅仅依赖于当前的切线斜率,病态体现在随机梯度下降会‘卡’在某些情况,此时即使很小的更新步长也会增加代价函数。

二阶优化:感知曲率H调整步伐,从而克服这种病态地形。

权重初始化:

1.较小的随机数初始化

使用标准正态分布并乘以一个很小的系数(0.01)来初始化权重。这种方法在浅层网络中表现尚可,但在深层网络中会引发严重的问题。

2.小随机数在深层网络中的问题

梯度消失

3.较大随机数初始化的问题

权重太大了,导致tanh激活函数的输入绝对值非常大。此时,激活函数输出饱和,处于tanh曲线的两端平坦区域。这会导致该层的梯度直接变为0(梯度饱和/消失),网络同样无法训练。

4.Xavier初始化

无法适应 ReLU 这种非对称的激活函数

1.针对ReLU激活的权重初始化:

2.前向传播的方差关系

3.乘积项方差的展开

4.引入 ReLU 的致命修正

偏置项设置:

通常情况设偏置为0:

b=0

输出单元的偏置可以用softmax(b)=c来初始化,c为类别分布:

ReLU的偏置为0.1:

确保在训练初期,绝大多数神经元都能获得正的输入,从而被强制激活。

门控结构中,门单元的偏置设为门输出接近1,单元输出u,门单元h∈[0,1], 输出为uh,h≈1:

批标准化(Batch Normalization,简称BN层):自适应的重参数化方法,强制让每一层的输入都拥有稳定的分布。

BN层一般放置在仿射变换(如全连接层FC或卷积层)之后,非线性激活函数(如tanh、ReLU)之前。

如果强制把所有输入都变成均值 0、方差 1,会破坏该层原本好不容易学到的表达能力。

完整的算法步骤:

优势:

避免了激活函数饱和导致的梯度消失。

允许比较大的学习率。

减小初始化的影响。

Layer Normalization:

归一化方法

μ,σ的维度

解释

应用场景

BN (卷积)

1×C×1×1

整个Batch的所有图片,按通道横向切片,一个通道算一套μ,σ

普通卷积网络(CNN)、图像分类、目标检测。

IN (卷积)

N×C×1×1

每一张图片内部,每个通道自己单独算一套μ,σ

图像风格迁移 (Style Transfer)、GAN(生成对抗网络)。

Group Norm (GN) 成功解耦了归一化与 Batch Size 的绑定。当你的硬件显存有限、只能使用很小的 Batch Size(如 2 或 4)去训练视觉模型时,请果断放弃 Batch Norm,改用 Group Norm。

监督预训练

让学生网络的中间层,去回归(模仿)教师网络的中间层。

①利用浅层教师网络的中间特征作为“垫脚石”(阶段性监督),帮助深层学生网络顺利度过刚开始训练时的迷茫期。

②最终训练好的学生网络(FitNet)更深、更窄。在保持与老师相当甚至超越老师的准确率的前提下,它的参数量更少、计算速度更快,更适合部署在计算资源有限的设备上。

延拓法(课程学习):

①通过增加简单样本的影响,先前的J(i)会变得更容易,把目标函数变平滑、变简单。

②先用结构干净、语法简单的通用文本(小Loss样本)建立起语言的“普适性知识结构”,再过渡到复杂、专业的细分领域,不仅收敛更快,最终泛化出来的结果也更好。

③自步学习:学习算法在每一步迭代中决定下一步学习样本,模型自己对哪个样本的损失值(Loss)小,哪个样本对当前的模型来说就是“简单样本”,它会挑出当前对自己而言 Loss 较小的样本优先纳入下一轮训练。随着模型变得越来越聪明,原本判定为大 Loss 的“复杂样本”,其 Loss 也会降下来,从而自动被动地被纳入“学习豪华套餐”。

超参数优化:

因为学习率、正则化系数这种参数,其敏感度是以数量级(倍数)波动的。学习率从 0.01 到 0.1 的变化影响,远比从 0.51 到 0.6 大得多。因此必须在10的幂次(对数空间)里进行均匀随机采样。

⑤范围调整

6.深度卷积网络

卷积层,池化层,全连接层,输出层

①展平——准备一维输入

②加权求和——建立“全连接”

③激活函数——引入非线性

连接类型

输出管多少输入

输出的参数

参数量

核心优势

全连接

全部输入

各不相同

极高(O(N×M))

能够建立全局的大局观

局部连接

局部输入

各不相同

中等

减少了无用的远距离连接

卷积(CONV)

局部输入

全局共享W

极低

保证平移不变性,极速瘦身

输出大小:

卷积模式:

①有效(valid)卷积:不填充

②全(full)卷积:最大化填充(filter经过输入的一个角)

③相同(same)卷积:保持输出尺寸不变

卷积的动机:

①卷积层与全连接层在空间连接上的不同

(1)稀疏连接

全连接层(FC):每个输出神经元都跟输入的每一个像素相连。哪怕图像角落里的一个小像素发生变化,都会影响到所有的输出。

卷积层(CONV):每个输出神经元只与输入图像的一个局部区域相连。这意味着它只关心自己头顶上的这一小块地方,这就叫稀疏连接。

(2)感受野:

虽然在第一层卷积(h层)中,神经元h3只能看到输入的x2, x3, x4(感受野= 3)。但是到了更深的一层(g层),神经元g3可以看到h2, h3, h4。而h2, h3, h4结合起来,其实已经把 x1到x5的所有输入都看遍了!

结论:通过多层卷积的层层堆叠,深层的神经元可以间接地看到很大一部分的输入图像。 这不仅极大地减少了单层的连接负担,还形成了从局部细节到全局大局观的抽象认知。

②参数共享

卷积通过参数共享成功给网络做了一次极限瘦身。

③神经科学的启发

多个不同的通道(滤波器)聚集在图像的同一个局部空间内,有的负责看颜色,有的负责看线条轮廓,从而协同拼凑出完整的物体认知。

池化:

池化层(POOL)不仅是一个能把数据长宽砍掉一半、帮硬件降维的工具,更是一个能让网络对物体在照片里的轻微位移、旋转和变形不敏感(平移稳定性)的精妙设计。

策略

改变

优势

深度可分离卷积

单层滑窗+1x1融合

计算量暴跌,让模型变得极轻、极快

分组卷积

输入和滤波器按通道分组,各组之间互不相干

降低显存和参数,利于多显卡并行计算

扩张卷积

卷积核内部元素张开、留空,中间填0

不失真地扩大感受野,不丢失图像空间位置

训练好的网络:

模型

输入与层数规模

核心结构创新与特点

激活函数,关键技术

LeNet-5

32×32×17 层

奠定了CNN“卷积 → 池化 → 全连接”的架构。使用平均池化。

Sigmoid,Tanh

AlexNet

224×224×38 层

使用分组卷积(双GPU分流),引入最大池化。重叠池化减少模糊。

ReLU,Dropout,数据增强

ZFNet

224×224×38 层

优化AlexNet,将第一层卷积核从11×11减小到7×7,步长从4减小到2。

ReLU,反卷积

VGG

处理小图像块(64×64)

采用小卷积核复用策略,用多个小核级联代替大核,在保持感受野的同时增加深度并减少参数。

ReLU,Dropout

GoogLeNet (2014 年)

224×224×322 层

提出Inception 模块,在同一层并行执行多尺度卷积;大量使用1×1卷积进行降维;用全局平均池化取代全连接层。

ReLU,辅助分类器

ResNet

224×224×350/101/152 层

核心创新是残差连接,通过引入 y=x+f(x)的恒等映射,让梯度跨层无损传递。

ReLU,批归一化

Xception

299×299×3

基于GoogLeNet的极端改进。提出极致深度可分离卷积:先进行1×1 跨通道卷积,再进行通道内的空间卷积,并在中间加上残差连接。

ReLU,特殊的通道解耦

DenseNet

多种规模可变

提出Dense Block(稠密块)。采用密集连接策略:某一层的输入不仅来自前一层,而是来自前面所有层输出的拼接。

ReLU,密集拼接结构

SENet

作为模块嵌入

提出SE模块。通过“压缩(全局池化)”和“激励(全连接两层结构)”,自适应地学习各个通道的重要程度。

Sigmoid,BN

MISLnet

通常处理小图像块(如 64×64)

专为图像多媒体鉴识设计。其第一层为特殊的约束卷积层,限制参数之和为1。通过抑制图像内容来捕获相机硬件或篡改留下的微弱残留噪声特征。

预测残差提取,经典 CNN

6.2生成对抗网络与扩散模型

生成对抗网络:

生成器:接受一个随机噪声作为输入,并尝试将其转换成看起来像真实数据的输出。

判别器:判断输入的数据样本是否来自真实数据集,或者是由生成器生成的假数据。

通过对抗学习的方式相互竞争,这种对抗训练机制能够推动模型不断提高,使得生成器产生更逼真的数据样本,同时使判别器更加准确地区分真实数据和生成数据。

优点:

①无需标注:属于无监督学习,直接利用无标签数据训练,节省巨大的人工标注成本。

②生成多样且具创造性:能凭空产生多个不同风格、内容丰富且逼真的全新数据样本。

缺点与挑战:

①训练极不稳定:生成器与判别器难以达到完美博弈,极易出现模式崩溃(生成样本单一)或无法收敛的状态。

②模型评估困难:缺乏统一、客观的数学标准来量化生成结果的质量与逼真度。

应用于图像领域,音频领域,视频领域

1.生成模型--功能

让生成器接收输入的随机噪声,通过采样和不断训练,最终输出与训练集同类型的新数据。

2.生成模型--数学原理

生成器的目标是最小化它自己的损失函数,即尽量让判别器把生成的样本误判为真实样本。

3.判别模型--功能

判别模型本质上是一个分类器。

4.判别模型--数学原理

判别器的目标是最大化正确分类的概率。

5.训练过程--损失函数

扩散模型:先学会如何把一张完全被噪声污染的图片一步步“去噪”,然后反过来利用这个能力从随机噪声生成全新的图片。(视频和图像)

存在一个难题:灵活性与可计算性之间的平衡。

DDMP:

因为直接面对重度噪声时,企图一步到位还原出清晰图像会失效,所以扩散模型采取了化整为零的策略,虽然仍从纯噪声(最大总噪声)开始,但每次迭代只要求网络预测并擦除极微量的一步噪声。通过成百上千次小步快跑的微小去噪与动态纠错,最终稳定地从混沌中生成高保真的逼真图像。

扩散模型正向:

扩散模型反向:目标是在没有标准答案x0的推断阶段,仅依据当前残余噪声状态xt与时间步t,逆向推导其上一步状态xt-1。

结合的优势:

结合的改进策略:

AIGC应用:AI绘画,AI对话,AI游戏创作

7.深度学习相关硬件与软件平台

CPU的优势在于强调度、管理和协调能力,计算能力次之。

而GPU更擅长对大数据进行简单的重复操作。

GPU的三个特点:

①提供多核并行计算的基础结构,完美支持大数据并行计算。

②拥有更高的访存速度。

③拥有更高的浮点运算能力。

8.循环神经网络

有限响应系统与无限响应系统的区别:

有限响应模型:Yt = f(Xt, Xt-1, ……, Xt-N)$。输出Yt仅依赖于当前及过去N个时间步的输入。

无限响应模型:预测未来的某个输出时,后面所有的历史输入都会参与计算。

无限响应系统建模:状态空间模型

循环神经网络(单隐藏层)架构:

随着时间轴向右推移,网络在每个节点都在做结合旧记忆ht-1,吸收新输入xt,更新新记忆ht,输出yt的循环操作,实现了用有限的结构去模拟无限响应的目标。

双向循环神经网络:为了预测当前位置的输出,不仅要考虑过去的历史信息,还要结合未来的上下文信息。

循环神经网络(多隐藏层):

①当前状态=当前输入+历史记忆。

②深度带来抽象能力,宽度主要带来容量。

③时间上传播:t−1→t,深度上传播:第1层→第2层

④完全连接的多层RNN:

原来:第一层 → 第一层,第二层 → 第二层

现在:第一层 → 第二层,第二层 → 第一层

优点:不同层之间共享更多信息。

缺点:参数爆炸,训练困难,容易过拟合。

⑤One-to-One:例如:猫图片 → 猫(分类)

Many-to-One:例如:I love you,输出:Positive

One-to-Many:例如:狗的图片,输出:一只狗正在草地上奔跑

Many-to-Many(输入输出长度一样):例如:I love AI,输出:代词 动词 名词(词性标注)

Many-to-Many(长度不同):机器翻译:I love AI输出:我喜欢人工智能(翻译)

⑥RNN展开:

⑦RNN递推公式:

ht=fW(ht−1,xt)

ht可以理解为到当前时刻为止,整个历史的压缩表示。

ht=tanh(Whhht−1+Wxhxt)

输入到隐藏层:Wxhxt提取当前输入信息。

隐藏层到隐藏层:Whhht−1携带历史信息。

三种经典计算图结构:多对多(Many-to-Many)、多对一(Many-to-One)和一对多(One-to-Many)。

多对多:输入是一个序列,输出也是一个序列,且每个时间步都有对应的输入和输出。(词性标注,视频帧分类)

多对一:输入是一个序列,但模型只在最后一个时间步输出一个最终结果。(文本情感分析,时间序列预测)

一对多:输入只有一个固定的特征数据,但需要衍生输出一个连续的序列。(看图说话,自动音乐生成)

字符级语言模型训练和测试RNN:

随时间反向传播:当网络在最后一个时间步发现自己猜错了(产生了Loss),它该怎么去惩罚和更新前面每一个时间步里用到的参数矩阵W, U, V?

时间的展开:

前向传播:数据随时间步t=1,2,3...一步步往后传,每个时间步都对总损失(Loss)有一份贡献。

后向传播:当总损失计算出来后,梯度误差必须沿着时间的逆方向,从最后一个时间步倒推回第一个时间步。只有这样,第一步的隐层参数才能接收到来自未来的“修正反馈”。

前向公式与单步求导:

跨时空总梯度:我们要对网络中共享的参数c, b, V, W, U求总梯度。

同一个参数矩阵在每一个时间步都在被重复使用,根据多元复合函数求导法则,总梯度等于所有时间步计算出的梯度之和。

截断随时间反向传播:

1.前向传播:记忆保留

模型读第二段话时,脑子里还记得第一段话讲了什么。

2.反向传播:时空阻断

右边片段犯了错,只惩罚右边这几步的参数,绝不往前追究历史责任。

CNN+RNN:

CNN负责把现实世界编码成机器向量,RNN 负责把机器向量解码回人类的语言。

RNN梯度流:

针对梯度爆炸:梯度裁剪

针对梯度消失:改变 RNN 的架构

LSTM:

改进版:

1.改动点:将原本独立的输入门it替换成了(1 - ft)。

2.改动点:原本所有的门(ft, it, ot)都只能通过看隐状态ht-1和输入xt来做决定。改进后,把中间传送带上的记忆单元C直接引入到各个门控的输入里。

它通过重置门rt清洗历史,再通过一个更新门zt玩一手完美的新旧记忆比例控,用更少的代码和参数,换来了比肩LSTM的长短期记忆能力。

注意力机制:

自下而上注意力机制:由输入驱动

这种机制是由数据本身(输入)驱动的。它不需要任何先验任务,而是自动寻找输入中最显著、最突出的区域。这就像你在路上走着,突然旁边闪过一道强光或者一声巨响,你的眼睛会本能地看过去。

自上而下注意力机制:由任务/目标驱动

这种机制是由当前的任务或明确的目标驱动的。它根据你“想要干什么”,主动去输入中筛选和任务最相关的信息。这就像你在满是人群的火车站里,主动去寻找一个穿着红衣服、戴帽子的人。

注意力机制分为两步(软性注意力):

第一步:计算注意力分布α

第二步:根据α计算输入信息的加权平均

打分函数:

1.硬性注意力

机制:软性注意力会对所有输入按百分比(如 0.1, 0.6, 0.3)分配权重。而硬性注意力通过argmax操作只选择一个(或少数几个)权重最大的位置(选中的地方权重直接为 1,其他地方全是 0)。

优缺点: 它更符合人类眼睛聚焦某一点的行为,计算也更省资源。但它的致命缺点是不可导(无法直接用梯度下降训练),需要借助强化学习等复杂方法来训练。

2.键值对注意力

机制: 它把输入的定位属性和内容属性分开了。

键:用于和查询计算相关性得分(打分并过softmax得到α)。

值:实际存储的内容,最后用来和权重α进行加权求和,输出结果zt。

直观理解:这就像你在字典里查单词,Query是你想了解的词,Key是字典里的词条目,Value 是最终获取的内)。

指针网络:

普通的文本生成模型是从一个固定的词表里挑词出来。但指针网络不生成新词,而是直接把注意力概率分布作为输出,指向输入序列中的某个具体位置(索引)。

这种网络完美适用于解决旅行商问题、文本摘要中的原文复制机制、或排序问题等输出完全来自于输入本身的场景。

①传统网络的缺陷:局部依赖

卷积网络(CNN):输出hi只看得到其周围一个固定窗口(感受野)内的输入。比如h3只连接了x2, x3, x4。它只能建模局部依赖,看得很近。

循环网络(RNN):虽然它是双向传递的,但因为信息是串行一步步传过去的,当序列很长时,容易发生梯度消失或信息遗忘,依然很难完美捕捉超远距离的依赖关系。

②全连接网络

缺点:无法处理变长问题。全连接网络的权重矩阵大小是死板固定的(由输入和输出维度决定)。如果训练时输入是5个词,突然来了一个10个词的句子,全连接网络就直接崩溃无法计算了。

③解决方案:自注意力模型

点积:直接乘,看重合度。

缩放点积:直接乘,但数字太大得除以一个数降低。

双线性:中间放个矩阵当翻译,让不同维度的两个人能匹配。

加性:把两个人的特征加在一起,再经过一层神经网络算出分数。

①多头自注意力

切分:把输入的信息,拆分给h个不同的头(专家)。

各显神通:每个头用“缩放点积”各算各的,得出各自的结论。

拼合与总结:把所有专家的结论拼在一起,交给最后一个线性层进行汇总,得出最终的强大表示。

ViT:

把一张图切成一块块,当成一个个单词来读。

1. 切碎图片(切为Patch)

2. 压扁并排队(Patch Embedding)

3. 给方块贴上门牌号(位置编码 Positional Encoding)

4. 送入Transformer

5. 分类头(预测结果)

Transformer 的完整结构通常由两部分组成,就像两个各司其职的部门:

编码器(Encoder):负责把输入的文字、图片打碎,全面分析它们之间的全局关系,榨取核心含义。

解码器(Decoder):根据编码器传过来的含义,开始一个字一个字地往外蹦(预测下一个词)。比如它吐出“我”,然后把“我”作为已知条件,再预测下一个字是“爱”,再根据“我爱”预测下一个字是“你”。

BERT:

①BERT是如何被制造出来的

只保留了Transformer编码器(Encoder)的模型。

②如何被训练的

通过自监督学习(自己出题自己考),在海量无标注的互联网文本里学习。

任务1:随机把输入句子里15%的词用[MASK]遮起来,然后逼着模型去猜被遮住的词是什么。

任务2:给模型两句话(句子A和句子B),让模型做单选题:句子B到底是不是句子A紧跟着的下一句话?

③怎么拿去投入使用的

不需要改动 BERT 的主体网络,只需要在最顶端加装一个任务头(Task Head)

记忆增强神经网络:

传统神经网络的痛点:灾难性遗忘

主网络+外部记忆单元M

用注意力机制来进行内容寻址

端到端记忆网络:

(a)单跳记忆网络

输入记忆与寻址:输入的句子集合xi通过矩阵A转化为输入记忆向量mi。问题q通过矩阵B转化为查询向量u。

注意力机制:将查询向量u与所有内存储存的mi进行内积(匹配),再通过Softmax函数计算出注意力权重pi。

内容读取:输入的句子同时通过矩阵C转化为输出记忆向量ci(即 Value)。用刚才计算出的权重pi对ci进行加权求和,得到读取结果向量o。

预测输出:将u和o拼接或相加,通过全连接层W预测最终答案y。

(b)多跳记忆网络

多跳操作:在第k跳中,网络利用前一跳的查询向量q(k-1)与读取到的记忆 r(k-1)相加,更新生成当前跳的查询向量:q(k)= q(k-1)+r(k-1)

参数与外部记忆共享:每一跳的记忆单元A(用于寻址)和C(用于输出)通常在层与层之间是共享使用的。通过这种多步寻址->读取->更新查询”的循环,网络能够像人类一样进行多步逻辑推理。

端到端键值记忆网络

动态网络

神经图灵机:Neural Turing Machine

动态键值网络

9.无监督学习

从无标签的数据中学习出一些有用的模式。

主成分分析(PCA):

转动视角,抓大放小,把高维的复杂分布,投影到最舒展、最不容易重叠的低维视角上去。

①编码与解码视角

编码(Encoding):通过编码函数f(x)= c,将高维原始数据x映射为低维的编码向量c。

解码(Decoding):通过解码函数x≈g(c)=Dc将其还原。为了保证基向量是标准正交的,需要满足约束条件DTD= I。

优化目标:最小化原始数据与重构数据之间的均方误差:

②方差视角

PCA是一种降维方法,它的目标是找到一个投影方向,使得原始数据投影到该方向后,数据的方差(变化程度)最大。保留方差最大意味着保留了数据中最多的特征信息。

③相关性视角

核心思想:原始数据各维度之间可能存在很强的相关性(信息冗余)。PCA 通过旋转坐标系,将数据转换到一组新的正交轴上。

数学表达:通过线性变换z=WTx,使得变换后新变量z的协方差矩阵Var(z)变成一个对角矩阵。

结果:对角化意味着新变量z的不同维度之间互不相关(协方差为 0),从而消除了冗余信息。

线性因子模型:

假设我们看到的复杂、高维观测数据x(如图中的x1, x2, x3),实际上是由几个隐藏的、简单的、彼此独立的潜在因子z(隐变量,如图中的h1, h2, h3)通过线性组合(权重矩阵W)再加上一些噪声(noise)生成的。公式表示为:x=Wz+b +noise。

数据的“诞生过程”:

1.首先,在低维空间中,隐变量z服从一个标准的多元高斯分布。

2.通过矩阵乘法Wz+ b,把低维的z映射(拉伸旋转)到高维空间中。但由于现实有噪声,所以实际产生的点不会完美落在蓝线上,而是以蓝线为中心、服从以 σ2I为方差的高斯等高线向外扩散。

3.所有可能生成的点综合起来,就在高维空间中形成了一个椭圆状的边缘高斯分布。

观测变量的边缘分布与“不可识别”问题:

隐变量的后验概率与参数估计:

完美退化回传统PCA:

如果让噪声的方差无限趋近于0(σ2->0)会发生什么?

这个公式在几何上恰好等于把高维数据点x垂直投影到由W张成的低维隐式空间上。这正是传统PCA本质在做的事情!

独立成分分析(ICA):

一个房间里有几个人同时说话(潜在信号),麦克风录到了混合的声音(观察到的信号),ICA的目的就是把每个人单独的声音分离出来。

ICA 的所有变种都要求隐因子的先验分布z是非高斯分布。因为高斯分布具有完美的旋转对称性。如果隐因子都是高斯分布,那么哪怕它们乘以任何旋转矩阵,混合后的高斯分布等高线依然是个正圆,你将无法唯一确定坐标轴的方向(不可识别性)。

p(z)是隐因z的先验

稀疏编码:

对每个具体样本只挑其中最核心的几个素材进行线性组合,从而实现极其精简、高效的数据表达。

稀疏编码就是准备一个“宁多勿缺、充满冗余”的超大工具箱(过完备),但要求每次干活只能从中挑选“极少数最完美契合”的工具来用(稀疏),从而实现对数据最高效、最精准的表达。

在原本的重构公式后面贴一个惩罚项,这个惩罚项在几何上长着极其尖锐的棱角和针刺,正是这些针刺,在优化过程中把数据点强行扎到了坐标轴上,从而实现了绝大多数系数为0的稀疏效果。

训练过程:

①先假定当前的字典A是完美的、不能动的,针对手头的每一个输入样本x(n),去寻找它专属的最省零件的组合系数z(n)。

②现在反过来,把刚刚所有样本算出来的编码系数z(1),……, z(N)全部冻结。去优化字典A,使得这套固定的组合方式在拼全部样本时,整体的重构误差更小。

优点:

①计算量降低:因为绝大多数系数都是0,计算机在做矩阵乘法时可以直接跳过它们,计算量断崖式下跌。

②可解释性强:不再面对成千上万个复杂的特征叠加,由于最后只剩下两三个关键特征在起作用,其背后的物理或业务含义变得清晰可见,大大提升了可解释性。

③去噪声:它强迫模型只留下最关键的信号,自动把那些可有可无的微弱噪声归零,完成了特征选择,模型因此变得更鲁棒、不易过拟合。

自编码器:

编码器:把高维的输入数据x,压缩成低维的隐层表达z(也叫特征或暗号)。

解码器:拿着这个低维的暗号z,试图把它还原成原本的高维输入x'。

损失函数(重构错误L):计算输入x和输出x'之间的差距。

我们必须给它施加一些约束,否则它根本不需要去理解输入的数据是什么,只需要把输入的数据原封不动地复制粘贴到输出端就行了。加约束后模型在容量有限的情况下,就会被迫去抓取数据中最有用的、最本质的特征(比如图片的轮廓、核心语义),而扔掉不重要的噪声。

欠完备自编码器:

中间隐层z的维度(神经元个数)远远小于输入x的维度。

正则自编码器:

通过引入正则化,模型可以去学习数据其他的优良特性,而不需要死死限制隐层的维数。常见的三个惩罚方向是:稀疏表示、表示的小导数(提升平滑度)、以及对噪声的鲁棒性。

稀疏自编码器:

降噪自编码器:

收缩自编码器:不加噪声,而是通过数学公式(导数惩罚)在内部压制极端变化,对抗极小的输入扰动。

随机自编码器:

预测稀疏分解(PSD):它训练了一个编码器f(x)。训练好后,测试时直接把x喂给f(x),一瞬间就能预测出近似的稀疏特征h,大大提升了计算效率。

对比文本-图像预训练(Contrastive Language-Image Pre-training,CLIP):

图像编码器:把图片变成一串数学向量。

文本编码器:把文字也变成一串数学向量。

尽量让正确配对的图片和文字在数学空间里的距离拉近。

尽量让错误配对的距离拉远。

自监督学习:

①生成式:故意把数据藏起来一部分,让模型去预测或补全被藏起来的部分。(AE)

②对比式:不去像素级地还原图片,而是玩“连线题”或“找茬游戏”,让模型学会分辨“谁和谁是一伙的,谁和谁是外人”。(CLIP)

MAE:

①把一张图片切成很多小方块,然后随机把其中 75% ~ 80% 的区域全部抹黑(掩码)!只留下20%左右的像素碎片。

②不同于普通的去噪自编码器(DAE),MAE 的编码器(Encoder)非常省力,它只处理那 20% 没被抹黑的碎片,把它们压缩成特征向量。

③解码器把那20%的特征和一堆占位符拼在一起,强行还原100%原始图片。

更多推荐