NLPJob

标签热度

机器学习 coursera 斯坦福大学 公开课 斯坦福 深度学习 自然语言处理 python 数据科学 andrew ng 数学 nlp 数据分析 数据挖掘 神经网络 大数据 计算机科学 英语 算法 deep learning 统计学 课件 数据可视化 机器学习公开课 机器学习笔记 google 机器学习视频 计算机 商业 推荐系统 数据结构 r语言 java 密码学 udacity 金融 免费电子书 电子书 公开课笔记 计算机视觉 商务英语 学术英语 python数据可视化 机器学习课程 机器人 ted 文本挖掘 r 视频 领导力 java编程 回归模型 excel 深度学习课程 mysql cousera公开课 统计 大数据公开课 ted公开课 ted演讲 线性回归 javascript mit 概率图模型 金融市场 tensorflow 学习英语 物联网 大数据专项课程 python入门 大数据课程 英语写作 英语学习 算法课程 强化学习 高级机器学习 kaggle 文本分析 机器学习资料 函数式编程 scala 游戏设计 cousera 机器学习系统 机器人公开课 开源代码 人工智能 普林斯顿大学 machine learning 线性代数 代价函数 软件工程 伯克利 管理 市场营销 财务会计 沃顿商学院 网页开发 网站开发 web开发 网络安全 python数据科学 商业分析 非对称密码学 对称密码学 应用密码学 大规模数据科学 英语听说 概率 机器学习基石 python机器学习 算法公开课 源代码 数学思维 社交网络分析 微积分公开课 杜克大学 机器学习公开课视频 公开课视频 coursera公开课视频 coursera公开课 贝叶斯 信息论 离散数学 宾夕法尼亚大学 neural networks 伯克利大学 密歇根大学 成本函数 梯度下降 云计算 编译器 自动机 cs101 daphne koller spark 软件 会计 英语交流 商业策略 风险管理 资产管理 地理信息系统 gis 卷积神经网络 面向对象编程 序列模型 移动应用开发 数据库 计算机通信 敏捷开发 高级商务分析 商务分析 商务英语课程 c语言 c++ 数据管理 投资 计算原理 计算基础 推荐系统导论 学术英语写作 android应用开发 android开发 android 机器人课程 机器人学 数据科学竞赛 yandex 深度学习公开课 深度学习书籍 数据集 机器学习资源 分布式 微积分 大规模机器学习系统 统计推断 数据科学公开课 游戏 数学思维公开课 机器学习课件 数学公开课 微积分公开课视频 微积分公开课下载 mit微积分 mit公开课 龙星计划 神经网络公开课 coursera视频 斯坦福公开课 windows ios udacity公开课 无人驾驶汽车 人机交互公开课 人机交互 正则化 过拟合 逻辑回归 模型思维 网易公开课 acl net 逻辑 cmu 情感分析 我爱公开课 引言 普林斯顿 经济 saas 52opencourse 逻辑导引 图模型 chirs manning dan jurafsky ppt 编码 时间序列 go语言课程 go语言 工程师 语法 区块链基础 区块链 网页设计 软件开发 商务基础 运营管理 商务 机器学习实战 数据系统 投资管理 swift 计算机安全与系统管理 系统管理 计算机安全 seo策略 seo工具 seo 组织领导力 css3 html5 会计基础 c sharp 英语沟通 并发 并行 全栈开发 数据仓库 商业智能 投资策略 金融基础 数据工程 python零基础 安全系统 现代密码学 硬件安全 软件安全 网络安全基础 递归神经网络 信息检索 云计算网络 云计算应用 云计算基础 云计算概念 分组交换网络 局域网 创意写作 写作 数学基础 台湾大学 基因序列 生物信息学 斯坦福算法课程 软件架构 软件设计 java程序设计 r语言基础 图论 组合数学 python数据表示 python基础 深度学习专项课程 游戏设计与开发 游戏开发 游戏设计概念 游戏设计艺术 angular 恐龙古生物学 恐龙 古生物学 推荐系统评价 jquery 英语语法 c# 高级算法 算法专项 iot python专项课程 python入门课程 商务英语交流技巧 商务英语交流 python社交网络分析 python文本挖掘 机器学习专项 金融价值 金融决策 金融公开课 数据结构与算法 大数据机器学习 大数据分析 商业与金融建模 金融建模 学术英语听说 数据分析工具 编程入门 编程 编程基础 算法思维 计算机基础 秘钥管理 hdfs 数据工程师 hive 3d交互设计 3d建模 虚拟现实 vr 洛桑联邦理工学院 函数式编程入门 数据科学课程 数据科学专项课程 学术英语课程 学术英语写作课程 斯坦福算法专项课程 斯坦福算法 python数据分析 英文简历 英文面试 英文写作 贝叶斯方法 商业分析技术 大数据建模 数据获取 数据清洗 文本挖掘课程 聚类分析 python公开课 python课程 主成分分析 深度学习资料 词意消歧 词义消歧 推荐系统入门 python书籍 机器学习算法 数据结构课程 图像处理 贝叶斯方法实战 深度学习源代码 sibyl p2p 机器学习书籍 数据结构资料 凸优化 推荐系统入门资料 数据科学导论 可视化 机器学习开源工具包 jane mcgonigal 公开课社区 挖课 courseminer 文本情感分析 多变量微积分 社会计算 数学分析公开课 概率图模型公开课 百度 吴恩达 香港科技大学 函数式语言 scala公开课 class2go coursera无法连接 coursera打不开 keith devlin 数学思维简介 社交网络 余凯 张潼 机器人视频 robert sedgewick 算法上 多伦多大学 莱斯大学 华盛顿大学 佐治亚理工学院 神经网络视频

Text Summarization

Keyword Extraction

Text Processing

Word Similarity

Best Coursera Course

+7 投票

斯坦福大学机器学习斯坦福大学机器学习第九课“神经网络的学习(Neural Networks: Learning)”学习笔记,本次课程主要包括8部分:

1) Cost function(代价函数)

2) Backpropagation algorithm(BP算法 or 反向传播算法)

3) Backpropagation intuition(BP算法的直观解释)

4) Implementation note: Unrolling parameters(实现时的注意点:展开参数)

5) Gradient checking(梯度下降算法的验证)

6) Random initialization(随机初始化)

7) Putting it together(组合到一起-如何训练一个神经网络)

8) Backpropagation example: Autonomous driving (optional)(BP算法的例子-无人驾驶汽车)

以下是每一部分的详细解读。

 

1) Cost function(代价函数)

首先回顾一下神经网络的结构:

神经网络结构-我爱公开课-52opencourse.com

其中:

训练集是:\((x^{(1)}, y^{(1)}),...,(x^{(m)}, y^{(m)})\)
L = 神经网络的层数
\(s_l\) = 第l层的单元个数(不包括偏置单元)

对于一个分类问题来说:

如果是一个二类分类(Binary classification),那么y = 0 或1,在神经网络的输出层上只有一个输出单元;

如果是一个多类分类(Multi-class classification), 那么

神经网络分类问题-我爱公开课-52opencourse.com

在神经网络的输出层上有K个输出单元。

Cost function:

在逻辑回归中,Cost Function的定义相对简单,如下所示:

逻辑回归成本函数-我爱公开课-52opencourse.com

由于神经网络的输出层通常有多个输出,属于k维向量,因此用如下的方式定义神经网络的Cost function:
神经网络成本函数-我爱公开课-52opencourse.com

注意,对于训练集的每一个样本,都需要对输出层所有的输出单元计算cost并求和。

 

2) Backpropagation algorithm(BP算法 or 反向传播算法)

线性回归逻辑回归相似,求取神经网络的参数也可以采用梯度下降算法,但是和它们二者略微不同的是,神经网络相对复杂,如果计算它的梯度?

我们知道,神经网络的Cost function是:

神经网络代价函数-我爱公开课-52opencourse.com

目标是最小化Cost function:

最小化代价函数-我爱公开课-52opencourse.com

我们需要通过如下两个式子来计算梯度:

神经网络梯度下降算法-我爱公开课-52opencourse.com

在上一课“神经网络的表示”里,我们给出了前馈网络的计算方法(向量化实现),对于一个给定训练样本(x, y)的神经网络,首先通过“前向传播”的方式从输入层开始计算神经网络的每一层表示,直到输出层。例如对于如下的4层神经网络:

4层神经网络举例-我爱公开课-52opencourse.com

计算的方法如下:

神经网络前向传播-我爱公开课-52opencourse.com

有了神经网络的“表示”,如何计算梯度?这个时候,我们引入反向传播算法,简称BP算法。反向算法的核心是最小化网络输出值和目标值之间的“误差”,所以这里首先引入一个关于误差的记号:

\(\delta^{(l)}_j\) = l 层 j 节点的误差(error)

对于神经网络输出层的单元来说,例如上例中的第4层,误差的计算比较直观:

神经网络输出层误差-我爱公开课-52opencourse.com

但是对于隐藏层的误差计算,就不那么直观了:

神经网络隐藏层误差-我爱公开课-52opencourse.com

注:有志于弄清楚为什么的同学可以参考Mitchell教授的经典书籍《机器学习》的第四章“人工神经网络”,有详细的说明。

现在我们可以给出一个完成的BP算法,至于BP算法的一些解释和说明,将会在之后的小节给出:

神经网络反向传播算法-我爱公开课-52opencourse.com

我们需要计算每个节点的梯度,这里通过反向传播算法达到了。

补充:关于前馈网络和BP神经网络的关系,可以参考这篇文章中的解释:

我们最常用的神经网络就是BP网络,也叫多层前馈网络。BP是back propagation的所写,是反向传播的意思。我以前比较糊涂,因为一直不理解为啥一会叫前馈网络,一会叫BP(反向传播)网络,不是矛盾吗?其实是 这样的,前馈是从网络结构上来说的,是前一层神经元单向馈入后一层神经元,而后面的神经元没有反馈到之前的神经元;而BP网络是从网络的训练方法上来说 的,是指该网络的训练算法是反向传播算法,即神经元的链接权重的训练是从最后一层(输出层)开始,然后反向依次更新前一层的链接权重。因此二者并不矛盾, 只是我没有理解其精髓而已。

随便提一下BP网络的强大威力:
1)任何的布尔函数都可以由两层单元的网络准确表示,但是所需的隐藏层神经元的数量随网络输入数量呈指数级增长;
2)任意连续函数都可由一个两层的网络以任意精度逼近。这里的两层网络是指隐藏层使用sigmoid单元、输出层使用非阈值的线性单元;
3)任意函数都可由一个三层的网络以任意精度逼近。其两层隐藏层使用sigmoid单元、输出层使用非阈值的线性单元。

【注】参考自《机器学习

 

3) Backpropagation intuition(BP算法的直观解释)

相对于线性回归或逻辑回归来说,BP算法不是很简洁和清晰,这一小节将解释神经网络BP算法的一些步骤,希望对大家直观的了解BP算法有一些帮助。不过Andrew Ng教授也说了:

And even though, you know, I have used back prop for many years, sometimes it's a difficult algorithm to understand.

首先从前向传播说起,下面是一个前馈神经网络的例子:

神经网络前馈网络示例-我爱公开课-52opencourse.com

对于这个神经网络来说,它有4层,除了输出层只有1个单元外,其他每层都有2个单元(除去偏置单元)。对于一个训练样本\((x^{(i)}, y^{(i)})\)来说,可以通过前向传播的方式计算各个相关单元,如下图所示:

前向传播计算前馈网络-我爱公开课-52opencourse.com

那么反向传播到底在做什么?首先简化神经网络的代价函数:

神经网络代价函数-我爱公开课-52opencourse.com

我们仅关注一个样本\(x^{(i)}, y^{(i)},并且仅针对一个输出单元的神经网络(上例),同时忽略正则化(\(\lambda = 0), 这样Cost function可以简化为如下的形式:

神经网络简化的代价函数-我爱公开课-52opencourse.com

那么对于样本i, BP算法在神经网络上是如何生效的? 如果记

\(\delta^{(l)}_j\) = l 层 j 节点\(a^{(l)}_j\) 的cost的误差(error)

其中:

神经网络节点误差的表示-我爱公开课-52opencourse.com

BP算法主要是从输出层反向计算各个节点的误差的,故称之为反向传播算法,对于上例,计算的过程如下图所示:

反向传播算法示例-我爱公开课-52opencourse.com

注:这里有些细节没有详细描述,具体的可参考视频课程或者Mitchell教授的经典书籍《机器学习》的第四章“人工神经网络”。

4) Implementation note: Unrolling parameters(实现时的注意点:展开参数)

本节主要讲的是利用octave实现神经网络算法的一个小技巧:将多个参数矩阵展开为一个向量。具体可以参考课程视频,此处略。

5) Gradient checking(梯度下降算法的验证)

神经网络算法是一个很复杂的算法,所以有必要在实现的时候做一些检查,本节给出一个检验梯度的数值化方法。

关于梯度,有一种比较简便的数值估计方法,例如,对于一元参数来说:

梯度的估计-我爱公开课-52opencourse.com

可以用如下公式近似估计梯度:

梯度的数值估计公式-我爱公开课-52opencourse.com

其中 \(\epsilon\) 取较小的值。

同理,对于多元参数或参数向量来说,上述方法同样适用:

多元参数的梯度估计-我爱公开课-52opencourse.com

我们的主要目标是检查这个梯度的近似向量与反向传播算法得到的梯度向量是否近似相等:

反向传播算法梯度向量检查-我爱公开课-52opencourse.com

实现时的注意点:

  • 首先实现反向传播算法来计算梯度向量DVec;
  • 其次实现梯度的近似gradApprox;
  • 确保以上两步计算的值是近似相等的;
  • 在实际的神经网络学习时使用反向传播算法,并且关掉梯度检查。

特别重要的是:

  • 一定要确保在训练分类器时关闭梯度检查的代码。如果你在梯度下降的每轮迭代中都运行数值化的梯度计算,你的程序将会非常慢。

6) Random initialization(随机初始化)

关于如何学习一个神经网络的细节到目前为止基本说完了,不过还有一点需要注意,就是如何初始化参数向量or矩阵。通常情况下,我们会将参数全部初始化为0,这对于很多问题是足够的,但是对于神经网络算法,会存在一些问题,以下将会详细的介绍。

对于梯度下降和其他优化算法,对于参数\(\Theta\)向量的初始化是必不可少的。能不能将初始化的参数全部设置为0:

梯度下降参数向量设置为0

在神经网络中:

神经网络参数初始化-我爱公开课-52opencourse.com

如果将参数全部初始化为0:
神经网络参数矩阵初始化为0-我爱公开课-52opencourse.com

会导致一个问题,例如对于上面的神经网络的例子,如果将参数全部初始化为0,在每轮参数更新的时候,与输入单元相关的两个隐藏单元的结果将是相同的,既:
\[a^{(2)}_1 = a^{(2)}_2\]

这个问题又称之为对称的权重问题,因此我们需要打破这种对称,这里提供一种随机初始化参数向量的方法: 初始化 \(\Theta^{(l)}_{ij} \)为一个落在 [\(-\epsilon, \epsilon\)]区间内的随机数, \(\epsilon\) 可以很小,但是与梯度检验中的 \(\epsilon\) 没有任何关系。

7) Putting it together(组合到一起-如何训练一个神经网络)

关于神经网络的训练,我们已经谈到了很多,现在是时候将它们组合到一起了。那么,如何训练一个神经网络?

首先需要确定一个神经网络的结构-神经元的连接模式, 包括:

  • 输入单元的个数:特征 \(x^{(i)}\) 的维数;
  • 输出单元的格式:类的个数
  • 隐藏层的设计:比较合适的是1个隐藏层,如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。

神经网络架构-我爱公开课-52opencourse.com

在确定好神经网络的结构后,我们按如下的步骤训练神经网络:

1. 随机初始化权重参数;

2. 实现:对于每一个 \(x^{(i)}\) 通过前向传播得到\(h_\Theta(x^{(i)})\);

3. 实现:计算代价函数\(J(\Theta)\);

4. 实现:反向传播算法用于计算偏导数 \(\frac{\vartheta}{\vartheta\Theta^{(l)}_{jk}}J(\Theta)\)

5. 使用梯度检查来比较反向传播算法计算的\(\frac{\vartheta}{\vartheta\Theta^{(l)}_{jk}}J(\Theta)\)和数值估计的\(J\Theta)\)的梯度,如果没有问题,在实际训练时关闭这部分代码;

6. 在反向传播的基础上使用梯度下降或其他优化算法来最小化\(J(\Theta)\);

8) Backpropagation example: Autonomous driving (optional)(BP算法的例子-无人驾驶汽车)

关于通过神经网络来实现一个无人驾驶汽车的例子,请大家参考课程视频,此处略。

 

参考资料:

机器学习视频可以在Coursera机器学习课程上观看或下载: https://class.coursera.org/ml

第九课“神经网络的学习”的课件资料下载链接:
PPT   PDF

http://en.wikipedia.org/wiki/Backpropagation

Mitchell教授的经典书籍《机器学习

http://brightli.wordpress.com/2007/06/15/%E7%BB%88%E4%BA%8E%E6%98%8E%E7%99%BD%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8F%ABbp%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/

 

分类:机器学习 | 用户: (3.2k 分)
修改于 用户:

LZ, 多谢你的分享。

但有一点我没有查到出处,请教:

您的第7部分“7)Putting it together”里写到了这么一句:
“如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。”

确保每个隐藏层的单元个数相同的依据是?

这个问题我也不太清楚,好长时间了,当时应该也只是知其然不只所以然的的一个状态。你不会就是 微博上的 summerrlee ?

1个回答

0 投票
果断更新吧,等着大牛的翻译学习呢
用户:
抱歉,最近家里有点事,等周末安顿了再做更新吧。
...