1.三种激活函数
- torch.sigmoi=F.sigmoid
- torch.tannh=F.tanh
- torch.relu=Frelu
2.典型的loss函数:mean squire error
- MSE=mean squire error=均方差:∑(y-y预测 )^2,这里norm会开根号,所以需要平方回去。F.mse_loss(y,y预测)函数可建立此类loss函数。
- 当需要求导时,需要提前对变量申明,因为默认是无需求导的,否则会报错:reuqire_gred=true
上图表示对loss函数mse求w的偏导,输出结果是一个数:2
3.梯度下降法公式推倒
-
Softmax激活函数,归一化,适用于多分类问题。并不是按比例缩放,而是会把原来大的放的更大,
对softmax函数求导 -
1层单输出感知机的梯度推倒
其中E=error=loss函数,使用的均方差方法计算。
σ表示sigma激活函数,求和输出的x需要乘上σ才表示预测值,这里把x*σ=O。
t表示target,是实际值,因此E=(o-t)^2,这里的1/2可以忽略,仅仅是为了消去求导后增加的2倍。
对E求单个权值w的梯度,结果=(o-t)O(1-o)x,可以看出,求出的梯度形式非常简单。
推导出梯度后,使用更新公式,就可以更新w权值了。 -
N输出单层感知机的梯度推倒
E=error=loss函数,继续使用的均方差方法计算。
对E求单个权值wi的梯度,用函数autograd.grad(E,[wi])表示,仅Ok包含w,t不包含w,所以对Ok=x*σ求导,这里再分解成先对σ求导,再对x求导。 -
单输出多层的链式法则求导,梯度推倒:
这里为了求得grad(E,[w1]),即中间插入了一个w2,则可分解为三个求导:grad(E,[w1])= grad(E,[O2]) *grad(O2,[O1]) *grad(O1,[x])。灰色的点表示x。 -
多输出多层梯度推倒:
先算倒数第一层的倒数,答案如下所示,并其中很长的多项式把简写为δ。
计算结果如下红色框
进一步缩写为最下行公式。可以看出,结果由三个部分组成。也可以简写为:梯度=Oi*δj
Torch.Optim.Adam([x],lr=0,001)可直接调用迭代函数
- 到了这里,我们对DeepLearning就有了一个非常深刻的认识,而不是停留在函数拟合,函数拟合仅仅是非常肤浅的视角,从反向传播角度看,这其实是一个函数优化的问题。尽管实际做的时候不需要自己推到而是直接用封装好的函数,但是你会觉得心里有底,有信心看一些原理性的paper。