神经网络相关

感知机–>(全连接)神经网络–>卷积神经网络–>循环神经网络

一、感知机

  • 神经网络的基本单元。由线性函数加激活函数(01阶跃函数)组成,用来处理分类问题,一个感知机只能处理线性可分问题。

  • 可以通过多个感知机的叠加或者多维来解决线性不可分的问题

  • svm 加入升维或变形函数部分(kernel)

  • 全连接神经网络就是多个感知机的叠加

二、MLP

  • 多层感知机(MLP)/人工神经网络/全连接神经网络/前馈神经网络

  • 通过把复杂函数拆解成多个感知机+激活函数(sigmoid)。隐藏层的一个节点就是一个感知机(线性函数+激活函数01阶跃函数)解决问题。它中间可以有多个隐层,层与层之间是全连接的。 假设输入层用向量X表示,则隐藏层的输出就是 f (W1X+b1),W1是权重(也叫连接系数),b1是偏置,函数F为激活函数。

  • 隐层的激活函数为RELU/01阶跃函数输出层为Softmax/Sigmoid

  • 神经网络与感知机的关键进化在激活函数,将问题从是非判断 变成了好坏判断

  • 激活函数提供了价值观 可以拟合不可以被规约(线性问题都可以被规约)的非线性问题

三、卷积神经网络

1、卷积的理解
一个系统 输入是不稳定的 输出是稳定的 可以用卷积求系统的存量
1、一个人一边吃f一边消化g求某时刻胃里剩余食物。 时间转换成距离 就变成了卷积
2、 看一个像素点周围的点如何对当前点产生影响(g函数旋转180 就是卷积核)
3、 通过设置不同的卷积核提取图像中的不同特征

  • 前向传播
    将训练数据train_X输入到模型,并在输出层得到相应的输出output;
  • 后向传播(backward propagation):
    通过输出结果output和真实的结果y_true计算loss,并计算出loss对每一层权重和偏置的偏导,并利用它们调整对应的权重和偏置使得调整后的权重/偏置组合更加接近最优

2、构成

  • 输入层:获得输入特征矩阵

  • 卷积层:使用卷积核进行卷积运算

  • 激励层:穿插在卷积层之间 使用激活函数一如非线性特征

  • 池化:穿插在卷积层之间 减少参数 防止过拟合

  • 全连接层: 在卷积神经网络尾部 进行分类

    1)输入层
    卷积神经网络的输入层可以处理多维数据。与其它神经网络算法类似,由于使用梯度下降算法进行学习,卷积神经网络的输入特征的标准化有利于提升学习效率和表现。
    2)隐含层

    1. 卷积层:
      卷积核: 卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,组成卷积核的每个元素都对应一个权重系数W和一个偏差量b,类似于一个前馈神经网络的神经元。
      卷积核参数:卷积核(kernel)大小、步长(Stride)、填充(padding ),三者共同决定了卷积层输出特征图的尺寸,是卷积神经网络的超参数
      卷积核大小可以指定为小于输入图像尺寸的任意值,卷积核越大,可提取的输入特征越复杂
      卷积步长定义了卷积核相邻两次扫过特征图时位置的距离
      填充是在特征图通过卷积核之前人为增大其尺寸以抵消计算中尺寸收缩影响的方法。常见的填充方法为按0填充和重复边界值填充

    2. 激励层
      激活函数必须是连续可导的,引入非线性因素,通常在卷积核之后
      sigmoid tanh relu 增加神经网络模型的非线性,使得神经网络可以任意逼近任何非线性函数

      Sigmiod
      求导复杂;容易就会出现梯度消失;敏感区间较短(-1,1)

      Tanh
      tanh的导数取值范围在0至1之间(sigmoid 0-1/4),减轻了梯度消失 梯度求解,容错性好问题
      RELU
      1)只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的运算。减轻梯度消失,加快训练速度
      2) sigmoid的导数,只有在0附近,具有较好的激活性,而在正负饱和区的梯度都接近于0,会造成梯度弥散;而relu的导数,在大于0时,梯度为常数,不会导致梯度弥散。
      3)relu函数在负半区的导数为0 ,当神经元激活值进入负半区,梯度就会为0,也就是说,这个神经元不会被训练,保证了稀疏性
      Softmax
      用于多分类问题,在多分类神经网络种,常常作为最后一层的激活函数,前一层的数值映射为(0,1)的概率分布,且各个类别的概率归一。使用Softmax函数作为输出节点的激活函数的时候,一般使用交叉熵作为损失函数。 sigmoid就是只有一种分类情况下的softmax

    3. 池化层
      在卷积层之间周期性插入一个池化层进行特征选择和信息过滤。逐渐降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。

    4. 全连接层
      全连接层位于卷积神经网络隐含层的最后部分作为输出,只传递信号。特征图在全连接层中会失去空间拓扑结构,被展开为向量并通过激励函数

    3) 输出层
    输出层的上游通常是全连接层,因此其结构和工作原理与传统前馈神经网络中的输出层相同,使用逻辑函数或归一化指数函数输出分类标签

3、两大思想

  • 参数共享、稀疏交互:减少参数数量,使运算变得简洁、高效
  • 卷积神经网络的参数共享机制
    每一层的卷积核只有一个,作用在于,每个特征具有平移不变性,同一个特征可以出现在出现在不同数据的不同位置,用同一个卷积核来提取
  • 卷积神经网络的稀疏交互:
    稀疏交互是指层与层之间的连接是“间接连接”是非全连接的。不进行

4、原理

  • 用神经网络的概率模型模拟人脑的概率模型,计算神经网络中概率模型的似然值找到最大似然的参数。
  • 极大似然估计(MLE用部分已知数据去预测整体的分布)
    极大似然估计是概率论中一个很常用的估计方法,在机器学习中的逻辑回归中就是基于它计算的损失函数。
    似然(likelihood),其实就是可能性的意思,极大似然估计是一种统计学的方法,我们用已知的样本数据分布去推测具体的分布情况。
    满足一个重要的假设,就是所有的采样都是独立同分布的
    假设我们要统计一批数据X,首先假设X服从服从正态分布,但是该分布的均值与方差未知。我们没有人力与物力去统计全部的X,但是可以通过采样,获取部分X,然后通过最大似然估计来获取上述假设中的正态分布的均值与方差。
  • 最大后验概率
    回到抛硬币的问题,最大似然估计认为使似然函数P(X|θ)最大的参数θ即为最好的,此时最大似然估计是将θ看作固定的值,只是其值未知;最大后验概率分布认为θ是一个随机变量,即具有某种概率分布P(θ),称为先验分布,求解时除了要考虑似然函数P(X|θ)之外,还要考虑的P(θ)先验分布,因此其认为使P(X|θ)P(θ)取最大值的θ就是最好的。根据贝叶斯法则最大化的函数是P(θ|X)

四、调参

二、模型训练

学习率

初始学习率可以设置大一点,可以加快收敛,节省时间,快速得到一个最优解,后续再慢慢调整,比如采用动态变化学习速率的方式,也就是常说的学习率衰减,比如每一轮乘以一个衰减系数或者根据损失的变化动态调整学习速率

优化器(梯度下降)

常见优化器有 SGD,Adagrad,Adadelta,Adam,RMSprop,NAG 等等

参数初始化

初始化有 随机初始化;He 初始化
零值初始化:所有神经元学到的是相同的特征 不能用
随机初始化:标准正态分布中随机
He初始化:随机初始化后乘
Xavir:方差为1 的随机初始化

EPOCH

用验证集作为停止迭代的条件。如果连续几轮模型损失都没有相应减少,则停止迭代。

dropout

第一次跑模型的时候一般不加 dropout,而是在后期调优的时候使用 dropout 用于防止过拟合,在数据量较小的时候效果比较好。

  • 训练与测试:
    Droupout在训练过程中让每个神经元以概率p停止工作 进行前向传播和权重更新。
    为了保证训练和测试的一致性:
    1) 在训练过程中对输出向量进行缩放:乘以1/(1-p)
    2) 在测试过程中对神经元参数进行缩放:权重参数乘以概率p
    在增大数据集的情况下,使用dropout需要使用的计算代价可能会比它带来正则化效果更高
  • 正则化
    加入 L1 正则化的目的是为了加强权值的稀疏性,让更多值接近于零。
    加入 L2 正则化的目的是为了减小每次权重的调整幅度,避免模型训练过程中出现较大抖动

1、损失函数

基于最小二乘法或极大似然估计的原理进行参数更新
最小二乘:在梯度下降的时候会很麻烦

极大似然估计:用部分已知数据去预测整体的分布(用预测的分布估计出发生概率的值叫似然)

  • 0-1损失函数(zero-one loss)
  • 绝对值损失函数

  • 平方损失函数:应用于回归问题

  • log对数损失函数(逻辑回归(LR)的损失函数)能非常好的表征概率分布,适用于多分类场景需要知道结果属于每个类别的置信度的情况
  • 指数损失函数:对离群点、噪声非常敏感。
  • KL散度(相对熵):

由吉布斯不等式(不重要)证明KL散度一定大于等于0 。可以将使KL散度等于零的目标等价于 使交叉熵最小化的目标。即使用交叉熵作为损失函数。
K-L散度=交叉熵 - 熵

  • 交叉熵损失函数:
  • x表示样本,y表示实际的标签, a 表示预测的输出,n表示样本总数量
  • 意义:分布y是它的真实分布(如果找得到的话),另外有一个分布x是我们猜测的事件A的分布,我们希望我们猜测的分布x尽量地和实际分布y一致。我们按照x分布去给事件A编码,那么每个事件A的可能性需要的字节数乘以该可能性发生的概率,就得到了y分布和x分布的交叉熵
  • K-L散度=交叉熵 - 熵 而按照x编码,和最佳编码(按照实际分布p来编码),所额外用的字节数
  • 当使用sigmoid作为激活函数的时候,常用交叉熵损失函数可以解决平方损失函数权重更新过慢的问题,具有“误差大的,权重更新快;误差小的,权重更新慢”的性质。
  • 当使用softmax作为输出时,输出可以看作是每类的概率分布。真实的Ground Truth就代表了真实分布两个分布的距离,用交叉熵
  • 合页损失函数(Hinge) SVM损失函数

2、梯度下降

  • 原理:
    损失函数计算出的偏差值沿梯度向前传递
    梯度是一个向量,向量的分量就是偏导,指向函数上升最快的方向。
    梯度就是导数嘛,计算每一个参数对于目标函数的偏导数,
    根据偏导数的符号判断目标参数使损失函数最小化的方向,并根据学习率进行更新

  • 步骤:
    1.根据梯度(导数)的符号来判断最小值点x在哪;
    2.让函数值下降(变小)。

  • BGD(Batch Gradient Descent):用所有batch更新参数获得全局最优解 计算量大不适用大数据

  • SGD:每次随机选择一个mini-batch去计算梯度

  • MBGD:小batch 梯度下降 更新参数时使用b个样本

  • Adam:SGD的扩展优化

3、牛顿法

1:求方程的根;2:最优化。
梯度下降法和牛顿法相比,两者都是迭代求解,不过梯度下降法是梯度求解,而牛顿法是用二阶的海森矩阵的逆矩阵求解。相对而言,使用牛顿法收敛更快(迭代更少次数)。但是每次迭代的时间比梯度下降法长。

4、性能评估

  • 交叉验证
    重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。
    K折交叉验证:初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其它结合方式,最终得到一个单一估测。
    留一交叉验证:它是第二种情况的特例,此时S等于样本数N,这样对于N个样本,每次选择N-1个样本来训练数据,留一个样本来验证模型预测的好坏。此方法主要用于样本量非常少的情况,
  • 准确度
    ROC曲线+AUC面积通过取不同的阈值计算真正率和假正率 作为y轴和x轴 绘制曲线,样本中正例的分数大于负例的概率。
    AUC面积 = 样本中所有的正例-负例对 正得分大于负例的个数/总对数
    精确度:TP/TP+FP
    召回率:TP/TP+FN
    F1-score:
    真正率(召回):TPR = TP /(TP + FN)
    真负率:TNR = TN /(TN + FP)
    假正率:FPR = FP /(FP + TN)
    假负率:FNR = FN /(TP + FN)

5、梯度消失与梯度爆炸问题

梯度爆炸和梯度消失问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。

  • 梯度消失:隐藏层中前面层的学习速率低于后面层的学习速率,即随着隐藏层数目的增加,准确率下降的现象。靠近输入层的隐藏层权值更新缓慢或者更新停滞。
    考虑用ReLU激活函数取代sigmoid激活函数。另外,LSTM的结构设计也可以改善RNN中的梯度消失问题。
  • 梯度爆炸:当权值过大,前面层比后面层梯度变化更快,会引起梯度爆炸问题

6、样本不均衡问题

  • 收集更多的数据,使其达到平衡
  • 从数据的角度出发
    过采样:从少数类样本集中随机重复抽取样本(有放回)以得到更多的样本/合成心的少数类
  • 欠采样:从多数类样本集中随机选择较少的样本 (采样的本质是对信息的模拟)
  • ROC曲线
  • 使用不同的算法:特殊加权带权重的损失函数
    如:修改交叉熵损失函数,调整类权重。假设第i类是少数类,为了加大错分第i类的成本,在交叉熵上给第i 类乘以一个大于1的系数,这样如果错分第i 类的话,交叉熵损失就会增加

7、过拟合与欠拟合

  • 欠拟合:
    首先考虑数据是否线性可分,然后考虑训练是否充足,学习率是否过低等。
  • 过拟合:
    模型复杂度高(控制模型复杂度);样本噪声太多(减少变量的数量);添加正则项;Droupout(在训练过程中以一定概率临时丢弃一部分神经元减弱神经元之间的联合适应性)避免过度训练;
  • L1正则化 L2正则化:
    对损失函数,引入额外信息 防止过拟合提高模型性能
    L1:+权值向量中各元素的绝对值之和 使更多的权重为0 用于特征选择 使参数稀疏化
    L2:+权值向量中各元素平方和再开根号 防止模型过拟合 使参数小稠密 更多的w趋于0但不等于0
    拟合过程中倾向于权值向量尽可能小,使模型更简单。

8、归一化

解决的问题:如果我们没有做归一化处理,那么每一批次训练数据的分布不一样,从大的方向看,神经网络则需要在多个分布中找到平衡点,从小的方向上看,由于每层网络输入数据分布在不断变化,这也会导致每层网络在找平衡点,神经网络就很难收敛了。如果我们只是对输入的数据进行归一化处理,只能保证输入层数据分布是一样的,并不能保证每层网络输入数据分布是一样的,所以也需要在神经网络的中间层加入归一化处理。
作用:经过归一化再输入激活函数,得到的值大部分会落入非线性函数的线性区,导数远离导数饱和区,避免了梯度消失,这样来加速训练收敛过程

Batch Normalization 的处理对象是对一批样本,的同一维度特征做归一化 Layer Normalization 的处理对象是单个样本的所有维度特征做归一化。

  • Batch Normalization (BN)
    在深度神经网络训练的过程中,通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难,收敛速度很慢,会出现梯度消失的问题。
    原理:针对每个神经元,使数据在进入激活函数之前,沿着通道计算每个batch的均值、方差,‘强迫’数据保持均值为0,方差为1的正态分布,将数据统一到一个区间内,减少数据的发散,避免发生梯度消失。
    过程:输入一个数据集合B,对该数据集合B求其均值和方差,然后对B进行归一化操作,同时BN还有两个可学习的参数r和β,通过这两个参数对归一化后的结果进行一定程度的还原
    用在全连接层或卷积操作之后,激活函数之前

  • Layer Normalization (LN)
    如果一个神经元的净输入分布在神经网络中是动态变化的,比如循环神经网络,那么无法应用批归一化操。如在nlp中BN可能会跨语料理论上不科学 对于小batch size效果不好。
    LN是在Layer维度上的norm。对一个中间层的所有神经元进行归一化,不受batchsize 的影响常用在RNN网络,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值