神经网络与深度学习
2020-02-26 10:56:44 66 举报
AI智能生成
神经网络与深度学习基本知识结构
作者其他创作
大纲/内容
神经网络与深度学习
深度前馈网络前馈神经网络多层感知机MLP
XOR的例子
简单的线性函数无法解决异或问题
神经网络中加入非线性是必须的,在网络中没有非线性激活函数的情况下,无论它有多少层,神经网络都会像单层感知器一样工作,因为将这些层相加会给你带来另一个线性函数
神经网络结构
输入层->多个隐层->输出层
每个隐层由线性矩转换和非线性激活函数构成
神经网络的表达能力与欠拟合
层次越深,表达能力越好,但是出现过拟合可能性越大
不要通过减少层数去对抗过拟合,用dropout!
传递函数(激活函数)
sigmoid
tanh
Relu
损失函数
MSE
CE
梯度下降
批量梯度下降
随机梯度下降
小批量梯度下降
batch
epoch
前向传播
反向传播
用于更新WL的参数
用于更新b的参数
对非线性层的梯度—为后面算线性层做铺垫
对线性层的梯度—为反向传播的前一层/下一步运算做铺垫
深度学习中的正则化
从“训练”角度
参数范数惩罚:向目标函数中增加额外项 J(w)+αΩ(θ),α为惩罚力度,Ω为正则项
作为约束的范数惩罚
向机器学习模型添加限制参数值 ||w||
可构造广义拉格朗日函数,发现添加正则项与参数约束等价
正则化和欠约束问题
J(w)
最小二乘解
J(w)+α||w||²
最小范数最小二乘解
L2参数正则化(岭回归)
权重衰减,使权重更加接近原点
Ω(θ)=λ||w||²
L1参数正则化
使参数变稀疏
Ω(θ)=||w||=|w1|+|w2|
从“训练数据”角度
数据集增强(从输入角度看)
加入特定噪声(如:高斯噪声)
在输入层注入噪声(如:去噪自编码器)
对图像做一定的几何变换(如:平移、旋转、缩放)
噪声鲁棒性(从输出角度看)
标签平滑:0和1替换成e/k-1和1-e 对于出现人工标注标签y错误的情况下,softmax模型和标准交叉熵损失的最大似然学习可能永不收敛。因为它会继续学习越来越大的权重,使预测更加极端。权重衰减等正则化策略能够防止这种情况。
半监督学习
半监督学习指学习一个表示h=f(x),学习表示的目的是使相同类中的样本有类似的表示
无监督学习可以为如何在空间聚集样本中提供有用线索,在输入空间紧密聚集的样本应该被映射到类似的表示如:使用主成分分析作为分类前(在投影后的数据上分类)的预处理步骤
生成模型准则表达了对监督学习问题解的特殊形式的先验知识,即P(x)的结构通过某种共享参数的方式连接到P(y|x)通过控制在总准则中的生成准则,我们可以获得比纯生成 或 纯判别训练准则的更好权衡
其他
多任务学习
通过合并几个任务重的样例(可以视为对参数施加软约束)来提高泛化能力
不同监督任务共享相同的输入x和中间表示层h,会产生多种误差,按照一定权重反馈
提前终止
训练误差会随着时间推移降低,但是验证集误差会再次上升,则可以提前停止训练
参数绑定和参数共享
有时候我们需要对模型参数之间相关性进行惩罚,使得模型参数尽量接近或者相等
参数共享的主要应用为CNN,可以显著降低CNN的参数模型数量,降低训练数据需求
稀疏表示
L1正则化会诱导系稀疏的参数,使许多参数为0
稀疏表示是惩罚神经网络的激活单元,稀疏化激活单元,使得每个神经元的输入单元变稀疏,很多输入为0
Bagging和其他集成方法
训练几个不同的模型,让所有模型表决样例输出,被称为模型平均/集成方法
bagging是一种允许重复多次使用同一种模型和目标函数的方法,设计构造k个不同的数据集,从原始数据重复采样构成
模型平均是一个减少泛化误差的非常强大可靠的方法
Dropout
可以被认为是集成大量深层神经网络的实用bagging方法,在前向传播中去掉全连接神经网络中的一些连接
可以跟其他形式正则一起实用,计算量小,不限制模型和训练过程
深度学习中的优化
纯优化与学习的不同
纯优化(单纯数学问题):最小化目标J本身,如:线性模型的正规方程
学习:考虑的东西非常多,减低代价函数J,不是纯粹的数学问题,需考虑多, 是通过训练样构建的学习代价函数,如:全连接层的梯度下降
学习中关于降低J
使用训练集代替数据本身
整个数据带来的期望泛化误差叫风险
使用训练集带来的期望泛化误差叫经验风险
批量算法和小批量算法
使用整个数据集叫批量
使用介于单个和整个数据集之间的量叫小批量
更大的批量会更精确,但是回报小于线性
代理损失函数
使用一些如RELU替代0-1损失函数代理损失函数可以拉开不同类别的聚类,改进分类器的鲁棒性它相对于简单地最小化训练集上的平均0-1损失,可以从训练数据抽出更多信息
在验证集上拥有低损失就终止,防止过拟合
神经网络优化中的挑战
病态
在训练中很小步长会增加代价函数,常见与H病态中
高原、鞍点和其他平坦区域
鞍点:不是一个稳定的点,二维是横向最小值,却是纵向最大值
鞍点是代价函数在某个横截面上的局部极小值
悬崖和梯度爆炸
梯度更新会很大程度上改变参数值,跳过局部极小值
解决办法:梯度截断
长期依赖
由于变深的结构使模型丧失了学到先前信息的能力,让优化变得困难
经过许多阶段的传播,梯度倾向于消失或爆炸
非精度梯度
有偏估计、噪声的存在、目标函数不可解时,通常其梯度也难以处理,只能近似梯度
解决办法:选择比真实损失函数更容易估计的代理损失函数避免
优化的理论限制
一些理论结果仅适用于离散输出,但是大多神经网络的输出是连续的,使用局部搜索求解优化可行
存在某类问题不可解,但很难判断一个特定问题是否属于该类
寻找给定规模的网络可行解很困难,但是可通过设置更多参数,使用更大网络,找到可接受的解
在神经网络训练中,我们通常不关注某个函数的精确极小点,而是将值下降到一个足够小以获得良好泛化误差
梯度更新策略
Batch Gradient Descent(BGD)
使用整个样本进行训练,梯度下降平滑,但是内存大, 慢
Small Batch Gradient Descent(SGD)
小批量进行训练,梯度估计引入噪声源,梯度下降出现震荡
☆动量梯度下降(Momentum)
采取的学习策略和SGD一样,不一样的是学习率的更新
通过加入αv(t-1) 加速收敛并抑制震荡
梯度不变的维度上速度变快
梯度方向有所改变的维度更新速度变慢
Nesterov动量(NAG)
先以上一步的速度往前走一小步,避免走的太快
Nesterov动量可以使RNN在很多任务上有更好的表现
AdaGrad
Adagrad其实是对学习率进行了一个约束
gt从1到t进行一个递推,形成一个约束项regularizer,用来保证分母非0
前期gt较小的时候,regularizer较大,能够放大梯度,更新速度较快
后期gt较大的时候,regularizer较小,能够约束梯度,适合处理系数梯度,更新速度变慢
依旧依赖全局学习率,如果过大,则会使得regularizer过于敏感,梯度会为0,使得训练提前结束
RMSprop
求梯度的均方根RMS对作为学习率的一个约束
RMSprop是Adagrad的一种发展,也是Adadeleta的变体,效果在二者之间
适合处理非平稳目标,对于RNN效果很好
☆Adam
结合AdaGrad(考虑二阶矩)和RMSProp(考虑二阶矩)优点,对梯度的一阶矩估计(梯度均值)和二阶矩估计(梯度未中心化的方差)综合考虑,计算步长
Adam与随机梯度下降不同
随机梯度下降保持单一学习率,而Adam通过计算梯度的一阶矩估计和二阶矩估计为不同参数设立独立的自适应学习率
适应性梯度下降算法:为每一个参数保留一个学习率,以提升在稀疏梯度上的性能(NLP与计算机视觉)
均方根传播:基于权重梯度最近量级的均值为每一个参数适应性地保留学习率
参数初始化策略
启发式方法:从分别U中采样权重,或使用标准初始化
采取牛顿法来求解
两种方法求解,见数学部分
hessian逆矩阵,计算复杂,存储空间大
共轭梯度法
子主题
BFGS
一种通过迭代逼近的拟牛顿算法,在牛顿法迭代的过程中,使用Dk矩阵代替hessian逆矩阵
L-BFGS算法
L是指limited memory
BFGS每次都要存储Dk矩阵,L-BFGS使用少量的数据近似Dk矩阵的值
☆批标准化
和普通的数据标准化类似,减去均值,除以方差,进行数据标准化
是将分散的数据统一的一种做法,也是优化神经网络的一种做法
坐标下降法
依次沿着坐标轴的方向最小化目标函数值
是一种简单但却高效的非梯度优化方法
☆监督预训练
有些模型太复杂,直接训练可能不会收敛,先训练浅层架构,再训练深层
在求解目标问题之前,训练简单模型求解简化问题的方法称为预训练
贪心算法
将问题分成许多部分,求解每个部分的最优值,但是可能不是一个最佳的完整解
贪心算法计算比求解最优联合解的算法高效得多
贪心算法可以紧接一个精调的阶段,联合优化算法搜索问题的最优解。
使用贪心解初始化联合优化算法,可以极大地加速算法,提高寻找到的解的质量
0 条评论
回复 删除
下一页