TensorFlow2学习笔记,0基础详解(1)梯度下降算法原理

一.神经网络模型

可以理解为,给定多个输入,然后给定每个输入不同的权重值,和一定的偏置,最终可以给出一个输出。
在这里插入图片描述
如图,x就是我们的输入,w就是为不同的输入分配的权重值,b就是我们的偏置,最后就可以得到我们的输出y。
如果用矩阵的形式来看,可以用下面的图来表示:
在这里插入图片描述
我们给定输入的特征x,这个时候我们为了得到准确的输出y,前提是我们的w和b是准确可靠的。所以我们训练神经网络的过程就是找到这个w和b的过程。

二.梯度下降算法

如何得到准确的w和b呢,这里我们使用到的是梯度下降算法。
首先我们先介绍损失函数的定义:

y是我们给定任意w和b得到的输入值(不一定正确),而Y是我们在w和b参数选择正确时的标准答案。所以我们的y和Y会存在一定的误差,我们定义预测值(y)和标准答案(Y)之间的均方误差就是我们的损失函数loss。
可以看到loss函数有两个变量,一个是w,一个是b。

我们分别通过误差函数loss对w和b求导,就可以找到w和b分别取何值时,loss函数能够取到极小值(我们的目的是找到loss函数取得最小值的时候的w和b,但是最小值就藏在极小值里)。

我们下面以求取w值为例进行说明:
1.首先如下图是我们的loss函数的图像,我们需要找到他的其中一个极小值。首先我们任意定义一个w的初始值。
在这里插入图片描述
2.这个时候,我们需要让w值从我们随机定义的起点值,向离他最近的极小值逼近。这里需要介绍一个参数:学习率lr。学习率lr决定了我们让w向极小值移动的最小步长。
a.如果学习率lr过小,就会出现如下重复学习了很多次,也没有走到极小值的情况:
在这里插入图片描述
b.如果学习率lr过大,就会导致学习太快,忽略了极小值点的情况:
在这里插入图片描述
所以,大家可以看到,选取一个合适的lr很重要。
3.如果选取的lr值得当,随着训练次数的增加,那样我们的w值就会一直在这个极小值附近徘徊:
在这里插入图片描述
这个时候我们取一个w的值,就会非常逼近我们的极小值了。

三.程序实现

我们这里用一个梯度下降的历程来看看效果吧,大家可以试着更改:

import tensorflow as tf
w = tf.Variable(tf.constant(5, dtype=tf.float32)) # 设定w初始值5
lr = 0.1 #学习率
epoch = 40 #循环迭代40次

for epoch in range(epoch):
    with tf.GradientTape() as tape:
        loss = tf.square(w + 1) #损失函数(w+1)²
    grads = tape.gradient(loss, w) #求loss函数在w处的导数

    w.assign_sub(lr * grads) #通过减法,让w向loss取得极小值的方向逼近
    print("After %s epoch,w is %f,loss is %f" % (epoch, w.numpy(), loss))

1.当学习率过低,迭代次数过小时,我们就会出现无法让loss值降到最低的现象。
2.而如果把学习率设置得太高,无论我们迭代次数多大,我们都无法让loss减小。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值