损失函数梯度下降的关系

本文深入解析损失函数与梯度下降之间的关系,解释了损失函数衡量模型预测与真实值差距的概念,以及梯度下降作为求解损失函数最小值的优化算法的作用。通过实例说明了如何使用梯度下降法在训练集中找到最佳参数。

损失函数:计算的是一个样本的误差

代价函数:是整个训练集上所有样本误差的平均

目标函数:代价函数 + 正则化项

本人在阅读了很多资料后,发现很多博客都在介绍损失函数,梯度下降等方法,但是很多文章没有把二者的关系讲解清楚,本文试着阐述二者关系,希望对大家有帮助

损失函数(Loss function)是用来估量你模型的预测值 f(x)f(x) 与真实值 YY 的不一致程度,它是一个非负实值函数,通常用 L(Y,f(x))L(Y,f(x)) 来表示。损失函数越小,模型的鲁棒性就越好,常用的最小二乘法,大家可以参考该文章https://blog.youkuaiyun.com/u010976453/article/details/78488279,这里已经介绍了损失函数的定义以及损失函数的种类,因为本文重点在于阐述损失函数跟梯度下降的关系,所以仅仅本文仅仅平方损失函数为例,其他损失函数大家连接中的内容即可。

梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以), 梯度下降 法大家可以参考 https://www.jianshu.com/p/c7e642877b0e 本文不在细说

梯度下降和损失函数的关系是:梯度下降是求解损失函数的一种最优化算法

下面开始论述两者关系,以最小二乘法也叫平方损失为例:

假设目标函数定义为:

使用平方损失函数损失函数的形式如下:

我们的目的是求解损失函数的最小值:

                                               MIN

求解一个函数的最小值就要求解一个函数的极小值,极小值为梯度为0的点,如果我们知道函数方程的所有,那么此方程就很好解了,但是在机器学习中,所知道只有训练集合中的值(X,Y),并不知道值,所以求解方法最小值问题转化为求解问题,这时需要引入梯度下降法:

梯度下降求解的表达式为:其中a为学习率表达式如下:

展开后:

                                 

如果利用梯度下降法计算,那么这个方程中已知的只有(X,Y),其他都不知道,那么如何求解,解法为:

给所有的赋予一个随机初始值,然后不断根据训练数据,迭代获得最终的值,这样的话所有的参数都是已知,利用梯度下降就可以求解所有参数

Repeat until convergence 收敛的条件可以是设置固定的训练轮数,比如1000轮,或者是当梯度接近0的值,比如梯度已经达到0.00001等

 

 

                                            

                                    

 

 

很遗憾,参考引用中未提及损失函数梯度下降的相关图像内容。不过,通常损失函数梯度下降的图像有以下几种常见类型: ### 二维损失函数图像 当损失函数只有一个参数时,可以绘制二维图像。横轴表示参数的值,纵轴表示损失函数的值。梯度下降的过程就像是一个小球从损失函数曲线的某一点开始,沿着曲线向下滚动,最终到达谷底(极小值点)。以下是一个简单的 Python 代码示例来绘制一个简单的二次损失函数梯度下降过程: ```python import numpy as np import matplotlib.pyplot as plt # 定义损失函数 def loss_function(x): return x**2 # 定义梯度 def gradient(x): return 2 * x # 初始化参数 x = 3 learning_rate = 0.1 iterations = 20 # 存储每一步的参数损失值 x_values = [x] loss_values = [loss_function(x)] # 梯度下降过程 for _ in range(iterations): grad = gradient(x) x = x - learning_rate * grad x_values.append(x) loss_values.append(loss_function(x)) # 绘制损失函数曲线 x_range = np.linspace(-4, 4, 100) y_range = loss_function(x_range) plt.plot(x_range, y_range, label='Loss Function') # 绘制梯度下降路径 plt.scatter(x_values, loss_values, c='r', label='Gradient Descent Path') plt.xlabel('Parameter') plt.ylabel('Loss') plt.title('Gradient Descent on a Simple Loss Function') plt.legend() plt.show() ``` ### 三维损失函数图像 当损失函数有两个参数时,需要用三维图像来展示。此时,两个参数分别作为两个坐标轴,损失函数的值作为第三个坐标轴。梯度下降的过程就像是在一个三维的山谷中寻找最低点。以下是一个简单的 Python 代码示例来绘制一个简单的二维损失函数梯度下降过程: ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 定义二维损失函数 def loss_function(x, y): return x**2 + y**2 # 定义梯度 def gradient(x, y): dx = 2 * x dy = 2 * y return dx, dy # 初始化参数 x = 3 y = 3 learning_rate = 0.1 iterations = 20 # 存储每一步的参数损失值 x_values = [x] y_values = [y] loss_values = [loss_function(x, y)] # 梯度下降过程 for _ in range(iterations): dx, dy = gradient(x, y) x = x - learning_rate * dx y = y - learning_rate * dy x_values.append(x) y_values.append(y) loss_values.append(loss_function(x, y)) # 绘制损失函数曲面 x_range = np.linspace(-4, 4, 100) y_range = np.linspace(-4, 4, 100) X, Y = np.meshgrid(x_range, y_range) Z = loss_function(X, Y) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z, cmap='viridis', alpha=0.8) # 绘制梯度下降路径 ax.scatter(x_values, y_values, loss_values, c='r', label='Gradient Descent Path') ax.set_xlabel('Parameter 1') ax.set_ylabel('Parameter 2') ax.set_zlabel('Loss') ax.set_title('Gradient Descent on a 2D Loss Function') plt.legend() plt.show() ``` ### 损失值随迭代次数变化的图像 这种图像更为常见,横轴表示迭代次数,纵轴表示损失函数的值。在梯度下降过程中,随着迭代次数的增加,损失值会逐渐下降,直到趋于稳定。以下是一个简单的 Python 代码示例: ```python import numpy as np import matplotlib.pyplot as plt # 模拟损失值随迭代次数的变化 iterations = 100 loss_values = np.random.rand(iterations) for i in range(1, iterations): loss_values[i] = loss_values[i - 1] * 0.9 + np.random.rand() * 0.1 # 绘制损失值随迭代次数变化的图像 plt.plot(range(iterations), loss_values) plt.xlabel('Iterations') plt.ylabel('Loss') plt.title('Loss Value vs Iterations') plt.show() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值