4back propagation(反向传播)
00:02:18.624
注意这里时对损失进行求导,而不是对ŷ 00:02:33.467 
第一层00:03:49.205 
隐层h1第一层,是6维的 x是5维的 隐层h2 7维
写解析式太麻烦了
面对这样的复杂网络 把网络看成图 再图上进行传播梯度 基于链式法则 00:05:33.953 
两层神经网络 00:06:52.853 
这个转置符号无所谓 x的维数为N 00:07:26.884
00:08:01.980 
h1的维数为m
b1是m维 00:08:58.784 
全链接神经网络的第一层
下面是第二层 00:09:52.605 
把两层变成1层,不管多少层,线性变换,都可以变成1层。
为了提高模型的复杂程度 00:12:34.502 
添加一个非线性的函数,用于提高复杂程度 nonliner 00:13:14.804 
链式求导法则
首先进行前馈操作00:16:07.295
也就是x->z
输出的结果z与实际值要求值之间的差值,对于z求导,这样得到偏导00:17:32.366
在一步一步进行反向传播。 最主要目的还是获得L对w的梯度,实现权重更新 “//”是分数的快捷键 对于 x,其实只有两层神经网络,是用不到的,但是对与超过两层的神经网络来说,就很有必要,因为这里的x会需要继续反向传播回上一层,用于上一层接着计算梯度
{trigger: “par”, replacement: “\frac{ \partial ${0:y} }{ \partial ${1:x} } $2”, options: “m”},这个没有A的意识是需要按 tab 来手动触发转换 $\frac{ \partial z }{ \partial w }$
然后可可以进行权重更新
在前馈过程中,还计算了梯度
开始进行反向传播 00:24:59.293
00:26:04.911 image.png 
作业: 00:27:26.419 
前馈然后反馈
pytorch中进行前馈反馈计算
tensor 保存所有的数值 这个类00:30:35.519 
使用pytorch构建神经网络其实就是在构建一个这样的计算图
只有需要计算梯度的时候才设置requires_grad 00:32:28.943 
这里w是tensor 所以这里x进行自动的类型转换
因为w需要梯度计算 所以计算结果也需要梯度计算
每调用loss函数就是在构建计算图
训练过程: 00:35:41.707 
直接调用backward 就可以进行反向传播 把这个这个计算链路中所有需要梯度计算的值都求出来 00:36:19.110 
然后自动把梯度放到变量中 w对应的梯度直接放到w这个类的生成的对象中 调用一次backward之后loss生成的计算图就使用完了,就被释放掉了 
下一个epoc进行loss计算就会重新创建一个新的计算图
必须要取到data,因为grad也是一个tensor对象 如果不写,就是在建立计算图
grad.item 用于输出一个标量,来输出梯度
使用sum来计算所有的损失00:41:17.290 
因为tensor对象在加法运算中会构建计算图 所以在for循环中重复加法会导致这个计算图特别的长,导致内存爆掉 00:42:08.001 
w中数据梯度清零 00:42:46.441 
因为w是一个全局变量 而不清零会导致下一轮中加上上一轮的梯度
流程图 00:45:12.777 
注意这里需要使用data。而不是直接使用tensor对象来进行更新,因为tensor对象会导致计算图的构建
作业: 00:45:38.919 























