标签归档:Coursera

Andrew Ng 深度学习课程系列第四门课程卷积神经网络开课

Deep Learning Specialization on Coursera

Andrew Ng 深度学习课程系列第四门课程卷积神经网络(Convolutional Neural Networks)将于11月6日开课 ,不过课程资料已经放出,现在注册课程已经可以听课了 ,这门课程属于Coursera上的深度学习专项系列 ,这个系列有5门课,前三门已经开过好几轮,但是第4、第5门课程一直处于待定状态,新的一轮将于11月7号开始,感兴趣的同学可以关注:Deep Learning Specialization

This course will teach you how to build convolutional neural networks and apply it to image data. Thanks to deep learning, computer vision is working far better than just two years ago, and this is enabling numerous exciting applications ranging from safe autonomous driving, to accurate face recognition, to automatic reading of radiology images. You will: - Understand how to build a convolutional neural network, including recent variations such as residual networks. - Know how to apply convolutional networks to visual detection and recognition tasks. - Know to use neural style transfer to generate art. - Be able to apply these algorithms to a variety of image, video, and other 2D or 3D data. This is the fourth course of the Deep Learning Specialization.

个人认为这是目前互联网上最适合入门深度学习的课程系列了,Andrew Ng 老师善于讲课,另外用Python代码抽丝剥茧扣作业,课程学起来非常舒服,参考我之前写得两篇小结:

Andrew Ng 深度学习课程小记

Andrew Ng (吴恩达) 深度学习课程小结

额外推荐: 深度学习课程资源整理

Andrew Ng (吴恩达) 深度学习课程小结

Deep Learning Specialization on Coursera

Andrew Ng (吴恩达) 深度学习课程从宣布到现在大概有一个月了,我也在第一时间加入了这个Coursera上的深度学习系列课程,并且在完成第一门课“Neural Networks and Deep Learning(神经网络与深度学习)”的同时写了关于这门课程的一个小结:Andrew Ng 深度学习课程小记。之后我断断续续的完成了第二门深度学习课程“Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization"和第三门深度学习课程“Structuring Machine Learning Projects”的相关视频学习和作业练习,也拿到了课程证书。平心而论,对于一个有经验的工程师来说,这门课程的难度并不高,如果有时间,完全可以在一个周内完成三门课程的相关学习工作。但是对于一个完全没有相关经验但是想入门深度学习的同学来说,可以预先补习一下Python机器学习的相关知识,如果时间允许,建议先修一下 CourseraPython系列课程Python for Everybody Specialization 和 Andrew Ng 本人的 机器学习课程

吴恩达这个深度学习系列课 (Deep Learning Specialization) 有5门子课程,截止目前,第四门"Convolutional Neural Networks" 和第五门"Sequence Models"还没有放出,不过上周四 Coursera 发了一封邮件给学习这门课程的用户:

Dear Learners,

We hope that you are enjoying Structuring Machine Learning Projects and your experience in the Deep Learning Specialization so far!

As we are nearing the one month anniversary of the Deep Learning Specialization, we wanted to thank you for your feedback on the courses thus far, and communicate our timelines for when the next courses of the Specialization will be available.

We plan to begin the first session of Course 4, Convolutional Neural Networks, in early October, with Course 5, Sequence Models, following soon after. We hope these estimated course launch timelines will help you manage your subscription as appropriate.

If you’d like to maintain full access to current course materials on Coursera’s platform for Courses 1-3, you should keep your subscription active. Note that if you only would like to access your Jupyter Notebooks, you can save these locally. If you do not need to access these materials on platform, you can cancel your subscription and restart your subscription later, when the new courses are ready. All of your course progress in the Specialization will be saved, regardless of your decision.

Thank you for your patience as we work on creating a great learning experience for this Specialization. We look forward to sharing this content with you in the coming weeks!

Happy Learning,

Coursera

大意是第四门深度学习课程 CNN(卷积神经网络)将于10月上旬推出,第五门深度学习课程 Sequence Models(序列模型, RNN等)将紧随其后。对于付费订阅的用户,如果你想随时随地获取当前3门深度学习课程的所有资料,最好保持订阅;如果你仅仅想访问 Jupyter Notebooks,也就是获取相关的编程作业,可以先本地保存它们。你也可以现在取消订阅这门课程,直到之后的课程开始后重新订阅,你的所有学习资料将会保存。所以一个比较省钱的办法,就是现在先离线保存相关课程资料,特别是编程作业等,然后取消订阅。当然对于视频,也可以离线下载,不过现在免费访问这门课程的视频有很多办法,譬如Coursera本身的非订阅模式观看视频,或者网易云课堂免费提供了这门课程的视频部分。不过我依然觉得,吴恩达这门深度学习课程,如果仅仅观看视频,最大的功效不过30%,这门课程的精华就在它的练习和编程作业部分,特别是编程作业,非常值得揣摩,花钱很值。

再次回到 Andrew Ng 这门深度学习课程的子课程上,第二门课程是“Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization",有三周课程,包括是深度神经网络的调参、正则化方法和优化算法讲解:

第一周课程是关于深度学习的实践方面的经验 (Practical aspects of Deep Learning), 包括训练集/验证集/测试集的划分,Bias 和
Variance的问题,神经网络中解决过拟合 (Overfitting) 的 Regularization 和 Dropout 方法,以及Gradient Check等:


这周课程依然强大在编程作业上,有三个编程作业需要完成:

完成编程的作业的过程也是一个很好的回顾课程视频的过程,可以把一些听课中容易忽略的点补上。

第二周深度学习课程是关于神经网络中用到的优化算法 (Optimization algorithms),包括 Mini-batch gradient descent,RMSprop, Adam等优化算法:

编程作业也很棒,在老师循循善诱的预设代码下一步一步完成了几个优化算法。

第三周深度学习课程主要关于神经网络中的超参数调优和深度学习框架问题(Hyperparameter tuning , Batch Normalization and Programming Frameworks),顺带讲了一下多分类问题和 Softmax regression, 特别是最后一个视频简单介绍了一下 TensorFlow , 并且编程作业也是和TensorFlow相关,对于还没有学习过Tensorflow的同学,刚好是一个入门学习机会,视频介绍和作业设计都很棒:


第三门深度学习课程Structuring Machine Learning Projects”更简单一些,只有两周课程,只有 Quiz, 没有编程作业,算是Andrew Ng 老师关于深度学习或者机器学习项目方法论的一个总结:

第一周课程主要关于机器学习的策略、项目目标(可量化)、训练集/开发集/测试集的数据分布、和人工评测指标对比等:


课程虽然没有提供编程作业,但是Quiz练习是一个关于城市鸟类识别的机器学习案例研究,通过这个案例串联15个问题,对应着课程视频中的相关经验,值得玩味。

第二周课程的学习目标是:

“Understand what multi-task learning and transfer learning are
Recognize bias, variance and data-mismatch by looking at the performances of your algorithm on train/dev/test sets”

主要讲解了错误分析(Error Analysis), 不匹配训练数据和开发/测试集数据的处理(Mismatched training and dev/test set),机器学习中的迁移学习(Transfer learning)和多任务学习(Multi-task learning),以及端到端深度学习(End-to-end deep learning):

这周课程的选择题作业仍然是一个案例研究,关于无人驾驶的:Autonomous driving (case study),还是用15个问题串起视频中得知识点,体验依然很棒。

最后,关于Andrew Ng (吴恩达) 深度学习课程系列,Coursera上又启动了新一轮课程周期,9月12号开课,对于错过了上一轮学习的同学,现在加入新的一轮课程刚刚好。不过相信 Andrew Ng 深度学习课程会成为他机器学习课程之后 Coursera 上又一个王牌课程,会不断滚动推出的,所以任何时候加入都不会晚。另外,如果已经加入了这门深度学习课程,建议在学习的过程中即使保存资料,我都是一边学习一边保存这门深度学习课程的相关资料的,包括下载了课程视频用于离线观察,完成Quiz和编程作业之后都会保存一份到电脑上,方便随时查看。

索引:Andrew Ng 深度学习课程小记

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:http://www.52nlp.cn

本文链接地址:Andrew Ng (吴恩达) 深度学习课程小结 http://www.52nlp.cn/?p=9761

Andrew Ng 深度学习课程小记

Deep Learning Specialization on Coursera

2011年秋季,Andrew Ng 推出了面向入门者的MOOC雏形课程机器学习: Machine Learning,随后在2012年4月,Andrew Ng 在Coursera上推出了改进版的Machine Learning(机器学习)公开课: Andrew Ng' Machine Learning: Master the Fundamentals,这也同时宣告了Coursera平台的诞生。当时我也是第一时间加入了这门课程,并为这门课程写了一些笔记:Coursera公开课笔记: 斯坦福大学机器学习 。同时也是受这股MOOC浪潮的驱使,建立了“课程图谱”,因此结识了不少公开课爱好者和MOOC大神。而在此之前,Andrew Ng 在斯坦福大学的授课视频“机器学习”也流传甚广,但是这门面向斯坦福大学学生的课程难道相对较高。直到2012年Coursera, Udacity等MOOC平台的建立,把课程视频,作业交互,编程练习有机结合在一起,才产生了更有生命力的MOOC课程。Andrew Ng 在为新课程深度学习写的宣传文章“deeplearning.ai: Announcing new Deep Learning courses on Coursera”里提到,这门机器学习课程自从开办以来,大约有180多万学生学习过,这是一个惊人的数字。

回到这个深度学习系列课:Deep Learning Specialization ,该课程正式开课是8月15号,但是在此之前几天已经开放了,加入后可以免费学习7天,之后开始按月费49美元收取,直到取消这个系列的订阅为止。正式加入的好处是,除了课程视频,还可以在Coursera平台上做题和提交编程作业,得到实时反馈,如果通过的话,还可以拿到相应的课程证书。我在上周六加入了这门以 deeplearning.ai 的名义推出的Deep Learning(深度学习)系列课,并且利用业余时间完成了第一门课“Neural Networks and Deep Learning(神经网络与深度学习)”的相关课程,包括视频观看和交互练习以及编程作业,体验很不错。自从Coursera迁移到新平台后,已经很久没有上过相关的公开课了,这次要不是Andrew Ng 离开百度后重现MOOC江湖,点燃了内心久违的MOOC情节,我大概也不会这么认真的去上公开课了。

具体到该深度学习课程的组织上,Andrew Ng 把这门课程的门槛已经降到很低,和他的机器学习课程类似,这是一个面向AI初学者的深度学习系列课程

If you want to break into AI, this Specialization will help you do so. Deep Learning is one of the most highly sought after skills in tech. We will help you become good at Deep Learning.

In five courses, you will learn the foundations of Deep Learning, understand how to build neural networks, and learn how to lead successful machine learning projects. You will learn about Convolutional networks, RNNs, LSTM, Adam, Dropout, BatchNorm, Xavier/He initialization, and more. You will work on case studies from healthcare, autonomous driving, sign language reading, music generation, and natural language processing. You will master not only the theory, but also see how it is applied in industry. You will practice all these ideas in Python and in TensorFlow, which we will teach.

You will also hear from many top leaders in Deep Learning, who will share with you their personal stories and give you career advice.

AI is transforming multiple industries. After finishing this specialization, you will likely find creative ways to apply it to your work.

We will help you master Deep Learning, understand how to apply it, and build a career in AI.

虽然面向初学者,但是这门课程也会讲解很多实践中的工程经验,所以这门课程既适合没有经验的同学从基础学起,也适合有一定基础的同学查遗补漏:

从实际听课的效果上来看,如果用一个字来总结效果,那就是“值”,花钱也值。该系列第一门课是“Neural Networks and Deep Learning(神经网络与深度学习)” 分为4个部分:

1. Introduction to deep learning
2. Neural Networks Basics
3. Shallow neural networks
4. Deep Neural Networks

第一周关于“深度学习的介绍”非常简单,也没有编程作业,只有简单的选择题练习,主要是关于深度学习的宏观介绍和课程的相关介绍:

第二周关于“神经网络基础”从二分类讲起,到逻辑回归,再到梯度下降,再到用计算图(computation graph )求导,如果之前学过Andrew Ng的“Machine Learning(机器学习)” 公开课,除了Computation Graph, 其他应该都不会陌生:

第二周课程同时也提供了编程作业所需要的基础部分视频课程:Python and Vectorization。这门课程的编程作业使用Python语言,并且提供线上 Jupyter Notebook 编程环境完成作业,无需线下编程验证提交,非常方便。这也和之前机器学习课程的编程作业有了很大区别,之前那门课程使用Octave语言(类似Matlab的GNU Octave),并且是线下编程测试后提交给服务器验证。这次课程线上完成编程作业的感觉是非常棒的,这个稍后再说。另外就是强调数据处理时的 Vectorization(向量化/矢量化),并且重度使用 Numpy 工具包, 如果没有特别提示,请尽量避免使用 "for loop":

当然,这部分最赞的是编程作业的设计了,首先提供了一个热身可选的编程作业:Python Basics with numpy (optional),然后是本部分的相关作业:Logistic Regression with a Neural Network mindset。每部分先有一个引导将这部分的目标讲清楚,然后点击“Open Notebook”开始作业,Notebook中很多相关代码老师已经精心设置好,对于学生来说,只需要在相应提示的部分写上几行关键代码(主要还是Vectorization),运行后有相应的output,如果output和里面提示的期望输出一致的话,就可以点击保存继续下一题了,非常方便,完成作业后就可以提交了,这部分难度不大:

第三周课程关于“浅层神经网络”的课程我最关心的其实是关于反向传播算法的讲解,不过在课程视频中这个列为了可选项,并且实话实话Andrew Ng关于这部分的讲解并不能让我满意,所以如果看完这一部分后对于反向传播算法还不是很清楚的话,可以脑补一下《反向传播算法入门资源索引》中提到的相关文章。不过瑕不掩瑜,老师关于其他部分的讲解依然很棒,包括激活函数的选择,为什么需要一个非线性的激活函数以及神经网络中的初始化参数选择等问题:

虽然视频中留有遗憾,但是编程作业堪称完美,在Python Notebook中老师用代入模式系统的过了一遍神经网络中的基本概念,堪称“手把手教你用Python写一个神经网络”的经典案例:

update: 这个周六(2017.08.20)完成了第四周课程和相关作业,也达到了拿证书的要求,不过需要上传相关证件验证ID,暂时还没有操作。下面是关于第四周课程的一点补充。

第四周课程关于“深度神经网络(Deep Neural Networks)”,主要是多层神经网络的相关概念,有了第三周课程基础,第四周课程视频相对来说比较轻松:

不过本周课程的提供了两个编程作业,一个是一步一步完成深度神经网络,一个是深度神经网络的应用,依然很棒:

完成最后的编程作业就可以拿到相应的分数和可有获得课程证书了,不过获得证书前需要上传自己的相关证书完成相关身份验证,这个步骤我还没有操作,所以是等待状态:

这是我学完Andrew Ng这个深度学习系列课程第一门课程“Neural Networks and Deep Learning(神经网络与深度学习)” 的体验,如果用几个字来总结这个深度学习系列课程,依然是:值、很值、非常值。如果你是完全的人工智能的门外汉或者入门者,那么建议你先修一下Andrew Ng的 Machine Learning(机器学习)公开课 ,用来过渡和理解相关概念,当然这个是可选项;如果你是一个业内的从业者或者深度学习工具的使用者,那么这门课程很适合给你扫清很多迷雾;当然,如果你对机器学习和深度学习了如指掌,完全可以对这门课程一笑了之。

关于是否付费学习这门深度学习课程,个人觉得很值,相对于国内各色收费的人工智能课程,这门课程49美元的月费绝对物超所值,只要你有时间,你完全可以一个月学完所有课程。 特别是其提供的作业练习平台,在尝试了几个周的编程作业后,我已经迫不及待的想进入到其他周课程和编程作业了。

最后再次附上这门课程的链接,正如这门课程的目标所示:掌握深度学习、拥抱AI,现在就加入吧:Deep Learning Specialization: Master Deep Learning, and Break into AI

斯坦福大学机器学习第十一课“机器学习系统设计(Machine learning system design)”

Deep Learning Specialization on Coursera

斯坦福大学机器学习斯坦福大学机器学习第十一课“机器学习系统设计(Machine learning system design)”学习笔记,本次课程主要包括5部分:

1) Prioritizing what to work on: Spam classification example(工作的优先级:垃圾邮件分类例子)

2) Error analysis(错误分析)

3) Error metrics for skewed classes(不对称性分类的错误评估)

4) Trading off precision and recall(精确度和召回率的权衡)

5) Data for machine learning(数据对于机器学习的重要性)

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

1) Prioritizing what to work on: Spam classification example(工作的优先级:垃圾邮件分类例子)

首先让我们来看一下垃圾邮件和非垃圾邮件的例子,以下是一个垃圾邮件示例:

垃圾邮件举例-我爱公开课-52opencourse.com

我们将其标注为“垃圾(spam)", 用1表示;以下是一个非垃圾邮件的例子:

非垃圾邮件举例-我爱公开课-52opencourse.com

我们将其标注为“非垃圾(non-spam)",用0表示。

如果我们有一些这样标注好的垃圾和非垃圾邮件样本,如何来训练一个垃圾邮件分类器?很清楚这是一个有监督学习的问题,假设我们选择逻辑回归算法来训练这样的分类器,首先必须选择合适的特征。这里定义:

x = 邮件的特征;
y = 垃圾邮件(1) 或 非垃圾邮件(0)

我们可以选择100个典型的词汇集合来代表垃圾/非垃圾(单词),例如deal, buy, discount, andrew, now等,可以按它们的字母顺序排序。对于已经标注好的邮件训练样本,如果100个词汇中有单词j在样本中出现,就用1代表特征向量x中的xj,否则用0表示,这样训练样本就被特征向量x所替代:
垃圾邮件分类特征向量表示-我爱公开课-52opencourse.com
注意在实际使用中,我们不会手动去选择100个典型的词汇,而是从训练集中选择出现频率最高的前n个词,例如10000到50000个。

那么,如何高效的训练一个垃圾邮件分类器使其准确率较高,错误率较小?

- 首先很自然的考虑到收集较多的数据,例如"honeypot" project,一个专门收集垃圾邮件服务器ip和垃圾邮件内容的项目;

- 但是上一章已经告诉我们,数据并不是越多越好,所以可以考虑设计其他复杂的特征,例如利用邮件的发送信息,这通常隐藏在垃圾邮件的顶部;

- 还可以考虑设计基于邮件主体的特征,例如是否将"discount"和"discounts"看作是同一个词?同理如何处理"deal"和"Dealer"? 还有是否将标点作为特征?

- 最后可以考虑使用复杂的算法来侦测错误的拼写(垃圾邮件会故意将单词拼写错误以逃避垃圾邮件过滤器,例如m0rtgage, med1cine, w4tches)

2) Error analysis(错误分析)

在我们需要机器学习算法来解决一些实际问题时,建议:

  • - 从一个简单的算法入手这样可以很快的实现这个算法,并且可以在交叉验证集上进行测试;
  • - 画学习曲线以决定是否更多的数据,更多的特征或者其他方式会有所帮助;
  • - 错误分析:人工检查那些算法预测错误的例子(在交叉验证集上),看看能否找到一些产生错误的原因。

假设交叉验证集上有500个邮件样本,其中算法错分了100个邮件,那么我们就人工来检查这100个bad case, 并且按如下的方式对它们进行分类:

  • (i) 邮件是什么类型的?
  • (ii) 什么样的线索或特征你认为有可能对算法的正确分类有帮助?

数值评估的重要性:
在对bad case进行分析后,我们可能会考虑如下的方法:

  • 对于discount/discounts/discounted/discounting 能否将它们看作是同一个词?
  • 能不能使用“词干化”的工具包来取单词的词干,例如“Porter stemmer"?

错误分析不能决定上述方法是否有效,它只是提供了一种解决问题的思路和参考,只有在实际的尝试后才能看出这些方法是否有效。
所以我们需要对算法进行数值评估(例如交叉验证集误差),来看看使用或不使用某种方法时的算法效果,例如:

  • 不对单词提前词干:5%错误率   vs 对单词提取词干:3% 错误率
  • 对大小写进行区分(Mom / mom): 3.2% 错误率

3) Error metrics for skewed classes(不对称性分类的错误评估)

什么是不对称性分类?

以癌症预测或者分类为例,我们训练了一个逻辑回归模型h_\theta(x). 如果是癌症,y = 1, 其他则 y = 0。
在测试集上发现这个模型的错误率仅为1%(99%都分正确了),貌似是一个非常好的结果?
但事实上,仅有0.5%的病人得了癌症,如果我们不用任何学习算法,对于测试集中的所有人都预测y = 0,既没有癌症:

不对称分类预测例子-我爱公开课-52opencourse.com

那么这个预测方法的错误率仅为0.5%,比我们废好大力训练的逻辑回归模型的还要好。这就是一个不对称分类的例子,对于这样的例子,仅仅考虑错误率是有风险的。

现在我们就来考虑一种标准的衡量方法:Precision/Recall(精确度和召回率)

首先对正例和负例做如下的定义:

正负例问题-我爱公开课-52opencourse.com

其中:

True Positive (真正例, TP)被模型预测为正的正样本;可以称作判断为真的正确率

True Negative(真负例 , TN)被模型预测为负的负样本 ;可以称作判断为假的正确率

False Positive (假正例, FP)被模型预测为正的负样本;可以称作误报率

False Negative(假负例 , FN)被模型预测为负的正样本;可以称作漏报率

那么对于癌症预测这个例子我们可以定义:

Precision-预测中实际得癌症的病人数量(真正例)除以我们预测的得癌症的病人数量:

Precision精确度-我爱公开课-52opencourse.com

Recall-预测中实际得癌症的病人数量(真正例)除以实际得癌症的病人数量:

召回率-我爱公开课-52opencourse.com

4) Trading off precision and recall(精确度和召回率的权衡)

假设我们的分类器使用了逻辑回归模型,预测值在0到1之间:0 \le h_\theta(x) \le 1, 一种通常的判断正负例的方法是设置一个阈值,例如0.5:

  • 如果 h_\theta(x) \ge 0.5,则预测为1, 正例;
  • 如果 h_\theta(x) < 0.5, 则预测为0, 负例;

这个时候,我们就可以计算这个分类器的precision and recall(精确度和召回率):

精确度和召回率的权衡-我爱公开课-52opencourse.com

这个时候,不同的阈值回导致不同的精确度和召回率,那么如何来权衡这二值?对于癌症预测这个例子:

假设我们非常有把握时才预测病人得癌症(y=1), 这个时候,我们常常将阈值设置的很高,这会导致高精确度,低召回率(Higher precision, lower recall);

假设我们不希望将太多的癌症例子错分(避免假负例,本身得了癌症,确被分类为没有得癌症), 这个时候,阈值就可以设置的低一些,这又会导致高召回率,低精确度(Higher recall, lower precision);

这些问题,可以归结到一张Precision Recall曲线,简称PR-Curve:

Precision Recall 曲线-PR 曲线-我爱公开课-52opencourse.com

那么如何来比较不同的Precison/Recall值呢?例如,对于下表:

精确度召回率表对比-F值-我爱公开课-52opencourse.com

通常我们会考虑用它们的均值来做比较,但是这会引入一个问题,例如上面三组Precision/Recall的均值分别是:0.45, 0.4, 0.51,最后一组最好,但是最后一组真的好吗?如果我们将阈值定的很低,甚至为0, 那么对于所有的测试集,我们的预测都是y = 1, 那么recall 就是1.0,我们根本就不需要什么复杂的机器学习算法,直接预测y = 1就得了,所以,用Precison/Recall的均值不是一个好办法。

现在我们引入标准的F值或者F1-score:

F值F1值-我爱公开课-52opencourse.com

F值是对精确度和召回率的一个很好的权衡,两种极端的情况也能很好的平衡:

F值-Precision/Recall-我爱公开课-52opencourse.com
5) Data for machine learning(数据对于机器学习的重要性)

在设计一个高准确率的机器学习系统时,数据具有多大的意义? 2001年的时候,Banko and Brill曾做了一个实验,对易混淆的单词进行分类,也就是在一个句子的上下文环境中选择一个合适的单词,例如:
For breakfast I ate ___ eggs
给定{to, two, too},选择一个合适的单词。
他们用了如下几种机器学习算法:

  • -Perceptron(Logistic regression)
  • -Winnow
  • -Memory-based
  • -Naïve Bayes

根据训练集的不同规模记录这几种算法的准确率,并且做了如下的图:

数据对于机器学习的意义

最终得到的结论是:

“It's not who has the best algorithm that wins. It's who has the most data."

选择大数据的理由?

假设我们的特征x \in R^{n+1} 有很多的信息来准确的预测y, 例如,上面的易混淆词分类的例子,它有整个句子的上下文可以利用;

反过来,例如预测房价的时候,如果仅有房屋大小这个特征,没有其他的特征,能预测准确吗?

对于这样的问题,一种简单的测试方法是给定这样的特征,一个人类专家能否准确的预测出y?

如果一个学习算法有很多的参数,例如逻辑回归/线性回归有很多的特征,神经网络有很多隐藏的单元,那么它的训练集误差将会很小,但容易陷入过拟合;如果再使用很大的训练数据,那么它将很难过拟合,它的训练集误差和测试集误差将会近似相等,并且很小。所以大数据对于机器学习还是非常重要的。

参考资料:

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

第十一课“机器学习系统设计”的课件资料下载链接:
PPT   PDF

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

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

召回率 Recall、精确度Precision、准确率Accuracy、虚警、漏警等分类判定指标

True(False) Positives (Negatives)

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

 

本系列文章来自我在52opencourse上发布的笔记,这里做个备份,转载请注明出处:
http://52opencourse.com/275/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%9D%A6%E7%A6%8F%E5%A4%A7%E5%AD%A6%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AC%AC%E5%8D%81%E4%B8%80%E8%AF%BE-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1-machine-learning-system-design

斯坦福大学机器学习第十课“应用机器学习的建议(Advice for applying machine learning)”

Deep Learning Specialization on Coursera

斯坦福大学机器学习斯坦福大学机器学习第十课“应用机器学习的建议(Advice for applying machine learning)”学习笔记,本次课程主要包括7部分:

1) Deciding what to try next(决定下一步该如何做)

2) Evaluating a hypothesis(评估假设)

3) Model selection and training/validation/test sets(模型选择和训练/验证/测试集)

4) Diagnosing bias vs. variance(诊断偏差和方差)

5) Regularization and bias/variance(正则化和偏差/方差)

6) Learning curves(学习曲线)

7) Deciding what to try next (revisited)(再次决定下一步该做什么)

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

1) Deciding what to try next(决定下一步该如何做)

对学习算法进行调试:
假设你实现了一个正则化的线性回归算法来预测房价:

正则化线性回归模型-我爱公开课-52opencourse.com

然而,当你用它来测试一批新的房屋数据时,发现预测出来的数据是很不准确的,那么,下一步你该干啥?以下提供一些选项,但是暂时不过多解释,当我们学完这一章时,就知道选择这些选项的依据了。

- 获取更多的训练样本

- 尝试使用更少的特征的集合

- 尝试获得其他特征

- 尝试添加多项组合特征

- 尝试减小 \lambda

- 尝试增加 \lambda

机器学习(算法)诊断(Diagnostic)是一种测试方法,使你能对一种学习算法进行深入的认识,知道什么能运行,什么不能运行,并且能指导你如何最大限度的提高学习算法的性能。

诊断测试虽然需要一些时间来实现,但是这样做可以更有效的利用你的时间。

2) Evaluating a hypothesis(评估假设)

在房价预测问题中,如果Hypotheis如下:

评估假设hypothesis-我爱公开课-52opencourse.com

定义了如下的特征:

房价预测问题特征定义模版-我爱公开课-52opencourse.com

并且对训练数据做了非常好的拟合:

房价预测拟合图-我爱公开课-52opencourse.com

但是对不在训练集的新数据的预测的很差,失去通用性,那么,我们该如何评估这个假设?

首先,我们需要将数据集进行切分,一部分(例如70%)作为训练集,另一部分(例如30%)作为测试集:

假设评估中的数据集-我爱公开课-52opencourse.com

对于线性回归来说:
- 通过最小化训练集的error J(\theta)来学习参数\theta;
- 再计算测试集的error:

线性回归测试集error-我爱公开课-52opencourse.com

对于逻辑回归来说,与线性回归相似:
-首先从训练集中学习参数\theta;
-计算测试集的error:

逻辑回归测试集error公式-我爱公开课-52opencourse.com

-额外再加一个错误分类的error(或者称为0/1错误分类error);

3) Model selection and training/validation/test sets(模型选择和训练/验证/测试集)

首先让我们来回顾上面那个过拟合的例子:

机器学习模型选择过拟合例子-我爱公开课-52opencourse.com

一旦参数\theta_0, \theta_1,...,\theta_4对于某些数据集(训练集)适应(最终学习的参数),那么基于该数据及参数所计算的模型的error(训练误差J(\theta)很可能比实践泛化的error要小。

所以我们需要考虑一下模型选择(Model Selection)的问题,首先来看一个选择多项式回归模型的例子,我们有1-10次方的多项式回归模型,或者hypothesis:

模型选择多项式回归问题-我爱公开课-52opencourse.com

如何选择模型?

这里我们首先基于训练集学习参数,然后计算测试集的error, 最后选择测试集error最小的多项式回归模型,例如这里我们选择:

5次方多项式回归模型-我爱公开课-52opencourse.com

那么这个模型的泛化能力如何?测试集的error J_{test}(\theta^{(5)})基本能代表它的泛化能力,但是这是否准确?
我们用测试集来选择参数,然后有用测试集来评估假设(hypothesis), 看起来这样的评估是基于测试集进行了优化的?
的确存在一点问题,所以,这里我们再引入第三个集合:交叉验证集,我们用它来选择参数,而仅仅在测试集上评估假设。
对于原始的数据集,一种比较典型的划分方式是60%的训练集,20%的交叉验证集以及20%的测试集:
训练集-交叉验证集-测试集-我爱公开课-52opencourse.com

有了这三个数据集合,我们也可以分别定义它们各自的error:

训练集误差-验证集误差-测试集误差-我爱公开课-52opencourse.com

但是在实际使用时,我们通过训练集学习到参数, 再计算交叉验证集上的error, 再选择一个在验证集上error最小的模型,最后再在测试集上估计模型的泛化误差(error):

实践的模型选择过程-我爱公开课-52opencourse.com

4) Diagnosing bias vs. variance(诊断偏差和方差)

首先看一下偏差和方差的例子,这些例子和正则化那一章的例子相同,不过同时被贴上了偏差或方差的标签:

a) 高偏差(欠拟合):

高偏差-欠拟合-我爱公开课-52opencourse.com

b) 高方差(过拟合):
高方程-过拟合-我爱公开课-52opencourse.com

c) 合适的拟合:
合适的拟合-我爱公开课-52opencourse.com

我们来计算这三个模型的train error和cross validation error:

训练集及交叉验证集的误差-我爱公开课-52opencourse.com

我们会发现:

当多项式回归模型的次数d=1,也就是高偏差(欠拟合)时,训练集误差和验证集误差都比较大;

当d=4, 也就是高方差(过拟合)时,训练集误差会很小(拟合的非常好),但是验证集误差却很大;

当d=2,也就是拟合的刚刚好时,无论训练集误差还是验证集误差都刚刚好,介于上面两者之间。

如果用图形表示,就是下面这个样子:

训练集误差和验证集误差画图表示-我爱公开课-52opencourse.com

有了上面的解释,我们就可以来诊断偏差还是方差的问题了。假设你的学习算法表现的不尽如人意,没有达到你的期望,如何来判定它是一个偏差的问题还是方差的问题?我们可以计算他们的训练集误差和交叉验证集误差,如果它们落入了上图的“头部”区域,可以判断是偏差(欠拟合)问题,如果落入了“尾部”区域,可以判断是方差(过拟合)问题,如下图所示:

偏差问题还是方差问题-我爱公开课-52opencourse.com

最后,对于偏差还是方差的问题,可以做一个总结如下:

偏差方差问题总结-欠拟合过拟合-我爱公开课-52opencourse.com

5) Regularization and bias/variance(正则化和偏差/方差)

对于过拟合问题,正则化是一个非常有效的解决方案,所以这一小节我们将考虑正则化和偏差/方差的关系。首先来看一个正则化的线性回归的例子:正则化的线性回归模型-我爱公开课-52opencourse.com

如果正则化参数\lambda过大,一种极端的情况例如\lambda = 10000, 那么除去\theta_0,所学的其他参数都将近似为0,这就是欠拟合或高偏差的情况:

正则化参数过大欠拟合高偏差-我爱公开课-52opencourse.com

如果\lambda过小,极端的情况是\lambda = 0,等于没有对线性回归模型进行正则化,那么过拟合高方差的问题就很容易出现:

正则化参数过小过拟合高方差-我爱公开课-52opencourse.com

如果\lambda选取的比较合适,介于上述二者之间,那么我们将得到合适的拟合:

正则化参数合适拟合也合适-我爱公开课-52opencourse.com

那么,如何选择正则化参数 \lambda ?

对于数据集,我们仍将它划为3份:训练集,验证集,测试集。对于给定的正则化模型,例如上面的例子,我们按 \lambda 从小到大的顺序依次取数,然后在训练集上学习模型参数,在交叉验证集上计算验证集误差,并选择误差最小的模型, 也就是选择 \lambda,最后再在测试集上评估假设:

选择正则话参数的过程-我爱公开课-52opencourse.com

偏差/方差可以作为正则化参数 \lambda 的函数,与上一小节相似,我们也可以画出这个函数图,这样我们就能评估 \lambda 合适的选择范围了:

作为正则化参数函数的方差和偏差-我爱公开课-52opencourse.com

6) Learning curves(学习曲线)

这一小节考虑Learning curves(学习曲线)的问题,主要针对的是训练样本数目来观察训练集误差和验证集误差之间的差异:
训练集误差交叉验证集误差-我爱公开课-52opencourse.com

以下来考虑训练样本数目和模型的关系。以二次项多项式回归为例,如果仅有一个训练样本,那么模型很容易和样本点拟合,训练集误差近似为0,几乎可以忽略不计,而验证集误差可能会很大;如果有两个样本点,模型也很容易拟合样本点,训练集误差会略大一点,验证集误差可能会小一些;以此类推,当样本点比较多时,模型虽然不能拟合所有的样本点,但是泛化能力会更好一些,因此训练集误差会更大一点,而验证集误差会更小一些,如下图所示:

二次项多项式回归-我爱公开课-52opencoruse.com

而误差和训练样本数目m的关系或者学习曲线如下:

训练误差和验证集误差与训练样本大小的关系-我爱公开课-52opencourse.com

以下通过学习曲线来考虑高偏差和高方差的问题。对于高偏差欠拟合问题:

高偏差欠拟合问题举例-我爱公开课-52opencourse.com

即使增大了训练样本数目,模型拟合的依然不够,依然还是欠拟合问题。以下是高偏差欠拟合问题的学习曲线:
高偏差欠拟合问题学习曲线-我爱公开课-52opencourse.com

我们发现,如果一个学习算法是高偏差的,那么它的训练误差和验证集误差在一定的训练样本数目之后都很高,而且不会随着样本数目的增大而改变,所以对于高偏差欠拟合的问题,增加训练样本数目不是一个好的解决办法。

而对于高方差过拟合问题:

高方差过拟合问题-我爱公开课-52opencourse.com

增大样本数目后,模型的泛化能力会好一些,一些是高方差过拟合问题的学习曲线:

高方差过拟合学习曲线-我爱公开课-52opencourse.com

我们发现,如果一个学习算法是高方差的,那么它的训练误差和验证集误差在一定的训练样本数目之后虽然有差异,但是会随着样本数目的增大而减小她们之间的gap,所以对于高方差过拟合的问题,增加训练样本数目是解决方法之一。
7) Deciding what to try next (revisited)(再次决定下一步该做什么)

好了,说完了这么多与偏差/方差有关的问题,我们再次回到本章的开头的问题,
假设你实现了一个正则化的线性回归算法来预测房价,然而当你用它来测试一批新的房屋数据时,发现预测出来的数据是很不准确的,那么,下一步你该干啥?以下这些选项,分别针对的是高方差或高偏差的问题,你可以尝试用上述小节的一些方法来诊断你的学习算法,不过对于下述选项,需要你考虑一下是针对高偏差还是方差的问题,可以先思考一分钟再看答案:

- 获取更多的训练样本

- 尝试使用更少的特征的集合

- 尝试获得其他特征

- 尝试添加多项组合特征

- 尝试减小 \lambda

- 尝试增加 \lambda

答案:

- 获取更多的训练样本 - 解决高方差

- 尝试使用更少的特征的集合 - 解决高方差

- 尝试获得其他特征 - 解决高偏差

- 尝试添加多项组合特征 - 解决高偏差

- 尝试减小 \lambda - 解决高偏差

- 尝试增加 \lambda -解决高方差

最后我们再来看一下神经网络和过拟合的问题:

以下是“小”的神经网络(参数比较少,很容易欠拟合):

简单的神经网络-我爱公开课-52opencourse.com

它的计算代价较少。

以下是“大”的神经网络(参数比较多,很容易过拟合):

复杂的神经网络-我爱公开课-52opencourse.com

它的计算代价较大,对于神经网络过拟合的问题,可以通过正则化(\lambda)方法解决。

参考资料:

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

第十课的课件资料下载链接:
PPT   PDF

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

李航博士《统计学习方法

机器学习中的数学(2)-线性回归,偏差、方差权衡


如转载52opencourse上的任何原创文章,请注明出处,谢谢!

斯坦福大学机器学习第九课“神经网络的学习(Neural Networks: Learning)”

Deep Learning Specialization on Coursera

斯坦福大学机器学习斯坦福大学机器学习第九课“神经网络的学习(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/

 

斯坦福大学机器学习第八课“神经网络的表示(Neural Networks: Representation)”

Deep Learning Specialization on Coursera

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

1)  Non-linear hypotheses (非线性hypotheses)

2)  Neurons and the brain (神经元和大脑)

3)  Model representation I (模型表示一)

4)  Model representation II (模型表示二)

5)  Examples and intuitions I (例子和直观解释一)

6)  Examples and intuitions II (例子和直观解释二)

7)  Multi-class classification (多类分类问题)

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

1)  Non-linear hypotheses (非线性hypotheses)

非线性分类器:

我们之前谈过线性回归,逻辑回归,当我们遇到一些比较复杂的分类问题时,是否还有其他选择?例如,对于多项式回归:

多项式回归-我爱公开课-52opencourse.com

可以得到如下的非线性分类器:

非线性分类-我爱公开课-52opencourse.com
假设这是一个房价预测问题,不过这一次不再是预测房价(回归问题),而是预测未来6个月是否能售出(分类问题)。如果有100个独立特征,例如:

房价问题特征-我爱公开课——52opecourse.com

那么,当我们任取两个特征作为组合特征时,大约可以得到5000个特征(O(n^2));当我们任取3个特征作为组合特征时,大约可以得到170000(O(n^3))个特征.

这样的问题还有很多,例如在计算机视觉的汽车检测问题中,对于一副汽车图片来说,你可以轻易的辨别出这是一辆汽车,但是在计算机或者相机“眼里”,这只是一堆像素的数字矩阵而已:

计算机视觉汽车检测-我爱公开课-52opencourse.com

所以,对于汽车检测问题,我们需要一堆汽车图片:

汽车图片训练集-我爱公开课——52opencourse.com

和一堆非汽车图片作为训练集:

非汽车图片训练集-我爱公开课-52opencourse.com

训练一个用于汽车检测的分类器,对于一个测试图片,判断是否是汽车:

汽车检测测试-我爱公开课-52opencourse.com

一种方法是从每辆汽车是取两个像素点作为样本的特征,然后通过学习算法来训练分类器:

训练样本-我爱公开课-52opencourse.com

那么这些正负例(汽车 or 非汽车)训练样本可以用图形表示如下:

正负例样本-我爱公开课——52opencourse.com

假设每幅图片有50 * 50 = 2500个像素,那么每个样本有2500个像素点可以选择,如果是是二次项组合特征,大约有3百万个特征组合:

正负例样本—我爱公开课-52opencourse.com

对于这样的有着大量特征的分类问题,除了逻辑回归,是否还有其他的学习算法?接下来,我们将引入神经网络(Neural Networks),一种试图模拟人类大脑的学习算法,这个算法,对于复杂的假设空间和复杂的非线性问题有很好的学习能力。

2)  Neurons and the brain (神经元和大脑)

神经网络:

  • 起源于尝试让机器模仿大脑的算法;
  • 在80年代和90年代早期非常流行,慢慢在90年代后期衰落;
  • 最近得益于计算机硬件能力,又开始流行起来:对于很多应用,神经网络算法是一种“时髦”的技术;

大脑很神奇,可以让我们去听,去看,去触,也可以做数学题,做微积分,做很多神奇的事情,要模仿大脑,似乎需要我们写很多程序来做不同的事情?但是恰恰与此相反,做这些事情仅仅需要一个学习算法。下面是两个例子,是神经科学家做的非常酷的两个实验,这些实验可以说明我们仅需一种学习算法就可以模拟很多事情。

听觉皮层实验:

听觉皮层实验-我爱公开课-52opencourse.com

上图是大脑的一部分,红色的部分是听觉皮层,用来处理耳朵收集的声音信号并让大脑理解。神经科学家做了一个实验,切断耳朵和听觉皮层的联系,并且连接眼睛和听觉皮层,这样从眼睛采集的信号不再传送到视神经而是听觉皮层,这样做得最终结果是听觉皮层将会学习“看"。

体感皮层实验:

体感皮层实验-我爱公开课-52opencourse.com

上图的红色区域是体感皮层,主要身体的触觉,与听觉皮层实验相似,如果我们做相似的实验,那么体感皮层也将学会”看“。

上述两个实验统称为神经重布线实验(neuro-rewiring experiments), 这些实验给我们的感觉就是同样的一块儿脑组织既可以处理视觉,也可以处理听觉,还可以处理触觉,也许就存在一种学习算法来处理视觉信号,听觉信号和触觉信号。如果我们能近似模拟或实现大脑的这种学习算法,我们就能获得绝大部分大脑可以完成的功能,因为大脑可以自己去处理不同类型的数据。以下是一些模拟大脑传感器的例子:

大脑传感器-我爱公开课—52opencourse.com

包括:用舌头去“看”;回声定位或者声纳定位;触觉皮带-方向感(向小鸟一样感知方向);给青蛙植入第三只眼。

这些都是很酷的例子,也许人类的AI之梦并不遥远了!

3)  Model representation I (模型表示一)

大脑中的神经元:

神经网络的目标就是模拟大脑中的神经元或网络,因此在介绍hypotheses的表示之前,先让我们来看一看大脑中神经元:

大脑中的神经元-我爱公开课-52opencourse.com

注:关于这一块儿,由于不太熟悉,即使听Andrew Ng 老师的课也有很多糊涂的地方,于是Google了一下神经网络,发现了一个非常不错的介绍神经网络的材料《神经网络入门(连载)》,以下转载自该连载中对于大脑中的神经元的描述,我觉得非常清楚:

在人的生命的最初9个月内,这些细胞以每分钟25,000个的惊人速度被创建出来。神经细胞和人身上任何其他类型细胞十分不同,每个神经细胞都长着一根像 电线一样的称为轴突(axon)的东西,它的长度有时伸展到几厘米[译注],用来将信号传递给其他的神经细胞。神经细胞的结构如图1 所示。它由一个细胞体(soma)、一些树突(dendrite) 、和一根可以很长的轴突组成。神经细胞体是一颗星状球形物,里面有一个核(nucleus)。树突由细胞体向各个方向长出,本身可有分支,是用来接收信号 的。轴突也有许多的分支。轴突通过分支的末梢(terminal)和其他神经细胞的树突相接触,形成所谓的突触(Synapse,图中未画出),一个神经 细胞通过轴突和突触把产生的信号送到其他的神经细胞。

每个神经细胞通过它的树突和大约10,000个其他的神经细胞相连。这就使得你的头脑中所有神经细胞之间连接总计可能有l,000,000,000,000,000个。这比100兆个现代电话交换机的连线数目还多。所以毫不奇怪为什么我们有时会产生头疼毛病!

神经细胞利用电-化学过程交换信号。输入信号来自另一些神经细胞。这些神经细胞的轴突末梢(也就是终端)和本神经细胞的树突相遇形成突触 (synapse),信号就从树突上的突触进入本细胞。信号在大脑中实际怎样传输是一个相当复杂的过程,但就我们而言,重要的是把它看成和现代的计算机一 样,利用一系列的0和1来进行操作。就是说,大脑的神经细胞也只有两种状态:兴奋(fire)和不兴奋(即抑制)。发射信号的强度不变,变化的仅仅是频 率。神经细胞利用一种我们还不知道的方法,把所有从树突上突触进来的信号进行相加,如果全部信号的总和超过某个阀值,就会激发神经细胞进入兴奋 (fire)状态,这时就会有一个电信号通过轴突发送出去给其他神经细胞。如果信号总和没有达到阀值,神经细胞就不会兴奋起来。这样的解释有点过分简单 化,但已能满足我们的目的。

注意对于我们的这幅图来说,比较关键的是树突(dendrite)是输入(input wires),轴突(axon)是输出(output wires).

现在我们模拟大脑中的神经元结构建立一个简单的模型-Logistic unit:
神经元模型-我爱公开课-52opencourse.com

其中x_1, x_2, x_3称为输入(来自与其他神经元的输入信号), x_0称为偏置单元(bias unit), \theta称为权重或参数, h_\theta(x)称为激活函数(activation function), 这里的激活函数用了sigmoid(logistic) function:

g(z) = \frac{1}{1+e^{-z}}

将多个神经元组织在一起,我们就有了神经网络,例如如下的三层结构的神经网络:

神经网络模型-我爱公开课-52opencourse.com

image

第一层称为输入层,第二层是隐藏层,第三层是输出层,注意输入层和隐藏层都存在一个偏置(bias unit). 其中:

a^{j}_i = j层第i个单元的激活函数

\Theta^{(j)} = 从第j层映射到第j+1层的控制函数的权重矩阵

对于上图,我们有如下的公式表示:

神经网络数学表示-我爱公开课-52opencourse.com

如果神经网络在第j层有s_j个单元,在第j+1层有s_{j+1}个单元,那么权重矩阵\Theta^{(j)}的纬度是s_{j+1} \times (s_j + 1)

4)  Model representation II (模型表示二)

前馈网络:向量化实现

上一节我们讲到的神经网络称为前馈网络,也称前向网络,这种网络只在训练过程会有反馈信号,而在分类过程中数据只能向前传送,直到到达输出层,层间没有向后的反馈信号,因此被称为前馈网络。感知机( perceptron)与BP神经网络就属于前馈网络。我们已经给出了这个神经网络的模型表示,但是不够简洁,下面我们来向量化这个模型(具体的过程推荐看视频,以下仅给出总结):

前馈网络向量化实现-我爱公开课-52opencourse.com

其他的网络结构:

除了上述的前馈网络外,神经网络还有其他的一些网络结构,譬如:
神经网络其他结构-我爱公开课-52opencourse.com

其中第一层仍是输入层,最后一层第四层数输出层,中间两层是隐藏层。

5)  Examples and intuitions I (例子和直观解释一)

本节和下一节的例子均是“逻辑代数”中的逻辑函数,因此有必要在这里交代一点逻辑代数的背景,以下文字摘录自清华大学出版社的《电子技术基础》6.2节,电子书链接来自Google book,同时会在例子的介绍中引用该书中的一些基本定义:

逻辑代数是描述客观事物逻辑关系的数学方法,它首先是由英国数学家乔治*布尔提出,因此也称为布尔代数,而后克劳德*香农将逻辑代数应用到继电器开关电路的设计中,所以又称为开关代数。和普通代数一样,在逻辑代数中用字母表示变量与函数,但变量与函数的取值只有0和1两种可能。这里的0和1已不再表示数量的大小,只代表两种不同的逻辑状态。我们把这种二值变量称为逻辑变量,简称为变量,这种二值函数称为逻辑函数,简称为函数。

非线性分类器例子-异或(XOR)/同或(XNOR)

我们的目标是利用神经网络实现一个逻辑代数中的同或运算,因此首先介绍一下同或运算和异或运算:

同或逻辑和异或逻辑是只有两个逻辑变量的逻辑函数。如果当两个逻辑变量A和B相同时,逻辑函数F等于1,否则F等于0,这种逻辑关系称为同或。反之,如果当两个逻辑变量A和B相异时,逻辑函数F等于1,否则F等于0,这种逻辑关系称为异或。

下图是一个同或预算的示例,其中x_1, x_2是二值变量(0, 1):

神经网络同或运算-我爱公开课-52opencouse.com

可以将其对应到一个非线性分类器,如下图所示:

同或逻辑非线性分类器-我爱公开课-52opencourse.com

同或逻辑和异或逻辑互补:

同或运算and异或运算-我爱公开课-52opencourse.com

同或运算和异或运算是逻辑代数中的复合运算,因此下面我们先介绍三种最基本的逻辑运算(与逻辑运算、或逻辑运算、非逻辑运算),同时分别介绍其对应的神经网络实现,最后将这几种基本的逻辑运算组合,形成最终的同或逻辑运算的神经网络。

与(AND)逻辑运算示例:

相信大家对于与(AND)运算很熟悉,其基本的表达式如下:

与逻辑运算表达式-我爱公开课-52oencourse.com

我们可以用一个简单的神经网络(一个神经元)表示与逻辑运算:

与逻辑运算神经元模型-我爱公开课-52opencourse.com

其中激活函数h_\Theta(x)可以用如下公式表示:
与逻辑运算神经网络hypothese表达式——我爱公开课-52opencourse.com

这里的激活函数是sigmoid(logistic) function,其图形表示如下:

激活函数-gmoid function-我爱公开课——52opencourse.com

对于g(z)来说,当z>=4.0时,g(z)约等于1;当z<=-4.0时,g(z)约等于-1. 对于上述激活函数,将二值(0, 1)变量x_1, x_2代入,我们得到如下的对应表:

与逻辑真值表-我爱公开课——52opencourse.com

可以看出,这里的神经网络激活函数h_\Theta(x)近似等于与逻辑运算。

或(OR)逻辑运算示例:

同理,我们也给出一个简单的神经网络模型来模拟或(OR)逻辑运算:

或逻辑运算神经网络模型-我爱公开课-52opencourse.com

将二值(0, 1)变量x_1, x_2代入,得到如下的或逻辑运算对应表:

或逻辑运算对应表-我爱公开课——52opencourse.com

6)  Examples and intuitions II (例子和直观解释二)

继续上一节的例子,我们介绍第三个基本的逻辑运算:非(NOT)逻辑运算

用一个简单的神经网络模型来模拟非(NOT)逻辑运算:

非逻辑运算-我爱公开课——52opencourse.com

得到的对应表如下:
非逻辑运算真值表-我爱公开课-52opencourse.com

非逻辑运算仅针对一个输入值,我们来表示一个略微复杂的逻辑表达式:

复杂逻辑表达式-我爱公开课-52opencourse.com

这个表达式等于1的前提是”当且仅当x1=x2=0".

可以用神经网络模拟如下:
两个非逻辑运算的神经网络模型-我爱公开课-52opencourse.com

好了,有了上述三个基本逻辑运算的基础和相关的神经网络模型表示,我们可以将其组合为一个略微复杂的”同或(XNOR)逻辑运算的神经网络“:

同或逻辑运算神经网络图-我爱公开课-52opencourse.com

对于这个神经网络,这里稍作一点解释,同或运算的表达式如下:

F = A \odot B = AB + \overline{A}\overline{B}

上图中第二层隐藏网络a1和a2分别代表了A And B和Not A And Not B,a1和a2又做了一次或逻辑运算就得到了同或逻辑运算。该神经网络对应的输出与同或运算的真值表相同:

同或运算真值表-我爱公开课——52opencourse.com

第6节的手写数字识别(分类)的演示请读者自行观看视频,此处略。

7)  Multi-class classification (多类分类问题)

逻辑回归的笔记中,我们谈到了多类分类问题,而神经网络同样可以应用于多类分类问题,只不过在表达上略有区别。首先来看一个机器视觉中分类的例子:

机器视觉分类问题-我爱公开课-52opencourse.com

对于一个输入图片,需要识别其属于行人、轿车、摩托车或者卡车中的一个类型,这是一个多类分类的问题。用神经网络表示如下:

机器视觉神经网络分类模型-我爱公开课-52opencourse.com

其中输出h_\Theta(x)是一个4维向量,如下表示:

神经网络输出多分类问题表示-我爱公开课——52opencourse.com

当向量的某个元素为1,其他为0时,代表分类结果为某个为1元素所对应的类别。这与之前逻辑回归中的多类分类表示不同,在逻辑回归中,输出y属于类似于{1, 2, 3,4}中的某个值,而非一个向量。因此,如果要训练一个多类分类问题的神经网络模型,训练集是这样的:

多类分类问题神经网络模型训练集-我爱公开课——52opencourse.com

特别注意y^{(i)}是一个向量。

本章到此结束,下一讲将会将神经网络的学习问题。转载请注明出处"我爱公开课”,谢谢。

参考资料:

第八课“神经网络的表示”的课件资料下载链接,视频可以在Coursera机器学习课程上观看或下载: https://class.coursera.org/ml
PPT   PDF

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

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

神经网络编程入门

神经网络入门连载

http://library.thinkquest.org/29483/neural_index.shtml

http://home.agh.edu.pl/~vlsi/AI/xor_t/en/main.htm

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

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

清华大学出版社的《电子技术基础》,google book

Coursera公开课笔记: 斯坦福大学机器学习第七课“正则化(Regularization)”

Deep Learning Specialization on Coursera

斯坦福大学机器学习第七课"正则化“学习笔记,本次课程主要包括4部分:

1)  The Problem of Overfitting(过拟合问题)

2)  Cost Function(成本函数)

3)  Regularized Linear Regression(线性回归的正则化)

4)  Regularized Logistic Regression(逻辑回归的正则化)

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

1)  The Problem of Overfitting(过拟合问题)

拟合问题举例-线性回归之房价问题:

a) 欠拟合(underfit, 也称High-bias)

欠拟合-我爱公开课-52opencourse.com

b) 合适的拟合:

拟合问题-我爱公开课-52opencourse.com

c) 过拟合(overfit,也称High variance)

过拟合-我爱公开课-52opencourse.com

什么是过拟合(Overfitting):

如果我们有非常多的特征,那么所学的Hypothesis有可能对训练集拟合的非常好(J(\theta) = \frac{1}{m}\sum_{i=1}^m{\frac{1}{2}(h_\theta(x^{(i)}) - y^{(i)})^2} \approx 0),但是对于新数据预测的很差。

过拟合例子2-逻辑回归:

与上一个例子相似,依次是欠拟合,合适的拟合以及过拟合:

a) 欠拟合

逻辑回归欠拟合-我爱公开课-52opencourse.com

b) 合适的拟合

逻辑回归合适的拟合-我爱公开课-52opencourse.com

c) 过拟合

逻辑回归过拟合-我爱公开课-52opencourse.com

如何解决过拟合问题:

首先,过拟合问题往往源自过多的特征,例如房价问题,如果我们定义了如下的特征:

特征选择-我爱公开课-52opencourse.com

那么对于训练集,拟合的会非常完美:

房价问题过拟合-我爱公开课-52opencourse.com

所以针对过拟合问题,通常会考虑两种途径来解决:

a) 减少特征的数量:

-人工的选择保留哪些特征;

-模型选择算法(之后的课程会介绍)

b) 正则化

-保留所有的特征,但是降低参数\theta_j的量/值;

-正则化的好处是当特征很多时,每一个特征都会对预测y贡献一份合适的力量;

2)  Cost Function(成本函数)

依然从房价预测问题开始,这次采用的是多项式回归:

a) 合适的拟合:

多项式回归正则化-我爱公开课-52opencourse.com

b) 过拟合

多项式回归过拟合-我爱公开课-52opencourse.com

直观来看,如果我们想解决这个例子中的过拟合问题,最好能将x^3, x^4的影响消除,也就是让\theta_3 \approx 0, \theta_4 \approx 0.

假设我们对\theta_3, \theta_4进行惩罚,并且令其很小,一个简单的办法就是给原有的Cost function加上两个略大惩罚项,例如:

成本函数-我爱公开课-52opencourse.com

这样在最小化Cost function的时候,\theta_3 \approx 0, \theta_4 \approx 0.

正则化:

参数\theta_0, \theta_1, ..., \theta_n取小一点的值,这样的优点:

-“简化”的hypothesis;

-不容易过拟合;

对于房价问题:

-特征包括:x_1, x_2, ... , x_{100}

-参数包括:\theta_0, \theta_1, ..., \theta_n

我们对除\theta_0以为的参数进行惩罚,也就是正则化:

对cost function进行正则化-我爱公开课-52opencourse.com

正式的定义-经过正则化的Cost Function有如下的形式:

正则化正式的定义-我爱公开课-52opencourse.com

其中\lambda称为正则化参数,我们的目标依然是最小化J(\theta): min_{\theta} J(\theta)

例如,对于正则化的线性回归模型来说,我们选择\theta来最小化如下的正则化成本函数:
正则化的线性回归模型—我爱公开课-52opencourse.com

如果将 \lambda 设置为一个极大的值(例如对于我们的问题,设 \lambda = 10^{10})? 那么

-算法依然会正常的工作, 将 \lambda设置的很大不会影响算法本身;

-算法在去除过拟合问题上会失败;

-算法的结构将是欠拟合(underfitting),即使训练数据非常好也会失败;

-梯度下降算法不一定会收敛;

这样的话,除了\theta_0,其他的参数都约等于0, h_{\theta}(x) = \theta_0, 将得到类似如下的欠拟合图形:

欠拟合线性回归-我爱公开课——52opencourse.com

关于正则化,以下引自李航博士《统计学习方法》1.5节关于正则化的一些描述:

模型选择的典型方法是正则化。正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或罚项(penalty term)。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。比如,正则化项可以是模型参数向量的范数。

正则化符合奥卡姆剃刀(Occam's razor)原理。奥卡姆剃刀原理应用于模型选择时变为以下想法:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率。

3)  Regularized Linear Regression(线性回归的正则化)

线性回归包括成本函数,梯度下降算法及正规方程解法等几个部分,不清楚的读者可以回顾第二课第四课的笔记,这里将分别介绍正则化后的线性回归的成本函数,梯度下降算法及正规方程等。

首先来看一下线性回归正则化后的Cost function:

线性回归正则化Cost function-我爱公开课-52opencourse.com

我们的目标依然是最小化J(\theta),从而得到相应的参数\theta. 梯度下降算法是其中的一种优化算法,由于正则化后的线性回归Cost function有了改变,因此梯度下降算法也需要相应的改变:

正则化线性回归梯度下降算法-我爱公开课-52opencourse.com

注意,对于参数\theta,梯度下降算法需要区分\theta_0\theta_1, \theta_2, ... ,\theta_n

同样的正规方程的表达式也需要改变,对于

X 是m * (n+1)矩阵

正规方程-我爱公开课——52opencourse.com

y是m维向量:

正规方程表达式-我爱公开课-52opencourse.com

正则化后的线性回归的Normal Equation的公式为:

线性回归正则化Normal Equation-我爱公开课-52opencourse.com

假设样本数m小于等于特征数x, 如果没有正则化,线性回归Normal eqation如下:

\theta = (X^T X)^{-1}X^T y

如果X^T X不可逆怎么办?之前的办法是删掉一些冗余的特征,但是线性回归正则化后,如果\lambda > 0,之前的公式依然有效:

不可逆后的正规方程-我爱公开课-52opencourse.com

其中括号中的矩阵可逆。

4)  Regularized Logistic Regression(逻辑回归的正则化)

和线性回归相似,逻辑回归的Cost Function也需要加上一个正则化项(惩罚项),梯度下降算法也需要区别对待参数\theta).</p>
<p>??????????????????????????</p>
<p><img src=

??Hypothesis?????

????????-?????-52opencourse.com

?????????Cost Function???

???????Cost Function-?????-52opencourse.com

?????????

?????????????-?????-52opencourse.com

??" />h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}}$$.

参考资料:

第七课“正则化”的课件资料下载链接,视频可以在Coursera机器学习课程上观看或下载: https://class.coursera.org/ml
PPT   PDF

李航博士《统计学习方法

http://en.wikipedia.org/wiki/Regularization_%28mathematics%29

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

如转载52opencourse上的任何原创文章,请务必注明出处,谢谢!欢迎大家在这里讨论和学习!

Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)”

Deep Learning Specialization on Coursera

斯坦福大学机器学习第六课"逻辑回归“学习笔记,本次课程主要包括7部分:

1) Classification(分类)

2) Hypothesis Representation

3) Decision boundary(决策边界)

4) Cost function(代价函数,成本函数)

5) Simplified cost function and gradient descent(简化版代价函数及梯度下降算法)

6) Advanced optimization(其他优化算法)

7) Multi-class classification: One-vs-all(多类分类问题)

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

1) Classification(分类)

分类问题举例:

  1. 邮件:垃圾邮件/非垃圾邮件?
  2. 在线交易:是否欺诈(是/否)?
  3. 肿瘤:恶性/良性?

以上问题可以称之为二分类问题,可以用如下形式定义:

二分类问题-我爱公开课-52opencourse.com

其中0称之为负例,1称之为正例。

对于多分类问题,可以如下定义因变量y:

y \in \{0, 1, 2, 3, ..., n\}

如果分类器用的是回归模型,并且已经训练好了一个模型,可以设置一个阈值:

  • 如果h_\theta(x) \geq 0.5,则预测y=1,既y属于正例;
  • 如果h_\theta(x) < 0.5,则预测y=0,既y属于负例;

如果是线性回归模型,对于肿瘤这个二分类问题,图形表示如下:

线性回归二分类问题-我爱公开课-52opencourse.com

但是对于二分类问题来说,线性回归模型的Hypothesis输出值h_\theta(x)可以大于1也可以小于0。

这个时候我们引出逻辑回归,逻辑回归的Hypothesis输出介于0与1之间,既:

0 \leq h_\theta(x) \leq 1

注: 以下引自李航博士《统计学习方法》1.8节关于分类问题的一点描述:

分类是监督学习的一个核心问题,在监督学习中,当输出变量Y取有限个离散值时,预测问题便成为分类问题。这时,输入变量X可以是离散的,也可以是连续的。监督学习从数据中学习一个分类模型或分类决策函数,称为分类器(classifier)。分类器对新的输入进行输出的预测(prediction),称为分类(classification).

2) Hypothesis Representation

逻辑回归模型:

上一节谈到,我们需要将Hypothesis的输出界定在0和1之间,既:

0 \leq h_\theta(x) \leq 1

但是线性回归无法做到,这里我们引入一个函数g, 令逻辑回归的Hypothesis表示为:

h_\theta(x) = g(\theta^T x)

这里g称为Sigmoid function或者Logistic function, 具体表达式为:

g(z) = \frac{1}{1+e^{-z}}

Sigmoid 函数在有个很漂亮的“S"形,如下图所示(引自维基百科):

Sigmoid function-我爱公开课-52opencourse.com

综合上述两式,我们得到逻辑回归模型的数学表达式:

h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}}

其中\theta是参数。
Hypothesis输出的直观解释:

h_\theta(x) = 对于给定的输入x,y=1时估计的概率

例如,对于肿瘤(恶性/良性),如果输入变量(特征)是肿瘤的大小:

肿瘤分类例子-我爱公开课-52opencourse.com

这里Hypothesis表示的是”病人的肿瘤有70%的可能是恶性的“。

较正式的说法可以如下表示:

给定输入x,参数化的\theta(参数空间), y=1时的概率。

数学上可以如下表示:

h_\theta(x) = P(y=1| x;\theta)

对于因变量y=0或1这样的二分类问题:

P(y=0|x;\theta) + P(y=1|x;\theta) = 1

P(y=0|x;\theta) = 1 - P(y=1|x;\theta)

3) Decision boundary(决策边界)

如上节所述,逻辑回归模型可以如下表示:

逻辑回归模型表达式-我爱公开课-52opencourse.com

假设给定的阈值是0.5,当h_\theta(x) \geq 0.5时, y = 1;

h_\theta(x) < 0.5时,y = 0;

再次回顾sigmoid function的图形,也就是g(z)的图形:

sigomoid function g(x) -我爱公开课-52opencourse.com

g(z) \geq 0.5时, z \geq 0;

对于h_\theta(x) = g(\theta^Tx) \geq 0.5, 则\theta^Tx \geq 0, 此时意味着预估y=1;

反之,当预测y = 0时,\theta^Tx < 0;

我们可以认为\theta^Tx = 0是一个决策边界,当它大于0或小于0时,逻辑回归模型分别预测不同的分类结果。例如,

h_\theta(x) = g(\theta_0 + \theta_1 x_1 + \theta_2 x_2)

\theta_0, \theta_1, \theta_2分别取-3, 1, 1,

则当-3 + x_1 + x_2 \geq 0时, y = 1; 则x_1 + x_2 = 3是一个决策边界,图形表示如下:

决策边界-我爱公开课-52opencourse.com

上述只是一个线性的决策边界,当h_\theta(x)更复杂的时候,我们可以得到非线性的决策边界,例如:

非线性的决策边界1-我爱公开课-52opencourse.com

这里当x^{2}_{1} + x^{2}_{2} \geq 1时,y=1,决策边界是一个圆形,如下图所示:

非线性决策边界2-我爱公开课-52opencourse.com

更复杂的例子,请参考官方PPT,这里就不再举例了。

4) Cost function(代价函数,成本函数)

逻辑回归概览:

逻辑回归是一种有监督的学习方法,因此有训练集:

训练集-我爱公开课-52opencourse.com

对于这m个训练样本来说,每个样本都包含n+1个特征:

训练样本-我爱公开课-52opencourse.com

其中x \in R^{n+1}, x_0 = 1, y \in \{0, 1\}.

Hypothesis可表示为:

h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}}

与线性回归相似,我们的问题是如何选择合适的参数\theta?

Cost Function:

线性回归的Cost  Function定义为:

J(\theta) = \frac{1}{m}\sum_{i=1}^m{\frac{1}{2}(h_\theta(x^{(i)}) - y^{(i)})^2}

这里可以把\frac{1}{2}(h_\theta(x^{(i)}) - y^{(i)})^2简写为Cost(h_\theta(x^{(i)}, y),更简化的表达式为:

Cost(h_\theta(x), y) = \frac{1}{2}(h_\theta(x) - y)^2

如果和线性回归相似,这里取 h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}},会存在一个问题,也就是逻辑回归的Cost Function是“非凸”的,如下图所示:

非凸函数-我爱公开课-52opencourse.com

我们知道,线性回归的Cost Function是凸函数,具有碗状的形状,而凸函数具有良好的性质:对于凸函数来说局部最小值点即为全局最小值点,因此只要能求得这类函数的一个最小值点,该点一定为全局最小值点。

凸函数-我爱公开课-52opencouse.com

因此,上述的Cost Function对于逻辑回归是不可行的,我们需要其他形式的Cost Function来保证逻辑回归的成本函数是凸函数。

这里补充一段李航博士《统计学习方法》里关于Cost Function或者损失函数(loss function)的说明,大家就可以理解Cost Function不限于一种方式,而是有多种方式可选,以下摘自书中的1.3.2小节:

监督学习问题是在假设空间F中选取模型f作为决策函数,对于给定的输入X,由f(X)给出相应的输出Y,这个输出的预测值f(X)与真实值Y可能一致也可能不一致,用一个损失函数(loss function)或代价函数(cost function)来度量预测错误的程度。损失函数是f(X)和Y的非负实值函数,记作L(Y, f(X)).

统计学习中常用的损失函数有以下几种:

(1) 0-1损失函数(0-1 loss function):

L(Y,f(X)) = \left\{ \begin{array}{ll} 1, & Y \neq f(X)\\0, & Y = f(X)\end{array}\right.

(2) 平方损失函数(quadratic loss function)

L(Y,f(X)) = (Y - f(X))^2

(3) 绝对损失函数(absolute loss function)

L(Y,f(X)) = |Y - f(X)|

(4) 对数损失函数(logarithmic loss function) 或对数似然损失函数(log-likelihood loss function)

L(Y,P(Y|X)) = -logP(Y|X)

损失函数越小,模型就越好。

逻辑回归的Cost Function:

基于上节的描述和补充,这里我们选择对数似然损失函数作为逻辑回归的Cost Function:

逻辑回归之对数似然损失函数-我爱公开课-52opencourse.com

直观的来解释这个Cost Function,首先看当y=1的情况:

对数似然损失函数解释1-我爱公开课-52opencouse.com

直观来看, 如果y = 1, h_\theta(x)=1,则Cost = 0,也就是预测的值和真实的值完全相等的时候Cost =0;

但是,当h_\theta(x) \to 0时, Cost \to \infty

直观来看,由于预测的结果南辕北辙:

如果h_\theta(x) = 0, 也就是预测P(y = 1|x; \theta) = 0,也就是y=1的概率是0,但是实际上y = 1

因此对于这个学习算法给予一个很大的Cost的惩罚。

同理对于y=0的情况也适用:

对数似然损失函数解释2-我爱公开课-52opencourse.com

5) Simplified cost function and gradient descent(简化版代价函数及梯度下降算法)

逻辑回归的Cost Function可以表示为:

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

由于y 只能等于0或1,所以可以将逻辑回归中的Cost function的两个公式合并,具体推导如下:

逻辑回归代价函数推导-我爱公开课-52opencourse.com

故逻辑回归的Cost function可简化为:

逻辑回归代价函数简化公式-我爱公开课-52opencourse.com

对于这个公式,这里稍微补充一点,注意中括号中的公式正是对逻辑回归进行最大似然估计中的最大似然函数,对于最大似然函数求最大值,从而得到参数(\theta???????????????????????????Cost function?????</p>
<p>!min_\theta J(\theta)</p>
<p>???????x???????h_\theta(x)????????</p>
<p><img src=

?????????????????????????" />\theta???J(\theta):</p>
<p><img src=

??????" />J(\theta)????????????</p>
<p><img src=

?" />J(\theta)?????????????</p>
<p><img src=

?????????????????????????????" />h_\theta(x)??????</p>
<p><strong>6) Advanced optimization(??????)</strong></p>
<p>?????</p>
<p>????\theta?????????????</p>
<p><img src=

??????????????????

  • Conjugate gradient method(?????)
  • Quasi-Newton method(????)
  • BFGS method
  • L-BFGS(Limited-memory BFGS)

????????????????????????????????

??????????????

??????????????

????????-???????????????????????????????????52nlp??????????????????????????????????????????????

???????????Quasi-Newton Method??LBFGS???????????????????????????????????????????????????????????????????????????????????????????
1) Numerical Methods for Unconstrained Optimization and Nonlinear Equations?J.E. Dennis Jr. Robert B. Schnabel?
2) Numerical Optimization?Jorge Nocedal Stephen J. Wright?

7) Multi-class classification: One-vs-all(??????)

?????????

??????/??? ???????????????????

????(medical diagrams): ??????????

????????????

????????????

??????-?????-52opencourse.com

???????????

??????-?????-52opencourse.com

One-vs-all(one-vs-rest):

????????????????????????????????????????????????????

?????-one-vs-all-?????-52opencourse.com

????????????????????

one-vs-rest-?????-?????-52opencourse.com

??-One-vs-all?????

?????? i ??????????????" />h^{(i)}_\theta(x)$$,并且预测 y = i时的概率;

对于一个新的输入变量x, 分别对每一个类进行预测,取概率最大的那个类作为分类结果:

多分类问题预测-我爱公开课-52opencourse.com

参考资料:

第六课“逻辑回归”的课件资料下载链接,视频可以在Coursera机器学习课程上观看或下载: https://class.coursera.org/ml
PPT   PDF

李航博士《统计学习方法

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

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

无约束最优化

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

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

http://en.wikipedia.org/wiki/Quasi-Newton_method

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

http://en.wikipedia.org/wiki/Limited-memory_BFGS