全连接神经网络级联多个变换来实现输入到输出的映射
注意:非线性操作是不可以去掉 w2融合这多个模版的匹配结果来实现最终类别打分
全联接神经网络的描述能力更强。因为调整 " 行数等于增加模板个数,分类器有机会学到两个不同方向的马的模板。
线性可分——至少存在一个线性分界面能把两类样本没有错误的分开。
两层全连接网络 f = W 2 m a x ( 0 , W 1 x + b 1 ) + b 2 f=W_2 max(0,W_1x+b_1)+b_2 f=W2max(0,W1x+b1)+b2 N层全连接神经网络——除输入层之外其他层的数量为N的网络
激活函数的重要性:去掉则又变成了一个线性分类器 激活函数的种类:常用的就4个: sigmoid:让数值压缩到0-1之间,它的输出值都大于0,但是不是中心对称的! tanh:让数值压缩到-1-1之间,而且数据是对称的,对称的话对很多数据处理是有好处的! relu:就是max(0,x)函数,小于0的不考虑 leaky relu:让小于0的有一个输出
激活函数是对前一层输出的每个维度分别处理!
神经网络的设计: 没有统一的答案! 从深度来说:用不用隐层以及用一个还是几个隐层? 从宽度来说:每隐层设置多少个神经元比较合适? 结论:神经元个数越多,分界面就可以越复杂,在这个集合上的分类能力就越强。 依据分类任务的难易程度来调整神经网络模型的复杂程度。分类任务越难,我们设计的神经网络结构就应该越深、越宽。但是,需要注意的是对训练集分类精度最高的全连接神经网络模型,在真实场景下识别性能未必是最好的(过拟合) 。
激活函数是全连接神经网络中的一个重要部分,缺少了激活函数,全连接神经网络将退化为线性分类器。 输入层与输出层的神经元个数由任务决定,而隐层数量以及每个隐层的神经元个数需要人为指定; 中间隐层的神经元个数人为设置!
softmax: 示例如下: 必须取指数次方后才能归一化!切记!
真实分布:one-hot 交叉熵损失:定义两个分布之间的损失 熵:信息量的体现!
相对熵:也叫KL散度!度量不相似性,没有减缓率 如何衡量两个随机分布的差异?使用交叉熵!!!!! 交叉熵损失在one-hot的形式下就等于K-L散度!!!!!
one-hot:只有0和1的编码形式 最终的交叉熵损失函数形式如上图所示!!!
softamax:用于输出概率!!!
与多类支持向量机损失作对比: 交叉熵损失要求自己大的同时还要求别人小,所以更好!!!
计算图是一种有向图,它用来表达输入、输出以及中间变量之间的计算关系,图中的每个节点对应着一种数学运算。
计算图可以一点一点计算局部,同时还能计算梯度。
任意复杂的函数,都可以用计算图的形式表示 在整个计算图中,每个门单元都会得到一些输入,然后,进行下面两个计算: a) 这个门的输出值 b) 其输出值关于输入值的局部梯度 利用链式法则,门单元应该将回传的梯度乘以它对其的输入的局部梯度,从而得到整个网络的输出对该门单元的每个输入值的梯度 计算图的颗粒度 计算图:帮助我们反向传播
总结: 常用的激活函数
神经元个数的影响:个数越多,分界面更复杂,非线性能力更强
计算图:链式法则,做神经网络的计算需要先做前向计算存下来才能去做反向计算!!!
tensorflow一般都拆解成计算图再去算
max门就像一个路由器!!!
新知识: sigmoid = 多标签分类问题=多个正确答案=非独占输出 构建分类器,解决多个正确答案的问题时,用sigmoid函数分别处理各个原始输出值。
softmax = 多类别分类问题=只有一个正确答案=互斥输出 构建分类器,解决只有唯一正确答案的问题时,用softmax函数处理各个原始输出值。 softmax函数的分母综合了原始输出值的所有因素,这意味着,Softmax函数得到的不同概率之间的相互关联。
梯度消失 梯度消失是神经网络训练中非常致命的一个问题,其本质是由于链式法则的乘法特性导致的。 最大梯度1/4
梯度爆炸:断崖处梯度乘以学习率后 会是一个非常大得值,从而“飞”出了合理区域,最终导致算法不收敛; 现在的激活函数一般都用relu!而且计算起来很简单!梯度流更加顺畅,训练过程收敛得更快!而且不会有梯度爆炸! 损失函数特性:一个方向上变化迅速而在另一个方向上变化缓慢。
梯度下降算法:优化目标:从起点处走到笑脸处 梯度下降算法存在的问题:山壁间震荡,往谷低方向的行进较慢;仅增大步长并不能加快算法收敛速度!
动量法:改进梯度下降算法存在的问题,即减少震荡,加速通往谷低 改进梯度下降算法存在的问题,即减少震荡,加速通往谷低 累加过程中震荡方向互相抵消,平坦方向得到加强!!! 改进思想:利用累计额历史梯度信息更新梯度!
动量系数u=0.9,u=0时等价于梯度下降算法! 动量还有好处: 损失函数常具有不太好的局部最小值或者鞍点!梯度下降算法存在的问题:局部最小处与鞍点处梯度为0,算法无法通过。 动量法的优势:由于动量的存在,算法可以冲出局部最小点以及鞍点,找到更优的解。
自适应梯度与RMSProP算法:自适应梯度法通过减小震荡方向步长,增大平坦方向步长来减小震荡,加速通往谷底方向; 如何区分震荡方向与平坦方向?使用梯度的平方!!! 梯度幅度的平方较大的方向是震荡方向;梯度幅度的平方较小的方向是平坦方向。 p=0.仅考虑当前梯度,p一般设置为0.999
p在传播过程中会逐渐变小!
**ADAM:把这两种思想结合在一起:**同时使用动量与自适应梯度思想 下图很重要 修正偏差步骤可以极大缓解算法初期的冷启动问题(初期走的很慢!)
一般情况下:先用Adam,后边再手动调一调学习率去优化~
训练过程: 权值初始化: ==全零初始化:==网络中不同的神经元有相同的输出,进行同样的参数更新;因此,这些神经元学到的参数都一样,等价于一个神经元。 建议:采用随机初始化,避免全零初始化! 随机初始化:权值采样自 ž(0,0.01) 的高斯分布 几乎所有的神经元都饱和了(不是-1就是1);此时,神经元局部梯度都是零,网络没有反向梯度流;最终,所有的参数得不到更新。
随机权值初始化: 实验结论:初始化时让权值不相等,并不能保证网络能够正常的被训练!! == 有效的初始化方法:使网络各层的激活值和局部梯度的方差在传播过程中尽量保持一致;以保持网络中正向和反向数据流动。==
Xavier初始化: 方差设置为1/N每层神经元激活值的方差基本相同! 好的初始化方法可以防止前向传播过程中的信息消失,也可以解决反向传递过程中的梯度消失。 激活函数选择双曲正切或者Sigmoid时,建议使用Xaizer初始化方法! 激活函数选择ReLU或Leakly ReLU时,推荐使用He初始化方法!
批归一化 它可以解决前向的信号消失问题(不至于小于0)!并解决梯度消失问题! BN层一般放在非线性操作之前! 批归一化还有最后的平移缩放操作!伽马–映射到新的方差上,贝塔:映射到新的均值上! 这两个参数是神经网络自己去学习的~ 问题1:根据对分类的贡献自行决定数据分布的均值和方差 问题2:来自于训练中,累加训练时每个批次的均值的方差,最后进行平均,用平均后的结果作为预测时的均值和方差。
BN:正向的信息流+反向的梯度流–》保证都通畅~
梯度下降算法的问题
动量法:减少震荡,加速通往谷底,动量系数是0.9 动量法的效果:由于动量的存在,算法可以冲出局部最小点以及鞍点,找到最优解
自适应梯度法AdaGrad:不同的学习率,r值不同–》之后修改成RMSProp方法
ADAM法:合成的方法: 权重初始化:避免全零,采用随机初始化
批归一化:直接对神经元的输出进行批归一化,让网络信息流比较顺畅 BN在fc和非线性函数之间
过拟合现象:出现过拟合,得到的模型在训练集上的准确率很高,但在真实的场景中识别率确很低。 过拟合是指学习时选择的模型所包含的参数过多,以至于出现这一模型对已知数据预测的很好,但对未知数据预测得很差的现象。这种情况下模型可能只是记住了训练集数据,而不是学习到了数据特征。
欠拟合:模型描述能力太弱,以至于不能很好地学习到数据中的规律。 产生欠拟合的原因通常是模型过于简单。 验证集用于泛化能力的间接度量~ 重点关注图中后半部分! 优化和泛化在后期是不同步的,这个必要格外注意! 原因:在模型后期,模型是记忆,不是去学习对应的模式,此时模型仅仅学习和训练数据有关的模式~
解决过拟合的方法: 最优方案:获取更多的训练数据~ 次优方案:调节模型允许存储的信息量或者对模型允许存储的信息加以约束,该类方法也称为正则化。
L2正则化: 加入正则项:分散权值,同时使决策面简单化,尽量考虑大多数人的利益
随机失活(Dropout):让隐层的神经元以一定的概率不被激活 实现方式:使这些神经元好像被删除一样 随机失活比率:一般为0.2-0.5左右
好处:随机失活可以使得每次更新的参数减少了,降低了模型容量~可以防止过拟合 此外,它鼓励权重分散,可以起到正则化的作用,进而防止过拟合~此外,它也可以看做是一种模型集成!
神经网络中的超参数 超参数:
网络结构——隐层神经元个数,网络层数,非线性单元选择等优化相关——学习率、dropout比率、正则项强度等超参数和网络性能有着最直接的关系: 以学习率为例: 学习率是非常关键的,最简单的设置方法:看损失函数的变化,不动了就下降~
超参数优化的方法: 网格搜索法:
每个超参数分别取几个值,组合这些超参数值,形成多组超参数;每个超参数分别取几个值,组合这些超参数值,形成多组超参数;选择性能最优的模型所采用的那组值作为最终的超参数的值。 随机搜索法:参数空间内随机取点,每个点对应一组超参数;在验证集上评估每组超参数的模型性能;选择性能最优的模型所采用的那组值作为最终的超参数的值。 一般随机搜索法更好!!!!!它避免了错误方向超参数搜索策略: 粗搜索:利用随机法在较大范围内采样超参数,训练一个周期,依据验证集准确率来缩小超参数范围~ 精搜索:利用随机法在前述缩小的范围内采样超参数,运行模型五到十个周期,选择验证集上精度最高的那组超参数。 炼丹的时候一般都有动量法