-
深度学习
-
数据降维(特征提取)
- 对高纬度特征数据进行预处理,保留重要特征,取出噪点和不重要特征,提高数据处理速度
- 优点
- 数据集更易使用
- 降低算法的计算开销
- 取出噪声
- 使得结果更易理解
- 算法
- 奇异值分解(SVD)
- 主成分分析(PCA)
- 因子分析(FA)
- 独立成分分析(ICA)
-
激活函数
- 作用
- 现实中的数据往往不是线性可分的,所以我们需要引入非线性函数(【引入非线性函数】即在每一层输出后面添加一个激活函数)或者线性变换(【线性变换】从当前特征空间通过一定的线性映射转换到另一个空间,使数据更好的分类)
- sigmoid
- 以0.5作为阈值,划分等价的0-0.5和0.5-1两块
- 缺点
- 梯度消失(gradient vanishing)问题,即当输入非常大或者非常小的时候,会使得这些神经元的梯度接近于0
- sigmoid的output是非零均值,导致下一层神经元会接收到一个非零均值的信号作为输入
- 双曲正切函数(tanh)
- 以0作为阈值,分为了-1-0和0-1;output为零均值;但还是存在梯度消失
- 线性修正单元(relu)
- f(x)=max(0,x),当输入信号小于0时,输出0,当输入信号大于0时,输出即输入
- 优点
- 使用relu得到的SGD的速度比sigmoid和tanh快,不需要大量的计算,只需要一个阈值即可
- 缺点
- 比较脆弱,当一个非常大的梯度流过relu神经元,更新参数后将不会对数据有激活现象,learning rate过高会导致这种问题(【注】若不幸出现这种情况,可以使用Xavier初始方法,避免)
- softmax
- 作用
-
损失函数
- 均方差
-
优化器
- 梯度下降
- 批量梯度下降(Batch Gradient Descent,BGD)
- 每一次迭代时使用全部的样本进行梯度更新
- 对目标函数求偏导,对每次迭代对象对参数进行更新,更新时存在一个求和函数,对所有的样本进行计算处理
- 优点
- 一次迭代是所有样本进行计算,利用矩阵操作,实现了并行操作
- 全数据集确定的方向更能代表样本整体,更准确的走向极值的方向,当目标函数为凸函数时,BGD最优
- 缺点
- 样本数量大的时候,需要对每个样本进行计算,训练速度慢
- 从迭代次数上看,BGD的迭代次数较少
- 随机梯度下降(Stochastic Gradient Descent,SGD)
- 每次迭代使用单独样本进行参数更新,训练速度加快
- 对目标函数求偏导,对每个迭代对象对参数进行更新,没有求和操作
- 优点
- 不是全部训练集上的损失函数,而是在每轮迭代中,随机优化某一条训练集上的损失函数,这样每一轮的参数更新速度加快
- 缺点
- 准确度下降,可能会收敛到局部最优,单个样本不能表示全体样本,不易并行实现
- 迭代次数较多,搜索过程是盲目的
- 小批量梯度下降(Mini-Batch Gradient Descent, MBGD)
- 每次迭代使用batch_size个样本进行参数更新
- 优点
- 每一个batch上优化神经网络参数并不比单个数据慢
- 每次使用一个batch可以大大减少收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果
- 可实现并行化
- 缺点
- 不当选择batch_size会带来一定问题
- 合理的batch_size
- 内存率提高,并行化效率提高
- 跑完整个数据集的迭代次数下降
- 在一定范围内,增大bath_size,其下降的方向越准,引起的训练震荡越小
- 盲目增大batch_size
- 内存容易撑不住
- 增加到一定程度,下降方向基本不再改变
- 跑完全数据集迭代次数少,要想达到相同的精度,花费的时间大大增加,对参数的修正速度慢
- 批量梯度下降(Batch Gradient Descent,BGD)
- 动量梯度下降法(Momentum)
- Adagrad(【注】学习率和梯度有关,也就是自适应学习率)
- 梯度下降
-
BP算法(back propagation)
- 神经网络组成:网络架构,激活函数,找出最优权重值的参数学习算法
- 学习过程由信号正向传播求损失与误差回传两个过程组合
- 过程
- 正向传播(FP,求损失),该过程根据输入的样本,给定初始权重和偏置项,计算输出值与实际值之间的损失值,若不在给定的范围内,则启动反向传播过程;否则停止w和b更新
- 反向传播(BP,回传误差),将输出以某种形式从隐层逐渐反馈到输入层,并将误差反摊到各层的所有单元,获得各单元的误差信号,此误差信号作为修正各单元权重的依据
- 优化
- 增加动量项
- 自适应调节学习率
- 引入抖动因子
- 从梯度方面进行优化
-
超参数
- 普通参数可以不断地学习得到,即训练模型的过程;超参数无法学习得来,如学习率
-
过拟合问题
- 过拟合是因为模型的学习能力太强,除了学习了样本空间的共有特性外,还学习到了训练集中的噪声,噪声的存在导致模型泛华性能下降
- 数据增强,增加训练样本
- 图像处理函数
- tf.image.resize_images(img,[size,size],method)【图像缩放,插值】
- tf.image.resize_image_with_crop_or_pad(img,[size,size])【样本裁剪】
- tf.image.flip_left_right(image)【水平翻转】
- tf.image.flip_up_down(image)【竖直翻转】
- tf.image.adjust_contrast(image,rate)【修改对比度】
- tf.image.per_image_standardization(image)【白化处理】
- 图像处理函数
- droupout,随机失活,随机丢弃部分神经元,主要作用于全连接层
- 通过droupout可以降低节点之间的耦合度,这样节点对其他节点就没那么敏感了
- 每一层上的每个节点都没有得到充分的训练,这样就可以避免节点过度学习
- 正则化
- 正则化越强,能够容忍更多的错误,关心模型的复杂度,不关心每个样本的错误,可以很好地做到过拟合
- 正则化越弱,更加关注样本点,容易造成过拟合
- 当训练集和测试集相差比较大的时候,要注意使用正则项进行惩罚,避免过拟合
- 当训练集和测试集相差不大的时候,没必要使用,否则可能会造成欠拟合
-
欠拟合问题
- 训练的模型在训练集上面的表现很差,验证集上也表现很差,原因:模型训练的过于简单,通用特征模型未学习到
- 措施
- 做特征工程
- 减少正则化参数
- 使用更深或者更广的模型进行训练
- 使用集成方法(boost或bagging算法)
-
CNN
- 输入层
- 卷积层
- 提取特征值,对原信号特征增强,并降低噪音
- 池化层
- 对输入的特征图进行压缩,进行降采样,选择一块区域的最大值(平均值)代替该区域
- 最大池化(max pooling)
- 提高空间不变性,不管像素最大值在池化框哪个位置,都可以取得最大值
- 均值池化(average pooling)
- 将池化框中的值求平均,能够减小池化框大小带来的误差
- 全连接层
- 将学习到的分布式特征表示映射到样本标记空间,起到“分类器”的作用
- 第一层全连接
- 池化层到全连接层,中间做卷积,将前面卷积提取的抽象特征展开,映射到标记好的样本空间
- 第二层全连接
- 标记的样本空间,最后用softmax做分类即可
【注】ResNet和GoogleNet取消了全连接层,换成了1*1卷积核做的卷积,最后进行分类
- 标记的样本空间,最后用softmax做分类即可
- 输出层
-
经典模型
- AlexNet模型(激活函数使用relu)
- 输入层为2242243
- 第一层:卷积层,卷积核为11*11,滑动步数为4,池化层使用最大池化
- 第二层:卷积层,卷积核为5*5,池化层使用最大池化
- 第三层:卷积层,卷积核3*3
- 第四层同第三层
- 第五层:卷积层,卷积核3*3,池化层使用最大池化
- 第六层+第七层:全连接层,4096神经元
- 第八层:softmax层,进行分类
- VGG-16模型(激活函数使用relu)
- 输入层
- 第一层:两个卷积层和一个最大池化层,卷积核3*3
- 第二层:两个卷积层和一个最大池化层,卷积核3*3
- 第三层:三个卷积层和一个最大池化层,卷积核3*3
- 第四层:三个卷积层和一个最大池化层,卷积核3*3
- 第五层:三个卷积层和一个最大池化层,卷积核3*3
- 第六层,七层,八层:全连接层,4096个神经元
- GoogleNet
- RestNet
- AlexNet模型(激活函数使用relu)
深度学习相关问题
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.