算法工程师修仙之路:吴恩达深度学习(六)

神经网络和深度学习

神经网络基础


计算图

  • 可以说,一个神经网络的计算,都是按照前向或反向传播过程组织的,计算图解释了为什么我们用这种方式组织这些计算过程。

  • 首先我们计算出一个新的网络的输出(前向过程),紧接着进行一个反向传输操作,后者我们用来计算出对应的梯度或导数。
    在这里插入图片描述

    • 我们尝试计算函数 J J J J 是由三个变量 a , b , c a, b, c 组成的函数,这个函数是 3 ( a + b c ) 3(a+bc)
    • 计算这个函数实际上有三个不同的步骤,首先是计算 b b 乘以 c c ,我们把它储存在变量 u u 中,因此 u = b c u=bc ,然后计算 v = a + u v=a+u ,最后输出 j = 3 v j=3v ,这就是要计算的函数 J J
    • 当有不同的或者一些特殊的输出变量时,例如本例中的 J J 和逻辑回归中你想优化的代价函数 J J ,因此计算图用来处理这些计算会很方便。
    • 通过一个从左向右的过程,你可以计算出 J J 的值。
    • 为了计算导数,从右到左(红色箭头,和蓝色箭头的过程相反)的过程是最自然的方式。

计算图的导数计算

  • 这是一个流程图:
    在这里插入图片描述

    • 下面用到的公式: d J d u = d J d v d v d u \frac{dJ}{du}=\frac{dJ}{dv}\frac{dv}{du} d J d b = d J d u d u d b \frac{dJ}{db}=\frac{dJ}{du}\frac{du}{db} d J d a = d J d u d u d a \frac{dJ}{da}=\frac{dJ}{du}\frac{du}{da}
    • 定义上 J = 3 v J= 3v ,现在 v = 11 v=11 ,所以如果你让 v v 增加一点点,比如到 11.001,那么 J = 3 v = 33.003 J= 3v=33.003 ,所以我这里 v v 增加了0.001,最终结果是 J J 上升到原来的3 倍,所以 d J d v = 3 \frac{dJ}{dv}=3 ,因为对于任何 v v 的增量 J J 都会有3倍增量;
    • 在反向传播算法中的术语,如果你想计算最后输出变量的导数,使用你最关心的变量对 v v 的导数,那么我们就做完了一步反向传播,在这个流程图中是一个反向步;
      在这里插入图片描述
    • 首先 a a 增加了, v v 也会增加, v v 增加多少取决于 d v d a \frac{dv}{da} ,然后 v v 的变化导致 J J 也在增加,如果 a a 影响到 v v v v 影响到 J J ,那么当你让 a a 变大时, J J 的变化量就是当你改变 a a 时, v v 的变化量乘以改变 v v J J 的变化量,在微积分里这叫链式法则。
    • 到目前为止,我们一直在往回传播,并计算 d v = 3 dv=3 ,再次, d v dv 是代码里的变量名,其真正的定义是 d J d v \frac{dJ}{dv} d a = 3 da=3 d a da 是代码里的变量名,其实代表 d J d a \frac{dJ}{da} 的值。
  • 一个计算流程图就是正向或者说从左到右的计算来计算成本函数 J J ,即需要优化的函数,然后反向从右到左计算导数。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/faker1895/article/details/86643911