梯度下降.

本文介绍了如何利用代价函数斜率的特性,结合学习率调整,优化神经元的权重更新过程。通过迷你批量梯度下降方法,实现在远离最低点时快速调整,接近最低点时精细微调,以减少震荡并促进模型收敛。
摘要由CSDN通过智能技术生成

我们小蓝的神经元终于可以根据代价函数的斜率是否关学。

来决定w的调整行为了,当w距离最低点比较远的时候,其实我们希望它能快一点,而逐渐接近最低点的时候,我们希望它慢下来,这样就能既加快下降的速度,又能在最低点处稳如老狗

同时我们发现距离最低点越远的地方,这个斜率的绝对值越大,而越近的地方越小,当接近最低点的时候这个值几乎为0
而最低点斜率它就是0,是分界点,而斜率在左右的符号又正好不同

刚好可以利用斜率的值来做这件事情,让w每次直接减去这个点斜率的值
如此,当前w在右边的时候斜率是正数,w减去一个正数向小调整,w减去一个负数向大调整,同时也做到了距离最低点比较远的时候斜率大(绝对值),调整的多,大刀阔斧,比较近的时候斜率小(绝对值),调整的少,精雕细琢.


调整过程太震荡,无法收敛,考虑给斜率也乘上一个比较小的学习率α调和一下

mini-batch迷你批量梯度下降
ا每次选取全体样本中的一小批梯度下降

代码

import numpy as np
import dataset
from matplotlib import pyplot as plt
n=100
# 画豆豆散点图
xs, ys = dataset.get_beans(n)
plt.title("size-toxicity Fuction", fontsize=12)
plt.xlabel('bean size')
plt.ylabel("toxicity")
plt.scatter(xs, ys)

w=0.1
y_pre = w * xs
plt.plot(xs, y_pre)
plt.show()

for i in range(100):
    x=xs[i]
    y=ys[i]
    k=2*(x**2)*w+(-2*x*y)
    alpha=0.1
    w=w-alpha*k
    plt.clf()
    plt.scatter(xs, ys)
    y_pre = w * xs
    #限制x,y坐标值
    plt.xlim(0,1)
    plt.ylim(0,1.2)
    plt.plot(xs, y_pre)
    plt.pause(0.01)

#重新绘制曲线
# xs, ys = dataset.get_beans(n)
# plt.title("size-toxicity Fuction", fontsize=12)
# plt.xlabel('bean size')
# plt.ylabel("toxicity")
# plt.scatter(xs, ys)
# y_pre = w * xs
# plt.plot(xs, y_pre)
# plt.show()

dataset

import numpy as np

def get_beans(counts):
	xs = np.random.rand(counts)
	xs = np.sort(xs)
	ys = [1.2*x+np.random.rand()/10 for x in xs]
	return xs,ys

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值