标签归档:神经网络

AI Challenger 2017 奇遇记

Deep Learning Specialization on Coursera

本文记录一下去年下半年参加的AI Challenger比赛的过程,有那么一点意思,之所以说是奇遇,看完文章就明白了。

去年8月,由创新工场、搜狗、今日头条联合举办的“AI challenger全球AI挑战赛”首届比赛正式开赛。比赛共设6个赛道,包括英中机器同声传译、英中机器文本翻译、场景分类、图像中文描述、人体骨骼关键点预测以及虚拟股票趋势预测,一时汇集了众多关注的目光:

“AI Challenger 全球AI挑战赛”是面向全球人工智能(AI)人才的开放数据集和编程竞赛平台,致力于打造大型、全面的科研数据集与世界级竞赛平台,从科研角度出发,满足学术界对高质量数据集的需求,推进人工智能在科研与商业领域的结合,促进世界范围内人工智能研发人员共同探索前沿领域的技术突破及应用创新。在2017年的首届大赛中,AI Challenger发布了千万量级的机器翻译数据集、百万量级的计算机视觉数据集,一系列兼具学术前沿性和产业应用价值的竞赛以及超过200万人民币的奖金,吸引了来自全球65个国家的8892支团队参赛,成为目前国内规模最大的科研数据集平台、以及最大的非商业化竞赛平台。 AI Challenger以服务、培养AI高端人才为使命,打造良性可持续的AI科研新生态。

不过AI Challenger 最吸引我的不是每项比赛数十万元的奖金(这个掂量一下也拿不到),而是英中机器翻译提供的高达1千万的中英双语句对语料,这个量级,在开放的中英语料里仅次于联合国平行语料库,相当的有诱惑力:

简介
英中机器文本翻译作为此次比赛的任务之一,目标是评测各个团队机器翻译的能力。本次机器翻译语言方向为英文到中文。测试文本为口语领域数据。参赛队伍需要根据评测方提供的数据训练机器翻译系统,可以自由的选择机器翻译技术。例如,基于规则的翻译技术、统计机器翻译及神经网络机器翻译等。参赛队伍可以使用系统融合技术,但是系统融合系统不参与排名。需要指出,神经网络机器翻译常见的Ensemble方法,本次评测不认定为系统融合技术。

数据说明
我们将所有数据分割成为训练集、验证集和测试集合。我们提供了超过1000万的英中对照的句子对作为数据集合。其中,训练集合占据绝大部分,验证集合8000对,测试集A 8000条,测试集B 8000条。训练数据主要来源于英语学习网站和电影字幕,领域为口语领域。所有双语句对经过人工检查,数据集从规模、相关度、质量上都有保障。一个英中对照的句子对,包含一句英文和一句中文文本,中文句子由英文句子人工翻译而成。中英文句子分别保存到两个文件中,两个文件中的中英文句子以行号形成一一对应的关系。验证集和测试集最终是以标准的XML格式发布给参赛方。

训练条件
本次评测只允许参赛方使用使用评测方指定的数据训练机器翻译系统,并对其排名。参赛方需遵守以下2018免费送彩金游戏训练方式的说明。参赛方可以使用基本的自然语言处理工具,例如中文分词和命名实体识别。

大概十年前我读研期间做得是统计机器翻译,那个时候能接触到的中英句对最多到过2、3百万,用得最多的工具是知名的开源统计机器翻译工具Moses,也在这里写了不少相关的文章。后来工作先后从事过机器翻译、广告文本挖掘相关的工作,与机器翻译渐行渐远。这一两年,我花了很多时间在专利数据挖掘上,深知专利数据翻译的重要性,也了解到机器翻译对于专利翻译有天然的吸引力。加之这几年来深度学习如火如荼,神经网络机器翻译横空出世,Google, 微软,Facebook等公司2018免费送彩金游戏机器翻译的PR一浪高过一浪,大有“取代”人翻译的感觉,这些都都给了我很大的触动,但是一直没有机会走进神经网络机器翻译。刚好这个时候自己又在家里重新组了一台1080TI深度学习主机,加上AI Challenger提供的机器翻译数据机会,我把这次参赛的目标定为:

  • 了解目前神经网络机器翻译NMT的发展趋势
  • 学习并调研相关的NMT开源工具
  • 将NMT应用在中英日三语之间的专利翻译产品上

相对于统计机器翻译,神经网络机器翻译的开源工具更加丰富,这也和最近几年深度学习开源平台遍地开花有关,每个深度学习平台基本上都附有一两个典型的神经网络机器翻译工具和例子。不过需要说明的是,以下这些2018免费送彩金游戏NMT工具的记录大多数是去年9月到12月期间的调研,很多神经网络机器翻译工具还在不断的迭代和演进中,下面的一些描述可能都有了变化。

虽然之前也或多或少的碰到过一些NMT工具,但是这一次我的神经网络机器翻译开源工具之旅是从OpenNMT开启的,这个开源NMT工具由哈佛NLP组推出,诞生于2016年年末,不过主版本基于Torch, 默认语言是Lua,对于喜爱Python的我来说还不算太方便。所以首先尝试了OpenNMT的Pytorch版本: OpenNMT-py,用AI Challenger官方平台提供中英翻译句对中的500万句对迅速跑了一个OpenNMT-py的默认模型:

Step 2: Train the model
python train.py -data data/demo -save_model demo-model
The main train command is quite simple. Minimally it takes a data file and a save file. This will run the default model, which consists of a 2-layer LSTM with 500 hidden units on both the encoder/decoder.

然后走了一遍AI Challenger的比赛流程,第一次提交记录如下:

2017.09.26 第一次提交:训练数据500万, opennmt-py, default,线下验证集结果:0.2325,线上提交测试集结果:0.22670

走完了比赛流程,接下来我要认真的审视这次英中机器翻译比赛了,在第二轮训练模型开始前,我首先对数据做了标准化的预处理:

  1. 数据shuf之后选择了8000句对作为开发集,8000句对作为测试集,剩下的980多万句对作为训练集;
  2. 英文数据按照统计机器翻译工具Moses 的预处理流程进行了tokenize和truecase;中文数据直接用Jieba中文分词工具进行分词;

这一次我将目光瞄准了Google的NMT系统:GNMT, Google的Research Blog是一个好地方: Building Your Own Neural Machine Translation System in TensorFlow,我从这篇文章入手,然后学习使用Tensorflow的NMT开源工具: Tensorflow-NMT,第一次使用subword bpe处理数据,训练了一个4层的gnmt英中模型,记录如下:

2017.10.05 第二次提交:训练集988万句对, tf-nmt, gnmt-4-layer,bpe16000, 线下验证集结果0.2739,线上提交测试集结果:0.26830

这次的结果不错,BLEU值较第一次提交有4个点的提升,我继续尝试使用bpe处理,一周后,做了第三次提交:

2017.10.12 第三次提交:训练集988万句对,tf-nmt, gnmt-4-layer,bpe32000, 线下验证集结果0.2759,线上提交测试集结果:0.27180

依然有一些提高,不过幅度不大。这一次,为了调研各种NMT开源工具,我又把目光锁定到OpenNMT,事实上,到目前为止,接触到的几个神经网络机器翻译开源工具中,和统计机器翻译开源工具Moses最像的就是OpenNMT,有自己独立的官网,文档相当详细,论坛活跃度很高,并且有不同的分支版本,包括主版本 OpenNMT-lua, Pytorch版本 OpenNMT-py, TensorFlow版本 OpenNMT-tf 。所以为了这次实验我在深度学习主机中安装了Torch和OpenNMT-lua版本,接下来半个月做了两次OpenNMT训练英中神经网络翻译模型的尝试,不过在验证集的结果和上面的差不多或者略低,没有实质性提高,所以我放弃了这两次提交。

也在这个阶段,从不同途径了解到Google新推的Transformer模型很牛,依然从Google Research Blog入手:Transformer: A Novel Neural Network Architecture for Language Understanding ,学习这篇神文:《Attention Is All You Need》 和尝试相关的Transformer开源工具 TensorFlow-Tensor2Tensor。一图胜千言,谷歌AI博客上给得这个图片让人无比期待,不过实际操作中还是踩了很多坑:

还是和之前学习使用开源工具的方法类似,我第一次的目标主要是走通tensor2tensor,所以跑了一个 wmt32k base_single 的英中transformer模型,不过结果一般,记录如下:

2017.11.03 第六次实验:t2t transformer wmt32k base_single, 线下验证集BLEU: 0.2605,未提交

之后我又换为wmt32k big_single的设置,再次训练英中transformer模型,这一次,终于在线下验证集的BLEU值上,达到了之前GNMT最好的结果,所以我做了第四次线上提交,不过测试集A的结果还略低一些,记录如下:

2017.11.06 第七次实验:t2t transformer wmt32k big_single,线下验证集结果 0.2759, 线上测试集得分:0.26950

不过这些结果和博客以及论文里宣称的结果相差很大,我开始去检查差异点,包括tensor2tensor的issue以及论文,其实论文里2018免费送彩金游戏实验的部分交代的很清楚:

On the WMT 2014 English-to-German translation task, the big transformer model (Transformer (big) in Table 2) outperforms the best previously reported models (including ensembles) by more than 2.0 BLEU, establishing a new state-of-the-art BLEU score of 28.4. The configuration of this model is listed in the bottom line of Table 3. Training took 3.5 days on 8 P100 GPUs. Even our base model surpasses all previously published models and ensembles, at a fraction of the training cost of any of the competitive models.

On the WMT 2014 English-to-French translation task, our big model achieves a BLEU score of 41.0, outperforming all of the previously published single models, at less than 1/4 the training cost of the previous state-of-the-art model. The Transformer (big) model trained for English-to-French used dropout rate Pdrop = 0.1, instead of 0.3.

For the base models, we used a single model obtained by averaging the last 5 checkpoints, which were written at 10-minute intervals. For the big models, we averaged the last 20 checkpoints. We used beam search with a beam size of 4 and length penalty α = 0.6 . These hyperparameters were chosen after experimentation on the development set. We set the maximum output length during inference to input length + 50, but terminate early when possible.

总结起来有2个地方可以改进:第一,是对checkpoints进行average, 这个效果立竿见影:

2017.11.07 第八次实验:t2t transformer wmt32k big_single average model, 线下验证集得分 0.2810 , 提交测试集得分:0.27330

第二,要有高性能的深度学习服务器。谷歌实验中最好的结果是在8块 P100 GPU的机器上训练了3.5天,对我的单机1080TI深度学习主机来说,一方面训练时对参数做了取舍,另一方面用时间换空间,尝试增加训练步数,直接将训练步数增加到100万次,结果还是不错的:

2017.11.15 第九次实验:t2t transformer wmt32k big_single 1000k 10beam,线下验证集得分0.2911,线上提交测试集得分0.28560

然后继续average checkpoints:
2017.11.16 第十次提交: t2t transformer wmt32k big_single 1000k average 10beam, 线下验证集得分0.2930,线上提交测试集得分0.28780

这两个方法确实能有效提高BLEU值,所以我继续沿用这个策略,按着训练时间推算了一下,估计这台机器在12月初比赛正式结束前大概可以训练一个250万次的模型,当然,这个给自己预留了最后提交比赛结果的时间。不过在11月27日,我在英中机器翻译比赛测试集A结束提交前提交了一个训练了140万次,并做了模型average的提交,算是这个赛道Test A关闭前的最后一次提交:

2017.11.27 第十一次提交 t2t transformer wmt32k big_single 1400k.beam10.a0.9.average, 验证集 0.2938 测试集 0.28950

12月1日凌晨测试集B正式放出,这个是最终排名的重要依据,只有2次提交机会,并且结果不会实时更新,只有等到12月3号之后才会放出最终排名。我的英中2500k Transformer模型大概在12月2号训练完毕,我做了Test B的第一次提交:

2017.12.2 average b10 a0.9: 0.2972(验证集)

之后,我逐一检查了保留的20个checkpoint在验证集上的得分,最终选择了高于平均值的11个checkpoint的average又做了第二次提交,虽然验证集只高了0.0001, 但是在这样的比赛中,“蚊子肉也是肉啊”:

2017.12.3 average select 11 b10 a0.9: 0.2973(验证集)

这就是我在英中机器文本翻译比赛中的整个历程,在Test A的最终排名大概在二十几名,但是最后一次模型的结果应该还能提高,所以预期是前20,剩下的就是等待TEST B的最终排名结果了。做到这个份上,其实我还挺满意的,不过故事如果真的到此就结束了,那算不上奇遇,有意思的事情才刚开始。

AI Challenger 2017有两个赛道和机器翻译有关,一个是英中机器文本翻译比赛(最高奖金30万),另外一个是英中机器同声传译比赛(最高奖金40万),一开始报名的时候,直观上觉得后者比较复杂,一方面奖金部分说明了问题,另外赛题描述部分也让人觉得涉及到语音处理,比较复杂:

简介
随着最近深度学习在语音、自然语言处理里面的应用,语音识别的错误率在不断降低,机器翻译的效果也在不断提高。语音处理和机器翻译的进步也推动机器同声传译的进步。如果竞赛任务同时考虑语音识别、机器翻译和语音合成这些项目,参赛队伍遇到的难度会很大。所以本次评测重点也在语音识别后的文本处理和机器翻译任务。翻译语言方向为英文到中文。

语音识别后处理模块:语音识别后的文本与书面语有很多不同。识别后文本具有(1)包含有识别错误;(2)识别结果没有标点符号;(3)源端为比较长的句子,例如对40~50s的语音标注后的文本,没有断句;(4)口语化文本,夹杂语气词等特点。由于本次比赛没有提供错误和正确对照的文本用于训练纠错模块。本次比赛提供的测试集合的源端文本是人工对语音标注后的文本,不包含识别错误。针对其它的特点,参赛队伍可以这几个方面考虑优化,但不限于以下几个方面:

1. 针对无标点的情况,参赛方可以利用提供的英文单语数据训练自动标点模块。用自动标点模块对测试集合文本进行添加标点。自动标点也属于序列标注任务,选手可以使用统计模型或是神经网络的模型进行建模。

2. 针对断句:源端文本都是比较长的文本,不利于机器翻译,参赛者可以设定断句策略。例如,参赛者可以依据标点来进行断句,将每个小的分句送入机器翻译系统。

3. 针对口语化:参赛队伍可以制定一些去除口语词的规则来处理测试集合。

机器翻译模块:将识别后处理的文本翻译成目标语言。参赛队伍需要根据评测方提供的数据训练机器翻译系统,可以自由的选择机器翻译技术。例如,基于规则的翻译技术、基于实例的翻译技术、统计机器翻译及神经网络机器翻译等。参赛队伍可以使用系统融合技术,但是系统融合系统不参与排名。

数据说明
机器翻译训练集。我们提供了1000万左右英中对照的句子对作为训练集合。训练数据领域为口语领域。所有双语句对经过人工检查,数据集从规模、相关度、质量上都有保障。一个英中对照的句子对,包含一句英文和一句中文文本,中文句子由英文句子人工翻译而成。

自动标点训练数据。选手可以利用提供的1000万文本训练自动标点系统。

验证集和测试集。我们会分别选取多个英语演讲的题材的音频,总时长在3~6小时之间,然后按照内容切分成30s~50s不等长度的音频数据,人工标注出音频对应的英文文本。人工标注的文本不翻译识别错误、无标点、含有语气词等。人工标注的好的英文文本会由专业译员翻译成中文文本,就形成了英中对照的句子对。抽取的英中对照的句子对会被分割为验证集和测试集。验证集和测试集最终是以标准的XML格式提供给选手。

我在一开始的时候考虑到这个比赛同样提供上千万句对的语料,所以当时顺手报名了这个同声传译比赛,但是直到最后一刻,我还没有仔细看过或者准备过这个任务。不过12月2号当我第一次完成英中机器翻译比赛的测试集B提交后,以完成作业的心态了解了一下这个英中机器同传比赛的题意以及数据集,发现这里提供的训练集和英中机器翻译比赛的数据是一致的,也就是说机器翻译模块可以复用之前训练的英中Transformer模型,而真正需要解决的,是标点符号自动标注模块以及断句模块。

感谢Google、Github和开源世界,在测试了几个自动标点标注模块后,我把目光锁定在 punctuator2(A bidirectional recurrent neural network model with attention mechanism for restoring missing punctuation in unsegmented text), 一个带attention机制的双向RNN无标点文本标点符号还原工具,通过它很快的构建了英文文本自动标点标注模块,并且用在了英中机器同声传译比赛的验证集和测试集上,验证集结果不算太差,所以对应英中机器翻译的模型,我也做了两次测试集B的提交,但是至于结果如何,我根本无法判断,因为在测试集A上,我没有提交过一次,所以无法判断测试集和验证集的正相关性。但是完成了 AI Challenger 的相关“作业“,我基本上心满意足了,至于结果如何,Who Care?

大约一个周之后测试集B上的结果揭晓,我在英中机器翻译文本比赛上进了前20,英中同声传译比赛上进了前10,不过前者的参数队伍有150多支,后者不足30支,特别是测试集B的提交队伍不到15支,有点诡异。原本以为这就结束了,不过到了12月中旬的某个周末,我微信突然收到了AI Challenger小助手的催收信息,大意是需要提交什么代码验证,问我为什么一直没有提交?我一脸错愕,她让我赶紧查看邮件,原来早在一个周之前的12月9号,AI Challenger发了一封邮件,主题是这样的:“AI Challenger 2017 TOP10 选手通知”

亲爱的AI Challenger,

恭喜你,过五关斩六将进入了TOP10,进入前十的机率是0.56%,每一位都是千里挑一的人才。非常不容易也非常优秀!

为了保证竞赛公平公正性,您还需要在12月10日中午12点前按如下格式提交您的代码至大赛核验邮箱aichallenger@chuangxin.com

邮件格式:
主题:AI ChallengerTOP10代码提交-队伍名称-赛道
正文:
队伍名称
全体队员信息:姓名-AI Challenger昵称-电话-邮箱-所在机构-专业&年级

附件:(文件名称)
1- 代码

非常感谢您的合作。

原来测试集B上的前10名同学需要提交代码复核,我原来以为只有前5名需要去北京现场答辩的同学要做这个,没想到前10名都需要做,赶紧和AI Challenger小助手沟通了一下,因为自己几乎都是通过开源工具完成的比赛,就简单的提交了一份说明文档过去了。正是在参加AI Challenger比赛的同一时期,我们的专利机器翻译产品也马不停蹄的开展了,出于对两个赛道前几名队伍BLEU值的仰望,我准备去北京旁听一下现场答辩,所以当天还和AI Challenger小助手沟通了一下现场观摩的问题,小助手说,前十名可以直接来,所以我觉得进入前十名还是不错的。

没想到第二天一早又收到Challenger小助手的微信留言,大意是:你不用自己买票来观摩比赛了,因为前面有几支队伍因种种原因放弃现场答辩,你自动递补为第5名,需要来北京参加12月21日的现场决赛答辩和颁奖礼,我们给你买机票和定酒店。吃不吃惊?意不意外?我当时的第一反应这真是2017年本人遇到最奇特的一件事情。。。然后很快收到了一封决赛邀请函:

亲爱的AI Challenger,

恭喜你,过五关斩六将走到了决赛,进入决赛的机率是0.28%,每一位都是千里挑一的人才。非常不容易也非常优秀!

“AI Challenger 全球AI挑战赛”面向人工智能领域科研人才,致力于打造大型、全面的科研数据集与世界级竞赛平台。由创新工场、搜狗、今日头条联合创建,旨在从科研角度出发,满足学术界对高质量数据集的需求,推进人工智能在科研与商业领域的结合,促进世界范围内人工智能研发人员共同探索前沿领域的技术突破及应用创新。

2017年是AI Challenger的诞生年,我们公布了百万量级的计算机视觉数据集、千万量级的机器翻译数据集,并主办多条细分赛道的AI竞赛。本次英中机器同传竞赛主要任务为集中优化语音识别后处理和机器翻译模块,旨在解决机器同声传译中的技术问题。

......

恭喜所有的入围选手!所有的入围者将在12月21日到中国北京进行现场答辩,本次大赛将以最终榜单排名结合答辩表现,加权计算总成绩,决出最终的大奖。

在答辩之前,我们需要Top5团队于12月18日下午17点前提交包括:
1-答辩PPT、
2-队员情况(个人姓名、个人高清半身照片、个人学校-年级-专业/公司-部门-职务、是否有指导老师-如有,请附上老师150字内简介)
3-团队出席名单(涉及报销事宜)
4-代码(供审查,如有作弊情况将按大赛规则处理)
5-150字内个人简介-选手手册素材(建议为三段话,第一段话是背景介绍,包括你的学校、实验室、师从老师等信息;第二段话可以介绍你的技术优势,包括Paper、竞赛履历、实习履历、项目经历;第三段话支持自由发挥,个人主页、你的爱好,让我们发现一个独一无二的你)
......

虽然去北京参加现场决赛也只是陪太子读书,不过最终还是决定去参加现场答辩,当然这里还有一关需要验证,前10名只需要提交代码或者代码描述即可,前5名参加决赛的同学还要复现整个流程,我很快被小助手拉入一个小群,里面有来自搜狗的工程师同学,他们给我提供了一台深度学习机器,让我复现整个过程以及最终核验比赛结果。当然,留给我的时间比较紧张,12月21号要去北京参加现场答辩,当时已经是12月18号了,所以Challenger小助手特地给我将时间留到了最后一刻。准备PPT和复现整个流程同时进行(复现并不是等于重新训练一遍,譬如机器翻译模型可以直接上传之前训练好的),终于赶在最后时刻完工。不过我自己答辩现场的感觉匆匆忙忙,效果也一般,但是学习了一圈其他获奖队伍的思路,很有收获:Transformer是主流获奖模型,但是很多功夫在细节,包括数据预处理阶段的筛选,数据 & 模型后处理的比拼,当然,牛逼的深度学习机器也是不可或缺的。

附上当时现场答辩PPT上写得几点思考,抛砖引玉,欢迎大家一起探讨机器翻译特别是神经网络机器翻译的现状和未来:

  • NMT开源工具的生态问题,这个过程中我们尝试了OpenNMT, OpenNMT-py, OpenNMT-tf, Tensorflow-nmt, Tensor2Tensor等工具, 总体感觉OpenNMT的生态最完备,很像SMT时代的Moses
  • NMT的工程化和产品化问题,从学术产品到工程产品,还有很多细节要打磨
  • 面向垂直领域的机器翻译:专利机器翻译是一个多领域的机器翻译问题
  • 由衷感谢这些从idea到开源工具都无私奉献的研究者和从业者们,我们只是站在了你们的肩膀上

当然,参加完AI Challenger比赛之后我们并没有停止对于神经网络机器翻译应用的探索,也有了一些新的体会。这半年来我们一直在打磨AIpatent机器翻译引擎,目标是面向中英专利翻译、中日专利翻译、日英专利翻译提供专业的专利翻译引擎,欢迎有这方面需求的同学试用我们的引擎,目前还在不断迭代中。

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:

本文链接地址:AI Challenger 2017 奇遇记 /?p=10218

反向传播算法入门亚美游AMG88索引

Deep Learning Specialization on Coursera

1、一切从维基百科开始,大致了解一个全貌:
反向传播算法 Backpropagation

2、拿起纸和笔,再加上ipython or 计算器,通过一个例子直观感受反向传播算法:
A Step by Step Backpropagation Example

3、再玩一下上篇例子对应的200多行Python代码: Neural Network with Backpropagation

4、有了上述直观的反向传播算法体验,可以从1986年这篇经典的论文入手了:Learning representations by back-propagating errors

5、如果还是觉得晦涩,推荐读一下"Neural Networks and Deep Learning"这本深度学习在线AMG88的第二章:How the backpropagation algorithm works

6、或者可以通过油管看一下这个神经网络教程的前几节2018免费送彩金游戏反向传播算法的视频: Neural Network Tutorial

7、hankcs 同学对于上述视频和相关材料有一个解读: 反向传播神经网络极简入门

8、这里还有一个比较简洁的数学推导:Derivation of Backpropagation

9、神牛gogo 同学对反向传播算法原理及代码解读:神经网络反向传播的数学原理

10、2018免费送彩金游戏反向传播算法,更本质一个解释:自动微分反向模式(Reverse-mode differentiation )Calculus on Computational Graphs: Backpropagation

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:

本文链接地址:反向传播算法入门亚美游AMG88索引 /?p=9350

斯坦福大学深度学习与自然语言处理第四讲:词窗口分类和神经网络

Deep Learning Specialization on Coursera

斯坦福大学在三月份开设了一门“深度学习与自然语言处理”的课程:CS224d: Deep Learning for Natural Language Processing,授课老师是青年才俊 Richard Socher,以下为相关的课程笔记。

第四讲:词窗口分类和神经网络(Word Window Classification and Neural Networks)

推荐阅读材料:

  1. [UFLDL tutorial]
  2. [Learning Representations by Backpropogating Errors]
  3. 第四讲Slides [slides]
  4. 第四讲视频 [video]

以下是第四讲的相关笔记,主要参考自课程的slides,视频和其他相关资料。
继续阅读

斯坦福大学深度学习与自然语言处理第三讲:高级的词向量表示

Deep Learning Specialization on Coursera

斯坦福大学在三月份开设了一门“深度学习与自然语言处理”的课程:CS224d: Deep Learning for Natural Language Processing,授课老师是青年才俊 Richard Socher,以下为相关的课程笔记。

第三讲:高级的词向量表示(Advanced word vector representations: language models, softmax, single layer networks)

推荐阅读材料:

  1. Paper1:[GloVe: Global Vectors for Word Representation]
  2. Paper2:[Improving Word Representations via Global Context and Multiple Word Prototypes]
  3. Notes:[Lecture Notes 2]
  4. 第三讲Slides [slides]
  5. 第三讲视频 [video]

以下是第三讲的相关笔记,主要参考自课程的slides,视频和其他相关资料。
继续阅读

斯坦福大学深度学习与自然语言处理第二讲:词向量

Deep Learning Specialization on Coursera

斯坦福大学在三月份开设了一门“深度学习与自然语言处理”的课程:CS224d: Deep Learning for Natural Language Processing,授课老师是青年才俊 Richard Socher,以下为相关的课程笔记。

第二讲:简单的词向量表示:word2vec, Glove(Simple Word Vector representations: word2vec, GloVe)

推荐阅读材料:

  1. Paper1:[Distributed Representations of Words and Phrases and their Compositionality]]
  2. Paper2:[Efficient Estimation of Word Representations in Vector Space]
  3. 第二讲Slides [slides]
  4. 第二讲视频 [video]

以下是第二讲的相关笔记,主要参考自课程的slides,视频和其他相关资料。
继续阅读

斯坦福大学深度学习与自然语言处理第一讲:引言

Deep Learning Specialization on Coursera

斯坦福大学在三月份开设了一门“深度学习与自然语言处理”的课程:CS224d: Deep Learning for Natural Language Processing,授课老师是青年才俊 Richard Socher,他本人是德国人,大学期间涉足自然语言处理,在德国读研时又专攻计算机视觉,之后在斯坦福大学攻读博士学位,拜师NLP领域的巨牛 Chris ManningDeep Learning 领域的巨牛 Andrew Ng,其博士论文是《Recursive Deep Learning for Natural Language Processing and Computer Vision》,也算是多年求学生涯的完美一击。毕业后以联合创始人及CTO的身份创办了MetaMind,作为AI领域的新星创业公司,MetaMind创办之初就拿了800万美元的风投,值得关注。

回到这们课程CS224d,其实可以翻译为“面向自然语言处理的深度学习(Deep Learning for Natural Language Processing)”,这门课程是面向斯坦福学生的校内课程,不过课程的相关材料都放到了网上,包括课程视频,课件,相关知识,预备知识,作业等等,相当齐备。课程大纲相当有章法和深度,从基础讲起,再讲到深度学习在NLP领域的具体应用,包括命名实体识别,机器翻译,句法分析器,情感分析等。Richard Socher此前在ACL 2012和NAACL 2013 做过一个Tutorial,Deep Learning for NLP (without Magic),感兴趣的同学可以先参考一下: Deep Learning for NLP (without Magic) - ACL 2012 Tutorial - 相关视频及课件 。另外,由于这门课程的视频放在Youtube上,@爱可可-爱生活 老师维护了一个网盘链接:http://pan.baidu.com/s/1pJyrXaF ,同步更新相关资料,可以关注。
继续阅读

PRML读书会第五章 Neural Networks

Deep Learning Specialization on Coursera

PRML读书会第五章 Neural Networks

主讲人 网神

(新浪微博:@豆角茄子麻酱凉面

网神(66707180) 18:55:06

那我们开始了啊,前面第3,4章讲了回归和分类问题,他们应用的主要限制是维度灾难问题。今天的第5章神经网络的内容:
1. 神经网络的定义
2. 训练方法:error函数,梯度下降,后向传导
3. 正则化:几种主要方法,重点讲卷积网络

书上提到的这些内容今天先不讲了,以后有时间再讲:BP在Jacobian和Hessian矩阵中求导的应用;
混合密度网络;贝叶斯解释神经网络。

首先是神经网络的定义,先看一个最简单的神经网络,只有一个神经元:

prml5-0

这个神经元是一个以x1,x2,x3和截距1为输入的运算单元,其输出是:

prml5-1

其中函数f成为"激活函数" , activation function.激活函数根据实际应用确定,经常选择sigmoid函数.如果是sigmoid函数,这个神经元的输入-输出的映射就是一个logistic回归问题。

继续阅读

PRML读书会第四章 Linear Models for Classification

Deep Learning Specialization on Coursera

PRML读书会第四章 Linear Models for Classification

主讲人 planktonli

planktonli(1027753147) 19:52:28

现在我们就开始讲第四章,第四章的内容是2018免费送彩金游戏 线性分类模型,主要内容有四点:
1) Fisher准则的分类,以及它和最小二乘分类的关系 (Fisher分类是最小二乘分类的特例)
2) 概率生成模型的分类模型
3) 概率判别模型的分类模型
4) 全贝叶斯概率的Laplace近似
需要注意的是,有三种形式的贝叶斯:
1) 全贝叶斯
2) 经验贝叶斯
3) MAP贝叶斯
我们大家熟知的是 MAP贝叶斯
MAP(poor man’s Bayesian):不涉及marginalization,仅是一种按后验概率最大化的point estimate。这里的MAP(poor man’s Bayesian)是属于 点概率估计的。而全贝叶斯可以看作对test样本的所有参数集合的加权平均,PRML说的Bayesian主要还是指Empirical Bayesian: 继续阅读

斯坦福大学机器学习第十课“应用机器学习的建议(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教授的经典AMG88《机器学习

李航博士《统计学习方法

机器学习中的数学(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算法。反向算法的核心是最小化网络输出值和目标值之间的“误差”,所以这里首先引入一个2018免费送彩金游戏误差的记号:

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

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

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

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

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

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

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

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

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

补充:2018免费送彩金游戏前馈网络和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教授的经典AMG88《机器学习》的第四章“人工神经网络”。

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

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

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

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

2018免费送彩金游戏梯度,有一种比较简便的数值估计方法,例如,对于一元参数来说:

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

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

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

其中 epsilon 取较小的值。

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

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

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

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

实现时的注意点:

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

特别重要的是:

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

6) Random initialization(随机初始化)

2018免费送彩金游戏如何学习一个神经网络的细节到目前为止基本说完了,不过还有一点需要注意,就是如何初始化参数向量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(组合到一起-如何训练一个神经网络)

2018免费送彩金游戏神经网络的训练,我们已经谈到了很多,现在是时候将它们组合到一起了。那么,如何训练一个神经网络?

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

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

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

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

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

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

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

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

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

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

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

2018免费送彩金游戏通过神经网络来实现一个无人驾驶汽车的例子,请大家参考课程视频,此处略。

参考资料:

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

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

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

Mitchell教授的经典AMG88《机器学习

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/