- 机器学习要先做特征工程,而深度学习不需要。
- 没有严格的定义多少层的模型才叫深度模型,目前如果有超过2层的隐层,那么也可以及叫做深度模型。
- 笔记:牛顿法、拟牛顿法、adam,rmsgrad用到了二阶导;momentum、adgrad用的是一阶导,adgrad的特点是历史梯度正则。
- Dropout 有两点缓解过拟合问题: 1)在训练阶段,其通过在每次迭代时随机丢弃一些神经元来改变网络结构,实现训练不同结构神经网络的目的,在测试阶段会使用全部神经元,相当于对之前训练的的不同结构的网络都参与了对最终结果的投票,(不同网络之间共享了参数)2)能够减少神经元之间复杂的共适应关系。
- 过拟合现象就是模型在训练阶段准确度很高,但在测试阶段准确度很低。
- 选择一个过大的学习率,会导致网络不收敛,较小的话收敛过慢;
- 如果有个预先训练好的神经网络, 就相当于网络各参数有个很靠谱的先验代替随机初始化。若新的少量数据来自于先前训练数据(或者先前训练数据量很好地描述了数据分布,而新数据采样自完全相同的分布),则冻结前面所有层而重新训练最后一层即可;但一般情况下,新数据分布跟先前训练集分布有所偏差,所以先验网络不足以完全拟合新数据时,可以冻结大部分前层网络,只对最后几层进行训练调参(这也称之为fine tune)。
-
在不同数据集下如何使用微调(fine tune):
数据集1-数据量少,但数据相似度非常高-在这种情况下,我们所做的只是修改最后几层或最终的softmax图层的输出类别。
数据集2-数据量少,数据相似度低-在这种情况下,我们可以冻结预训练模型的初始层(比如k层),并再次训练剩余的(n-k)层。由于新数据集的相似度较低,因此根据新数据集对较高层进行重新训练具有重要意义。
数据集3-数据量大,数据相似度低-在这种情况下,由于我们有一个大的数据集,我们的神经网络训练将会很有效。但是,由于我们的数据与用于训练我们的预训练模型的数据相比有很大不同,使用预训练模型进行的预测不会有效。因此,最好根据你的数据从头开始训练神经网络(Training from scatch)。
数据集4-数据量大,数据相似度高-这是理想情况。在这种情况下,预训练模型应该是最有效的。使用模型的最好方法是保留模型的体系结构和模型的初始权重。然后,我们可以使用在预先训练的模型中的权重来重新训练该模型。 -
blob是caffe中的基本数据存储单元,layer才是caffe中的基本计算单元
- caffe支持的loss优化
Stochastic Gradient Descent (type: “SGD”), 随机梯度下降
AdaDelta (type: “AdaDelta”) 自适应学习率
Adaptive Gradient (type: “AdaGrad”) 自适应梯度
Adam (type: “Adam”) 自适应学习,推荐使用
Nesterov’s Accelerated Gradient (type: “Nesterov”) 加速梯度法
RMSprop (type: “RMSProp”)
- 梯度下降算法的步骤:1、用随机值初始化权重和偏差 2、把输入传入网络,得到输出值 3、计算预测值和真实值之间的误差 4、对每一个产生误差的神经元,调整相应的(权重)值以减小误差 5、重复迭代,直至得到网络权重的最佳值
- 可以用来降低深度学习模型的过拟合问题?1 增加更多的数据 2 使用数据扩增技术(data augmentation) 3 使用归纳性更好的架构 4 正规化数据 5 降低架构的复杂度
- 梯度下降法分随机梯度下降(每次用一个样本)、小批量梯度下降法(每次用一小批样本算出总损失, 因而反向传播的梯度折中)、全批量梯度下降法则一次性使用全部样本。这三个方法, 对于全体样本的损失函数曲面来说, 梯度指向一个比一个准确。但是在工程应用中,受到内存/磁盘IO的吞吐性能制约, 若要最小化梯度下降的实际运算时间, 需要在梯度方向准确性和数据传输性能之间取得最好的平衡。所以,对于数据过大以至于无法在RAM中同时处理时, RAM每次只能装一个样本, 那么只能选随机梯度下降法
- 卷积层的输出尺寸、参数量和计算量 输出尺寸 lo = [(le + 2pe - ke)/se] + 1