TensorFlow2_200729系列---16、链式法则求多层感知器梯度实例

TensorFlow2_200729系列---16、链式法则求多层感知器梯度实例

一、总结

一句话总结:

A、y2对y1求导:w2:dy2_dy1 = tape.gradient(y2, [y1])[0]
B、y1对w1求导:x:dy1_dw1 = tape.gradient(y1, [w1])[0]
C、直接y2对w1求导:w2*x:dy2_dw1 = tape.gradient(y2, [w1])[0]

1、数学中的链式求导法则和神经网络中的链式法则?

链式求导法则:dy/dx=(dy/du)*(du/dx)
神经网络中的链式法则:相当于y->u->x,也相当于x->u->y,其实u就是神经网络中的中间层

2、链式法则主要用于多层感知器的梯度推导?

例如w1->y1->y2,如果需要求dy2/dw1,就可以使用链式求导法则

3、梯度下降法的实质(比如y和w的关系,损失函数和w的关系)?

1、损失函数是关于输出y的函数,而y是关于w和b的函数
2、我们需要求的是∂(loss)/∂(w),来梯度下降,可以通过链式法则,∂(loss)/∂(w)=(∂(loss)/∂(y))*(∂(y)/∂(w))

二、链式法则求多层感知器梯度实例

博客对应课程的视频位置:

import tensorflow as tf 

# x可看做输入
x = tf.constant(1.)
# w1和b1看做第一层
w1 = tf.constant(2.)
b1 = tf.constant(1.)
# w2和b2看做第二层
w2 = tf.constant(2.)
b2 = tf.constant(1.)

# 自动求梯度
with tf.GradientTape(persistent=True) as tape:
    tape.watch([w1, b1, w2, b2])
    y1 = x * w1 + b1
    y2 = y1 * w2 + b2

    
# 目标:求y2对w1的梯度
# ===============================

# y2对y1求导:w2
dy2_dy1 = tape.gradient(y2, [y1])[0]
# y1对w1求导:x
dy1_dw1 = tape.gradient(y1, [w1])[0]
# 直接y2对w1求导:可以直接展开y2 = (x * w1 + b1) * w2 + b2
# 同样得到w2*x,当然这里底层肯定也是链式求导
dy2_dw1 = tape.gradient(y2, [w1])[0]

print(dy2_dy1 * dy1_dw1)
print(dy2_dw1)
tf.Tensor(2.0, shape=(), dtype=float32)
tf.Tensor(2.0, shape=(), dtype=float32)
 
我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
博主25岁,前端后端算法大数据人工智能都有兴趣。
大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
聊技术,交朋友,修心境,qq404006308,微信fan404006308
26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
人工智能群:939687837

作者相关推荐

原文地址:https://www.cnblogs.com/Renyi-Fan/p/13433331.html