1.多层感知机(MLP)和单层的区别
- 单层:用于二分类
- 多层:用于多分类,和softmax的区别就在于:多了隐藏层(非线性层)
2.隐藏层
- 隐藏层需要引入非线性激活函数以得到非线性模型,否则输出还是线性的
- 隐藏层数和每层隐藏层的大小(神经元个数,32,64)是超参数,单隐藏层用于单分类
- 常用激活函数:sigmoid(0-1),tanh(-1,1),ReLU(max(x,0))
3.验证集
- 一般用于选择模型超参数,训练数据集用于训练模型参数
- K-则交叉验证(在没有足够多数据时使用):将训练数据分割成K块,使用第i块作为验证数据集,其余的作为训练数据集,i=1,...,K,取K个验证集误差的平均。例如有多组超参数,对每一组进行K则验证,选取平均验证误差最小的那组超参数最为最终超参。
4.过拟合和欠拟合
- 过拟合:对于简单的数据用了过于复杂的神经网络(过高的模型容量),模型在训练数据上表现的非常好(拟合了98% 以上的样本点),但是对样本以外的数据进行测试时效果表现不佳。
- 模型容量(模型复杂度):拟合各种函数的能力
- 对于泛化误差(在预测数据上产生的误差),模型容量过高会过拟合
- 欠拟合:数据比较复杂,但选取了简单的模型,训练误差和泛化误差都很大,模型没有获取到数据中的信息
- 所以深度神经网络比较适合训练较大的数据集,这样泛化误差收敛的最低值会较低
- 解决方式:增加数据量(数据源头上或者数据增强,旋转平移切割);简化模型(减少隐藏层,神经元个数);选择一个跟数据集有合适复杂度的模型;先选择一个模型,再选择合适的超参数(树的深度、神经网络的层数,隐藏层大小,是否需要加正则项,参数的范围等等);训练多个模型,以每个模型的平均输出作出结果,降低误差
5.梯度爆炸和梯度消失
深度模型中,梯度都会对n个数累乘
- 梯度更新的目的:目前神经网络中大多通过反向传播的方式进行优化,即根据损失函数计算的误差,利用梯度反向传播的方式来指导网络权重的更新。找到使得损失函数最小的参数即为最优参数。
- 梯度爆炸和梯度消失的根本原因都在于反向传播法则
- 梯度爆炸:梯度呈指数级增长,导致网络权重的大幅更新,使网络变得不稳定
- 梯度消失:当输入较大,梯度接近0,网络更新困难,无法让神经网络更深,训练没有进展(例如使用sigmoid或tanh激活函数,导数都小于1,很容易在链式求导后产生梯度消失)
- 解决方式: (1)使用ReLU激活函数,导数在正数部分恒等于1,且更新速度快,但是存在缺点:负数部分恒卫0,会使得一些神经元无法激活 (2)预训练(将每层隐藏层的输出作为下层的输入,以实现局部最优)加微调(利用BP找到全局最优) (3)采用梯度剪切(设置梯度阈值)或权重正则化(对梯度限制) (4)采用batch normalization对每一层的输出规范化,将输出从饱和区拉到非饱和区 (5)使用残差网络,可以轻松地构建深层网络