最简单的梯度下降法求最优值

梯度下降法,主要通过梯度方向与学习率两个值,一步一步迭代求出最优值的过程。

1. 随机产生开始迭代的初始值,包括x值,学习率;

2. 计算函数的导数,通过学习率与导数的乘积更新x,即

x_{i+1} = x_{i} - \frac{\partial y}{\partial x}\times lr

其中lr是学习率,\frac{\partial y}{\partial x}是函数的导数。

3. 用更新的x,更新y,重复2与3,直到相邻两个y值相同,或者相邻两个y的差值小于某个值终止。

假设以y=x^{2}为例,那么\frac{\partial y}{\partial x}等于2x,假设学习率为0.3,则相关python代码实现如下:

# 第一步:随机生成一个数,区间在[-10,10]
x_begin = np.random.uniform(-10,10)
iter_time = 1
learning_rate = 0.3
x = x_begin
y_tmp = 0
# 第二步:根据梯度乘以时间做迭代,通过前后两次的值的差小于某个值作为迭代终止条件
while(True):
    y = x**2
    # 添加终止条件,当前后两个y值一样时终止
    if np.abs(y-y_tmp)>1e-8:
        # 更新x值
        print('iter time: ',iter_time)
        print('gradient*learning_rate: ',2*x*learning_rate,',the x is %f' % x,'and the y is %f' % y)
        iter_time = iter_time + 1
        x = x - 2*x*learning_rate
        y_tmp = y
    else:
        break

运行的结果如下所示:

由于y=x^{2}的最小值为(0,0),通过迭代得到最小值的近似值为(0.000077,0)。

梯度下降法的特点:

不能保证被优化的函数达到全局最优解。

初始化值很大程度上影响求解最优解。

当函数为凸函数时,梯度下降法能够保证达到全局最优解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值