梯度

梯度下降法 python实现

蓝咒 提交于 2020-04-08 10:59:05
import numpy as np from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScalerclass LinearRegression: def __init__(self): self.coeff_ = None self.interception_ = None self._theta = None def fit_gd(self, x_train, y_train,eta=0.01,n_iters=1e4): assert x_train.shape[0] == y_train.shape[0],'特征维度应当相等' def J(theta, X_b, y): try: return np.sum(y - X_b.dot(theta)) / len(y) except: return float('inf') def dJ(theta, X_b, y): return 2 * (X_b.dot(theta) - y).dot(X_b) / len(y) def gradient_descent(X_b, y, initial_theta, eta, n_iters=1e4

matlab实现梯度下降法(Gradient Descent)的一个例子

大兔子大兔子 提交于 2020-04-06 11:00:43
  在此记录使用matlab作梯度下降法(GD)求函数极值的一个例子:    问题设定:   1. 我们有一个$n$个数据点,每个数据点是一个$d$维的向量,向量组成一个data矩阵$\mathbf{X}\in \mathbb{R}^{n\times d}$,这是我们的输入特征矩阵。   2. 我们有一个响应的响应向量$\mathbf{y}\in \mathbb{R}^n$。   3. 我们将使用线性模型来fit上述数据。因此我们将优化问题形式化成如下形式:$$\arg\min_{\mathbf{w}}f(\mathbf{w})=\frac{1}{n}\|\mathbf{y}-\mathbf{\overline{X}}\mathbf{w}\|_2^2$$   其中$\mathbf{\overline{X}}=(\mathbf{1,X})\in \mathbb{R}^{n\times (d+1)}$ and $\mathbf{w}=(w_0,w_1,...,w_d)^\top\in \mathbb{R}^{d+1}$   显然这是一个回归问题,我们的目标从通俗意义上讲就是寻找合适的权重向量$\mathbf{w}$,使得线性模型能够拟合的更好。    预 处理:   1. 按列对数据矩阵进行最大最小归一化,该操作能够加快梯度下降的速度,同时保证了输入的数值都在0和1之间。$

logistics模型的训练

柔情痞子 提交于 2020-03-29 18:47:13
逻辑斯蒂回归 $P(Y=1|x)=\frac{exp(w*x)}{1+exp(w*x)}$ 具体的推导可以看《统计学习基础》这本书。 一、逻辑斯蒂回归有什么特点 1、逻辑斯蒂回归实际上是对简单的线性加权回归的一种非线性化,在线性组合$w*x$的上面加了一个sigmod函数,从而转化到非线性问题 2、这里的的转化的一个好处是,所有的数据都映射到了0和1之间,这对于应对奇异点的影响具有非常大的作用。 二、模型的参数估计使用最大似然估计。 这里的具体的似然函数咱么写,参考教材。 最后可以得到 $L(w)=\sum_{i=1}^{N}[y_{i}(w*x_{i})-log(1+exp(w*x_{i}))]$ 三、模型的训练问题 关键是模型的训练,有了上面的似然函数,模型训练的目的是要找到一组参数w使上面的似然函数最小。 1、随机梯度下降法 随机选取样本计算相应的梯度,并且使用一定的步长,对w进行更新,因为是一个凸规划问题,所以一定可以找到最优解,沿着梯度变化。 2、改进的随机梯度下降法 步长如果一直保持不变,那么容易引起在最优价附件的波动。改进的方式,是使用动态自适应的步长,步长随着迭代次数的增加不断的减小,但是不能减小到0,所以在上面添加一个常数因子。 四、应用 许多大公司实际上在处理上亿的大规模数据的时候用的比较多的算法实际上就是逻辑斯蒂回归,原因是简单可依赖。实际当中的实时性问题

机器学习--梯度下降

落爺英雄遲暮 提交于 2020-03-29 12:36:41
梯度下降 在梯度下降这一节中我们主要介绍了两个概念(参数):学习速率和终止条件 学习速率 一般来讲,学习速率不能太大,也不能太小 太大可能导致下降过程中来回震荡,无法准确找到几值点(最大值或最小值) 如果太小可能会导致: 梯度下降在某一个值的区段中无法跳出 迭代的次数过多而导致学习时间变长 那么到底什么值才是最正确的学习速率呢?这个一般是根据经验来选取的,比如从…0.0001,0.001,.0.01,0.1,1.0…这些参数中选,看那个参数使得损失值和迭代次数之间的函数曲线下降速度最快 终止条件 设置正确的终止条件也是机器学习的重要部分,一般情况下我们会综合恶来选择,例如: 指定学习次数(上限:1000次等) 相连两次梯度下降值的差值的上下限 使用梯度下降更新参数的计算 使用梯度下降更新参数的主要方法如下(推理过程略): 参数更新时一定要注意同步更新,不然会产生参数的值不正确的问题 线性回归的梯度下降 经过以上整个推理过程,我们可以分析出一个线性回归问题的最优化值的求解过程了 对cost function求解权重向量(二次函数情况下使用偏导即可) 非二次函数的的情况也是比较多见,所以我们要使用梯度下降的方法求解全局极值 根据以上函数的关系,我们可以得到计算线性回归的梯度下降表达式如下: 有了以上的理论基础之后,我们就可以在对应的参数调整情况下得到cost

机器学习/梯度下降算法

扶醉桌前 提交于 2020-03-29 12:34:31
当在现实生活中的遇到问题时,我们总是希望找到最佳的解决方案。制造软件产品也是一样的道理,最优化的程序才是最理想的产品。 最优化意味着获得最佳输出。它既是一个数学的重要分支,也在现实生活中有着重要的作用。现代的计算机科学和人工智能科学把最优化作为一个重要的领域来研究。我们也认为人工智能的一些算法,就是模拟了人类寻求实际问题最优解的过程。例如,利用人工智能算法设计软件,配合外部的电子设备例如摄像头识别人脸;利用数据挖掘和神经网络算法来寻找投资的最佳时机等等,都是利用了最优化的原理。 机器学习中的最优化和其他学科的应用比起来有轻微的差异。一般来说,在优化的同时,我们确切地知道数据的外观以及我们想要改进的地方。 但是在机器学习中,我们不知道“新数据”是怎么样的,更别提对其进行优化了。为了解决这个问题,在机器学习中,我们对训练数据(training data)执行优化,并检查由此新创造出的验证数据(validation data)。 最优化的广泛应用 机械学:设计航空航天产品的表面; 经济学:成本最小化; 物理学:量子计算中的优化时间; 决定最佳运输路线,货架空间优化等等。 许多流行的机器算法都依赖于线性回归,k最近邻,神经网络等技术。优化的应用是无限的,因此它成为了学术界和工业界广泛研究的课题。在本文中,我们将介绍一种称为梯度下降(Gradient Descent)的优化技术。

TernGrad: Ternary Gradients to Reduce Communication in Distributed Deep Learning

放肆的年华 提交于 2020-03-24 16:53:31
在深度神经网络的分布式训练中,梯度和参数同步时的网络开销是一个瓶颈。本文提出了一个名为TernGrad的方法,通过将梯度三元化到{-1, 0, 1}上来减少通信量。此外,本文还使用逐层三元化和梯度裁剪技术加速算法的收敛。当把TernGrad应用到AlexNet和GoogLeNet中,测试精度的损失很小。实验表明,TernGrad在不同的深度神经网络模型上拥有显著的加速比。 本文的主要贡献如下: 将梯度三元化以降低通信量 通过数学方法证明使用TernGrad后,算法会收敛 提出逐层三元化和梯度裁剪技术,将梯度的上界逼近标准SGD的上界 建立性能模型评估TernGrad等梯度压缩方法的加速比 1. Problem Formulation and TernGrad 在介绍TernGrad之前,先来回顾一下传统的数据并行SGD。在数据并行SGD的每次迭代 \(t\) 中,训练数据会被分成N份以供N个工作节点进行训练。工作节点i根据输入样本 \(z_t^{(i)}\) 计算参数的梯度 \(\boldsymbol{g}_t^{(i)}\) ,之后,工作节点将梯度发送给参数服务器。参数服务器接收到所有工作节点的梯度后,对梯度进行聚合,然后把 参数 返回给工作节点。与传统的数据并行SGD不同的是,TernGrad使用了参数本地化(parameter localization)技术。也就是说

Deep learning:一(基础知识_1)

别说谁变了你拦得住时间么 提交于 2020-03-21 16:44:19
  不多说,直接上干货! 前言:   最近打算稍微系统的学习下deep learing的一些理论知识,打算采用Andrew Ng的网页教程 UFLDL Tutorial ,据说这个教程写得浅显易懂,也不太长。不过在这这之前还是复习下machine learning的基础知识,见网页: http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=DeepLearning 。内容其实很短,每小节就那么几分钟,且讲得非常棒。 教程中的一些术语:     Model representation: 其实就是指学习到的函数的表达形式,可以用矩阵表示。     Vectorized implementation: 指定是函数表达式的矢量实现。     Feature scaling: 指是将特征的每一维都进行一个尺度变化,比如说都让其均值为0等。    Normal equations: 这里指的是多元线性回归中参数解的矩阵形式,这个解方程称为normal equations.     Optimization objective: 指的是需要优化的目标函数,比如说logistic中loss function表达式的公式推导。或者多元线性回归中带有规则性的目标函数。    Gradient Descent、Newton

机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)

旧街凉风 提交于 2020-03-18 09:32:12
本文介绍了机器学习中基本的优化算法—梯度下降算法和随机梯度下降算法,以及实际应用到线性回归、Logistic回归、矩阵分解推荐算法等ML中。 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有样本的特征向量组成的矩阵 x ( i ) 是第i个样本包含的所有特征组成的向量 x ( i ) = ( x ( i ) 1 , x ( i ) 2 . . . , x ( i ) n ) y ( i ) 第i个样本的label,每个样本只有一个label, y ( i ) 是标量(一个数值) h θ ( x ( i ) ) :拟合函数,机器学习中可以用多种类型的拟合函数 θ 是函数变量,是多个变量的向量 θ = [ θ 1 , θ 2 , . . . ] | h θ ( x i ) − y ( i ) | :拟合绝对误差 求解的目标是使得所有样本点( m 个)平均误差最小,即: 或者平方误差最小,即: arg min 表示使目标函数取最小值时的变量值(即 θ )值。 都被称为损失函数(Cost Function) J ( θ ) 不只是上面两种形式,不同的机器学习算法可以定义各种其它形式。 梯度下降迭代公式 为了求解 θ = [ θ 1 , θ 2 , . . . ] 的值,可以先对其赋一组初值,然后改变 θ 的值,使得 J ( θ ) 最小。函数 J ( θ )

商品的价格梯度

眉间皱痕 提交于 2020-03-17 18:32:59
商品的价格定位: (1)尽量覆盖多的人群:同类商品设置多个品种,尽量覆盖更多的人群,让各个阶层的人都能够买的起 (2)功能底线:底层的比较功能,中层比较实用兼顾美观,高层只管美观(因为功能肯定是没有问题的)。 (3)价格诱惑:为了发现潜在的购买用户,需要尽力将用户的购买区间往上提升,这样提高收入。 如果界定各个阶层之间的差距导致的心理落差: (1)让不同的人处于不同的阶层,没有交互或者减少交互 (2)让不同阶层行走在不同的平行线上, 就像公交车道一样 。 对于游戏中的消费结构: 非R:非R体验利益收获 中小R:中小R体验成长收获 大R:大R体验荣耀收获 来源: https://www.cnblogs.com/bornfish/p/4337507.html

学习pytorch的小记录

ぐ巨炮叔叔 提交于 2020-03-17 09:47:56
学习pytorch的小记录 原教程地址 1.PyTorch神经网络简介 1.1 计算梯度 1.2 这一部分的可运行代码贴在下面 2.训练一个分类器 2.1 如何进行数据处理 2.2 训练的步骤 2.3 数据处理 目前暂时后面的还没看完~ 原教程地址 PyTorch简明教程 1.PyTorch神经网络简介 1.1 计算梯度 那里是有一点不太明白的记录一下。 在调用loss.backward()之前,我们需要清除掉tensor里之前的梯度,否则会累加进去。 net . zero_grad ( ) # 清掉tensor里缓存的梯度值。 print ( 'conv1.bias.grad before backward' ) print ( net . conv1 . bias . grad ) loss . backward ( ) print ( 'conv1.bias.grad after backward' ) print ( net . conv1 . bias . grad ) 这一段的 loss . backward ( ) 这个语句的功能在学习的时候是不太明白的,以后懂了再来填坑 1.2 这一部分的可运行代码贴在下面 from __future__ import print_function import torch import torch . nn as nn