这几天围绕论文A Neural Probability Language Model 看了一些周边资料,如神经网络、梯度下降算法,然后顺便又延伸温习了一下线性代数、概率论以及求导。总的来说,学到不少知识。下面是一些笔记概要。

一、 神经网络

神经网络我之前听过无数次,但是没有正儿八经研究过。形象一点来说,神经网络就是人们模仿生物神经元去搭建的一个系统。人们创建它也是为了能解决一些其他方法难以解决的问题。

对于单一的神经元而言,当生物刺激强度达到一定程度,其就会被激发,然后做出一系列的反应。模仿这个过程,就有了下面这张图:

其中X可以看作是一系列的刺激因素,而W可以看作各个刺激因素所对应的权值。计算各个刺激因素的加权和就可以作为我们总的刺激强度了。注意一下,上图中的X0和Wk0代表了随机噪声。得到中的刺激强度之后我们就可以根据这个强度做出一定的反应,这个过程交由图中的Activation function函数来处理,处理后就获得了我们最终的结果。

一般而言,Activation function函数可以有三种(下图中的a和b可以看做一种):

至此,神经网络的最基本结构——单层神经网络,已经介绍的差不多了。对于神经网络而言,我们可以利用这样的简单的单层神经网络去组合搭建一个复杂的神经网络,以实现不同的功能。它可以是这样的(接受一下参数表示的不同):

将这个图中的变量以向量的形式表示可以得到下图:

除了这种相对简单的多层神经网络,网络还可以是这样的:

这一部分的资料可以参见:

An introduction to neural networks:IBM做的一个科普资料

Introduction to Neural Networks:这个页面相对更加的规范

以及hagan教授的书籍:Neural_Network_Design

二、 梯度下降法

这个方法呢,说起来很简单。一个很形象的比喻就是说,你站在山坡上想下山,那么如何才能尽快下山(默认速度是恒定的,你也不会摔死)?

你应该会环顾四周,找到当前最陡峭的方向下山吧?这个方向就可以用梯度来计算,这也就是梯度下降法的来源。是不是觉得很简单,以为自己掌握了?哈哈,还是太年轻了。

这一部分就不赘述了,给出我学习时候用到的两个资料:

NG教授的机器学习课程中的第二课(话说,听完了,我就会了,之前可是看了一大堆资料还是似懂非懂);

机器学习中的数学这个博客也很不错,看完课程再来看看这个还是有点好处的。

对了,梯度下降法还有一个变种:随机梯度下降法。这个才是很多场合下真正使用的方法。

三、 梯度下降法和神经网络的结合

好了,上面分别介绍完了梯度下降法以及神经网络,下面就是它们的结合应用了。

我们需要利用样本数据去训练我们的神经网络模型(其实很大程度上就是修改神经网络里面的参数,如上面看到的权值等等),那么怎么修改呢?我们当时是应该对照我们的目标去做修改,这往往意味着要去最值化一些量,提到最值,是不是跟梯度下降法搭上勾勾了啊。我们可以利用梯度下降法做多轮迭代一步步逼近我们最终的目标。这也就是它们结合的地方。哦,听说所谓的深度学习也就基本上是这个思路了。瞬间感觉高大上有没有??

注意一下,这部分需要用了很多线性代数以及导数的很多知识,自行脑补。我是参考了NG教授机器学习这门课的讲义以及 Neural_Network_Design 这本书中的相关内容。

一个简单例子:房子价格

自行学习NG教授机器学习这门课的第二课,讲的很好!

下面的是一个复杂一点的例子。

我们把多层神经网络分为三层,输入层、输出层以及中间的隐藏层,对于中间隐藏层我们没有办法直接去计算梯度,进而修改参数。于是乎就只能利用求导的链式规则,从输出层开始往回计算梯度,从而得以更新参数。这也就是传说中的BP神经网络了,我的学习资料是:hagan教授的书籍:Neural_Network_Design。其中有一章节专门将BP神经网络,讲的很好。推导过程稍微有点长,我看完后不知所以,自己又找时间不看书推到了一遍,挺有意思的,哈哈。

看完后可以再参考这篇文章:Backpropagation。加深自己的理解。

四、 A Neural Probability Language Model

有了上面的基础知识,再看这篇文章就容易多了。这篇文章的地位很高,文章主要亮点在于:首先,利用词向量去表示一个词从而可以获知不同词语之间的相似度;其次,搭建神经网络去做计算(BP神经网络加上梯度下降法);其三,并行化去做计算,从而可以处理大规模的数据;最后也是最亮的地方在于该方法的实验结果非常理想!

这篇博客也有提到:Deep Learning in NLP (一)词向量和语言模型

自己感觉对于这篇文章有些细节问题还是没有理解,比如网络的输入是怎么来的?

机器学习(一):梯度下降、神经网络、BP神经网络的更多相关文章

  1. 秒懂神经网络---BP神经网络具体应用不能说的秘密.

    秒懂神经网络---BP神经网络具体应用不能说的秘密 一.总结 一句话总结: 还是要上课和自己找书找博客学习相结合,这样学习效果才好,不能单视频,也不能单书 BP神经网络就是反向传播神经网络 1.BP神 ...

  2. 【机器学习】梯度下降 II

    Gradient Descent 梯度下降 II 关于 Gradient Descent 的直观解释,参考上一篇博客[机器学习]梯度下降 I 本模块介绍几种梯度下降模型.定义符号标记如下: \(\th ...

  3. 吴恩达机器学习笔记(四) —— BP神经网络

    主要内容: 一.模型简介 二.一些变量所代表的含义 三.代价函数 四.Forward Propagation 五.Back Propagation 六.算法流程 待解决问题: 视频中通过指出:当特征变 ...

  4. 机器学习-随机梯度下降(Stochastic gradient descent)

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  5. R_Studio(神经网络)BP神经网络算法预测销量的高低

    BP神经网络 百度百科:传送门 BP(back propagation)神经网络:一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络 #设置文件工作区间 setwd('D:\\ ...

  6. 斯坦福大学公开课机器学习:梯度下降运算的学习率a(gradient descent in practice 2:learning rate alpha)

    本章节主要讲怎么确定梯度下降的工作是正确的,第二是怎么选择学习率α,如下图所示: 上图显示的是梯度下降算法迭代过程中的代价函数j(θ)的值,横轴是迭代步数,纵轴是j(θ)的值 如果梯度算法正常工作,那 ...

  7. 斯坦福大学公开课机器学习:梯度下降运算的特征缩放(gradient descent in practice 1:feature scaling)

    以房屋价格为例,假设有两个特征向量:X1:房子大小(1-2000 feets), X2:卧室数量(1-5) 关于这两个特征向量的代价函数如下图所示: 从上图可以看出,代价函数是一个又瘦又高的椭圆形轮廓 ...

  8. 机器学习-随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )

    梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正. 下面的h(x)是要拟 ...

  9. python机器学习——随机梯度下降

    上一篇我们实现了使用梯度下降法的自适应线性神经元,这个方法会使用所有的训练样本来对权重向量进行更新,也可以称之为批量梯度下降(batch gradient descent).假设现在我们数据集中拥有大 ...

  10. [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法

    前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...

随机推荐

  1. [转载]--Ubuntu下修改DNS重启也能用的方法

    安装好Ubuntu之后设置了静态IP地址,再重启后就无法解析域名.想重新设置一下DNS,打开/etc/resolv.conf cat /etc/resolv.conf# Dynamic resolv. ...

  2. spring AOP advice 类型 和 通用的切点的配置方式

    spring aop advice的类型: 1.前置通知(before advice) 2.返回后通知(after returning advice) 3.抛出异常后通知(after throwing ...

  3. Mongodb shell 基本操作

    /opt/mongodb-2.6.6/bin > mongo 1. 查询本地所有数据库名称> show dbs 2. 切换至指定数据库环境(若无指定的数据库,则创建新的库)> use ...

  4. 【Javascript】: for循环中定义的变量在for循环体外也有效

    for循环中定义的变量在for循环体外也有效 <script> (function(){ var a = 111; for(var i=0;i<5;i++){ var carl = ...

  5. xUtils框架的介绍(一)

    微信账号申请终于通过了,这是我们第一次Android干货分享. 想来是第一次,要对得起“干货”二字. 今天我要为大家推荐的是一个Android基于快速开发的一个框架——xUtils, 它是在aFina ...

  6. WdatePicker 动态变量表

    4. 日期范围限制静态限制 注意:日期格式必须与 realDateFmt 和 realTimeFmt 一致 你可以给通过配置minDate(最小日期),maxDate(最大日期)为静态日期值,来限定日 ...

  7. Go append方法

    append用来将元素添加到切片末尾并返回结果.看代码: package main import "fmt" func main() { x := [],,} y := [],,} ...

  8. 魔兽世界私服Trinity,从源码开始

    缘起因由 在一个无所事事的周末下午,突然想起魔兽世界,官方的账号很久没有上了,里面的大小号现在连满级都不是.以前曾经搭过传奇和星际争霸战网的私服自娱自乐,也听说过魔兽世界有开源的服务端模拟,既然兴致来 ...

  9. [备忘]Asp.net MVC 将服务端Model传递的对象转为客户端javascript对象

    <script type="text/javascript"> var jsObject = @Html.Raw(Json.Encode(Model.Objects)) ...

  10. .gitignore无效,不能过滤某些文件

    利用.gitignore过滤文件,如编译过程中的中间文件,等等,这些文件不需要被追踪管理. 现象: 在.gitignore添加file1文件,以过滤该文件,但是通过git status查看仍显示fil ...