一、问题描述
考虑一元目标函数 。
(1)写出目标函数F的 。
(2)初始值w=0, 请画出梯度下降算法在最小化目标函数F的搜索轨迹。初始值w=2 呢?
二、实验目的
梯度下降算法在最小化目标函数F的搜索轨迹。
三、实验内容
3.1数据导入
自动生成的数据。
3.2数据预处理
3.3算法描述
假定目标函数可微,算法从空间中的任一给定初始点开始进行指定轮数的搜索,在每一轮的搜索中,都计算目标函数的在当前的梯度,并沿着与梯度相反的方向按照一定步长移动到下一个可行点。
for t in range(N):
# 数据的处理
w = w - eta * (2 * w - 1 )
y[t] = w
X[t] = w * w - w + 1
3.4主要代码
import numpy as np
import matplotlib.pyplot as plt
def addLine(X):
length = X.shape[0]
num = np.ones((length, 1))
for i in range(0, length):
num[i] = i + 1
X = np.c_[num, X]
return X
def printLine(x_name, y_name, title, X):
plt.figure(1)
plt.plot(X[:, 0], X[:, 1], 'bo', ms=3)
plt.plot(X[:, 0], X[:, 1], 'b', ms=3, label='line1')
plt.show()
return 0
#N为搜索的轮数
#eta为学习速率
N, eta = 20, 0.1
w = 0
y = np.ones((N, 1))
X = np.ones((N, 1))
for t in range(N):
# 数据的处理
w = w - eta * (2 * w - 1 )
y[t] = w
X[t] = w * w - w + 1
y = addLine(y)
X = addLine(X)
# W与N的关系图
printLine('N', 'W', '', y)
# F(W)函数图
printLine('N', 'F(W)', '', X)
print(w)
四、实验结果及分析
W=0时,
W与N(搜索的轮数)的关系图
W = 0.49423539247696574
F(W)函数图
分析:w从0,在每次循环中沿着梯度反方向更新w的值,最终得到w = 0.494。
W=2时,
W与N(搜索的轮数)的关系图
W = 0.5172938225691027
F(W)函数图
分析:w从0,在每次循环中沿着梯度反方向更新w的值,最终得到w = 0.517。
越接近最小值时,下降速度越慢。收敛: 当前后两次迭代的差值小于某一值时,迭代结束。
代码下载
点击这里
https://download.csdn.net/download/m0_61504367/85040283