03-反向传播
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
线性模型:$\hat y=x*w$,其中$w$为权重,$x$为输入数据。
随机梯度下降:
其中,
对于复杂模型,考虑如何计算梯度?
一个两层的神经网络:
其中,$W_1$与$X$通过矩阵乘法得到隐藏层$H^{(1)}$。
$H^{(1)}$和$b_1$通过加法运算得到新的一个$X$。
神经网络的第一层,就这样计算完毕了,神经网络的第二层和运行过程和第一层一样。
将各个层的计算过程进行统一,可以得到如下模型:
如上可知,无论神经网络有多少层,都是线性的,实际只是做了一层计算。
于是为了解决这个问题,加一个非线性的激活函数,比如$sigmoid$函数,在每个线性模型后得到的线性数据,进行非线性变换。
创建计算图$(Forward)$
局部梯度
给定连续节点的梯度
用链式法则计算梯度
Example:$f=x\cdot w,x=2,w=3$
forward
backward
其中,残差项$r=\hat y-y$
在PyTorch
中,张量是构造动态计算图的重要组成部分。它包含data
和grad
,分别存储节点的值和梯度的损失。
如果需要自动梯度机制,则张量的元素变量requires_grad
必须设置为true
。
定义线性模型
实现代码
前向传播
反向传播
矩阵书籍: