偏导数

word2vec原理分析

泄露秘密 提交于 2020-02-25 08:10:13
  本文摘录整编了一些理论介绍,推导了word2vec中的数学原理,理论部分大量参考《word2vec中的数学原理详解》。 背景 语言模型   在统计自然语言处理中,语言模型指的是计算一个句子的概率模型。   传统的语言模型中词的表示是原始的、面向字符串的。两个语义相似的词的字符串可能完全不同,比如“番茄”和“西红柿”。这给所有NLP任务都带来了挑战——字符串本身无法储存语义信息。该挑战突出表现在模型的平滑问题上:标注语料是有限的,而语言整体是无限的,传统模型无法借力未标注的海量语料,只能靠人工设计平滑算法,而这些算法往往效果甚微。   神经概率语言模型(Neural Probabilistic Language Model)中词的表示是向量形式、面向语义的。两个语义相似的词对应的向量也是相似的,具体反映在夹角或距离上。甚至一些语义相似的二元词组中的词语对应的向量做线性减法之后得到的向量依然是相似的。词的向量表示可以显著提高传统NLP任务的性能,例如《 基于神经网络的高性能依存句法分析器 》中介绍的词、词性、依存关系的向量化对正确率的提升等。   从向量的角度来看,字符串形式的词语其实是更高维、更稀疏的向量。若词汇表大小为N,每个字符串形式的词语字典序为i,则其被表示为一个N维向量,该向量的第i维为1,其他维都为0。汉语的词汇量大约在十万这个量级

秒懂机器学习---机器学习无法逃避的梯度下降法

最后都变了- 提交于 2019-12-22 05:12:14
秒懂机器学习---机器学习无法逃避的梯度下降法 一、总结 一句话总结: 梯度下降法有其缺陷,但是可以和其它算法配合使用,比如模拟退火等。 1、导数的几何意义是什么? 斜率:导数又叫微分,是图像的斜率。 2、复合函数(比如z=f[u(x,y),v(x,y)])的偏导数的链式求导法则是怎样的? δz/δx=(δz/δu)*(δu/δx)+(δz/δv)*(δv/δx) 3、偏导数的几何意义是什么? 曲面无数条切线中的一条:多远看书表示的是高维空间中的曲面。而曲面上的每一点都有无穷多条切线,而求偏导数就是选择其中的一条切线。 4、梯度的定义是什么? 某一函数在该点处的方向导数沿着该方向取得最大值:(梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)) 单变量中表示导数或斜率:在单变量的实值函数的情况,梯度只是导数,或者,对于一个线性函数,也就是线的斜率。 5、梯度是向量还是标量? 向量 6、多元函数中的梯度分别为什么? 偏导数:一个n元函数f关于n个变量的偏导数 三元函数f的梯度为(fx,fy,fz),二元函数f的梯度为(fx,fy),一元函数f的梯度为fx 要明确梯度是一个向量,是一个n元函数f关于n个变量的偏导数,比如三元函数f的梯度为(fx,fy,fz),二元函数f的梯度为

神经网络反向传播算法

喜你入骨 提交于 2019-12-06 05:22:46
反向传播算法是求代价函数小时参数θ的一种算法。 以监督学习为例,假设我们有训练样本集 ,那么神经网络算法能够提供一种复杂且非线性的假设模型 ,它具有参数 ,可以以此参数来拟合我们的数据。 为了描述神经网络,我们先从最简单的神经网络讲起,这个神经网络仅由一个“神经元”构成,以下即是这个“神经元”的图示: 这个“神经元”是一个以 及截距 为输入值的运算单元,其输出为 ,其中函数 被称为“激活函数”。在本教程中,我们选用sigmoid函数作为激活函数 可以看出,这个单一“神经元”的输入-输出映射关系其实就是一个逻辑回归(logistic regression)。 虽然本系列教程采用sigmoid函数,但你也可以选择双曲正切函数(tanh): 以下分别是sigmoid及tanh的函数图像 函数是sigmoid函数的一种变体,它的取值范围为 ,而不是sigmoid函数的 。 注意,与其它地方(包括OpenClassroom公开课以及斯坦福大学CS229课程)不同的是,这里我们不再令 。取而代之,我们用单独的参数 来表示截距。 最后要说明的是,有一个等式我们以后会经常用到:如果选择 ,也就是sigmoid函数,那么它的导数就是 (如果选择tanh函数,那它的导数就是 ,你可以根据sigmoid(或tanh)函数的定义自行推导这个等式。 神经网络模型 所谓神经网络就是将许多个单一“神经元

光照演示程序(第八章内容)

a 夏天 提交于 2019-12-05 05:30:20
光照演示程序(第八章内容) 8.14、光照演示程序 本章演示程序基于上一章的“陆地与波浪演示程序”的基础上构建而成的,其中利用了一个方向光来表示太阳,用户可以使用方向键来控制太阳的方向。 8.14.1、顶点格式 光照的计算需要依赖于表面法线,所以我们会 在顶点层级定义法线 ,方便在光栅化过程中进行插值计算,由此展开逐像素光照。同时我们也 不需要指定顶点的颜色 ,而是以每一个像素应用光照方程之后所生成的像素颜色代替指定顶点颜色。下面是顶点结构体: //c++顶点结构体 struct Vertex { DirectX::XMFLOAT3 Pos; DirectX::XMFLOAT3 Noraml; } //对应的HLSL顶点结构体 struct VertexIn { float3 PosL : POSITION; float3 NormalL : NORMAL; } //新的输入布局描述 mInputLayout = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER

人工神经网络基础

匿名 (未验证) 提交于 2019-12-03 00:27:02
神经网络中最基本的成分是神经元模型,在生物神经元中每个神经元与其他神经元相连,当他“兴奋”时就会向连接的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过一个“阈值”那么他就会被激活,即兴奋起来,向其他神经元发送化学物质。 1943年,【McCulloch and Pitts】将上述的情形抽象为如图所示的简单模型,这就是一直沿用至今的“M-P神经元模型”。在这个模型中,神经元接收来自n个其他神经元的输入信号,这些信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”处理已产生的神经元的输出。 阈值的目的是:使通过激活函数后得到的非线性图像可以左右移动而增加解决问题的能力 理想中的激活函数是阶跃函数,他将输入值映射成为0或1,1对应神经元的兴奋。0对应神经元的抑制,然而阶跃函数具有不连续不光滑等不好的性质,因此常用Sigmoid函数作为激活函数,典型的Sigmoid函数如如所示,它把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,因此也常被称为挤压函数。 激活函数通常选择非线性的函数,非线性的函数比起线性的函数进行任意的线性组合,或者在复合一个线性函数,仍得到一个线性函数;而非线性的函数进行线性符合或者在复合非线性函数之后得到的就不再是一个线性函数,它将呈现一个更加回环曲折的图像。 激活函数的主要作用是

深度学习个人理解

匿名 (未验证) 提交于 2019-12-03 00:21:02
实现人工智能的方法有很多种,当前最热门的一种就是通过深度学习来训练神经网络。深度学习这个词指的是训练大型神经网络。深代表着非常大的神经网络。那么神经网络到底是什么呢? 如下图: 假设你有一个数据集(包含了六个房屋的面积和价格数据)。你想要找到一个方法(即构建一个函数)来通过面积预测出价格。如果你熟悉线性回归(不熟悉也没关系,你就把它看作是一个数学理论),那么可以根据这个理论在实际数据附近画出一条直线,如上图中红色的线,它附近的蓝色的小圆圈代表着六个房子的面积与房价对应的点,即根据这条线(这个函数)来找某一个面积对应的房价,那么除了些误差外,基本上是准的。 理解:大量的数据通过一个函数进行处理分析,找到相同得规则,然后再根据其他得数据分析出最可能得结果,这就是机器学习得一个大概得流程。 监督学习: 判断是否是监督学习,就看输入数据是否有标签。输入数据有标签,则为有监督学习,没标签则为无监督学习。 分类(classification) 这种机器学习算法就是一种监督学习。对于分类,输入的训练数据有特征(feature),有标签(label)。也就是我们前面文章中的输入x和输出y。每一个x样本都对应着一个y(输出)标签。所谓的学习,其本质就是找到特征和标签间的关系(mapping),也就是找规律。这样当有特征而无标签的未知数据输入时,我们就可以通过已有的关系得到未知数据标签

机器学习排序算法:RankNet to LambdaRank to LambdaMART

匿名 (未验证) 提交于 2019-12-02 23:56:01
使用机器学习排序算法LambdaMART有一段时间了,但一直没有真正弄清楚算法中的所有细节。 学习过程中细读了两篇不错的博文,推荐给大家: 梯度提升树(GBDT)原理小结 徐博From RankNet to LambdaRank to LambdaMART: An Overview 但经过一番搜寻之后发现,目前网上并没有一篇透彻讲解该算法的文章,所以希望这篇文章能够达到此目的。 本文主要参考微软研究院2010年发表的文章 From RankNet to LambdaRank to LambdaMART: An Overview 1 1,并结合自己的理解,试图将RankNet、LambdaRank和LambdaMART这三种算法的所有算法细节讲解透彻。 1. 概述 RankNet、LambdaRank和LambdaMART是三个关系非常紧密的机器学习排序算法。简而言之,RankNet是最基础,基于神经网络的排序算法;而LambdaRank在RankNet的基础上修改了梯度的计算方式,也即加入了lambda梯度;LambdaMART结合了lambda梯度和MART(另称为GBDT,梯度提升树)。这三种算法在工业界中应用广泛,在BAT等国内大厂和微软谷歌等世界互联网巨头内部都有大量应用,还曾经赢得“Yahoo!Learning To Rank Challenge(Track 1)"的冠军

9、神经网络的学习

孤者浪人 提交于 2019-12-01 12:44:53
九、神经网络的学习(Neural Networks: Learning) 9.1 代价函数 参考视频: 9 - 1 - Cost Function (7 min).mkv 首先引入一些便于稍后讨论的新标记方法: 假设神经网络的训练样本有 m个,每个包含一组输入 x 和一组输出信号 y , L 表示神经网络层数 S I 表示每层的neuron个数( S l 表示输出层神经元个数), S L 代表最后一层中处理单元的个数。 将神经网络的分类定义为两种情况:二类分类和多类分类, 二类分类: S L = 0 , y = 0 o r S L =1,y=1各表示一类; K 类分类:S L = k , y i = 1 SL=k,yi=1表示分到第 i 类; ( k > 2 ) 我们回顾逻辑回归问题中我们的代价函数为: 在逻辑回归中,我们只有一个输出变量,又称标量(scalar),也只有一个因变量 y ,但是在神经网络中,我们可以有很多输出变量,我们的 hθ(x)是一个维度为 K 的向量,并且我们训练集中的因变量也是同样维度的一个向量 ,因此我们的代价函数会比逻辑回归更加复杂一些,为: h θ ( x ) ∈ R K ,( h θ (x)) i = i t h output 这个看起来复杂很多的代价函数背后的思想还是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大

反向传播

陌路散爱 提交于 2019-11-28 21:03:34
什么是反向传播 BP(back propagation)算法是利用复合函数的链式法则求解多层复合函数的所有变量的偏导数的有效方法。也可以说 ,反向传播,主要是链式法则的反复应用。(链式法则是微积分中的求导法则,用于求一个复合函数的导数) 一个简单的反向传播的例子 一个简单的网络结构图可以表示如下图所示: 图片来源于网络 其中 \(a\) , \(b\) 是输入, \(c\) , \(d\) 相当于隐藏层节点, \(e\) 是输出,我们要求的是 \(e\) 对每一层节点的偏导数。 若输入 \(a=2,b=1\) ,利用前向传播,我们可以从输入到输出一层一层地计算出每一个节点的值,即 \(c=a+b=3,d=b+1=2,e=c*d=6\) 。 而反向传播,则是从输出到输入一层一层地计算输出 \(e\) 到每个节点的偏导数的值,即计算输出 \(e\) 对于节点 \(c,d,a,b\) 的偏导数的值。首先利用偏导数的定义我们可以求出不同层相邻节点之间的偏导数的值如下图所示: 图片来源于网络 如上图所示,我们很容易地计算出了 \(\frac{\partial e}{\partial c}=2,\frac{\partial e}{\partial d}=3\) 。节点 \(e\) 到节点 \(a\) 有一条路径,即 \(e\rightarrow c\rightarrow a\) ,那么 \(e

使用微积分和线性代数的基础知识来推导线性回归

为君一笑 提交于 2019-11-26 13:58:38
这里参考吴恩达的机器学习的1-5章,主要讲线性回归的应用。 1. 通过微分方法推导线性回归 这里主要讲解一个特征变量下的线性回归方法的使用: 假设函数(Hypothesis Function) : h θ ( x ) = θ 0 + θ 1 x h_{\theta}(x) = \theta_0 + \theta_1x h θ ​ ( x ) = θ 0 ​ + θ 1 ​ x ,很显然它是一个线性函数。 其中 x 就是训练样本中的特征变量, y 就是对应于特征变量x的样本实际值,所以 ( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) ( x ( i ) , y ( i ) ) 就表示样本集中的每一个样本点。 θ 0 , θ 1 \theta_0, \theta_1 θ 0 ​ , θ 1 ​ 是两个参数, 接下来我们就会通过训练样本数据来计算出它们的具体值是多少。 我们知道 实际样本值 y 和 h θ ( x ) y和 h_\theta(x) y 和 h θ ​ ( x ) 的值是有偏差的, 那么我们的代价函数(Cost Function)如下: J ( θ 0 , θ 1 ) = 1 / 2 m ∗ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1) = 1/2m* \sum