深度学习基础
与神经网络的区别
传统一般三层以内,深度可达上千层
传统通常是全连接,深度形式多样:共享权值,跨层的反馈等
目标函数
均方误差----->交叉熵
交叉熵能在深度学习模型下快速提高精度
为了避免交叉熵出现0,使用softmax层来突出最大值并转换成概率
激励函数
sigmoid------->ReLU
当神经元一层层叠加之后,会不断叠加激励函数的导数和权重,导致梯度消失
ReLU能解决梯度消失问题,将有些输出为0的神经元看作直线
改进的梯度下降
Momentum:前几次的梯度也会参与运算
Nesterov Momentum: 先对参数进行估计,然后使用估计后的参数来计算误差
Adagrad:应该为不同的参数设置不同的学习步长,梯度越小则学习步长越大,反之亦然
RMSprop:一种改进的Adagrad,通过引入一个衰减系数,让r每回合都衰减一定比例,解决了Adagrad过早结束的问题,适合处理非平稳目标,对于RNN效果很好
Adam:adaptive moment estimation,自适应矩阵估计,利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率
总结:
如果数据是稀疏的,就用自适用方法,即Adagrad,Adadelta,RMSprop,Adam,通常Adam是最好的选择
SGD缺点是算法用的时间长,容易被困在鞍点,但是相对稳定
Batch Normalization:
对数据先进行预处理(标准化处理),CNN训练绝大多数都采用基于mini-batch的随机梯度下降算法为基础的算法进行训练操作是:在每次SGD时,通过mini-batch来对相应的activation做规范化造作,使得结果的均值为0,方差为1
避免过适应
过适应的根本原因:权重参数太多,而样本量不足
通过早期停止训练,权重衰减,dropout来避免过适应
早期停止训练:
当目标函数在验证集上不再减少时,训练就应该停止了,不能一味追求训练集的误差减小
权重衰减:
删除一些无用的权重
Dropout:
每次更新参数前,按一定比例删除部分神经元,是集成学习的一种
CNN初步介绍
Cnn基本组件:
cnn卷积层:
3D滤波器/卷积核:由机器自己学习出来得到的(权重)
卷积步长大于1,有降维的作用
cnn池化层:
作用:特征融合,降维,无参数需要学习,通常使用最大池化
cnn-Softmax层:
指数归一化函数:将一个实数值向量压缩到(0,1),所有元素和为1,最后一个全连接层对接1000-way的softmax层,得出1000类标签的概率值,用于构建LOSS
池化层的误差反向传播
如果采用平均池化,就先复制还原成之前的大小,然后除以最大值则得到和原来一样的残差值
如果采用最大池化,需要记录前向传播过程中池化区域中最大值的位置,用0填充多余的位置
卷积层的误差反向传播
将卷积核旋转180°和池化后的矩阵相乘得到的矩阵就是残差,若有多个卷积核,则需要把所有相乘后的矩阵相加得到残差值