提示:本人还在学习当中,所作笔记仅供大家参考,若有问题欢迎大家指出!
流程:
学习率:一个参数,人为选择,用于控制梯度下降中x的更新
将数据分为测试数据集和验证数据集,验证数据集用于验证,只能使用一次
反向传播算法也叫bp算法,用于优化神经网络
单层感知器(两层神经网络)是最简单的人工神经网络,用于二元线性分类器
损失函数︰衡量模型输出与真实标签的差异,定义在单个样本上
代价函数:定义在整个训练集上,是损失函数的平均
前向传播︰输入层数据开始经隐含层,从前向后,数据逐步传递至输出层。链式求导,从前往后
反向传播︰损失函数开始从后向前,梯度逐步传递至第一层。链式求导,从后往前。传播的是梯度和误差
模型不仅在训练集表现良好,在未知的数据(测试集)也表现良好,即具有良好的泛化能力
预训练:以CNN为例,越浅层,所学到的特征越通用,越深层的特征与目标的关联越高。预训练模型指训练出通用特征的模型,训练出来的通用特征可以直接使用
下游任务:即获得预训练数据后再进行的任务
微调:在源模型预训练得到数据,用于目标模型,最后获得输出的过程就是微调(即使用预训练的训练过程称为微调)
自监督学习不需要人工标注的类别标签信息,直接利用数据本身作为监督信息,学习样本数据的特征表达,应用于下游的任务。自监督学习又可以分为对比学习(contrastivelearning) 和 生成学习(generative learning) 两条主要的技术路线。对比学习的核心思想是将数据对比起来学习特征(区别于对单一样本的学习)
最早的人工智能模型y,是一个二分类问题,对于给定训练集,通过给定的输入和输出拟合出一个超平面完成分类。对于测试集,当其值在超平面一侧时,就输出结果(判断其属于哪一类)
y=wx+b是感知机模型的函数,x是一个n维向量,n的维数取决于样本的特征数量,比如这样一个例子,对于输入的图片,图片中红色像素的个数为x1,绿色像素的个数为x2,那么维数为2,假设根据红绿像素所占比例我们可以判断一张图片中是花还是草,这个例子中x是二维的,所以超平面是一维,(超平面用于分割一个空间,所以是比原空间低一个维度)
在这个例子中,我们通过样本数据拟合参数wb,将样本数据分割成两部分,其中一部分是花,另一部分就是草,这样就完成了一个分类问题
如何拟合参数?即如何更新wb 。答:通过梯度下降法
损失函数:感知机的损失判断就是根据误分类点的数目和误分类点到超平面的距离。那么损失函数就是所有误分类点到超平面的距离和
激活函数:sign函数
感知机的步骤:1,初始化wb,一般都取0或一个极小值 。2,选一个误判点使用梯度下降法更新wb。3,继续选误判点更新wb,直至损失最小
也叫bp神经网络,前馈神经网络,bp算法就是反向传播算法
单层感知机的缺点:无法对复杂问题做出分类
多层感知机在单层感知机的线性函数上增加了非线性激活函数(常用relu),增加模型的非线性性,可以对复杂问题分类。
多层感知机是最简单的多层神经网络模型,包括输入层,隐藏层和输出层。隐藏层就是指输入和输出中间的一层,输入层不做运算,
问题:前向传播输出的结果是什么?如何反向传播更新权重?初始化权重参数,通过前向传播计算出预测结果,然后通过反向传播更新权重参数
是解决分类还是回归问题,如何解决?既可以解决分类问题,也可以解决回归问题,
如何更新权重参数?梯度下降
损失函数是什么?均方误差
下图是前向传播过程
梯度爆炸和梯度消失
梯度爆炸就是梯度越算越大,导致超过值域,且会对学习率非常敏感,大的学习率会使梯度更大,小则训无法训练
梯度消失指梯度越算越小,无限接近于零,会导致训练没有进展
解决办法:•目标:让梯度值在合理的范围内
•将乘法变加法
• ResNet, I LSTM
• 归一化
•梯度归一化,梯度裁剪
•合理的权重初始和激活函数 1,目的:让每层的方差是一个常数,将每层的输出和梯度都看做随机变量,让它们的均值和方差都保持一致
权重初始化方法Xavier,激活函数为本身(f(x)近似x)
待学习:自定义层,模型构造,构造层和块,参数管理
通常机器学习的模型可以表示为简单层的组合与堆叠,创建一个层,在需要时再实例
任何一个层或是神经网络都应该是nn.module的子类,这样会有很多好用的函数
读写文件,加载和保持模型
卷积:对全连接层使用平移不变和局部性得到卷积层
感受野:卷积核与输入矩阵运算的子矩阵就是感受野
对比全连接层,大大减少权重参数
提问:
1,什么叫卷积,卷积层的作用是什么?答:卷积是一种数学操作,数学模型,在生活中可以找到应用场景,在图像处理中其目的是提取特征,从而降低噪声。图像处理中的卷积运算与数学中的卷积运算有些不同
2,那如何提取特征呢?答:图像特征是一些矩阵,卷积核是一个小矩阵,一般是3乘3,将这两个矩阵通过一些操作获得新矩阵。
3,新矩阵就是提取到的特征?为什么这样做就能提取特征呢?答:新矩阵是提取的特征,对于输入矩阵来说,新矩阵就是其特征向量。新矩阵是通过编码器而得出的,用于解码器
4,新矩阵只是原矩阵的特征矩阵,如何能代替原矩阵呢?新矩阵后面将作什么运算?答:新矩阵应该就是代替原矩阵,后面就是池化层和全连接层然后输出了。需要一个例子理解卷积是如何提取特征的,比如输入一张人的图片,判别性别,那么特征应该是人的头发长度,胸围,喉结等,卷积如何能获得这些特征的呢??
实践一下!!!!!!!!! !!!
输入矩阵和核矩阵的运算:选输入矩阵的第一个和核矩阵形状一样的子矩阵和核矩阵作运算,然后在输入矩阵再往右移一列取子矩阵和核矩阵作运算,这样从左到右从上到下取矩阵作运算,右移一列则步幅为1
卷积层将输入和核矩阵进行交叉相关,加上偏移后得到输出
核矩阵和偏移是可学习的参数
核矩阵的大小是超参数
卷积层中有三个参数:通道和填充和步幅
通道:一张图片是多通道的叠加,比如rgb是三通道,对每个通道的结果求和
填充就是对输入矩阵进行填充,在输入矩阵附近添加一些全为零的行和列,使得输出矩阵是预想的形状
步幅是每次移动的步幅,也会影响输出矩阵的形状
池化层:池化层分为3类,平均池化(取平均值),最大池化(取最大值)和随机池化(取随机值)。
作用:压缩数据和参数的数量
lenet卷积神经网络:LeNet是早期成功的神经网络,先使用卷积层来学习图片空间信息,然后通过池化层,然后使用全连接层获得输出
Alexnet:更深更大的 LeNet
主要改进:
•丟弃法
• ReLu
• MaxPooling
计算机视觉方法论的改变
卷积神经网络误差反向传播:
全连接层的参数过多,会出现过拟合问题
vgg,vgg块,一个神经网络主要由多个块组成,块内由各种层组成。如何更好的加深加宽神经网络。现在神经网络的训练成本依然很高,如何减少训练成本
nin,nin块,无全连接层,用多个卷积代替,效果比Alex net好一点
google net,inception块,通过1x1的卷积层降低通道数
resnet残差网络:残差块
解决问题:无脑的增加模型的参数,反而会降低模型的精读,loss越算越大,即偏离了梯度下降路线
解决方法:当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果我们把低层的特征传到高层,那么效果应该至少不比浅层的网络效果差,或者说如果一个VGG-100网络在第98层使用的是和VGG-16第14层一模一样的特征,那么VGG-100的效果应该会和VGG-16的效果相同。所以,我们可以在VGG-100的98层和14层之问添加一条直接映射 (Identity Mapping) 来达到此效果。
Sigmoid函数优缺点∶
优点∶输出0~1区间,映射平滑适合预测概率
缺点∶不过零点,没有负值激活(没有负值),影响梯度下降效率;饱和区梯度消失问题!(当x趋向于无穷时梯度为0)
Tanh函数优缺点︰
优点∶映射到(-1,1)之间,过零点,值域比sigmoid更大缺点:饱和区梯度消失!
ReLU函数优缺点:
优点∶计算简单,导数恒定;拥有稀疏性,符合人脑的神经元活跃特性
缺点:非零中心化,没有负激活值,影响梯度下降效率;如果一次不恰当的参数更新后,所有数据都不能使某个神经元激活,则其对应的参数梯度为0,以后也无法激活,陷入‘死亡’(Dead ReLU)
改进ReLU
max{(ax,x},解决ReLU函数负区间的零激活问题。αc取固定值则为LReLU,为可以学习的参数则为PreLU,为随机值则为RreLU。
LReLU函数:有ReLU的所有优点,并且不会有Dead ReLU问题PReLU:网络的浅层尤其是第一层卷积中,学习到的α会比较大,而到了深层就比较小。这可以理解为网络的浅层学习到了类似于Gabor的浅层特征,更大的c可以提取到更加稠密的特征,而随着网络深度的增加,特征变得更加的稀疏。
RReLU:当作一个正则项,用于增强网络的泛化能力。
ELU函数优点︰
优点︰被证实有较高的噪声鲁棒性,能够使得神经元的平均激活均值趋近为0。
缺点︰由于需要计算指数,计算量较大。
Maxout函数优缺点:
优点∶整体学习输入到输出的非线性映射关系,拟合能力非常强
缺点∶计算量增加,增加了k-1个神经元
Swish函数,swish(x)=x . sigmoid(Bx)
Swish函数优点∶
线性函数与ReLU函数之间的非线性插值函数,无上界有下界、平滑非单调,从数据中学习参数β,可以获得任务相关的激活机制
参数初始化
什么是好的参数初始化
各层激活值不能为0也不会出现饱和;每层的权重方差、梯度与层数无关,会更加有利于优化;
全零初始化︰在第一次更新的时候,除了输出层之外,所有的中间层的节点的值都为零。一般神经网络拥有对称的结构,导致进行第一次误差反向传播时,更新后的网络参数将会相同,在下一次更新时
相同的网络参数提取不到有用的特征。即使是对于非对称的网络结构,这样的随机参数也不利于接下来的优化。
随机初始化:np.random.randn(n),用随机值进行初始化。参数的初始值不能取得太小,因为较小的参数在反向传播时会导致过小的梯度,会产生梯度弥散问题,降低参数的收敛速度。而过大不仅会造成震荡,对于Sigmoid等激活函数也会进入梯度饱和区。
固定方差方法
Xavier初始化 :方差缩放(Variance Scaling)的初始化方法
应用最广泛的方法
待详细了解
MSRA初始化适合ReLU的初始化
标准化/归一化 :数据预处理操作
BN批量归一化:解决问题:训练集和测试集,或是模型的每一层,数据的分布(均值和方差)不一致(不均衡),所以导致在训练时需要重新适应新的分布的数据,导致训练变慢。(那么数据分布的不均衡是如何影响神经网络的训练呢?)(数据种类不均衡也会对神经网络的训练产生影响)
可学习的参数有两个,用于找到合适的分布。使用BN后可以不用dropout
作用在
•全连接层和卷积层输出 上,激活函数前
•全连接层和卷积层输入上
对全连接层,作用在特征维。对于卷积层,作用在通道维
归一化的作用
去除量纲干扰,保证数据的有效性,稳定数据分布
去除量纲的干扰,防止数值过小的特征被淹没
·[年龄∶30身高:170性别∶1年薪:500,000 …]
保证数据的有效性
·稳定前向传播激活值和反向传播过程中的梯度
稳定数据分布
.当深层网络中数据分布如果在某一层开始有明显的偏
移,会使得接下来这一问题加剧,内部协变量偏移( Internal Covariate Shift )
批标准化方法
假设神经网络某层一个batch的输入为X=[xj,×2…× ],其中x代表一个样本,n为batch size。
数据维度为(N,C,H,W),每一层normalization是基于NHW个数值进行求平均以及方差的操作。
优点:减轻了对参数初始化的依赖,前向激活值与反向梯度更加有效。平滑了优化目标函数曲面,梯度更稳定,可以使用更高的学习率,从而跳出局部极值,增强了泛化能力。
缺点:要求固定的Batch长度与均匀采样; batch过小数值计算不稳定
优化:
池化:将一个区域的信息压缩成一个值,完成信息的抽象,获得一定程度上的平移旋转不变性。在初始化的时候使用。现在大多数都是带步长的卷积替代池化的使用
常见方法:选择区域均值或最大值
随机池化:归一化pooling的输入,计算分布概率p ;
从基于p的多项式分布中随机采样位置,按照其概率值大小随机选择,元素被选中的概率与数值大小正相关
混合池化:从最大个平均池化中进行随机选择
模型不仅在训练集表现良好,在未知的数据(测试集)也表现良好,即具有良好的泛化能力
它的目标就是要同时让经验风险和模型复杂度都较小,是对模型的一种规则约束。增加模型对复杂情况的能力
f即预测结果函数,V即损失函数,R(f)是跟模型复杂度相关的单调递增函数,用于约束模型的表达能力。
方法分类:显式(Explicit)i正则化与隐式(Implicit)i正则化
显式正则化:1.根据损失函数的变化,提前终止模型的训练:
2.训练多个不同的模型进行结果融合。多次使用不同的数据训练模型进行结果融合
3.Dropout技术
训练时按照概率p随机的丢弃一部分节点,测试时不丢弃,输出结果乘以p
4.类时Dropout技术
5.参数正则化:损失函数的修改
隐式正则化:没有直接对模型进行正则化约束,但间接获取好的泛化能力
1.数据标准化,平滑了优化目标函数曲面
2.数据增强,扩大数据集规模
3.随机梯度下降算法,不同优化过程获得不同结果
4.标签噪声 。。。。。。
数学上指求最值
机器学习用有限训练集上的期望损失作为优化目标(代理损失函数),已知某个标量y和某个向量X,要确定一个函数f(x)描述y和X之间的对应关系,使得loss(f(X),y)尽量小。这个loss(f(X),y)就是损失函数
鞍点:低维空间中局部极小值很常见,高维空间中,参数维度很高,鞍点(横截面上的局部极小值,某一些方向梯度下降,另一些方向梯度上升)更加常见
学习率:参数更新的步长(乘因子)(一般指梯度下降法中)
随机梯度下降法SGD:沿梯度反方向,减少值最快的反向
-小批量随机梯度下降:使用最多
-动量法:加速SGD,特别是处理高曲率、小但一致的梯度﹔积累了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。梯度平滑
NAG法:在标准动量方法中添加了一个校正因子
Adagrad法 自适应地为各个维度的参数分配不同的学习率
Rmsprop法 :
-Adam法 梯度平滑比冲量法好一点。同时包含了动量更新与学习率调整,使用梯度的一阶矩估计和二阶矩估计来动态调整每个参数的学习率,momentum和RMSProp结合。
Adam算法的改进
Adamax ,Nadam,AMSgrad,Adafactor ,Adabound
二阶优化算法优缺点,一阶用得多
优点∶二阶的方法因为使用了导数的二阶信息,因此其优化方向更加准确,速度也更快。
缺点∶二阶方法通常需要直接计算或者近似估计Hessian矩阵,一阶方法一次迭代更新复杂度为O(N),二阶方法就是O(N*N),计算量大。
模型优化目标:机器学习用有限训练集上的期望损失作为优化目标(代理损失函数),损失代表预测值f(x)与真实值Y的不一致程度,损失函数越小,一般模型的性能越好。
分类任务损失-嫡:预测概率,不确定性,嫡函数。用于表示信息多少,不确定性越大,概率越低,则信息越多,嫡越高
分类任务损失-交叉嫡损失与KL散度:衡量两个概率分布p(x)和q()的相似性
分类任务损失-softmax损失的理解与改进 优化分类界面的各种改进
分类任务损失-Hinge loss:分段不光滑的曲线,如果分类正确,损失为0,如果错误则为1-yf(x), y表示真值,f(x)为预测值
回归任务损失-L1/L2距离:以数值的绝对差范数作为距离
回归任务损失-L1/L2距离的改进
Huber loss,解决L1 loss梯度不平滑,L2 loss梯度爆炸的问题
评测指标
ROC曲线/AUC面积
Receiver operating characteristic,分类算法在不同的参数下的表现情况
混淆矩阵:矩阵第i行第j列,表示第i类目标被分类为第j类的概率
IoU(Intersection-over-Union):
AP(Average Precision)/mAP:检索与回归任务常用指标
峰值信噪比PSNR:信号处理领域广泛使用的定量指标,计算复杂度小
,实现速度快,在视频编码标准H.264、H.265中
结构一致性相似SSIM:考虑空域像素间的相关性
数据增强:将数据的使用最大化,比如将一张图反转缩放模糊等等的
降低数据采集成本,提高模型泛化能力,只对训练集处理
微调:重要‼️先预训练出来的参数,用于正式训练初始化模型
深度和宽度的都很重要
残差网络
分组卷积
卷积核设计:基于参数压缩的卷积设计
注意力机制:对图像中不同区域或者句子中的不同部分给予不同的权重,从而找到感兴趣的区域,抑制不感兴趣区域
动态网络:网络结构在训练或推理时表现出不同的结构、对不同的样本,表现出不同的状态。提高模型泛化能力,减少计算量
监督学习:有函数映射关系
无监督学习:无函数映射关系
自编码器的应用:降维/可视化,去噪等
变分自编码器:使用神经网络来估计建模复杂的条件概率密度函数
生成对抗网络(Generative Adversarial Network,GAN):不显式地估计出数据分布的密度函数,但能生成符合数据分布Pdata(x)的样本
生成对抗原理:生成网络和判别网络相互对抗(adversarial),共同学习
GAN的核心优化目标:生成器损失与判别器损失
目标检测:检测图片中的所有对象,并用一个框将其所在的区域大概框起来
锚框:先随机选几个框,然后选取一个最接近最终框的框,然后根据这个框慢慢偏移以达到最终框
目标检测算法:基于锚框的目标检测算法
1,区域卷积神经网络
2,单发多框检测ssd
3,YOLO
语义分割:语义分割将图片中的每个像素分类到对应的类别(是狗还是猫)
应用:背景虚化等
转置卷积:增大输入矩阵的高宽
实现,输入的每个元素和卷积核作乘积,然后将所有结果加起来
全连接卷积神经网络:转置卷积的应用
样式迁移:图像识别的应用,基于cnn的样式迁移
序列数据:具有时序性的数据,当前数据和之前的数据相关
自回归:用自己以前的数据去预测未来的数据
文本预处理
语言模型:
用于序列数据,循环神经网络的来源是为了刻画一个序列当前的输出与之前信息的关系。从网络结构上,循环神经网络会记忆之前的信息,并利用之前的信息影响后面结点的输出。即:循环神经网络的隐藏层之问的结点是有连接的,隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。
循环神经网络只能记住上一时刻的信息吗?,那上上时刻的信息呢?????都记住了?
梯度剪裁:解决梯度爆炸问题,但梯度衰减问题在循环神经网络中没有解决
门控循环单元GRU:在循环神经网络中每一时刻的权重是相同的,所以无法区分数据是否重要。对于时序数据,不是所有数据都是重要的,GRU通过门来有选择的遗忘和保存重要数据
如何遗忘保存????
答:重置门决定了如何将新的输入和前面的记忆相结合(关注前面记忆的数据,也就是上一时刻保留的数据)。更新门决定带多少信息到下一个时刻(说法可能有点问题)
LSTM:长短期记忆网络
双向循环神经网络,不仅关注前面的数据,也关注后面的数据。用于翻译
序列到序列seq2seq:用于机器翻译…….
编码器—解码器结构:我们以英语到法语的机器翻译为例:给定一个英文的输入序列:“Thye”、“are”、watching”、“”。首先,这种心编码器-解码器”架构将长度可变的输入序列编码成一个状态’,然后对该状态进行解码,一个词元接着一个词元地生成翻译后的序列作为输出:“TIs”、“regorden”、
如何将长度可变的输入序列编码成一个状态?编码成什么状态?又是如何解码呢?
答:以卷积神经网络为例,输入为一个猫,进行特征提取后输出图片类别。
因此,这里可以简单的理解为:特征提取一过程即为编码器,而分类过程即为解码器。
即:编码器:将输入编程成中间表达式形式(特征)【特征抽取】
解码器:将中问表示解码成输出。【分类器】
束搜索:
注意力机制:解决问题:在选词填空中,我们需要根据上下文来确定这个空到底填什么,在机器翻译中,目标词的意思多半需要根据上下文来进行翻译
注意力机制的作用机制:区别于传统RNN中编码器只将最终的隱层状态传递给解码器,注意力机制将所有步长中得到的隐层状态都传递给解码器,计算这些隐层状态与目标单词的相关性,并根据相关性调整各隐层状态用于预测的权重,得到当前步长的上下文向量以预测目标单词,如此,便实现了注意力的灵活分配。
提问:注意力机制如何将所有步长中得到的隐层状态传递给解码器,所有步长的隐层状态又是什么?
给定这样一个场景:把输入信息向量X看做是一个信息存储器,现在给定一个查询向量g(目标字),用来查找井选择x中的某些信息,那么就需要知道被选择信息的索引位置。采取"软性”选择机制,不是从存储的多个信息中只挑出一条信息来,而是雨露均沾,从所有的信息中都抽取一些,只不过最相关的信息抽取得就多一些。
注意力分数:描述注意力关注程度
注意力权重是注意力分数soft Max的结果
使用注意力机制的seq2seq:
自注意:
Bert:从BERT的全称,Bidirectional Encoder Representation from Transformer(来自 Transformer的双向编码器表征),可以看出BERT是基于Transformer模型的,但是只是其中的编码器。相当于只有编码器的transformer
基于微调的NLP模型,预训练的模型抽取了足够多的信息,新的任务只需要增加一个简单的输出层
双向编码器能够看到后面的词,那么对于这样的任务:给前面的词预测后面的词。这种任务如何解决?见下图mask相当于一个选词填空的空(选词填空和预测后文这两个任务等价吗?)
transformer:如下图所示:Transformer的编码器由6个Encoder组成,解码器由6个Decoder组成,输入数据经由6个Encoder编码后,输入到6个Decoder中完成解码,产生最终输出结果。
Transformer中每一个Encoder模块的内部结构如下图所示,Encoder主要包含自注意力机制、前馈神经网络两个
模块。
Transformer中每一个Decoder模块的内部结构如下图所示,Decoder模块中包含两个自注意力机制(掩码自注意
力机制、自注意力机制)、一个前馈神经网络。
进阶:竞赛:调最好的参、模型融合研究:新的模型、调还不错的参
工业界:将应用表达成机器学习问题、收集数据
多研究开源代码,跟开发者多交流,积极贡献
·你可以从修文档开始
经典论文需要读懂每一句话
https://www.bilibili.com/video/BV1nA41157y4
可以看openreview上的评(吐)论槽)
如何读论文,读哪些论文