大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序
线上课程资料:
本节课录像回放1
加QQ群,获得ppt等资料,与群主交流讨论:106047770
本系列文章为线上课程的复盘,每上完一节课就会同步发布对应的文章
本文为第四节课:“全连接层的梯度检查”的复盘文章
本课程系列文章可进入索引查看:
深度学习基础课系列文章索引
回顾相关课程内容
-
第二节课“判断性别”Demo需求分析和初步设计(下1)
- 求损失函数的极小值点的梯度下降公式是什么?
-
第三节课:全连接层的前向和后向传播推导(下)
- 反向传播算法计算的结果是什么?
- 计算梯度有什么用?
-
第二节课“判断性别”Demo需求分析和初步设计(下1)
- 损失函数的表达式是什么?
- 随机梯度下降算法是什么?
- 随机梯度下降公式是什么?
- 求损失函数的极小值点的梯度下降公式是什么?
为什么要学习本课
- 如何验证反向传播计算的梯度是否正确?
- 我们是如何验证的?
答:验证过程为:因为NeuralNetwork_train_answer->train函数打印的loss的结果与判断性别Demo的NeuralNetwork_train_before->train函数打印的loss一样,所以说明代码正确,通过了运行测试 - 还有其它办法吗?
- 我们是如何验证的?
主问题:如何以最小的误差计算导数?
任务:实现导数的计算
- 导数的定义是什么?
\( f'(x) = \lim_{h \to 0} ? \)
答:
- 请实现导数的计算
答:待实现的代码:Diff1
实现后的代码:Diff1_answer
任务:计算函数的导数
- 请用刚刚写的代码计算下面的函数,查看是否有误差?
\( f(x)=x^2 + 3x \)
答:实现后的代码:Diff1_compute_answer- h如果太小(如1e-15),误差是否会增加?
答:会 - 为什么?
答:因为计算机的浮点数误差的原因,h太小的话(比如1e-15)会造成计算结果上的误差,所以我们一般用[1e-4,1e-7]之间的数值。 我们这里使用1e-4
- h如果太小(如1e-15),误差是否会增加?
任务:实现改进的导数的计算
-
如何修改导数的定义公式\(f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h}\),从而减小误差?
- 如该图所示,红色实线的斜率是真实的导数
- 蓝色虚线的斜率是目前求得的导数
- 为什么?
- 绿色虚线的斜率是否更接近真实导数?
- 如何修改导数的定义公式为绿色的虚线?
答:修改后的公式为:
- 如该图所示,红色实线的斜率是真实的导数
- 请实现改进的导数的计算
答:待实现的代码:Diff2
实现后的代码:Diff2_answer
任务:计算函数的导数
- 请用刚刚写的代码计算同样的函数,查看误差是否变小了?
答:实现后的代码:Diff2_compute_answer
运行代码后,发现误差确实更小了
主问题:梯度检查的思路是什么?
- 梯度\(\frac{dE}{dw_{ji}}\)是否为导数?
答:是 - 通过导数定义的公式\(f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x - h)}{2h}\)计算梯度的公式是什么?
答:
- 如何用该公式检查梯度?
答:我们使用该公式来计算梯度值;
然后将其与后向传播计算的梯度值进行比较。
如果两者的误差小于1e-4,那么就说明后向传播的代码是正确的。