梯度下降

大白话5分钟带你走进人工智能-第38节神经网络之TensorFlow利用梯度下降法求解最优解(6)

佐手、 提交于 2020-05-09 15:37:40
先看一个传统方法手动实现线性回归和MSE损失函数的方案: import tensorflow as tf import numpy as np from sklearn.datasets import fetch_california_housing from sklearn.preprocessing import StandardScaler #多元线性回归是一个凸函数 ,所以能找到全局最优解 #神经网络只有局部最优解 n_epochs = 1000#把样本集数据学习1000次 learning_rate = 0.01 #步长 学习率 不能太大 太大容易来回震荡 太小 耗时间,跳不出局部最优解 #可以写learn_rate动态变化,随着迭代次数越来越大 ,学习率越来越小 learning_rate/n_epoches housing = fetch_california_housing() m, n = housing.data.shape housing_data_plus_bias = np.c_[np.ones((m, 1)), housing.data] # 可以使用TensorFlow或者Numpy或者sklearn的StandardScaler去进行归一化 #归一化可以最快的找到最优解 #常用的归一化方式: # 最大最小值归一化 (x-min)/(max-min)

[笔记-统计学习方法]感知机模型(perceptron) 原理与实现

一曲冷凌霜 提交于 2020-05-08 09:12:09
前几天认把感知机这一章读完了,顺带做了点笔记 现在把笔记做第三次的整理 (不得不说博客园的LaTex公式和markdown排版真的不太舒服,该考虑在服务器上建一个博客了) 零、总结 适用于具有 线性可分的数据集的二分类问题 ,可以说是很局限了 感知机本质上是一个分离超平面 在向量维数(特征数)过高时,选择对偶形式算法 在向量个数(样本数)过多时,应选择原始算法 批量梯度下降和随机梯度下降的区别和优势 参考链接: 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比 批量梯度下降(BGD, Batch Gradient Descent) $ \theta \leftarrow \theta + \eta \sum \frac{\partial L}{\partial \theta}$ 即多次做全局样本的参数更新 缺点:计算耗时 优点:可以趋向全局最优,受数据噪音影响少 随机梯度下降(SGD, Srochastic Gradient Descent) $ \theta \leftarrow \theta + \eta \frac{\partial L}{\partial \theta}$ 即多次做单个样本的参数更新 缺点:训练耗时较短 优点:不一定趋向全局最优(往往是最优/较优

原始对偶角度下的几类优化方法

牧云@^-^@ 提交于 2020-05-08 08:11:50
这篇文章介绍三个方法在原始角度和对偶角度下的形式,分别为:梯度方法(gradient descent method),临近点方法(proximal point method)以及临近梯度方法(proximal gradient method),感受下对偶的魅力。主要参考的是wotao yin的slide,有兴趣的可以看他的主页 https://www.math.ucla.edu/~wotaoyin/index.html ​ www.math.ucla.edu 一、共轭函数(conjugate function) 定义1(共轭函数): 接下来我们分析下共轭函数的一些性质,这将会在对偶方法中的推导起到关键的作用。因为对偶问题中目标函数就是原问题目标函数的共轭形式。所以我们要研究一下共轭函数的次梯度,以及什么情况下光滑。 在得到共轭函数次梯度前,我们需要下面这个定理: 定理1(conjugate subgradient theorem) :令函数 等价 proof. (为了完整性,我给出证明,不想看的可以跳过,记住结论就行。) ( ) 由次梯度的定义, 就等价于 整理一下得到: 上式是对任意 都要满足,我们只要对右边关于 求最大即可,于是上式等价于: 等式一边成立。对于另一边 (这个叫Fenchel's inequality) ( ) 因为 是proper and convex

TensorFlow(十一):递归神经网络(RNN与LSTM)

谁说我不能喝 提交于 2020-05-06 02:08:54
RNN RNN(Recurrent Neural Networks,循环神经网络)不仅会学习当前时刻的信息,也会依赖之前的序列信息。由于其特殊的网络模型结构解决了信息保存的问题。所以RNN对处理时间序列和语言文本序列问题有独特的优势。递归神经网络都具有一连串重复神经网络模块的形式。在标准的RNNs中,这种重复模块有一种非常简单的结构。 那么 S(t+1) = tanh( U*X(t+1) + W*S(t)) 。tanh激活函数图像如下: 激活函数tanh把状态S值映射到-1和1之间. RNN通过BPTT算法反向传播误差,它与BP相似,只不过与时间有关。RNN同样通过随机梯度下降(Stochastic gradient descent)算法使得代价函数(损失函数)值达到最小。 BBPT算法规则如下: 但是随着时间间隔不断增大时,RNN会丧失学习到连接很远的信息能力(梯度消失)。原因如下: RNN的激活函数tanh可以将所有值映射到-1至1之间,以及在利用梯度下降算法调优时利用链式法则,那么会造成很多个小于1的项连乘就很快的逼近零。 依赖于我们的激活函数和网络参数,也可能会产生梯度爆炸(如激活函数是Relu,而LSTM采用的激活函数是sigmoid和tanh,从而避免了梯度爆炸的情况)。一般靠裁剪后的优化算法即可解决,比如gradient clipping(如果梯度的范数大于某个给定值

Lasso回归算法: 坐标轴下降法与最小角回归法小结

假如想象 提交于 2020-05-05 19:29:42
    前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结 。里面对线程回归的正则化也做了一个初步的介绍。提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归。但是对于Lasso回归的解法没有提及,本文是对该文的补充和扩展。以下都用矩阵法表示,如果对于矩阵分析不熟悉,推荐学习张贤达的《矩阵分析与应用》。 1. 回顾线性回归      首先我们简要回归下线性回归的一般形式:     \(h_\mathbf{\theta}(\mathbf{X}) = \mathbf{X\theta}\)     需要极小化的损失函数是:     \(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y})\)     如果用梯度下降法求解,则每一轮\(\theta\)迭代的表达式是:     \(\mathbf\theta= \mathbf\theta - \alpha\mathbf{X}^T(\mathbf{X\theta} - \mathbf{Y})\)     其中\(\alpha\)为步长。     如果用最小二乘法,则\(\theta\)的结果是:     \( \mathbf{\theta} = (\mathbf{X

Lasso回归算法: 坐标轴下降法与最小角回归法小结

老子叫甜甜 提交于 2020-05-05 18:38:25
前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结 。里面对线程回归的正则化也做了一个初步的介绍。提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归。但是对于Lasso回归的解法没有提及,本文是对该文的补充和扩展。以下都用矩阵法表示,如果对于矩阵分析不熟悉,推荐学习张贤达的《矩阵分析与应用》。 1. 回顾线性回归      首先我们简要回归下线性回归的一般形式:      h θ ( X ) = X θ hθ(X)=Xθ     需要极小化的损失函数是:      J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(θ)=12(Xθ−Y)T(Xθ−Y)     如果用梯度下降法求解,则每一轮 θ θ迭代的表达式是:      θ = θ − α X T ( X θ − Y ) θ=θ−αXT(Xθ−Y)     其中 α α为步长。     如果用最小二乘法,则 θ θ的结果是:      θ = ( X T X ) − 1 X T Y θ=(XTX)−1XTY 2. 回顾Ridge回归     由于直接套用线性回归可能产生过拟合,我们需要加入正则化项,如果加入的是L2正则化项,就是Ridge回归,有时也翻译为脊回归。它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项

Lasso回归算法: 坐标轴下降法与最小角回归法小结

若如初见. 提交于 2020-05-05 17:47:15
    前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结 。里面对线程回归的正则化也做了一个初步的介绍。提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归。但是对于Lasso回归的解法没有提及,本文是对该文的补充和扩展。以下都用矩阵法表示,如果对于矩阵分析不熟悉,推荐学习张贤达的《矩阵分析与应用》。 1. 回顾线性回归      首先我们简要回归下线性回归的一般形式:     \(h_\mathbf{\theta}(\mathbf{X}) = \mathbf{X\theta}\)     需要极小化的损失函数是:     \(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y})\)     如果用梯度下降法求解,则每一轮\(\theta\)迭代的表达式是:     \(\mathbf\theta= \mathbf\theta - \alpha\mathbf{X}^T(\mathbf{X\theta} - \mathbf{Y})\)     其中\(\alpha\)为步长。     如果用最小二乘法,则\(\theta\)的结果是:     \( \mathbf{\theta} = (\mathbf{X

梯度下降算法(Gradient descent)GD

巧了我就是萌 提交于 2020-05-05 00:27:23
1.我们之前已经定义了代价函数J,可以将代价函数J最小化的方法,梯度下降是最常用的算法,它不仅仅用在线性回归上,还被应用在机器学习的众多领域中,在后续的课程中,我们将使用梯度下降算法最小化其他函数,而不仅仅是最小化线性回归的代价函数J。本节课中,主要讲用梯度下降的算法来最小化任意的函数J,下图是我们的问题:      (1)梯度下降的思路:     给定θ0和θ1的初始值,首先将θ0和θ1初始化为0,在梯度下降中我们要做的是不停的改变θ0和θ1,来使得J(θ0,θ1)变小,直到我们找到J的值的最小值或者局部最小值。     我们从θ0和θ1的某个值出发,对θ0和θ1赋以初值,就是对应于从下面这个函数的表面上某个点出发,一般情况下降θ0和θ1赋初值为0。        (2)梯度下降算法:        我们要更新参数θj,为θj减去 α乘以这一部分,接下来详细解释该公式:     (1)赋值:符号 := 表示赋值,这是一个赋值运算符。具体的说,如果写成a:=b,在计算机中,表示不管a的原始值是是什么,将b赋值给a,这意味着我们设定a等于b的值,这就是赋值。     (2) α: α表示学习率,用来控制在梯度下降的时候,我们迈出多大的步子, α 如果很大,那么梯度就下降的很迅速,我们就会用大步子下山;如果 α值比较小,我们就会迈着很小的碎步下山     (3)θ0和θ1的更新,对于:

梯度下降(Gradient Descent)小结

江枫思渺然 提交于 2020-05-04 13:30:44
    在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。这里就对梯度下降法做一个完整的总结。 1. 梯度     在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y) T ,简称grad f(x,y)或者▽f(x,y)。对于在点(x 0 ,y 0 )的具体梯度向量就是(∂f/∂x 0 , ∂f/∂y 0 ) T .或者▽f(x 0 ,y 0 ),如果是3个参数的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z) T ,以此类推。     那么这个梯度向量求出来有什么意义呢?他的意义从几何意义上讲,就是函数变化增加最快的地方。具体来说,对于函数f(x,y),在点(x 0 ,y 0 ),沿着梯度向量的方向就是(∂f/∂x 0 , ∂f/∂y 0 ) T 的方向是f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 -(∂f/∂x 0 , ∂f/∂y 0 ) T 的方向,梯度减少最快,也就是更加容易找到函数的最小值。      2. 梯度下降与梯度上升     在机器学习算法中

深度解析Graph Embedding

℡╲_俬逩灬. 提交于 2020-05-04 11:14:31
Graph Embedding是推荐系统、计算广告领域最近非常流行的做法,是从word2vec等一路发展而来的Embedding技术的最新延伸;并且已经有很多大厂将Graph Embedding应用于实践后取得了非常不错的线上效果。 word2vec和由其衍生出的item2vec是embedding技术的基础性方法,但二者都是建立在“序列”样本(比如句子、推荐列表)的基础上的。而在互联网场景下,数据对象之间更多呈现的是图结构。典型的场景是由用户行为数据生成的 物品全局关系图 ,以及加入更多属性的物品组成的 知识图谱 。 在面对图结构的时候,传统的序列embedding方法就显得力不从心了。在这样的背景下,对图结构中间的节点进行表达的graph embedding成为了新的研究方向,并逐渐在深度学习推荐系统领域流行起来。 DeepWalk 早期影响力较大的graph embedding方法是2014年提出的DeepWalk,它的主要思想是在由物品组成的图结构上进行随机游走,产生大量物品序列,然后将这些物品序列作为训练样本输入word2vec进行训练,最大化随机游走序列的似然概率,并使用最终随机梯度下降学习参数,得到物品的embedding。其目标函数为: $$ \zeta(s)=\frac{1}{|s|} \sum_{i=1}^{|s|} \sum_{i-t \leq j \leq