首页 > 其他分享 >深度学习基础课:全连接层的梯度检查

深度学习基础课:全连接层的梯度检查

时间:2022-11-07 13:33:19浏览次数:111  
标签:frac 导数 梯度 基础课 epsilon ji 计算 深度

大家好~我开设了“深度学习基础班”的线上课程,带领同学从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} ? \)
    答:

\[f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h} \]

  • 请实现导数的计算
    答:待实现的代码:Diff1
    实现后的代码:Diff1_answer

任务:计算函数的导数

  • 请用刚刚写的代码计算下面的函数,查看是否有误差?
    \( f(x)=x^2 + 3x \)
    答:实现后的代码:Diff1_compute_answer
    • h如果太小(如1e-15),误差是否会增加?
      答:会
    • 为什么?
      答:因为计算机的浮点数误差的原因,h太小的话(比如1e-15)会造成计算结果上的误差,所以我们一般用[1e-4,1e-7]之间的数值。 我们这里使用1e-4

任务:实现改进的导数的计算

  • 如何修改导数的定义公式\(f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h}\),从而减小误差?

    • 如该图所示,红色实线的斜率是真实的导数
      image
    • 蓝色虚线的斜率是目前求得的导数
    • 为什么?
    • 绿色虚线的斜率是否更接近真实导数?
    • 如何修改导数的定义公式为绿色的虚线?
      答:修改后的公式为:

\[f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x - h)}{2h} \]

  • 请实现改进的导数的计算
    答:待实现的代码:Diff2
    实现后的代码:Diff2_answer

任务:计算函数的导数

  • 请用刚刚写的代码计算同样的函数,查看误差是否变小了?
    答:实现后的代码:Diff2_compute_answer
    运行代码后,发现误差确实更小了

主问题:梯度检查的思路是什么?

  • 梯度\(\frac{dE}{dw_{ji}}\)是否为导数?
    答:是
  • 通过导数定义的公式\(f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x - h)}{2h}\)计算梯度的公式是什么?
    答:

\[\frac{dE}{dw_{ji}}= \lim_{\epsilon \to 0} \frac{E(w_{ji}+\epsilon) - E(w_{ji} - \epsilon)}{2\epsilon} \\ 当\epsilon设置为一个很小的数(如1e-4),那么上式可以写成: \\ \frac{dE}{dw_{ji}} \approx \frac{E(w_{ji}+\epsilon) - E(w_{ji} - \epsilon)}{2\epsilon} \\ \]

  • 如何用该公式检查梯度?
    答:我们使用该公式来计算梯度值;
    然后将其与后向传播计算的梯度值进行比较。
    如果两者的误差小于1e-4,那么就说明后向传播的代码是正确的。

标签:frac,导数,梯度,基础课,epsilon,ji,计算,深度
From: https://www.cnblogs.com/chaogex/p/16865628.html

相关文章