13.梯度下降

梯度下降

导数代表函数沿着某一方向变动的范围,是更高层更通用的概念。
偏微分是函数沿着某一具体的轴进行变动的范围,是一个标量(含有方向)
梯度是指把函数所有轴上的偏微分合在一起得到一个向量
梯度介绍

梯度的意义:梯度的方向代表函数增大的方向,梯度的模大小代表增大的速率
函数的几何意义
梯度的利用
寻找函数的最小值
更新法则
求函数的全局最小值点
例
利用TensorFlow自动求解梯度,自动更新参数
With Tf.GradientTape() as tape: 计算过程在此环境里面进行,包在tape里面

[ w_grad ] = tape.gradient( loss, [w]) 传参数计算,传什么参数计算什么,得到的是一个关于从参数的梯度列表,
自动求梯度
代码:

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']= '2'

W = tf.constant(1.)
X = tf.constant(2.)
y = X * W

with tf.GradientTape() as tape: #包含里面,会跟踪计算过程
    tape.watch([W])
    y2 = X * W

grad1 = tape.gradient(y,[W])
print(grad1)
#[None] 结果是None,y从y->y2,
# 而只把y2包含里面,则梯度计算没有被跟踪,故为None

with tf.GradientTape() as tape:
    tape.watch([W]) #使得W是Variable类型的,如是Variable则可省略此步
    y3 = X * W

grad2 = tape.gradient(y3, [W])
print(grad2)
#[<tf.Tensor: id=7, shape=(), dtype=float32, numpy=2.0>]


此代码中的tape求解一次后,就会自定释放掉一些资源
多次调用

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']= '2'

W = tf.constant(2.)
X = tf.constant(3.)
y = X * W

with tf.GradientTape() as tape:
    tape.watch([X,W])
    y2 = X * W

grad1 = tape.gradient(y2,[X])
print(grad1)
#[<tf.Tensor: id=5, shape=(), dtype=float32, numpy=2.0>]

grad2 = tape.gradient(y2,[W]) #只能调用一次
#RuntimeError: GradientTape.gradient can only be called once on non-persistent tapes.
print(grad2)

with tf.GradientTape(persistent = True) as tape:  #可多次调用
    tape.watch([X,W])
    y3 = X * W
grad_X = tape.gradient(y3,[X])
grad_W = tape.gradient(y3,[W])
print(grad_X)
#[<tf.Tensor: id=9, shape=(), dtype=float32, numpy=2.0>]
print(grad_W)
#[<tf.Tensor: id=13, shape=(), dtype=float32, numpy=3.0>]

二阶梯度

二阶求导

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']= '2'

w =tf.Variable(1.0)
b =tf.Variable(2.0)
x =tf.Variable(3.0)

with tf.GradientTape() as t1:
    with tf.GradientTape() as t2:
        y = x * w + b
    dy_dw,dy_db=t2.gradient(y,[w,b])  #第一次求导
d2y_dw2 = t1.gradient(dy_dw,[w])  #第二次求导

print(dy_dw)
#tf.Tensor(3.0, shape=(), dtype=float32)
print(dy_db)
#tf.Tensor(1.0, shape=(), dtype=float32)
print(d2y_dw2)
#[None]

常见梯度函数

1.线性函数 y = xw + b
应用:感知机偏微分求导
线性函数
2.y=x
w^2 + b^2

二次模型的求解方式
在这里插入图片描述

3.指数求解方式
y=xe^w + e^b
指数函数
4.f = [ y - (xw + b)]^2
线性感知机的输出和真实的label的均方差

5.f = ylog(xw + b)
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值