梯度下降

梯度下降法

一、简介:

梯度下降法是一个最优化算法,通常也称为最速下降法。常用于机器学习和人工智能当中用来递归性地逼近最小偏差模型

二、梯度下降算法

2.1 具体问题:

在这里插入图片描述有一个人在山上,想要下山,目的地是山谷(也就是最低点)而如何到达最低点则是我们需要解决的问题。下山的路有很多种,想要快速的到达,就需要选择最陡的地方下山。

2.2 基本思想:

将人看作f(θ),即目标函数。在当前位置求偏导就是我们所讨论的梯度,正常的梯度方向是类似于上山的方向,是使值增大的,下山最快需使f(θ)最小,从负梯度求最小值,就是梯度下降。
由于不知道怎么下山,于是需要走一步算一步,继续求解当前位置的偏导数。一步步走下去,当走到了最低点,此时我们能得到一个近似最优解。如果损失函数是凸函数,梯度下降法得到的解就是全局最优解

2.3 具体分析:

①如果函数为一元函数,梯度就是该函数的导数:
在这里插入图片描述
②如果是二元函数,梯度定义为:

在这里插入图片描述

2.3步骤:

1、假设函数Y = f(x1,x2,x3…,xn)只有一个极小点
2、初始给定参数为X0 = (x10,x20,…,xn0).
从这个点如何搜索才能找到原函数的极小值点

方法:

  1. 首先设定要给比较小的正数ŋ,ε;
  2. 求当前位置处的各个偏导数
  3. 修改当前函数的参数值,公式如下在这里插入图片描述
  4. 如果参数变化量小于ε,退出;否则返回2.

2.4 举例

任给一个初始出发点,设x0=-4,利用梯度下降法求函数y = x²/2-2x的极小值

  1. 首先给定两个参数:ŋ=0.9,ε=0.01
  2. 计算函数导数:dy/dx = x - 2
  3. 代入x0=-4,计算当前导数值:y’ = -6
  4. 修改当前参数:x’=x-ŋy’=1.4;Δx=-ŋy’=5.4
  5. 比较Δx’与ε的大小;需满足需满足∆x<ε,但当前5.4>0.01
  6. 代入x’=1.4,计算当前导数值:y’=-0.6
  7. 循环计算,直到参数变化量小于ε

代码如下:

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return np.power(x,2)

def d_f_1(x):
    return 2.0 * x

def d_f_2(f , x,delta=1e-4):
    return (f(x+delta) - f(x-delta)) / (2 * delta)

xs = np.arange(-10,11)
plt.plot(xs,f(xs))
plt.show()
learning_rate = 0.1
max_loop = 30

x_init = 10.0
x = x_init
lr = 0.1
for i in range(max_loop):
    #d_f_x = d_f_1(x)
    d_f_x = d_f_2(f,x)
    x = x - learning_rate * d_f_x
    print(x)
    
print('initial x =',x_init)
print('arg min f(x) of x =',x)
print('f(x) = ',f(x))
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值