pytorch:
torch:主模块,用来搭建神经网络的。
torchvision: 辅模块,有数据库,和一些训练好的神经网络可以直接用。(VGG, AlexNet, ResNet)
和numpy相互转换,数据类型,运算。
变量Variable, 三部分:1。data,(相当于Tensor), 2. grad:(当前变量的梯度缓存区) 3. creator: 这个变量的创造节点。
Variable在计算时,后台默默搭建着一个庞大的系统,叫计算图(computational graph), 将所有的计算步骤(节点)都连接起来,最后,进行反向误差传递时,一次性将所有variable里面的修改幅度(梯度),都计算出来。
Tensor:只是相当于一个数据结构。
nn.Linear(in, out), in:每个输入样本的大小,(n, in), out:每个输出样本的小,(n, out)
深度学习 优化器:
梯度下降(Gradient Descent)
基于随机梯度下降(SGD, Stochastic Gradient Descent)的优化,梯度下降就好比一个人想从高山上(start point),奔向山谷最低点(minimum), 用最快的方式(steppest),
SGD 基本公式。学习率 系数/
基本的mini-batch SGD优化算法可以取得还算不错的成绩。
仍存在的问题: 1. 初始学习率难以选择;2. 学习率调整不灵活, 3. 同一个学习率被应用到各个参数, 4. 高度非凸的误差函数优化过程,如何避免陷入大量的局部次优解或鞍点。
AdaGrad(自适应梯度,Adaptive Gradient):对每个不同的参数调整不同的学习率,对频繁变化的参数以更小的步长进行更新,稀疏的参数以更大的步长进行更新。
区别在于:增加了分母:梯度平方累积的平方根。频繁更新的分母偏大,更新步长变小;
平方根分母项 相当于对学习率进行了自动调整, 再乘以本次梯度; 默认学习率0.01, 一般就可以完成很好的收敛。
优势:
对于数据分布稀疏的场景,能更好利用稀疏梯度信息,比标准SGD更好的收敛;
缺点:
分母项不断累积,时间步长增加,分母项越来越打,导致学习率急剧减小变得太小,无法进行有效更新。
RMSProp:
计算梯度平方的指数移动平均数
优点:克服AdaGrad梯度急剧减小的问题,拥有优秀的学习率自适应能力。在不稳定的目标函数下,表现更良好。
Adam优化器:结合了前面两个算法的优点。对梯度一阶矩估计(即梯度均值)和二阶矩估计(梯度的未中心化的方差)进行综合考虑,计算出更新步长。(在很多场合 成为主流优化算法)。
优点: 参数更新不受梯度伸缩变换影响,更新步长被限制在大致范围内(初始学习率),能自然实现步长退火过程(自动调整学习率)。通常无需调整,
Adam缺陷:效果比 带动量的SGD效果差。优化:1.增加权重衰减项,避免产生过大参数;2.修正指数移动均值。