什么是end-to-end神经网络?
https://www.zhihu.com/question/51435499
来源:知乎
著作权归作者所有。
国立台湾大学的李宏毅教授在其机器学习课程中有讲到深度神经网络的 End-to-end Learning,具体可参看其课件或课程视频的后半部分:
课件:http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2016/Lecture/Why%20deep%20(v2).pdf
视频:https://www.youtube.com/watch?v=XsC9byQkUH8
简单来说就是深度神经网络处理问题不需要像传统模型那样,如同生产线般一步步去处理输入数据直至输出最后的结果(其中每一步处理过程都是经过人为考量设定好的 (“hand-crafted” function))。
与之相反,只需给出输入数据以及输出,神经网络就可以通过训练自动“学得”之前那些一步接一步的 “hand-crafted” functions。
课件之后还给出了语音识别以及图像识别的例子,进一步说明深度神经网络 End-to-end Learning与传统方法的区别。
作者:Tausend Wei
链接:https://www.zhihu.com/question/51435499/answer/164426491
来源:知乎
经典机器学习方式是以人类的先验知识将raw数据预处理成feature,然后对feature进行分类。分类结果十分取决于feature的好坏。所以过去的机器学习专家将大部分时间花费在设计feature上。那时的机器学习有个更合适的名字叫feature engineering 。
后来人们发现,利用神经网络,让网络自己学习如何抓取feature效果更佳。于是兴起了representation learning。这种方式对数据的拟合更加灵活。
网络进一步加深,多层次概念的representation learning将识别率达到了另一个新高度。于是你听到了是个搞机器学习的人都知道的名字:deep learning。实指多层次的特征提取器与识别器统一训练和预测的网络。
end to end的好处:通过缩减人工预处理和后续处理,尽可能使模型从原始输入到最终输出,给模型更多可以根据数据自动调节的空间,增加模型的整体契合度。
拿语音识别为具体实例。普遍方法是将语音信号转成频域信号,并可以进一步加工成符合人耳特点的MFCC进行编码(encode)。也可以选择Convolutional layers对频谱图进行特征抓取。这样可在encode的部分更接近end to end 中的第一个end。
但识别出的结果并不可以告诉我们这段语音到底是什么。DNN-HMM混合模型还需要将DNN识别出的结果通过HMM来解码(decode)。而RNN-CTC就将HMM的对齐工作交给了网络的output layer来实现。在decode的部分更接近end to end 中的第二个end。
传统的语音识别系统,是由许多个模块组成的,包括声学模型、发音词典、语言模型。其中声学模型和语言模型是需要训练的。这些模块的训练一般都是独立进行的,各有各的目标函数,比如声学模型的训练目标是最大化训练语音的概率,语言模型的训练目标是最小化 perplexity。由于各个模块在训练时不能互相取长补短,训练的目标函数又与系统整体的性能指标(一般是词错误率 WER)有偏差,这样训练出的网络往往达不到最优性能。
针对这个问题,一般有两种解决方案:
- 端到端训练(end-to-end training):一般指的是在训练好语言模型后,将声学模型和语言模型接在一起,以 WER 或它的一种近似为目标函数去训练声学模型。由于训练声学模型时要计算系统整体的输出,所以称为「端到端」训练。可以看出这种方法并没有彻底解决问题,因为语言模型还是独立训练的。
- 端到端模型(end-to-end models):系统中不再有独立的声学模型、发音词典、语言模型等模块,而是从输入端(语音波形或特征序列)到输出端(单词或字符序列)直接用一个神经网络相连,让这个神经网络来承担原先所有模块的功能。典型的代表如使用 CTC 的 EESEN [1]、使用注意力机制的 Listen, Attend and Spell [2]。这种模型非常简洁,但灵活性就差一些:一般来说用于训练语言模型的文本数据比较容易大量获取,但不与语音配对的文本数据无法用于训练端到端的模型。因此,端到端模型也常常再外接一个语言模型,用于在解码时调整候选输出的排名(rescoring),如 [1]。
「端到端训练」和「端到端模型」的区分,在 [2] 的 introduction 部分有比较好的论述。
与 @YJango 的答案不同,我觉得「输入是语音波形(raw waveform)」并不是端到端模型的本质特征,端到端模型的输入也可以是特征序列(MFCC 等)。端到端模型的本质特征是把声学模型、发音词典、语言模型这些传统模块融合在一起。
参考文献:
[1] Yajie Miao, Mohammad Gowayyed, and Florian Metze, "EESEN: End-to-End Speech Recognition using Deep RNN Models and WFST-based Decoding," in Proc. ASRU 2015.
[2] William Chan, et al. "Listen, attend and spell: A neural network for large vocabulary conversational speech recognition," in Proc. ICASSP 2016.
非end-to-end方法:
目前目标检测领域,效果最好,影响力最大的还是RCNN那一套框架,这种方法需要先在图像中提取可能含有目标的候选框(region proposal), 然后将这些候选框输入到CNN模型,让CNN判断候选框中是否真的有目标,以及目标的类别是什么。在我们看到的结果中,往往是类似与下图这种,在整幅图中用矩形框标记目标的位置和大小,并且告诉我们框中的物体是什么。
这种标记的过程,其实是有两部分组成,一是目标所在位置及大小,二是目标的类别。在整个算法中,目标位置和大小其实是包含在region proposal的过程里,而类别的判定则是在CNN中来判定的。这种标记的过程,其实是有两部分组成,一是目标所在位置及大小,二是目标的类别。在整个算法中,目标位置和大小其实是包含在region proposal的过程里,而类别的判定则是在CNN中来判定的。
end-to-end方法:
end-to-end方法的典型代表就是有名的yolo。前面的方法中,CNN本质的作用还是用来分类,定位的功能其并没有做到。而yolo这种方法就是只通过CNN网络,就能够实现目标的定位和识别。也就是原始图像输入到CNN网络中,直接输出图像中所有目标的位置和目标的类别。这种方法就是end-to-end(端对端)的方法,一端输入我的原始图像,一端输出我想得到的结果。只关心输入和输出,中间的步骤全部都不管。
1. Nvidia的基于CNNs的end-end自动驾驶,输入图片,直接输出steering angle。从视频来看效果拔群,但其实这个系统目前只能做简单的follow lane,与真正的自动驾驶差距较大。亮点是证实了end-end在自动驾驶领域的可行性,并且对于数据集进行了augmentation。链接:https://devblogs.nvidia.com/parallelforall/deep-learning-self-driving-cars/
2. Google的paper: Learning Hand-Eye Coordination for Robotic Grasping with Deep Learning and Large-Scale Data Collection,也可以算是end-end学习:输入图片,输出控制机械手移动的指令来抓取物品。这篇论文很赞,推荐:https://arxiv.org/pdf/1603.02199v4.pdf
3. DeepMind神作Human-level control through deep reinforcement learning,其实也可以归为end-end,深度增强学习开山之作,值得学习:http://www.nature.com/nature/journal/v518/n7540/full/nature14236.html
4. Princeton大学有个Deep Driving项目,介于end-end和传统的model based的自动驾驶之间,输入为图片,输出一些有用的affordance(实在不知道这词怎么翻译合适…)例如车身姿态、与前车距离、距路边距离等,然后利用这些数据通过公式计算所需的具体驾驶指令如加速、刹车、转向等。链接:http://deepdriving.cs.princeton.edu/
总之,end-end不是什么新东西,也不是什么神奇的东西,仅仅是直接输入原始数据,直接输出最终目标的一种思想。
end-to-end 的本质是你要解决的问题是多阶段的或多步的(跟所谓的raw feature没啥关系)。如果分阶段学习的话,第一阶段的最优解不能保证第二阶段的问题达到最优。end-to-end把他们堆在一起来优化,确保最后阶段的解达到最优。
张旭--------------------------------->
端到端指的是输入是原始数据,输出是最后的结果,原来输入端不是直接的原始数据,而是在原始数据中提取的特征,这一点在图像问题上尤为突出,因为图像像素数太多,数据维度高,会产生维度灾难,所以原来一个思路是手工提取图像的一些关键特征,这实际就是就一个降维的过程。
那么问题来了,特征怎么提?
特征提取的好坏异常关键,甚至比学习算法还重要,举个例子,对一系列人的数据分类,分类结果是性别,如果你提取的特征是头发的颜色,无论分类算法如何,分类效果都不会好,如果你提取的特征是头发的长短,这个特征就会好很多,但是还是会有错误,如果你提取了一个超强特征,比如染色体的数据,那你的分类基本就不会错了。
这就意味着,特征需要足够的经验去设计,这在数据量越来越大的情况下也越来越困难。
于是就出现了端到端网络,特征可以自己去学习,所以特征提取这一步也就融入到算法当中,不需要人来干预了。
什么是end-to-end神经网络?的更多相关文章
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- 神经网络、logistic回归等分类算法简单实现
最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
- 卷积神经网络提取特征并用于SVM
模式识别课程的一次作业.其目标是对UCI的手写数字数据集进行识别,样本数量大约是1600个.图片大小为16x16.要求必须使用SVM作为二分类的分类器. 本文重点是如何使用卷积神经网络(CNN)来提取 ...
- 如何用卷积神经网络CNN识别手写数字集?
前几天用CNN识别手写数字集,后来看到kaggle上有一个比赛是识别手写数字集的,已经进行了一年多了,目前有1179个有效提交,最高的是100%,我做了一下,用keras做的,一开始用最简单的MLP, ...
- 用Tensorflow让神经网络自动创造音乐
#————————————————————————本文禁止转载,禁止用于各类讲座及ppt中,违者必究————————————————————————# 前几天看到一个有意思的分享,大意是讲如何用Ten ...
- 一文弄懂神经网络中的反向传播法——BackPropagation
最近在看深度学习的东西,一开始看的吴恩达的UFLDL教程,有中文版就直接看了,后来发现有些地方总是不是很明确,又去看英文版,然后又找了些资料看,才发现,中文版的译者在翻译的时候会对省略的公式推导过程进 ...
- BP神经网络原理及python实现
[废话外传]:终于要讲神经网络了,这个让我踏进机器学习大门,让我读研,改变我人生命运的四个字!话说那么一天,我在乱点百度,看到了这样的内容: 看到这么高大上,这么牛逼的定义,怎么能不让我这个技术宅男心 ...
- [Machine Learning & Algorithm] 神经网络基础
目前,深度学习(Deep Learning,简称DL)在算法领域可谓是大红大紫,现在不只是互联网.人工智能,生活中的各大领域都能反映出深度学习引领的巨大变革.要学习深度学习,那么首先要熟悉神经网络(N ...
- neurosolutions 人工神经网络集成开发环境 keras
人工神经网络集成开发环境 : http://www.neurosolutions.com/ keras: https://github.com/fchollet/keras 文档 http ...
随机推荐
- Lua学习笔记(5): 表
表的初始化方式 表的索引类型一般有两种,一种是通过标识符访问,一种是通过数字访问 --通过标识符访问的表的初始化 table1 = {key_1 = "haha", key_2 = ...
- elasticsearch备份与恢复
备注:以下代码在kibana插件下运行: # 创建一个备份用的仓库# type:fs文件系统# 支持Shared filesystem, Amazon S3, HDFS和Azure #Cloud# l ...
- 关于cisco路由器配置的一些参数
单臂路由设置 Switch(config-if)#no switchport Switch(config)#ip routingSwitch(config)#interface FastEtherne ...
- 算法笔记(c++)--c++中碰到的一些用法
算法笔记(c++)--c++中碰到的一些用法 toupper(xxx)可以变成大写; tolower(xx)小写 isalpha(xxx)判断是不是字母 isalnum(xx)判断是不是数字 abs( ...
- New begin
Purpose 今天更换了id,希望重新沉淀. 晚上看到国外一个博客,落款有个中文: 敬惜字纸. 共勉.
- Scrum立会报告+燃尽图(Beta阶段第二周第三次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411 项目地址:https://coding.net/u/wuyy694 ...
- 【dp】New Keyboard
http://codeforces.com/gym/101397 B dp[i][j][k]: i为前一个行动的状态,0-switch.1-type,j为当前状态layout的编号,k 是已键入的字符 ...
- hdu1010--Tempter of the Bone(迷宫)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1010 Tempter of the Bone Time Limit: 2000/1000 MS (Jav ...
- python获取前几天的时间
days的参数就是你想获取前多少天的数据,如果是昨天的话,则days=1 import datetime today=datetime.date.today() oneday=datetime.tim ...
- rfid工作原理
RFID的工作原理是:标签进入磁场后,如果接收到阅读器发出的特殊射频信号,就能凭借感应电流所获得的能量发送出存储在芯片中的产品信息(即Passive Tag,无源标签或被动标签),或者主动发送某一频率 ...