1、基础概念
1.1 偏微分和梯度
- 偏微分是一个标量,而梯度是一个向量
- 假设z = f (x,y),偏微分有z对x的偏微分和z对y的偏微分,而梯度是两者组成的向量
- 梯度向量有方向和模,其方向为函数值增大方向,其模为增长速率
1.2 对于全局最小值搜索过程的影响因素
- 初始状态
- 学习率
- 动量(怎么逃离局部极小值)
2、常见函数梯度
3、激活函数及其梯度
3.1 原始激活函数
- “激活”:输入经过处理后小于某个值,输出为0;大于某个值,输出为固定的值。
- 可知激活函数不可导
3.2 sigmoid / logistic
- 解决了原来不可导问题
- 最大特点:将(-∞,+∞)压缩到(0,1)
- sig‘ = sig (1 - sig)
- 缺点:当输入太大,梯度接近于0,参数得不到更新,称为梯度弥散现象
3.3 tanh
- tanh(x) = 2sigmoid(2x) - 1
- 值域为(-1, 1)
- tanh’ = 1 - tanh²
3.4 ReLU
- x<0, y=0; x>=0, y=x
4、Loss及其梯度
4.1 MSE(均方误差)
- 暂定:loss为不开根号,norm为开根号
使用:loss = torch.norm(y-pred, p=2).pow(2)
注解:p=2指的是求2范数,pow(2)为平方
torch.norm的用法
4.2 Cross Entropy Loss
- binary
- multi-class
- softmax
两个作用
(1)将逻辑输出转换为概率,概率大小为(0,1),概率求和为1
(2)能够加大差距,使大的更大,小的更小
softmax的梯度
(1)p.backward()
只能用一次,不能连用两次,因为用一次之后会自动清楚求导用到的图
如果想要连用两次,设置retain_graph=True
4.3 计算梯度两种方式
1.torch.autograd.grad(loss, w)
注:loss funciton对w的梯度
loss function一般为向量,而在求解梯度时,参数loss只能是标量,所以每次只用到loss function的一个分量
2.fun.backward()
w.grad
注:fun会求出所要求的梯度并放入参数的grad成员中,可以直接用参数.grad调用
注解:要求解梯度的参数需要特别说明requires_grad=True