-
如何通过梯度下降的方法求解损失函数?
求解损失函数的方式有:最小二乘法(即对参数求偏导,令其为0后联立方程组求解),但只适用于损失函数为凸函数的情况。
-
当损失函数不是凸函数的时候如何求解呢?
- 可以采用梯度下降的方法;其思路为:随机选择初始参数值,带入损失函数进行计算,然后梯度下降这个参数值,迭代一定次数,使其逼近最优解参数。
-
如何梯度下降?如何确定迭代次数?为什么能保证这样的结果能够逼近最优解?
通过人为设定学习率,作用于初始参数,使其按照一定的方向移动一定的距离。其公式为:
-
迭代次数:无法事先确定,只能通过不断尝试;
-
因为
,即对f(x)求导,当趋近最优解时,斜率趋于平缓,再经过lr的调整,减去的数值就会不断缩小,从而保证结果逼近最优解,但是如果损失函数存在两个拐点,则可能只会得到局部最优解。
-
如何设定梯度下降的学习率?
- lr:学习率;
:梯度值;
- 学习率:设定过低,会导致迭代次数增加,计算量变大;学习率设定过高,可能导致越过阈值,从而越来越远离最优解;
# 计算梯度以及绘制梯度变化函数 def gd(lr=0.02,itera_times=20,w=10): ''' (28(x-2))梯度值变化情况 ''' results=[w] for i in range(itera_times): w-=lr*28*(w-2) results.append(w) return results def show_trace(res): ''' 特定函数(14*(x-2)^2)的梯度下降轨迹绘制函数 ''' f_line=np.arange(-6,10,0.1) plt.plot(f_line,[14*np.power(x-2,2) for x in f_line]) plt.plot(res,[14*np.power(x-2,2) for x in res],'-o') plt.xlabel('x') plt.ylabel('Loss(x)') import matplotlib.pyplot as plt plt.figure(figsize=(10,5)) plt.subplot(131) plt.title('lr=0.001') show_trace(gd(lr=0.001)) plt.subplot(132) plt.title('lr=0.01') show_trace(gd(lr=0.01)) plt.subplot(133) plt.title('lr=0.08') show_trace(gd(lr=0.08))
- lr:学习率;
-
-
梯度下降计算参数步骤:
- 确定数据及模型
- 设置随机初始参数值
- 根据损失函数求出梯度表达式,以最小二乘法为例:一般回归类函数使用MSE,
,求得
- 梯度下降:
,得出最优参数
-
如何通过梯度下降的方法求解损失函数?
最新推荐文章于 2024-03-16 17:16:46 发布