1. 迁移学习

Transfer Learning:机器学习分支,研究源域(source domain)的知识如何应用到目标域(target domain)

image-20200816091617288

模型微调是属于迁移学习的,但迁移学习更多是研究目标域无标注的情况

阅读全文 »

1. 正则化与偏差-方差分解

Regularization:减小方差的策略

误差可分解为:偏差,方差与噪声之和。即误差 = 偏差 + 方差 + 噪声之和

偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力

方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响

噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界

阅读全文 »

1. Hook函数概念

Hook函数机制:不改变主体,实现额外功能,就是开挂的意思

大致分为两类:torch.Tensor(对参数)和torch.nn.Module(对模型)的register_hook函数

  1. torch.Tensor.register_hook(hook)
  2. torch.nn.Module.register_forward_hook
  3. torch.nn.Module.register_forward_pre_hook
  4. torch.nn.Module.register_backward_hook
阅读全文 »

1. TensorBoard简介与安装

1.1 安装TensorBoard

TensorBoard:TensorFlow中强大的可视化工具

image-20200806224445463

通过pip install future和pip install tensorboard安装tensorboard

阅读全文 »

1. 为什么要调整学习率?

可以先快后慢,根据某种学习率调整策略,在适当的时候更改学习率,使训练过程收敛更快,训练效果更好。

学习率调整策略的函数都继承于_LRScheduler这个基类。

主要属性:

  • optimizer:关联的优化器
  • last_epoch:记录epoch数
  • base_lrs:记录初始学习率

主要方法:

  • step():更新下一个epoch的学习率(一次epoch运行一次step函数以更新学习率;在一次epoch以内,学习率不应该改变)
  • get_lr():虚函数(需要子类重写),计算下一个epoch的学习率
1
2
3
4
5
>>> scheduler = ...
>>> for epoch in range(100):
>>> train(...)
>>> validate(...)
>>> scheduler.step()
阅读全文 »

1. optimizer的属性

1
2
3
4
5
class Optimizer(object):
def __init__(self, params, defaults):
self.defaults = defaults
self.state = defaultdict(dict)
self.param_groups = []
  • defaults:优化器超参数(字典:包含’lr’, 'momentum’等等关于优化器的超参数)
  • state:参数的缓存,如momentum的缓存
  • params_groups:管理的参数组(params_groups是一个list,list内有字典;字典内有一组参数,以及这一组参数对应的超参数设置)
  • _step_count:记录更新次数,学习率调整中使用
阅读全文 »

1. 损失函数概念

损失函数:衡量模型输出与真实标签的差异

image-20200803105015854

损失函数(Loss Function):

Loss=f(y^,y)Loss=f\left( \hat{y},y \right)

代价函数(Cost Function):

Cost=1Ni=1Nf(y^i,y)Cost=\frac{1}{N}\sum_{i=1}^N{f\left( \hat{y}_i,y \right)}

目标函数(Objective Function):

Obj=Cost+RegularizationObj\,\,=\,\,Cost\,\,+\,\,Regularization

阅读全文 »

1. 梯度消失与爆炸

对于一个没有激活函数(先不考虑激活函数)的多层神经网络,参数的导数可以计算如下

image-20200801210729523

H2=H1W2ΔW2=LossW2=LossoutoutH2H2w2=LossoutoutH2H1\begin{aligned} \text{H}_2&=\text{H}_1*\text{W}_2 \\ \Delta \text{W}_2&=\frac{\partial \text{Loss}}{\partial \text{W}_2}=\frac{\partial \text{Loss}}{\partial \text{out}}*\frac{\partial \text{out}}{\partial \text{H}_2}*\frac{\partial \text{H}_2}{\partial \text{w}_2}\\ &=\frac{\partial \text{Loss}}{\partial \text{out}}*\frac{\partial \text{out}}{\partial \text{H}_2}*\text{H}_1\\ \end{aligned}

因此参数的导数与隐藏层H1的输出值有关:

梯度消失:H10ΔW20\mathrm{H}_{1} \rightarrow \mathbf{0} \Rightarrow \Delta \mathrm{W}_{2} \rightarrow \mathbf{0}

梯度爆炸:H1ΔW2\mathrm{H}_{1} \rightarrow \infty \Rightarrow \Delta \mathrm{W}_{2} \rightarrow \infty

阅读全文 »
0%