梯度

线性模型、最优化方法(二)

戏子无情 提交于 2020-01-27 07:33:44
一、线性回归 一般的,线性回归模型表示为 \[ h_{\theta}(x)=\theta_0+\theta_1x_1+...+\theta_nx_n=\sum_{i=0}^{n}\theta_ix_i=\theta^Tx \] 上式中令 \(x_0=1\) ,这样 \(x\) 实际上是 \(n+1\) 维, \(x=[1,x_1,x_2,…,x_n]^T\) .当我们知道训练数据集后怎样得到参数 \(\theta\) 的值呢?一个比较合理的想法是尽可能的让 \(h_{\theta}(x)\) 接近真实值 \(y\) ,下面我们来定义一个函数来度量 \(h_{\theta}\) 与 \(y\) 的距离: \[ J(\theta)=\frac{1}{2}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})^2 \] 其中 \(m\) 表示训练集中样本个数, \(x^{(i)}\) 和 \(y^{(i)}\) 分别表示第 \(i\) 个样例的特征值和真实结果。我们希望找到一个 \(\theta\) 使的 \(J(\theta)\) 最小。下面分别采用梯度下降算法和最小二乘法来求解 \(\theta\) 。 二、梯度下降算法 我们希望能找到 \(\theta\) 使得 \(J(\theta)\) 达到最小,于是我们可以使一个搜素算法,初始化 \(\theta\

tensorflow 2.0 深度学习(第四部分 循环神经网络)

落爺英雄遲暮 提交于 2020-01-26 19:46:23
基础知识 梯度传播相关原理 梯度传播原理 梯度弥散、梯度爆炸 >>> import tensorflow as tf >>> W = tf.ones([2,2]) # 任意创建某矩阵 >>> W <tf.Tensor: id=2, shape=(2, 2), dtype=float32, numpy= array([[1., 1.], [1., 1.]], dtype=float32)> >>> tf.linalg.eigh(W) (<tf.Tensor: id=3, shape=(2,), dtype=float32, numpy=array([0., 2.], dtype=float32)>, <tf.Tensor: id=4, shape=(2, 2), dtype=float32, numpy= array([[-0.70710677, 0.70710677], [ 0.70710677, 0.70710677]], dtype=float32)>) >>> tf.linalg.eigh(W)[0] # 计算特征值:此时的W矩阵的最大特征值为2,那么下面演示的是最大特征值大于1时的矩阵相乘 <tf.Tensor: id=5, shape=(2,), dtype=float32, numpy=array([0., 2.], dtype=float32)> >>> tf

深度学习之循环神经网络(RNN)

岁酱吖の 提交于 2020-01-26 13:39:29
文章目录 什么是循环神经网络 RNN的应用 RNN网络结构 RNN的反向求导 Vanilla-RNN Vanilla-RNN存在的问题 RNN动态图 梯度消失 梯度消失带来的影响 梯度爆炸 梯度消失带来的影响 RNN的反向传播 Bidirectional RNN(双向的RNN) Deep(Bidirectional) RNN(深度的双向RNN) LSTM(长短时记忆) LSTM关键:“细胞状态” 第一个“门”——“忘记门” 第二个“门”——“学习门”: 第三个“门”——“记忆门”: 第四个“门”——“使用门”: lstm动态图展示 LSTM可以使用别的激活函数吗? LSTM-总结 GRU GRU动图 LSTM与GRU区别 什么是循环神经网络 循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network) 它并⾮刚性地记忆所有固定⻓度的序列,而是通过隐藏状态来存储之前时间步的信息。 为什么有BP神经网络、CNN,还需要RNN? 因为PB,CNN网络(前馈神经网络)的输入输出都是相互独立的(只能正向或者反向传播的,单向的),但是实际应用中的有些场景的输出内容和之前的内容相关的(时序性)

BP算法完整推导 2.0 (上)

别等时光非礼了梦想. 提交于 2020-01-25 23:36:40
前面的笔记已经把 BP算法给推导了, 那4大公式, 核心就是 求偏导数的链式法则 , 这篇, 再来跟着大佬来推一波, 目的是为了加深印象. 关于记忆这个话题, 心理学家,其实早已经给出了答案, 最好的记忆方式, 就是重复 , 写了这么多的笔记, 其实大多内容都是重复的, 交叉的, 反复了, 但不同是, 每次反复, 其实都是一个认知理解上升的过程, 觉得还是很有必要的. BP算法-变量声明 回顾历史 还是跟之前一样的, 先做一个简单的介绍, 然后对变量进行声明, 力求跟写代码的逻辑一样, 严谨, 规范, 有注释, 逻辑清晰, 模块化和面向对象 先是来简单介绍一波BP算法. 最早在1970年代就已经有人提出了, 直到1986年, 深度学习的大佬们才在论文中阐述其重要性. 在80年代中期, 这些大佬分别独立发现了 误差反向传播算法 (Error Back Propagation Training) 简称BP , 解决了, 多层神经网络, 隐含层连接权值学习 问题. BP 用来干嘛: 根据训练的误差, 来 动态 更新节点之间的 权值 . 分别独立发现: 好比牛顿和莱布尼兹 分别从各自领域创建了微积分. 不由感慨, 成功的大佬, 都是类似的, 我等凡人失败的借口, 总是各有各的说辞, 真的好扎心, 而又无可奈何呀. BP算法相对于其他的神经网络学习算法会快很多,

Pytorch框架学习(4)——autograd与逻辑回归

倾然丶 夕夏残阳落幕 提交于 2020-01-23 02:32:44
autograd与逻辑回归 文章目录 autograd与逻辑回归 1. torch.autograd自动求导系统 2. 逻辑回归 1. torch.autograd自动求导系统 torch.autograd.backward 功能:自动求取梯度 tensors:用于求导的张量,如loss retain_graph:保存计算图 create_graph:创建导数计算图,用于高阶求导 grad_tensors:多梯度权重(当有多个loss需要计算梯度时,需要设置各个loss之间的权重比例) w = torch . tensor ( [ 1 . ] , requires_grad = True ) x = torch . tensor ( [ 2 . ] , requires_grad = True ) a = torch . add ( w , x ) b = torch . add ( w , 1 ) y0 = torch . mul ( a , b ) y1 = torch . add ( a , b ) loss = torch . cat ( [ y0 , y1 ] , dim = 0 ) grad_tensors = torch . tensor ( [ 1 . , 2 . ] ) loss . backward ( gradient = grad_tensors ) #

浅谈矩阵分解在推荐系统中的应用

纵饮孤独 提交于 2020-01-22 21:43:59
  为了方便介绍,假设推荐系统中有用户集合有6个用户,即U={u1,u2,u3,u4,u5,u6},项目(物品)集合有7个项目,即V={v1,v2,v3,v4,v5,v6,v7},用户对项目的评分结合为R,用户对项目的评分范围是[0, 5]。R具体表示如下: 推荐系统的目标就是预测出符号“?”对应位置的分值。推荐系统基于这样一个假设:用户对项目的打分越高,表明用户越喜欢。因此,预测出用户对未评分项目的评分后,根据分值大小排序,把分值高的项目推荐给用户。怎么预测这些评分呢,方法大体上可以分为基于内容的推荐、协同过滤推荐和混合推荐三类,协同过滤算法进一步划分又可分为基于基于内存的推荐(memory-based)和基于模型的推荐(model-based),本文介绍的矩阵分解算法属于基于模型的推荐。 矩阵分解算法的数学理论基础是矩阵的行列变换。在《线性代数》中,我们知道矩阵A进行行变换相当于A左乘一个矩阵,矩阵A进行列变换等价于矩阵A右乘一个矩阵,因此矩阵A可以表示为A=PEQ=PQ(E是标准阵)。 矩阵分解目标就是把用户-项目评分矩阵R分解成用户因子矩阵和项目因子矩阵乘的形式,即R=UV,这里R是n×m, n =6, m =7,U是n×k,V是k×m。直观地表示如下: 高维的用户-项目评分矩阵分解成为两个低维的用户因子矩阵和项目因子矩阵,因此矩阵分解和PCA不同,不是为了降维

Perlin Noise

老子叫甜甜 提交于 2020-01-22 20:59:24
原理 Perlin Noise属于晶格(grid) 噪声,其将空间分成一个个晶格(单位长度),输入的位置点配合晶格顶点处的随机梯度,生成噪声。常用于游戏中的地形生成等。 以二维Perlin Noise为例 P是输入点,周围四个红色圈代表其所在晶格的四个顶点。(u, v)是p点在这个晶格内的局部坐标(u,v范围在0~1), 红色向量 代表晶格顶点处的随机梯度向量, 绿色向量 代表四个顶点到输入点的距离向量。 接着通过这两个向量的点乘得到该顶点对P点的影响权重,四个顶点对应四个权重,w1, w2, w3, w4。 w1----------w2 | | | | w3----------w4 再对4个权重做插值,插值函数可以直接用线性函数 w1*(1-u)+w2*u,但实际上会选用更复杂的插值函数保证一阶和二阶导数的连续性: x1=Lerp(w1, w2, u); x2=Lerp(w3, w4, u); y1=Lerp(x1, x2, v); 这里需要做3次插值(2次水平方向,1次竖直方向)。以上就是全部流程,通过输入一个二维坐标,输出一个浮点噪声值。 还有一个问题是如何得到一个顶点的随机梯度向量,其实应该说伪随机梯度向量,因为算法中同一个顶点每次生成的梯度是相同的。 Perlin使用的方法是预先生成一组伪随机梯度值,对二三维来说是梯度向量,保存在G[256](一维),G2[256][2]

Pytorch 学习 (2)

那年仲夏 提交于 2020-01-22 02:47:41
Pytorch 学习 (2) 过年回家,继续学习pytorch。又是一个优秀的人儿。 1.对神经网络的理解 神经网络结构实例如下: 训练一个神经网络的简单过程如下: 定义一个具有权重的神经网络 对整个输入的数据集进行迭代 用神经网络对输入进行处理 计算损失函数(即输出与标签的差值) 反向传播梯度对参数值进行修正 权重等于权重减去学习率与梯度的乘积 代码如下: 笔记存疑: num_flat_features()函数在被调用的后面,逻辑上显得不通顺。 16 * 6 * 6的原因不是很清楚,后面的6*6哪来的。 num_flat_features()为什么这样写不是很清楚。 Pytorch的一大优势就是你只要定义网络向前传播的结构,对于梯度的反向传导可以自动完成。Pytorch中Variable变量包含数据值,梯度值,计算梯度的函数。 我们可以利用定义好的网络做一次简单的前向运算,代码如下: 其中,torch.randn(1,1,32,32)是batch_size=1, 图像通道数为1,图像尺寸为32x32。 接着,我们将网络的梯度置零,用随机生成的数作为梯度向后传播,代码如下: 注意: torch.nn只支持小批量输入,而不接受单个样本。 举个例子,nn.Conv2d的输入为nSamples nChannels Height*Width 如果你只有一个样本,你可以在代码中添加input

深度学习(二)——神经网络基础(多层感知器、反向传播算法)

ⅰ亾dé卋堺 提交于 2020-01-21 01:29:50
深度学习(二)——神经网络基础 文章目录 深度学习(二)——神经网络基础 神经网络的通用分类 神经网络的基本结构 基础架构 人工神经元 激活函数 模型训练与反向传播算法 前向传播 反向传播 梯度消失和梯度爆炸 神经网络的通用分类 人工神经网络模型可以理解为一组基本处理单元,它们紧密地相互连接,对输入进行类似的数学运算后生成期望的输出。基于信息在网络中传播的方式,可以将神经网络分为两个通用类别: 前馈神经网络 前馈神经网络 中信息的流动只能 由前到后 ,也就是说,一层神经元的输出只能作为后一层神经元的输入。这些网络架构可以被称为 有向无环图 。典型的模型有 多层感知器(MLP) 和 卷积神经网络(CNN) 。 反馈神经网络 反馈神经网络 具有形成有向循环的连接,也就是说,后一层神经元也可以反过来作为前一层神经元的输入,这就使得神经网络 可以处理序列数据 。反馈网络还具有 记忆能力 ,可以在其内部存储器中存储信息和序列关系。典型的模型有 循环神经网络(RNN) 和 长短期记忆网络(LSTM) 。 神经网络的基本结构 下面以多层感知器为例,介绍神经网络的基本结构。 基础架构 下图给出了MLP网络架构的一个例子: 这是一个五层感知器的例子,每一层分别含有3、4、2、3、3个人工神经元。我们用这个例子来介绍人工神经网络的一些特点: 分层架构 :人工神经网络包含层次化的处理级别。每个级别被称为

梯度下降

可紊 提交于 2020-01-20 20:20:16
梯度下降 :应用最广泛的求极小值算法。 假设一线性回归模型,它的代价函数为 J(θ 0 ,θ 1 ) 。 我们的目标是最小化这个代价函数, 而要得到最小的代价函数值关键就在于正确选取 θ 0 和θ 1 的值,于是我们引出梯度下降算法。 步骤:1. 初始化θ 0 和θ 1 的值,通常取0。    2. 不断改变θ 0 和θ 1 的值,试图通过这种改变使得 J(θ 0 ,θ 1 ) 变小,直到找到 J(θ 0 ,θ 1 ) 的最小值(也可能是局部最小值)。 将上述步骤可视化 左图中,我们初始化θ 0 和θ 1 的值得到第一个 J(θ 0 ,θ 1 ) 点 ,在左边红色区域。假设红色区域都是一个个小山峰,我们处于第一个点的位置,现在目标是用小碎步尽快下山,环顾四周后我们可以找到下一个点,注意是下降最快的方向(坡度最陡),以此方法一直下降,知道下降到深蓝色区域里的局部最低点。 右图中亦是如此,只是θ 0 和θ 1 的初始值不同,导致第一个J(θ 0 ,θ 1 ) 点 不同,下降速度最快的方向也不一样,因此到达的最低点也不同。 公式 式子中,:= 符号是赋值运算符,表示把符号后面的值赋予给符号后面的值,α 表示学习率,以下山的例子就是步子的大小,α 越大,下山时步子迈得就越大,下降速度越快。 在梯度下降中,我们使用公式更新 θ 0 和 θ 1 的值,在更新时,我们应当同时更新 θ 0 和 θ