此为24年秋研究生课程复习笔记
导论
神经网络的研究方法分为
- 连接主义,生理学派,模拟神经计算。高度的并行、分布性,很强的鲁棒和容错性。便于实现人脑的感知功能(音频图像的识别和处理)。
- 符号主义,心理学派,基于符号推演。便于实现人脑的高级认知功能(逻辑思维)。
- 行为主义,控制论学派,控制进化。强调智能系统与环境的交互,进行自学习、自适应。
机器学习导论
- 有监督学习:
- 回归问题预测值。有线性回归等模型。
- 分类问题预测类别。有逻辑回归(基于线性模型和sigmod做二分类)、SVM(找到最大超平面,改变维度)、朴素贝叶斯
- 无监督学习:
- kmeans(聚类):将相似的点归为一类,总共划分k个类。相似度度量有欧式距离、汉明距离、余弦距离等。
- PCA(降维)
生物神经网络
树突传入信号,细胞体进行处理,轴突输出信号。
当前神经元的轴突与下一个神经元的树突间通过突触连接,突触分为兴奋和抑制型。
细胞体接收信号,如果为抑制型则膜电位降低,兴奋反之。当神经元的膜电位到达阈值,会放电,并将此信号继续传播。实现信号的传递,并最终导致人的认知与活动。
大脑的学习过程就是神经元之间连接强度随外部信息做自适应变化。学习结果由神经元的状态表现出来。
ANN特点
对应对生物神经网络:
- 输入连接-树突
- 输出连接-轴突
- 权重-突触
- 求和与激活函数-细胞体
空间上知识分布存储,时间上并行处理,容错性高(可以处理不完整、有噪音的信息,泛化),自学习、自组织、自适应,解为满意解而非精确解(不一定全局最优,但是全局较好)
在结构建模分为:
- 前馈型。神经元的输出只会作为下一层神经元的输入,影响下面的层。例如CNN。
- 反馈型。神经元的输出还会作为当前层或之前层神经元的输入。这使得网络能有记忆功能,能考虑过去的信息,适用于处理时序数据。例如RNN。(反馈型与反向传播无关)
- 竞争学习网络。是一种无监督学习方法,神经元会相互竞争并根据胜败调整权重。适用于聚类分析等领域。
ANN领域面临的挑战:
- 需要大数据集。
- 弱标签、无标签数据远多于有标签数据。
- 超参数调优。权值参数可以自学习,但超参数需要根据经验和实验来设置。现在有个方向Neural Architecture Search,NAS神经网络搜索,通过搜索求出高性能的网络结构。
- 过拟合。
- 欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况;模型复杂度过低、特征量过少。这个不算挑战,只能算训练不到位。
- 过拟合是指模型在训练集上表现很好,到了验证和测试阶段就很差,即模型的泛化能力很差。样本数量过少、样本质量不佳无法代表整体样本分布、模型复杂度过高等。
- 不透明。神经网络模型本质是黑盒算法,可解释性和可靠性较差。
- 不灵活。一个模型的训练和设计针对了某个特定场景,那就只能用于这个特定场景,通用性差。现在有迁移学习,即根据已有知识学习新知识,找到新旧知识的相似性。当然最热门的还是大模型,AGI(Artificial General Intelligence,通用人工智能)。
感知机
感知机基于M-P模型。有加权、求和、激励三个部分。
y = f ( ∑ i = 1 n w i x i + θ ) y = f\left( \sum_{i=1}^{n} w_i x_i + \theta \right) y=f(i=1∑nwixi+θ)
为了拟合非线性函数(比如解决异或问题),需要多层次、多神经元。
训练中会基于当前模型参数产生实际输出,与样本输出存在差距,即损失值loss,这个计算函数就是损失函数。
我们给训练定了个最终目标,即最小化一个与模型相关的函数,这个函数就是目标函数。目标函数基于损失函数,还引入了正则项等参数以及求均值等方法。我们的梯度下降等进行参数更新的操作,就是为了最小化目标函数的输出。
ps: 感觉这块有人特地区分,有人随便弄混,大概了解一下就行,实际交流中懂的人自然懂。
Rosenblatt感知机是一个多层感知机,采用{-1,1}的阈值函数。课件中的例题是损失值为 ( w x + b ) ∗ y − y (wx+b)*y-y (wx+b)∗y−y,如果不为0就要调整,调整方式就是 w = w + 学习率 ∗ y ∗ x , b = b + 学习率 ∗ y w=w+学习率*y*x,b=b+学习率*y w=w+学习率∗y∗x,b=b+学习率∗y。直到所有样本输出都与实际输出相等。
激活函数
激活函数执行对神经元输入值的变换。由于若干线性单元叠加还是线性单元,所以在多层网络结构中要使用非线性映射来拟合复杂的目标。
Sigmoid
- 非线性映射。当 x 的绝对值很大时,接近阈值函数(只输出0或1),可以做二分类;当x接近0时,梯度接近1即线性映射,在训练初始阶段加速收敛。同时单调连续、无限次可微有利于使用梯度下降。
- 但是x绝对值很大时,梯度接近为0(即存在饱和区,这个范围内输出几乎不变)。在反向传播中实际上是对于激活函数求导,那么在链式乘法中乘小于1的数,梯度会指数级下降,即会导致梯度消失。此外,sigmoid的输出范围为(0,1),始终大于0(非0对称),在梯度下降中权重都会朝着同一个大方向改变,不能够有正有反,这影响收敛速度与性能。
Tanh
比起sigmoid,实现了0对称 ( − 1 , 1 ) (-1,1) (−1,1),同时在x较小时斜率更大、收敛速度更快。但还是存在梯度消失的问题。
Relu
没有指数运算,计算简单效率高,收敛速度快。但非零对称。
对于左图,梯度为0会导致权值无法更新。
而右图的leaky relu对于x小于0的部分做了调整,不会导致神经元失效。且函数的两个部分都是线性的,无饱和区,不会出现梯度消失。
训练优化
梯度下降
训练目标是最小化目标函数,那么就要求目标函数对每个权值参数的偏导,因为梯度方向是下降最快的方向。
对于多元函数,使用偏导求各个权重在对应方向的梯度。
梯度只是个方向,还有下降的步长,称为学习率。
batch_size
batch_size是每次梯度下降时使用的样本数。
- =1,随机梯度下降SGD
- =N,批量梯度下降BGD
- 1<size<N, 小批量梯度下降SGD
size小时,学习快速,内存消耗少,方便在线模型的更新。下降方向的波动大,有利于跳出鞍点,但因为少量样本的下降方向与正确方向存在误差,也减慢了收敛速度。
size大也不一定学习慢,因为可以利用并行计算加速矩阵运算。
SGD是一种折中方案,常用。
梯度下降优化器
- 动量法。引入动量和动量学习率两个参数。动量其实就是历史梯度的累积。基于先前的动量和当前梯度更新当前动量,基于当前动量更新权值。当梯度平缓时加速收敛,当陷入鞍点时有概率被动量扯着越过鞍点。由于结合了历史动量,即使梯度方向变化大也会变平缓、更新更平滑,减少震荡。
-
Nesterov方法是对传统动量法的改进。唯一的变动就是求梯度的部分。动量法用的是当前梯度,而Nesterov是将当前位置按动量走一下,然后再求梯度。大概思想是先用动量探索一下,如果当前梯度大,就可以走更多,梯度小就少走一点。收敛速度比动量法快。
-
AdaGrad。Ada就是自适应,将学习率动态调整。学习率部分有一个变量,是历史梯度的平方和。这导致起始时整个学习率较大,随着梯度下降的执行学习率变小。加速收敛。缺点是当历史梯度平方和很大很大时,学习率趋近于0,梯度消失。
- RMSProp。加了一个 β \beta β衰减系数,用于对历史历史梯度做加权平均,可以减少久远梯度信息的影响力。
- Adam。RMSProp+Momentum。两者都用了衰减系数。
反向传播
梯度下降是求目标函数对某个参数的偏导。目标函数在网络的输出层,对于深层网络,求偏导需要一个很长度的链式求导。
通过下图可以看到前向求导和反向求导的区别。虽然这个图因为对称所以看不出来,其实反向求导的计算量会小很多。所以前向传播最终得到loss,再反向根据loss求偏导,再下降梯度。
CNN
卷积层、下采样层(池化层)、全连接层。
神经网络的前面的层捕获各个位置的特征,越往后特征图越大,即捕获更精细的特征
卷积层:通过卷积在不同位置共享一个卷积核上的参数。局部感知,权重共享。
池化层:通过减少特征图大小,减少计算消耗,同时能有效处理过拟合问题。
全连接层:将三维的特征图做flatten做几次FC。将卷积层得到的局部特征整合成全局特征。
模型的最后一层使用 Softmax 函数将原始分数转换为概率分布,然后使用交叉熵损失函数计算损失。
特征图大小:
featuremap_size = ⌊ image_size − kernel_size + 2 × padsize stride ⌋ + 1 \text{featuremap\_size} = \left\lfloor \frac{\text{image\_size} - \text{kernel\_size} + 2 \times \text{padsize}}{\text{stride}} \right\rfloor + 1 featuremap_size=⌊strideimage_size−kernel_size+2×padsize⌋+1
AlexNet
- 使用Relu
- 提出了Dropout提高性能和泛化性
- 使用最大池化
- 使用了LRN局部响应归一层。抑制大值,增强小值,提高模型的泛化能力和对抗过拟合能力。
- 使用了ImageNet数据集
googlenet
-
使用不同大小的卷积核捕获不同尺寸的输入输出。进行多尺寸特征提取和特征融合。
-
使用 1 ∗ 1 1*1 1∗1的卷积核减少通道数,减少计算量
-
辅助分类器。提供额外的梯度信号,起到了正则化效果。
ResNet
- 残差,将前面层的一些参数通过捷径直接传到较后面的层,与后面的输出相加再继续往下传播,避免了梯度消失问题,并将粗糙和精细的特征融合。
- 通过适当的卷积核大小来控制特征图的shape以便不同层的输出特征图可以相加。
- 批归一化(batch normalization),对图像标准化处理,加速收敛。
Densnet
在ResNet的基础上将残差连接增多。
RNN
激活函数为tahn,域值为 [ − 1 , 1 ] [-1,1] [−1,1]
需要实现n to m的转换
BPTT
在时间轴上链式求偏导,变成了一个和前面时间的偏导的连乘
LSTM
-
遗忘门计算短时记忆信息与当前信息的关系,用sigmoid映射到 [ 0 , 1 ] [0,1] [0,1],得到抛弃短时记忆的程度。
-
输入门计算,计算 i t i_t it查看短时记忆和当前输入的关系,用sigmoid映射到 [ 0 , 1 ] [0,1] [0,1],判断添加输入到长时记忆中。计算 C ^ t \hat C_t C^t计算一个此次要被添加的长时记忆值。tanh只是一个激活函数,和sigmoid作用不一样。
-
更新长时记忆。求出短时记忆被遗忘后的剩余,以及此次要被添加的输入,相加得到更新后的当前时刻的长时记忆。
-
更新短时记忆。根据当前时刻的输入值,更新下一时刻的短时记忆。
sigmoid用来表示门的开闭,tanh调节数据范围,并通过正负值起到增减的作用。
LSTM也是用BPTT训练,但是推导之后发现连乘可以变成加法形式,缓解梯度爆炸/消失的情况。
GRU
只有重置门和更新门。 r t r_t rt计算多少历史记忆进入候选状态。 h ^ t \hat h_t h^t是候选状态,得到一个临时的输入。然后更新 h t h_t ht,历史信息要添加的越多,当下添加的就越少。
简化了门数量和参数量,效率高,适合实时计算。但没有专门维护长时记忆,只适合简单序列。
运算过程:
seq2seq
encoder-decoder框架,分了两个结构,两边都可以套RNN的各种模型,但是效果更好,因为直接使用单模型只能根据上文理解,而先encode可以理解完整个上下文,然后再decode就能结合到整个上下文的信息,对语义的理解更好。
attention
Q(与其他单词的匹配度)、K(其他单词与本单词的匹配度)、V(本单词的编码向量)
首先根据输入乘权重得到每个单词的qkv
a i = w ∗ x i , q i = a i ∗ W Q , k i = a i ∗ W K , v i = a i ∗ W V a_i=w*x_i,\ q_i=a_i*W^Q,\ k_i=a_i*W^K,\ v_i=a_i*W^V ai=w∗xi, qi=ai∗WQ, ki=ai∗WK, vi=ai∗WV
然后a对b的匹配度点乘b对a的匹配度(余弦相似度),然后除以一个东西,得到注意力权重
除以的这个是一个单词的维度,是为了将分布重新变为 ( 0 , 1 ) (0,1) (0,1)的分布,softmax也是归一。
α i , j = s o f t m a x ( q i ∗ k j T r a n s p o s e d q , k ) \alpha_{i,j}=softmax(\frac{q_i*k^{Transpose}_j}{\sqrt{d_{q,k}}}) αi,j=softmax(dq,kqi∗kjTranspose)
然后乘注意力权重就是其他单词到本单词的注意力值
a t t e n t i o n i = ∑ a i , j ∗ v i attention_i=\sum a_{i,j}*v_i attentioni=∑ai,j∗vi
上面是自注意力,整体使用到了QKV矩阵。类比卷积核,每个卷积核可以识别不同的特征,我们这里也可以将QKV分成多份,即不是QKV,而是 Q i 、 K i 、 V i Q_i、K_i、V_i Qi、Ki、Vi,让每组QKV识别一种特征,这就是多头注意力。计算后将结果拼接、降维,得到注意力值。
Transformer
• 完全依赖注意力机制来刻画各个单词间的全局依赖关系
• 利用类似残差结构有效的防止梯度消失的问题
• 在自然语言处理中单词的输入是并行的,大大加快了计算效率
- Encoder
生成词嵌入->位置编码->多头注意力->归一,注意还有个分支是残差,将原始信息直接与细节信息融合。然后加个前馈网络。
归一化服从正态分布,加快收敛。
位置编码是因为,在RNN和LSTM中数据被依次处理,有历史记忆和当前输入的这种前后关系。而注意力机制虽然用的也是时序数据,但求QKV的乘法并没有体现前后顺序,只是排列组合,同一个单词放在开头和末尾的得分是一样的。所以这里需要将位置信息编码进输入数据中。
- Decoder
有个mask层,因为对于token是并行处理的,比如I love you
是decoder的输入,当encoder处理完我爱你
之后,在处理I
时,通过掩码把love you
盖住(改为很大的负数,softmax为0),不让他直接知道当前位置的未来答案,让解码只依赖当前位置之前的信息。
除了这个将未来信息盖住,还有个对齐操作,因为每个批次输入数据长度不一致,需要后补很大的负数。encoder其实也做了这个。
而第二个multiattention的KV来自encoder,Q来自mask。
bert
将Encoder堆至少12层。
VIT
vision transformer,将transformer用于cv。transformer以token作为处理单位,vit将图像分割为块(patch),并将patch作为处理单位。同时也需要对图像进行位置编码。
考题
三种学习方法,有导师学习、无导师学习和增强学习有什么不同?
- 有导师学习(Supervised Learning)
- 定义:有导师学习是指在训练过程中提供带有标签的数据给算法,让算法通过学习这些带有正确答案的数据来建立一个模型,从而对新的未知数据进行预测或分类。
- 特点:需要大量的标记数据;学习过程相对直接,容易评估模型性能。
- 应用:广泛应用于图像识别、语音识别、情感分析等任务。
- 总结:依赖于已知结果的示例来指导学习过程,适合解决预测和分类问题。
- 无导师学习(Unsupervised Learning)
- 定义:无导师学习是在没有标签的情况下进行的,算法试图从未标记的数据中发现内在的结构或规律。
- 特点:不需要标签数据,因此可以处理大量未标注的数据;目标通常是为了找到数据的分布模式或降维。
- 应用:常用于聚类、关联规则挖掘、异常检测等任务。
- 总结:尝试在没有明确指导的情况下发现数据的内在结构,适用于探索性数据分析。
- 增强学习(Reinforcement Learning)
- 定义:增强学习是一种通过试错来学习的方法,它关注的是如何采取行动以最大化某种累积奖励。在这个过程中,智能体(Agent)通过与环境互动来学习最佳策略。
- 特点:不需要预先标记的数据集;学习过程是一个长期的决策过程,强调的是行动与环境之间的交互。
- 应用:适用于游戏、机器人导航、资源管理等需要做出一系列决策的问题。
- 总结:通过与环境的交互来优化行为策略,适合处理需要连续决策的问题。
计算题
(最终期末考的题)生物神经元的结构画图和各部分功能、三种梯度下降不同批度的特点以及批量梯度下降的优缺点、动量法和学习率自适应法的特点及例子、PPT上roseblatt、根据一个卷积层核和池化层核求输出的特征图尺寸、一个前馈网络的梯度下降和反向传播中的参数、RNN前向计算、LSTM和GRU的介绍和比较、ResNet和DenseNet的比较、transformer的Encoder和Decoder的结构以及各部分功能。
优化器种类
SGD、动量法、Nestrov、AdaGrad、Adam
反向传播例题
目标函数一般用的是
( y ^ − y ) 2 2 \frac{(\hat{y}-y)^2}{2} 2(y^−y)2
注意前向计算过程有z=wx+b、y=f(z),最后还有一个E=E( y ^ \hat y y^,y),这些要链式。
对sigmoid激活函数求偏导得到
∂ f ( x ) x = f ( x ) ∗ ( 1 − f ( x ) ) \frac{\partial f(x)}{x}=f(x)*(1-f(x)) x∂f(x)=f(x)∗(1−f(x))
对目标函数求偏导很容易,就是 y ^ − y \hat{y}-y y^−y。wy+b对w求偏导就是y。
卷积核计算
1 ∗ 28 ∗ 28 1*28*28 1∗28∗28的输入图大小
经过 25 ∗ 3 ∗ 3 25*3*3 25∗3∗3的卷积核
padding为0,stride为1
28 − 3 + 2 ∗ 0 1 + 1 = 26 \frac{28-3+2*0}{1}+1=26 128−3+2∗0+1=26
同时通道数为卷积核数25,即得到特征图 25 ∗ 26 ∗ 26 25*26*26 25∗26∗26。此时每个卷积核用到的参数是 3 ∗ 3 3*3 3∗3个。
然后经过 2 ∗ 2 2*2 2∗2的max_polling,假设一次走那么大的尺寸,即
26 2 = 13 \frac{26}{2}=13 226=13
因为池化层没有卷积核,所以通道数不变。 25 ∗ 13 ∗ 13 25*13*13 25∗13∗13
再来个 50 ∗ 3 ∗ 3 50*3*3 50∗3∗3的卷积核,即
13 − 3 1 + 1 = 11 \frac{13-3}{1}+1=11 113−3+1=11
注意输入图的通道数不是1,所以是一个卷积核与每个图通道的对应位置做卷积,然后对生成的25张图做求和得到一个图,然后50个卷积核就得到50个通道数,即新特征图的通道数等于卷积核个数。 50 ∗ 11 ∗ 11 50*11*11 50∗11∗11。此时每个卷积核用到的参数是 25 ∗ 3 ∗ 3 25*3*3 25∗3∗3个。
再经过 2 ∗ 2 2*2 2∗2的max_polling,即
11 2 = 5 \frac{11}{2}=5 211=5
得到 50 ∗ 5 ∗ 5 50*5*5 50∗5∗5
AlexNet卷积核计算
Input:227x227x3
First layer (CONV1): 96 11x11 filter,stride 4
227 − 11 4 + 1 = 55 , 96 ∗ 55 ∗ 55 ,使用参数为 3 ∗ 11 ∗ 11 ∗ 96 \frac{227-11}{4}+1=55,96*55*55,使用参数为3*11*11*96 4227−11+1=55,96∗55∗55,使用参数为3∗11∗11∗96
Second layer (POOL1): 3x3 pooling,stride 2
55 − 3 2 + 1 = 27 , 96 ∗ 27 ∗ 27 , 使用参数为 0 \frac{55-3}{2}+1=27,96*27*27,使用参数为0 255−3+1=27,96∗27∗27,使用参数为0
RNN计算
只考虑前向