机器学习之梯度下降法

简介: 方向导数如图,对于函数f(x,y),函数的增量与pp’两点距离之比在p’沿l趋于p时,则为函数在点p沿l方向的方向导数。

方向导数

如图,对于函数f(x,y),函数的增量与pp’两点距离之比在p’沿l趋于p时,则为函数在点p沿l方向的方向导数。记为 fl=limρ0f(x+Δx,y+Δy)f(x,y)ρ ,其中 ρ=(Δx)2+(Δy)2 。方向导数为函数f沿某方向的变化速率。

这里写图片描述

而且有如下定理:
fl=fxcosΘ+fysinΘ

梯度

梯度是一个向量,它的方向与取得最大方向导数的方向一致,梯度的模为方向导数的最大值。某点的梯度记为
gradf(x,y)=fxi+fyj

梯度的方向就是函数f在此点增长最快的方向,梯度的模为方向导数的最大值。

梯度下降

同样还是在线性回归中,假设函数为
h(x)=θ0+θ1x
那么损失函数为
J(θ)=12ni=1(h(xi)yi)2
要求最小损失,分别对 θ0θ1 求偏导,
J(θ)θj=θj12ni=1(h(xi)yi)2
=ni=1(h(xi)yi)θj(nj=0(θjxj)iyi)
=ni=1(h(xi)yi)xij
那么不断通过下面方式更新 θ 即可以逼近最低点。
θj:=θjαni=1(h(xi)yi)xij

其中 α 为learning rate,表现为下降的步伐。它不能太大也不能太小,太大会overshoot,太小则下降慢。通常可以尝试0.001、0.003、0.01、0.03、0.1、0.3。

这就好比站在一座山的某个位置上,往周围各个方向跨出相同步幅的一步,能够最快下降的方向就是梯度。这个方向是梯度的反方向。
这里写图片描述

这里写图片描述

这里写图片描述

另外,初始点的不同可能会出现局部最优解的情况,如下图:
这里写图片描述

伪代码

repeat until convergence{

θj:=θjαni=1(h(xi)yi)xij

for every j

}

随机梯度下降

样本太大时,每次更新都需要遍历整个样本,效率较低,这是就引入了随机梯度下降。

它可以每次只用一个样本来更新,免去了遍历整个样本。

伪代码如下

repeat until convergence{

i=random(1,n)

θj:=θjα(h(xi)yi)xij

for every j

}

另外与随机梯度下降类似的还有小批量梯度下降,它是折中的方式,取了所有样本中的一小部分。

代码实现

import numpy as np
import matplotlib.pyplot as plt

learning_rate = 0.0005
theta = [0.7, 0.8, 0.9]
loss = 100
times = 100
ite = 0
expectation = 0.0001
x_train = [[1, 2], [2, 1], [2, 3], [3, 5], [1, 3], [4, 2], [7, 3], [4, 5], [11, 3], [8, 7]]
y_train = [7, 8, 10, 14, 8, 13, 20, 16, 28, 26]
loss_array = np.zeros(times)


def h(x):
    return theta[0]*x[0]+theta[1]*x[1]+theta[2]

while loss > expectation and ite < times:
    loss = 0
    sum_theta0 = 0
    sum_theta1 = 0
    sum_theta2 = 0
    for x, y in zip(x_train, y_train):
        sum_theta0 += (h(x) - y) * x[0]
        sum_theta1 += (h(x) - y) * x[1]
        sum_theta2 += (h(x) - y)
    theta[0] -= learning_rate * sum_theta0
    theta[1] -= learning_rate * sum_theta1
    theta[2] -= learning_rate * sum_theta2

    loss = 0
    for x, y in zip(x_train, y_train):
        loss += pow((h(x) - y), 2)
    loss_array[ite] = loss
    ite += 1

plt.plot(loss_array)

plt.show()

这里写图片描述

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

欢迎关注:
这里写图片描述

目录
相关文章
|
机器学习/深度学习 人工智能 自然语言处理
梯度下降求极值,机器学习&深度学习
梯度下降求极值,机器学习&深度学习
|
机器学习/深度学习 算法 TensorFlow
【Python机器学习】梯度下降法的讲解和求解方程、线性回归实战(Tensorflow、MindSpore平台 附源码)
【Python机器学习】梯度下降法的讲解和求解方程、线性回归实战(Tensorflow、MindSpore平台 附源码)
340 0
|
机器学习/深度学习 存储 算法
机器学习面试笔试知识点-决策树、随机森林、梯度提升决策树(GBDT)、XGBoost、LightGBM、CatBoost
机器学习面试笔试知识点-决策树、随机森林、梯度提升决策树(GBDT)、XGBoost、LightGBM、CatBoost
1131 0
|
机器学习/深度学习 算法
【机器学习】揭秘GBDT:梯度提升决策树
【机器学习】揭秘GBDT:梯度提升决策树
|
机器学习/深度学习
【机器学习】面试题:LSTM长短期记忆网络的理解?LSTM是怎么解决梯度消失的问题的?还有哪些其它的解决梯度消失或梯度爆炸的方法?
长短时记忆网络(LSTM)的基本概念、解决梯度消失问题的机制,以及介绍了包括梯度裁剪、改变激活函数、残差结构和Batch Normalization在内的其他方法来解决梯度消失或梯度爆炸问题。
647 2
|
机器学习/深度学习 算法 数据挖掘
|
机器学习/深度学习 数据采集 分布式计算
【机器学习】XGBoost: 强化学习与梯度提升的杰作
在机器学习的广阔领域中,集成学习方法因其卓越的预测性能和泛化能力而备受瞩目。其中,XGBoost(Extreme Gradient Boosting)作为梯度提升决策树算法的杰出代表,自其诞生以来,便迅速成为数据科学竞赛和工业界应用中的明星算法。本文旨在深入浅出地介绍XGBoost的核心原理、技术优势、实践应用,并探讨其在模型调优与解释性方面的考量,为读者提供一个全面且深入的理解框架。
586 2
|
机器学习/深度学习 算法
【机器学习】梯度消失和梯度爆炸的原因分析、表现及解决方案
本文分析了深度神经网络中梯度消失和梯度爆炸的原因、表现形式及解决方案,包括梯度不稳定的根本原因以及如何通过网络结构设计、激活函数选择和权重初始化等方法来解决这些问题。
2238 0
|
机器学习/深度学习 数据可视化 算法
R语言梯度提升机 GBM、支持向量机SVM、正则判别分析RDA模型训练、参数调优化和性能比较可视化分析声纳数据
R语言梯度提升机 GBM、支持向量机SVM、正则判别分析RDA模型训练、参数调优化和性能比较可视化分析声纳数据
|
机器学习/深度学习 算法 网络架构
**深度学习中的梯度消失与爆炸影响模型训练。梯度消失导致输入层参数更新缓慢,梯度爆炸使训练不稳。
【6月更文挑战第28天】**深度学习中的梯度消失与爆炸影响模型训练。梯度消失导致输入层参数更新缓慢,梯度爆炸使训练不稳。解决办法包括:换激活函数(如ReLU)、权重初始化、残差连接、批量归一化(BN)来对抗消失;梯度裁剪、权重约束、RMSProp或Adam优化器来防止爆炸。这些策略提升网络学习能力和收敛性。**
190 0

热门文章

最新文章

下一篇
oss教程