机器学习(一):梯度下降、神经网络、BP神经网络
这几天围绕论文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神经网络的更多相关文章
- 秒懂神经网络---BP神经网络具体应用不能说的秘密.
秒懂神经网络---BP神经网络具体应用不能说的秘密 一.总结 一句话总结: 还是要上课和自己找书找博客学习相结合,这样学习效果才好,不能单视频,也不能单书 BP神经网络就是反向传播神经网络 1.BP神 ...
- 【机器学习】梯度下降 II
Gradient Descent 梯度下降 II 关于 Gradient Descent 的直观解释,参考上一篇博客[机器学习]梯度下降 I 本模块介绍几种梯度下降模型.定义符号标记如下: \(\th ...
- 吴恩达机器学习笔记(四) —— BP神经网络
主要内容: 一.模型简介 二.一些变量所代表的含义 三.代价函数 四.Forward Propagation 五.Back Propagation 六.算法流程 待解决问题: 视频中通过指出:当特征变 ...
- 机器学习-随机梯度下降(Stochastic gradient descent)
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- R_Studio(神经网络)BP神经网络算法预测销量的高低
BP神经网络 百度百科:传送门 BP(back propagation)神经网络:一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络 #设置文件工作区间 setwd('D:\\ ...
- 斯坦福大学公开课机器学习:梯度下降运算的学习率a(gradient descent in practice 2:learning rate alpha)
本章节主要讲怎么确定梯度下降的工作是正确的,第二是怎么选择学习率α,如下图所示: 上图显示的是梯度下降算法迭代过程中的代价函数j(θ)的值,横轴是迭代步数,纵轴是j(θ)的值 如果梯度算法正常工作,那 ...
- 斯坦福大学公开课机器学习:梯度下降运算的特征缩放(gradient descent in practice 1:feature scaling)
以房屋价格为例,假设有两个特征向量:X1:房子大小(1-2000 feets), X2:卧室数量(1-5) 关于这两个特征向量的代价函数如下图所示: 从上图可以看出,代价函数是一个又瘦又高的椭圆形轮廓 ...
- 机器学习-随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )
梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正. 下面的h(x)是要拟 ...
- python机器学习——随机梯度下降
上一篇我们实现了使用梯度下降法的自适应线性神经元,这个方法会使用所有的训练样本来对权重向量进行更新,也可以称之为批量梯度下降(batch gradient descent).假设现在我们数据集中拥有大 ...
- [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法
前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...
随机推荐
- WPF数据双向绑定
设置双向绑定,首先控件要绑定的对象要先继承一个接口: INotifyPropertyChanged 然后对应被绑定的属性增加代码如下: 意思就是当Age这个属性变化时,要通知监听它变化的人. 即:Pr ...
- C/C++ 关于大小端模式
大端模式: 数据的高字节存在低地址 数据的低字节存在高地址 小端模式: 数据的高字节存在高地址 数据的低字节存在低地址 如图,i为int类型占4个字节,但只有1个字节的值为1,另外3个字节值为 ...
- hdu 5199 Gunner
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5199 简单题,stl水之... #include<algorithm> #include& ...
- spring使用JdbcDaoSupport中封装的JdbcTemplate进行query
1.Dept package cn.hxex.springcore.jdbc; public class Dept { private Integer deptNo; private String d ...
- Android内存管理机制
相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力. 今天我们就谈谈在Android平台下内存的管理之道,开始 ...
- 通过Roslyn构建自己的C#脚本
通过Roslyn构建自己的C#脚本 在下一代的C#中,一个重要的特性就是"Compiler as a Service",简单的讲,就是就是将编译器开放为一种可在代码中调用的服务.最 ...
- VS2012 常用web.config配置解析之自定义配置节点
在web.config文件中拥有一个用户自定义配置节点configSections,这个节点可以方便用户在web.config中随意的添加配置节点,让程序更加灵活(主要用于第三方插件的配置使用) 自定 ...
- exception -----> Functions
/* current_exception */ exception_ptr current_exception() noexcept; 返回指向当前异常(或其副本)的智能指针[具体返回对象本身还是副本 ...
- LoadRunner - 当DiscuzNT遇上了Loadrunner(中) (转发)
当DiscuzNT遇上了Loadrunner(中) 在上文中,介绍了如果录制脚本和设置脚本执行次数.如果经过调试脚本能够正常工作的话,就可以设置并发用户数并进行压力测试了. 首先我们通过脚本编辑界面上 ...
- 【转载】about slack
About Slack slack is the difference b/w the REQUIRED TIME and the ARRIVAL TIME. 1.WHAT IS SLACK WITH ...