2019-04-28 14:34:17 whale52hertz 阅读数 89
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    39616 人正在学习 去看看 唐宇迪

2018年深度学习的10大预测

文章来源:ATYUN AI平台 

我有种预感,2018年将会是发生巨大变化的一年。我们在2017年所看到的那些令人难忘的成就将在2018年以非常强大的方式延续。2017年的研究工作将进一步转化为日常的软件应用。

下面是我整理的一份关于2018年深度学习的预测清单:

1.大多数深度学习硬件初创公司将会失败

许多深度学习硬件初创企业将在2018年最终交付他们的芯片。也许这会导致破产,因为他们忘记提供好的软件来支持他们的新解决方案。这些公司让硬件作为他们的DNA。但不幸的是,在DL领域,软件同样重要。这些初创公司大多不懂软件,也不了解开发软件的成本。这些公司可能会提供芯片,但没有任何系统可以支持软件运行。

采用收缩阵列解决方案的低成果已经被采用,所以我们不会在2017年发现大规模的10倍性能升级。研究人员将开始使用这些张量核,不仅用于推理,还可以加速训练。

令人感到失望的是英特尔的解决方案将继续被推迟。目前谁也无法猜测该公司何时能推出。

随着TPU的发展,Google将继续给世界带来惊喜。也许Google通过将其IP授权给其他半导体厂商来进入硬件行业。如果它是除了Nvidia以外唯一真正的玩家,这将会很有意义的。

2.元学习将是新的SGD

2017年出现了很多有关元学习的强大研究。随着研究群体对元学习的理解越来越深入,随机梯度下降(SGD)的旧方式将会落到实处,取而代之的是一种更有效的方法,既可以利用开发性的搜索方法,也可以采用探索性的搜索方法。

无监督学习的进展将是渐进的,但主要是由元学习算法驱动。

3.生成一种新的建模

目前,大多数研究都是在生成图像和语音的过程中进行的。但是,我们应该将这些方法结合到建模复杂系统的工具中。您将会看到这个活动的一个领域就是应用深度学习来进行经济建模。

4.自我演奏是自动化的知识创造

AlphaGo Zero和AlphaZero从零开始学习和自我娱乐是一个巨大的飞跃。在我看来,它与深度学习的出现有着同样的影响。深度学习发现了通用相似函数。RL自我娱乐发现了普遍的知识创造。

期待看到更多与自我娱乐相关的进展。

5.直觉机器将弥合语义鸿沟

这是我最雄心勃勃的预测。我们将跨越直觉机器和理性机器之间的语义鸿沟。双过程理论(两种认知机器的概念,一种是无模型的,另一种是基于模型的) 将是如何构建新AI的更流行的概念。2018年,人为直觉的概念将不再是一种附带的概念,更多的是被普遍接受的概念。

6.解释能力是无法实现的—我们只能假装

解释能力有两个问题:第一个问题,这种解释对人类来说有太多的规则,让人难以理解;第二个问题,是机器将会产生完全陌生且无法解释的概念。我们已经在AlphaGo Zero和Alpha Zero的战略中看到了这一点。

简而言之,解释性机器的目的是要理解人类能够直观地理解或能够理解的种类的解释。然而,在大多数情况下,人类将无法获得完整的解释。

我们必须通过创造“虚假的解释”来在深度学习中取得进展。

7.深入学习的研究信息会下降

对于深度学习研究的人们来说,2017年已经很困难了。ICLR 2018年会议提交的论文数量约为4000份。研究人员每天只能阅读10篇论文,仅仅是为了赶上这个会议。

在这个领域,问题越来越严重,因为理论框架都在进行中。为了在理论空间上取得进步,我们需要寻找更高级的数学,这能给我们更好的认识。这将成为一个难题,因为大多数深度学习的研究人员不具备正确的数学理论来理解这类系统的复杂性。深度学习需要来自复杂性理论的研究人员,但这类研究人员非常少。

2018年,深度学习研究论文可能会翻三番或四翻。

8.工业化是通过教学环境来实现的

通过对具体教学环境的开发,可以实现对深度学习系统可预测和可控制的开发。如果你想找到最原始的教学方法,你只需要看看深度学习网络是如何训练的。在这方面我们将会看到更多的进展。

期待看到更多的公司透露他们的内部基础设施,解释他们如何部署深度学习。

9.会话认知的出现

我们衡量进展的方式已经过时了。现在,提出了一种解决现实世界动态(即非平稳)复杂性的新方式。我们应该在新的一年里看到更多关于这个新领域的报道。

10.我们将要求在道德上使用AI

道德上使用AI的需求将会增加。现在,人们越来越意识到自动化失控所带来的灾难性后果。我们今天在Facebook、Twitter、谷歌、Amazon等网站上发现的过于简单的自动化也许将来会对社会造成不良影响。

我们需要了解部署能够预测人类行为的机器的道德规范。面部识别是我们掌握的危险功能之一。能够产生与现实难以区分的媒体的算法将成为一个主要问题。理论上,我们需要知道,自己只是为了整个社会的利益而使用AI,而不是增加不平等的武器。

本文转自ATYUN人工智能媒体平台,原文链接:2018年深度学习的10大预测,有多少实现?

更多推荐

机器学习基础教程:神经网络

AI芯片创业公司已呈爆发式增长趋势

又发现一个漏洞!你可以通过戴眼镜来欺骗AI面部识别系统

2017年回顾:10个人工智能失败案例

 

欢迎关注ATYUN官方公众号,商务合作及内容投稿请联系邮箱:bd@atyun.com
欢迎关注ATYUN官方公众号,商务合作及内容投稿请联系邮箱:bd@atyun.com

 

2018-04-24 14:32:28 qq_36518123 阅读数 611
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    39616 人正在学习 去看看 唐宇迪

通过深度学习增强药药反应和药食反应的预测效果

前言

还是不要不务正业了,重新回到DDI的怀抱之中。(笑)

这篇是PNAS(美国科学院)的论文,还是有点分量的……虽然我觉得有点水

本篇文章主要讲的是基于深度学习的药物副作用与药物宇食物的作用的预测。

背景

药与药(drug-drug interaction,DDI),药与食物(drug-food constituent interaction,DFI)之间会产生极其大的反应,其中有很多恶性的反应(adverse drug events, ADE),也有良性的反应。我们药减少恶性的反应并且增加良性的反应。

作者主要描述了基于深度学习的DDI和DFI的预测,模型名为DeepDDI。

方法与实验

作者使用了深度学习的方法进行DDI的预测,将DDI作为86类分类器(具体哪八十六类,可以参考deep-ddi所有数据文件的dataset-S01)。
structure

上图是模型主要架构

preprocess

可以看见,将药物的SMILES(simplified molecular-input line-entry system,简化分子线性输入规范,用于描述一个化学物质的结构)输入,并且可以生成SSP(structural similarity profile,药物的特征向量,可以描述给定药物的独特结构特征)

ps:SSP我google+百度了半天没查到,可能SSP是他们原创的方法

pca

SSP可以对某个单独的药物描述结构性特征。计算方法是与所有的2159个DrugBank中的药物的ECFP4(illustration of ECFP4)经行比对。通过计算对每个药物的ECFP4的Tanimoto系数T(A,B)=ABA2+B2AB来算出SSP。

ECFP4使用Python库RDKit计算的。

计算出SSP之后,再使用PCA将SSP向量降维到50维。最后将两个50维的PCA输入到DNN中进行多分类。

ps: 作者再这里说PCA降维到10、20、30、40、50维都试验过,最终确定了50维是最好的

DNN我不用多说,注意输入为100维,代表了两种药物PCA降维后的维数和。输出有86种,代表了86类的多分类器。设置了一个阈值,超过这个阈值者就算作有这一类 ,设为1;否则设为0。最优的阈值维0.47

隐藏层的激活函数是ReLU,输出层的激活函数是sigmoid

用了Batch Normalization

Loss function是交叉熵

优化方法是Adam算法

代码层面用了Keras + Tensorflow后台

注意使用了GTX1080GPU运算(其实没啥……就是想到我那破1060就想哭)

训练还是老套路60%,20%,20%的分配,跑100次

DeepDDI最终可以生成人类可读的语句。

比如

羟考酮(oxycodone,阿片类止痛药)与阿扎那韦(atazanavir,抗转录药物)的反应会被描述成

“与阿扎那韦共同作用时,羟考酮的代谢效应会减少”

“当阿扎那韦与羟考酮共同作用时,不利反应的严重性或概率会增加”

优点

较之间的运算方法,DeepDDI有很多优点,比如:

  1. 其他的很多计算方法并没有很好的描述药与药之间的反应,而DeepDDI可以输出人类可读的语句。
  2. 其他的很多计算方法需要极其详细的药物信息就比如说药物的靶,有反应的药物,副作用。而DeepDDI是基于SMILES的方法,需要的信息比较单一
  3. DeepDDI的精度极高,大约92%
  4. SSP比两种最好的向量生成方法(Molecular Autoencoder, Mol2vec)都更加精确

缺点

  1. 神经网络的可解释性不强

相关的工作

之前也有基于Deep Learning的DDI的工作。

Drug Drug interaction extraction via convolutional nerual network

Drug-drug Interaction Extraction via Recurrent Neural Network with Multiple Attention Layers

Dependency-based long short term memory network for drug-drug interaction extraction

与本篇不同的是,这些工作很多事基于复杂网络研究的DDI,而本文可以说是基于相识度(化学成分结构)的DDI。

结果

使用的数据是gold standard DDI dataset from DrugBank(deep-ddi所有数据文件的dataset-S02),包含了192284种DDI反应

虽然这个并不是输出一个one-hot向量,但是其实只有406(0.2%)的药物与药物对被检测有两种及以上的反应,而191472(99.8%)的药物与药物对之间只有一种反应。(PS:可不可以最后输出的时候用Softmax而不是Sigmoid,因为只有0.2%的多种反应)

应用场景

原文给出了起码三个应用场景
- 在gold standard DDI dataset中我们发现只有14种DDI类别是明确的有害的类别,其他的DDI情况不明或者是依赖药物施用环境。因此如果我们使用了某种药物(比如用环磷酰胺去治疗癌症)我们可以通过替换他的对应的拥有同样药理效果的药物(贝利司他,氨羟二磷酸二钠,苏灵大)去减少副作用(心脏中毒的概率)。
- 我们可以通过DDI的类型去判断药物是否有“恶性副作用”。如果DNN输出的类型小于阈值0.47,则就视为没有
- 我们可以用于判断药物与食物成分的共同作用(DFI)。一些特定的食物会减少一些药物的效果。就比如说,治疗高血压的三十个药物的体内浓度(这里翻译不好……意会,意会)可以被潜在的食物成分,比如左旋谷氨酸、左谷酰胺、 亚精胺,减少。多价正离子,比如Al3+Mg2+,可以造成药物的治疗失败。

讨论

  1. 三及多个药物的DDI并没有研究——造成无法研究的原因是数据库的缺乏(如果有这样的数据库的话我认为用RNN/LSTM/GRU可以解)
  2. DeepDDI的可解释性有待研究(Deep learning的原罪……)
  3. 很多其他的数据,比如转录组数据可以被使用

我的想法

  1. PCA有没有更好的解决方案?能不能用其他的方法(比如构造自编码器之类的(瞎编))代替PCA
  2. DNN的改善方法?可不可以想其他的网络而不是MLP?
  3. 讨论中的一些问题还有可进步的地方
  4. 代码我暂时没看,RDKit很难配,可能根据代码出一篇博客
  5. 看不懂的化学生物问题不要紧,我也不懂(逃ε=ε=ε=┏(゜ロ゜;)┛)
  6. 这篇的一个特点就是它是基于化学结构与成分的Deep learning based DDI,而不是基于复杂网络的DDI
2017-11-05 21:23:46 zheyanyishhi 阅读数 6396
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    39616 人正在学习 去看看 唐宇迪

1.1 什么是学习?

  赫伯特·西蒙教授(Herbert Simon,1975年图灵奖获得者、1978年诺贝尔经济学奖获得者)曾对“学习”给了一个定义:“如果一个系统,能够通过执行某个过程,就此改进了它的性能,那么这个过程就是学习”

  学习的核心目的,就是改善性能

1.2 什么是机器学习?

  对于某类任务(Task,简称T)和某项性能评价准则(Performance,简称P),如果一个计算机程序在T上,以P作为性能的度量,随着很多经验(Experience,简称E)不断自我完善,那么我们称这个计算机程序在从经验E中学习了

  对于一个学习问题,我们需要明确三个特征:任务的类型衡量任务性能提升的标准以及获取经验的来源

1.3 学习的4个象限

这里写图片描述

1.4 机器学习的方法论

  “end-to-end”(端到端)说的是,输入的是原始数据(始端),然后输出的直接就是最终目标(末端),中间过程不可知,因此也难以知。

  就此,有人批评深度学习就是一个黑箱(Black Box)系统,其性能很好,却不知道为何而好,也就是说,缺乏解释性。其实,这是由于深度学习所处的知识象限决定的。从图1可以看出,深度学习,在本质上,属于可统计不可推理的范畴。“可统计”是很容易理解的,就是说,对于同类数据,它具有一定的统计规律,这是一切统计学习的基本假设。

  在哲学上讲,这种非线性状态,是具备了整体性的“复杂系统”,属于复杂性科学范畴。复杂性科学认为,构成复杂系统的各个要素,自成体系,但阡陌纵横,其内部结构难以分割。简单来说,对于复杂系统,1+1≠2,也就是说,一个简单系统,加上另外一个简单系统,其效果绝不是两个系统的简单累加效应,而可能是大于部分之和。因此,我们必须从整体上认识这样的复杂系统。于是,在认知上,就有了从一个系统或状态(end)直接整体变迁到另外一个系统或状态(end)的形态。这就是深度学习背后的方法论。

  “Divide and Conquer(分而治之)”,其理念正好相反,在哲学它属于“还原主义(reductionism,或称还原论)”。在这种方法论中,有一种“追本溯源”的蕴意包含其内,即一个系统(或理论)无论多复杂,都可以分解、分解、再分解,直到能够还原到逻辑原点。

  在意象上,还原主义就是“1+1=2”,也就是说,一个复杂的系统,都可以由简单的系统简单叠加而成(可以理解为线性系统),如果各个简单系统的问题解决了,那么整体的问题也就得以解决。

  经典机器学习(位于第Ⅱ象限),在哲学上,在某种程度上,就可归属于还原主义。传统的机器学习方式,通常是用人类的先验知识,把原始数据预处理成各种特征(feature),然后对特征进行分类。

  然而,这种分类的效果,高度取决于特征选取的好坏。传统的机器学习专家们,把大部分时间都花在如何寻找更加合适的特征上。故此,传统的机器学习,其实可以有个更合适的称呼——特征工程(feature engineering)。这也是有好处的,因为这些特征是由人找出来的,自然也就为人所能理解,性能好坏,可以灵活调整。

1.5 什么是深度学习?

  机器学习的专家们发现,可以让神经网络自己学习如何抓取数据的特征,这种学习的方式,效果更佳。于是兴起了特征表示学习(feature representation learning)的风潮。这种学习方式,对数据的拟合也更加的灵活好用。于是,人们终于从自寻“特征”的中解脱出来。

  但这种解脱也付出了代价,那就是机器自己学习出来的特征,它们存在于机器空间,完全超越了人类理解的范畴,对人而言,这就是一个黑盒世界。为了让神经网络的学习性能,表现得更好一些,人们只能依据经验,不断地尝试性地进行大量重复的网络参数调整。于是,“人工智能”领域就有这样的调侃:“有多少人工,就有多少智能”。

  再后来,网络进一步加深,出现了多层次的“表示学习”,它把学习的性能提升到另一个高度。这种学习的层次多了,就给它取了个特别的名称——Deep Learning(深度学习)。

  深度学习的学习对象同样是数据。与传统机器学习所不同的是,它需要大量的数据,也就是“大数据(Big Data)”。

2.2 深度学习的归属

这里写图片描述
  把深度学习和传统的监督学习和无监督学习单列出来,自然是有一定道理的。这就是因为,深度学习是高度数据依赖型的算法,它的性能通常随着数据量的增加而不断增强,也就是说它的可扩展性(Scalability)显著优于传统的机器学习算法

这里写图片描述

  如果训练数据比较少,深度学习的性能并不见得就比传统机器学习好。其原因在于,作为复杂系统代表的深度学习算法,只有数据量足够多,才能通过训练,在深度神经网络中,将蕴含于数据之中的复杂模式表征出来

机器学习要想做得好,需要走好三大步:

(1) 如何找一系列函数来实现预期的功能,这是建模问题
(2) 如何找出一组合理的评价标准,来评估函数的好坏,这是评价问题
(3) 如何快速找到性能最佳的函数,这是优化问题(比如说,机器学习中梯度下降法)。

2.4 为什么要用神经网络?

  深度学习的概念源于人工神经网络的研究。含多隐层的多层感知机就是一种深度学习结构。所以说到深度学习,就不能不提神经网络。

  “神经网络,是一种由具有自适应性的简单单元构成的广泛并行互联的网络,它的组织结构能够模拟生物神经系统对真实世界所作出的交互反应。”

那为什么要用神经网络学习呢?

  在人工智能领域,有两大主流。第一个是符号主义。符号主义的理念是,知识是信息的一种表达形式,人工智能的核心任务,就是处理好知识表示、知识推理和知识运用。核心方法论是,自顶向下设计规则,然后通过各种推理,逐步解决问题。很多人工智能的先驱(比如CMU的赫伯特•西蒙)和逻辑学家,很喜欢这种方法。但这个的发展,目前看来并不太好。

  还有一个就是试图编写一个通用模型,然后通过数据训练,不断改善模型中的参数,直到输出的结果符合预期,这个就是连接主义。连接主义认为,人的思维就是某些神经元的组合。因此,可以在网络层次上模拟人的认知功能,用人脑的并行处理模式,来表征认知过程。这种受神经科学的启发的网络,被称之人工神经网络(Artificial Neural Network,简称ANN)。这个网络的升级版,就是目前非常流行的深度学习。

  机器学习在本质就是寻找一个好用的函数。而人工神经网络最“牛逼”的地方在于,它可以在理论上证明:只需一个包含足够多神经元的隐藏层,多层前馈网络能以任意进度逼近任意复杂度的连续函数。这个定理也被称之为通用近似定理(Universal Approximation Theorem)。这里的“Universal”,也有人将其翻译成“万能的”,由此可见,这个定理的能量有多大。换句话说,神经网络可在理论上解决任何问题。

3.1 M-P神经元模型是什么?

  现在所讲的神经网络包括深度学习,都在某种程度上,都是在模拟大脑神经元的工作机理,它就是上世纪40年代提出但一直沿用至今的“M-P神经元模型”。

  在这个模型中,神经元接收来自n个其它神经元传递过来的输入信号,这些信号的表达,通常通过神经元之间连接的权重(weight)大小来表示,神经元将接收到的输入值按照某种权重叠加起来,并将当前神经元的阈值进行比较,然后通过“激活函数(activation function)”向外表达输出(这在概念上就叫感知机)。

这里写图片描述

3.3 激活函数是怎样的一种存在?

  神经元的工作模型存在“激活(1)”和“抑制(0)”等两种状态的跳变,那么理想型的激活函数(activation functions)就应该是阶跃函数,但这种函数具有不光滑、不连续等众多不“友好”的特性。为什么说它“不友好”呢,这是因为在训练网络权重时,通常依赖对某个权重求偏导、寻极值,而不光滑、不连续等通常意味着该函数无法“连续可导”。

这里写图片描述

  因此,我们通常用Sigmoid函数来代替阶跃函数。这个函数可以把较大变化范围内输入值(x)挤压输出在(0,1)范围之内,故此这个函数又称为“挤压函数(Squashing function)”。

3.4 卷积函数又是什么?

  所谓卷积,就是一个功能和另一个功能在时间的维度上的“叠加”作用。

  由卷积得到的函数h一般要比f和g都光滑。利用这一性质,对于任意的可积函数f,都可简单地构造出一列逼近于f的光滑函数列,这种方法被称之为函数的光滑化或正则化。

  在时间的维度上的“叠加作用”,如果函数是离散的,就用求累积和来刻画。如果函数是连续的,就求积分来表达。

4.1机器学习的三个层次

大致可分为三类:

(1)监督学习(Supervised Learning):
  监督学习基本上就是“分类(classification)”的代名词。它从有标签的训练数据中学习,然后给定某个新数据,预测它的标签(given data, predict labels)。
  简单来说,监督学习的工作,就是通过有标签的数据训练,获得一个模型,然后通过构建的模型,给新数据添加上特定的标签。
  整个机器学习的目标,都是使学习得到的模型,能很好地适用于“新样本”,而不是仅仅在训练样本上工作得很好。通过训练得到的模型,适用于新样本的能力,称之为“泛化(generalization)能力”。

(2)非监督学习(Unsupervised Learning):
  与监督学习相反的是,非监督学习所处的学习环境,都是非标签的数据。非监督学习,本质上,就是“聚类(cluster)”的近义词。
  简单来说,给定数据,从数据中学,能学到什么,就看数据本身具备什么特性(given data, learn about that data)。我们常说的“物以类聚,人以群分”说得就是“非监督学习”。这里的“类”也好,“群”也罢,事先我们是不知道的。一旦我们归纳出“类”或“群”的特征,如果再要来一个新数据,我们就根据它距离哪个“类”或“群”较近,就“预测”它属于哪个“类”或“群”,从而完成新数据的“分类”或“分群”功能。

(3)半监督学习(Semi-supervised Learning):
  这类学习方式,既用到了标签数据,又用到了非标签数据。
  给定一个来自某未知分布的有标记示例集L={(x1, y1), (x2, y2), …, (xl, yl)},其中xi是数据,yi是标签。对于一个未标记示例集U = {xl+1, x l+1, … , xl+u},I《u,于是,我们期望学得函数 f:X→Y 可以准确地对未标识的数据xi预测其标记yi。这里均为d维向量, yi∈Y为示例xi的标记。
  半监督学习就是以“已知之认知(标签化的分类信息)”,扩大“未知之领域(通过聚类思想将未知事物归类为已知事物)”。但这里隐含了一个基本假设——“聚类假设(cluster assumption)”,其核心要义就是:“相似的样本,拥有相似的输出”。

5.2 认识“感知机”

  所谓的感知机,其实就是一个由两层神经元构成的网络结构,它在输入层接收外界的输入,通过激活函数(含阈值)的变换,把信号传送至输出层,因此它也称之为“阈值逻辑单元(threshold logic unit)”。

  所有“有监督”的学习,在某种程度上,都是分类(classification)学习算法。而感知机就是有监督的学习,所以,它也是一种分类算法。

5.3 感知机是如何学习的?

  对象本身的特征值,一旦确定下来就不会变化。因此,所谓神经网络的学习规则,就是调整权值和阈值的规则(这个结论对于深度学习而言,依然是适用的)。

假设我们的规则是这样的:

这里写图片描述

其中ep = y- y’,y为期望输出,y’是实际输出,所以,具体说来,ep是二者的差值。

5.4 感知机的训练法则

  感知机的学习规则:对于训练样例(x,y)(需要注意的是,这里粗体字x表示训练集合),若当前感知机的实际输出y’,假设它不符合预期,存在“落差”,那么感知机的权值依据如公式规则调整:
这里写图片描述
其中,η∈(0,1)称为学习率(learning rate)

  这里需要注意的是,学习率η的作用是“缓和”每一步权值调整强度的。它本身的大小,也是比较难以确定的。如果η太小,网络调参的次数就太多,从而收敛很慢。如果η太大,容易错过了网络的参数的最优解。因此,合适的η大小,在某种程度上,还依赖于人工经验

5.5 感知机的表征能力

这里写图片描述

  1969年,马文·明斯基和西摩尔· 派普特(Seymour Papert)在出版了《感知机:计算几何简介”》一书[2], 书中论述了感知机模型存在的两个关键问题:
(1)单层的神经网络无法解决不可线性分割的问题,典型例子如异或门电路(XOR Circuit);
(2)更为严重的问题是,即使使用当时最先进的计算机,也没有足够计算能力,完成神经网络模型所需要的超大的计算量(比如调整网络中的权重参数)。
  鉴于明斯基的江湖地位(1969年刚刚获得大名鼎鼎的图灵奖),他老人家一发话不要紧,直接就把人工智能的研究,送进一个长达近二十年的低潮,史称“人工智能冬天(AI Winter)”。

6.1 复杂网络解决“异或”问题

  感知机之所以当初无法解决“非线性可分”问题,是因为相比于深度学习这个复杂网络,感知机太过于简单”。

  想解决“异或”问题,就需要使用多层网络。这是因为,多层网络可以学习更高层语义的特征,其特征表达能力更强。因此,我们在输入层和输出层之间,添加一层神经元,将其称之为隐含层(“隐层”)。于是隐层和输出层中的神经元都有激活函数。
这里写图片描述

  1958年Frank Rosenblatt提出感知机的概念。1965年Alexey Grigorevich Ivakhnenko提出了多层人工神经网络的设想。而这种基于多层神经网络的机器学习模型,后来被人们称为“深度学习”。

6.2 多层前馈神经网络

  常见的多层神经网络如图所示。在这种结构中,每一层神经元仅仅与下一层的神经元全连接。而在同一层,神经元彼此不连接,而且跨层的神经元,彼此间也不相连。这种被简化的神经网络结构,被称之为“多层前馈神经网络(multi-layer feedforward neural networks)”。
这里写图片描述
  在多层前馈神经网络中,输入层神经元主要用于接收外加的输入信息,在隐含层和输出层中,都有内置的激活函数,可对输入信号进行加工处理,最终的结果,由输出层“呈现”出来。

  这里需要说明的是,神经元中的激活函数,并不限于我们前面提到的阶跃函数、Sigmod函数,还可以是现在深度学习常用的ReLU(Rectified Linear Unit)和sofmax等。

  简单来说,神经网络的学习过程,就是通过根据训练数据,来调整神经元之间的连接权值(connection weight)以及每个功能神经元的输出阈值。换言之,神经网络需要学习的东西,就蕴含在连接权值和阈值之中。

6.3 误差逆传播算法

  对于相对复杂的前馈神经网络,其各个神经元之间的链接权值和其内部的阈值,是整个神经网络的灵魂所在,它需要通过反复训练,方可得到合适的值。而训练的抓手,就是实际输出值和预期输出值之间存在着“误差”。

  在机器学习中的“有监督学习”算法里,在假设空间中,构造一个决策函数f,对于给定的输入X,由f(X)给出相应的输出Y,这个实际输出值Y和原先预期值Y’可能不一致。于是,我们需要定义一个损失函数(loss function),也有人称之为代价函数(cost function)来度量这二者之间的“落差”程度。这个损失函数通常记作L(Y,Y)= L(Y, f(X)),为了方便起见,这个函数的值为非负数(请注意:这里的大写Y和Y’,分别表示的是一个输出值向量和期望值向量,它们分别包括多个不同对象的实际输出值和期望值)。

常见的损失函数有如下3类:
这里写图片描述
  损失函数值越小,说明实际输出和预期输出的差值就越小,也就说明我们构建的模型越好。

  神经网络学习的本质,其实就是利用“损失函数(loss function)”,来调节网络中的权重(weight)。

  调神经网络的权值,有两大类方法比较好使。第一种方法就是“误差反向传播(Error Back propagation,简称BP)”。简单说来,就是首先随机设定初值,然后计算当前网络的输出,然后根据网络输出与预期输出之间的差值,采用迭代的算法,反方向地去改变前面各层的参数,直至网络收敛稳定。

  BP算法非常经典,在很多领域都有着经典的应用,当时它的火爆程度在绝不输给现在的“深度学习”。但后来大家发现,实际用起来它还是有些问题。比如说,在一个层数较多网络中,当它的残差反向传播到最前面的层(即输入层),其影响已经变得非常之小,甚至出现梯度扩散(gradient-diffusion),严重影响训练精度。

  再后来,第二类改进方法就孕育而生了。它就是当前主流的方法,也就是“深度学习”常用的“逐层初始化”(layer-wise pre-training)训练机制,不同于BP的“从后至前”的训练参数方法,“深度学习”采取的是一种从“从前至后”的逐层训练方法。

7.3到底什么是梯度?

  在单变量的实值函数中,梯度就可以简单地理解为只是导数,或者说对于一个线性函数而言,梯度就是线的斜率。但对于多维变量的函数,它的梯度概念就不那么容易理解了。

  在向量微积分中,标量场的梯度其实是一个向量场(vector field)。对于特定函数的某个特定点,它的梯度就表示从该点出发,该函数值增长最为迅猛的方向(direction of greatest increase of a function)。

  梯度最明显的应用,就是快速找到多维变量函数的极(大/小)值。

  “梯度递减”的问题所在,那就是它很容易收敛到局部最小值。

7.5 重温神经网络的损失函数

  相比于神经网络输入、输出层设计的简单直观,它的隐含层设计,可就没有那么简单了。依赖于“工匠”的打磨,它就是一个体力活,需要不断地“试错”。

  但通过不断地“折腾”,研究人员掌握了一些针对隐层的启发式设计规则(如下文即将提到的BP算法),以此降低训练网络所花的开销,并尽量提升网络的性能。

  为了达到理想状态,我们希望快速配置好网络参数,从而让这个损失函数达到极小值。这时,神经网络的性能也就接近最优!

8.1 BP神经网络

BP算法,是一个典型的双向算法。更确切来说,它的工作流程是分两大步走:
  (1)正向传播输入信号,输出分类信息(对于有监督学习而言,基本上都可归属于分类算法);
  (2)反向传播误差信息,调整全网权值(通过微调网络参数,让下一轮的输出更加准确)。

8.2.1正向传播信息
  类似于感知机,每一个神经元的功能都可细分两大部分:(1)汇集各路链接带来的加权信息;(2)加权信息在激活函数的“加工”下,神经元给出相应的输出
这里写图片描述

  到第一轮信号前向传播的输出值计算出来后,实际输出向量与预期输出的向量之间的误差就可计算出来。下面我们就用“误差”信息反向传播,来逐层调整网络参数。为了提高权值更新效率,这里就要用到下文即将提到的“反向模式微分法则(chain rule)”。

8.2.2 求导中的链式法则

一般化的神经网络示意图:
这里写图片描述
  为了简化理解,暂时假设神经元没有激活函数(或称激活函数为y=xy=x),于是对于隐含层神经元,它的输出可分别表示为:
        这里写图片描述
  然后,对于输出层神经元有:
        这里写图片描述
  于是,损失函数L可表示为公式:
        这里写图片描述
  这里Y为预期输出值向量(由y1,y2,...,yi,...等元素构成),实际输出向量为fi(w11,w12,...,wij,...,wmn)
  对于有监督学习而言,在特定训练集合下,输入元素xi和预期输出yi都可视为常量。由此可以看到,损失函数L,在本质上,就是一个单纯与权值wij相关的函数(即使把原本的激活函数作用加上去,除了使得损失函数的形式表现得更加复杂外,并不影响这个结论)。
  于是,损失函数L梯度向量可表示为公式:
        这里写图片描述
其中,这里的eij是正交单位向量。为了求出这个梯度,需要求出损失函数L对每一个权值wij的偏导数。

链式求导示例图:
这里写图片描述


这里写图片描述
  当网络结构简单时,即使XZ的每一个路径都使用前向模式微分(forward-mode differentiation)”,也不会有很多路径,但一旦网络结构的复杂度上去了,这种“前向模式微分”,就会让求偏导数的次数和神经元个数的平方成正比。这个计算量,就很可能是成为机器“难以承受的计算之重”。

  为了避免这种海量求导模式,数学家们另辟蹊径,提出了一种称之为“反向模式微分(reverse-mode differentiation)”。取代之前的简易的表达方式,我们用下面的公式的表达方式来求XZ的偏导:
        这里写图片描述

  前向模式微分方法,其实就是我们在高数课堂上学习的求导方式。在这种求导模式中,强调的是某一个输入(比如X)对某一个节点(如神经元)的影响。因此,在求导过程中,偏导数的分子部分,总是根据不同的节点总是不断变化,而分母则锁定为偏导变量“X”,保持定不变。

  反向模式微分方法则有很大不同。首先在求导方向上,它是从输出端(output)到输入端进行逐层求导。其次,在求导方法上,它不再是对每一条“路径”加权相乘然后求和,而是针对节点采纳“合并同类路径”和“分阶段求解”的策略。先求Y节点对Z节点的”总影响”(反向第一层),然后,再求节点X对节点Z的总影响(反向第二层)。

  特别需要注意的是,Z/Y已经在第一层求导得到。在第二层仅仅需要求得Y/X,然后二者相乘即可得到所求。这样一来,就大大减轻了第二层的求导负担。在求导形式上,偏导数的分子部分(节点)不变,而分母部分总是随着节点不同而变化。

  利用链式法则,反向模式微分方法就能避免冗余对所有路径只求一次导数,大大加快了运行速度!BP算法把网络权值纠错的运算量,从原来的与神经元数目的平方成正比,下降到只和神经元数目本身成正比。其功劳,正是得益于这个反向模式微分方法节省的计算冗余。

8.2.3 误差反向传播

  误差反向传播通过梯度下降算法,迭代处理训练集合中的样例,一次处理一个样例。对于样例d,如果它的预期输出和实际输出有“误差”,BP算法抓住这个误差信号Ld,以“梯度递减”的模式修改权值。也就是说,对于每个训练样例d,权值wji的校正幅度为Δwji(需要说明的是,wjiwij其实都是同一个权值,wji表示的是神经元j的第i个输入相关的权值,这里之所以把下标“j”置于“i”之前,仅仅表示这是一个反向更新过程而已):
        这里写图片描述
  在这里,Ld表示的是训练集合中样例d的误差,分解到输出层的所有输出向量,Ld可表示为:
        这里写图片描述
其中:
yj表示的是第j个神经单元的预期输出值。
y'j表示的j个神经单元的实际输出值。
outputs的范围是网络最后一层的神经元集合。

  下面我们推导出Ld/wji的一个表达式,以便在上面的公式中使用梯度下降规则。
  首先,我们注意到,权值wji仅仅能通过netj影响其他相连的神经元。因此利用链式法则有:
        这里写图片描述
在这里,netj=iwjixji,也就是神经元j输入的加权和。xji表示的神经j的第i个输入。需要注意的是,这里的xji是个统称,实际上,在反向传播过程中,在经历输出层、隐含层和输入层时,它的标记可能有所不同。

  由于在输出层和隐含层的神经元对“纠偏”工作,承担的“责任”是不同的,至少是形式不同,所以需要我们分别给出推导。
(1)在输出层,对第i个神经元而言,省略部分推导过程,上一公式的左侧第一项为:
        这里写图片描述
  为了方便表达,我们用该神经元的纠偏“责任(responsibility)” δ(1)j描述这个偏导,即:
        这里写图片描述
  这里δ(1)j的上标“(1)”,表示的是第1类(即输出层)神经元的责任。如果上标为“(2)”,则表示第2类(即隐含层)神经元的责任,见下面的描述。
(2)对隐含层神经元jj的梯度法则(省略了部分推导过程),有:
        这里写图片描述
其中:
  fj表示神经单元jj的计算输出。
  netj表示的是神经单元jj的加权之和。
  Downstream(j)表示的是在网络中神经单元jj的直接下游单元集合。

  在明确了各个神经元“纠偏”的职责之后,下面就可以依据类似于感知机学习,通过如下加法法则更新权值:
对于输出层神经元有:
        这里写图片描述
对于隐含层神经元有:
        这里写图片描述
在这里,η(0,1)表示学习率。在实际操作过程中,为了防止错过极值,η通常取小于0.1的值。hj为神经元j的输出。xjk表示的是神经单元j的第k个输入。

题外话:
LeCun成功应用BP神经网络在手写邮编识别之后,与LeCun同在一个贝尔实验室的同事Vladimir Vapnik(弗拉基米尔·万普尼克),提出并发扬光大了支持向量机 (Support Vector Machine) 算法。
SVM作为一种分类算法,对于线性分类,自然不在话下。在数据样本线性不可分时,它使用了所谓“核机制(kernel trick)”,将线性不可分的样本,映射到高维特征空间 (high-dimensional feature space),从而使其线性可分。自上世纪九十年代初开始,SVM在图像和语音识别等领域,获得了广泛而成功的应用。
在手写邮政编码的识别问题上,LeCun利用BP算法,把错误率整到5%左右,而SVM在1998年就把错误率降到低至0.8%。这远超越同期的传统神经网络算法。
就这样,万普尼克又把神经网络研究送到了一个新的低潮!

2018-11-30 19:22:15 P_LarT 阅读数 524
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    39616 人正在学习 去看看 唐宇迪

预测/导出/显示

https://www.yuque.com/lart/ml-newer

版本号
作者
时间
改动内容
0.1
Lart
2018年10月18日10:16:29
创建文档

预测

核心代码

predict

# 这里是keras,其他框架按实际来
predict(self, x, batch_size=None, verbose=0, steps=None)

为输入样本生成输出预测。

计算逐批次进行。

对于已经训练好的网络而言,获得其已经保存好的最好权重,在相同的架构上载入模型即可使用 predict 来进行预测数据了.要注意路径

# 构建不带分类器的预训练模型
inputshape = (224, 224, 3)
base_model = VGG16(input_shape=inputshape,
                         weights='imagenet',
                         include_top=True)
old_layer = base_model.get_layer('fc2').output
predictions = Dense(4, activation='linear')(old_layer)

# 构建我们需要训练的完整模型
model = Model(inputs=base_model.input, outputs=predictions)
model.load_weights('./model_data/weights_best_vgg16.hdf5', by_name=True)

# 导入数据进行测试
box_path = './test/box/'
img_path = './test/img/'

img_names = os.listdir(img_path)

images = []
inputs = []
for img_name in img_names:
    img = image.load_img(img_path + img_name, target_size=(224, 224))
    img = image.img_to_array(img)
    images.append(imread(img_path + img_name))
    inputs.append(img.copy())

inputs = preprocess_input(np.array(inputs))

# 预测
print('总的输入形状:', inputs.shape)
results = model.predict(inputs, batch_size=1, verbose=1)
print('预测结果形状:', results.shape)

导出

关于导出数据,主要内容是预测的测试集的结果的导出.根据任务不同,可能会有不同的处理手段,这里以类似预目标检测任务的一个输出的导出为例.

注意 这里的导出的格式很关键.因为有些任务对你的运行结果的检测,可能是针对固定的格式而言的.应该仔细查看任务要求.甚至可能会给你的 example 示例文件.这里的核心关键是 看清要求!

例子

下面代码实现了导出到xml文件的一个流程.

from scipy.misc import imread
from xml.etree import ElementTree as ET

results = model.predict(inputs, batch_size=1, verbose=1)
print('预测结果形状:', results.shape)

# 保存结果到xml文件
for i, img_name in enumerate(img_names):
    img_read = imread(img_path + img_name)
    # Parse the outputs.
    det_xmin = results[i][0]
    det_ymin = results[i][1]
    det_xmax = results[i][2]
    det_ymax = results[i][3]

    # 指定根节点/子节点
    prediction = ET.Element("prediction")
    bndbox = ET.SubElement(prediction, "bndbox")
    xmin = ET.SubElement(bndbox, "xmin")
    ymin = ET.SubElement(bndbox, "ymin")
    xmax = ET.SubElement(bndbox, "xmax")
    ymax = ET.SubElement(bndbox, "ymax")
    conf = ET.SubElement(bndbox, "conf")

    if det_xmax > img_read.shape[1]:
        det_xmax = img_read.shape[1] - 1
    if det_ymax > img_read.shape[0]:
        det_ymax = img_read.shape[0] - 1

    xmin.text = str(int(round(det_xmin)))
    ymin.text = str(int(round(det_ymin)))
    xmax.text = str(int(round(det_xmax)))
    ymax.text = str(int(round(det_ymax)))
    conf.text = '1.0000'

    # 保存结构树
    tree = ET.ElementTree(prediction)
    tree.write(box_path + img_name[:-3] + 'xml')

显示

这个涉及到了对于预测结果的一个可视化的问题.具体的代码不是很重要,关键是要明确如何更为直观清楚的表达出你的预测的准确与否.

有时,对于无法明确查看的测试集(没有没有测试标签),直接将预测结果绘制出来,可能会更容易理解和判别.

例子 对于目标检测问题,图像上的框远比终端里的文字清楚的多.

2017-06-03 16:24:51 zhixiongzhao 阅读数 1367
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    39616 人正在学习 去看看 唐宇迪
原文链接:http://www.iteye.com/news/31989
引用

原文:10 Deep Learning Trends and Predictions for 2017 
作者:Carlos E. Perez 
译者:KK4SBB 
欢迎技术投稿、约稿、给文章纠错,请发送邮件至heyc@csdn.net 

本文作者曾经多次预测了技术发展的趋势,最近的一次预测是“2011年软件发展的趋势与预测”。10项预言中,准确地命中了6项,比如JavaScript VM、NoSQL、大数据分析、私有云、Scala语言等等。今年,他对深度学习的发展趋势做了一个预测,主要是研究领域的趋势预测,而不是工业界的应用。 

以下是作者对2017年度的预测内容。 

硬件将加速倍增摩尔定律 
作者根据其观察到Nvidia和Intel的发展动态,认为这是显而易见的趋势。由于Nvidia具有完整的深度学习生态系统,它们在整个2017年都将主导占据主导地位。在另一个深度学习生态系统成熟之前,没有人会抛弃Nvidia而追求其它的平台。Intel的Xeon Phi方案中途夭折,预计要到2017年年中才能在性能上追赶上Nvidia,那时基于Nervana的芯片才推向市场。Intel的FPGA方案可能因为成本原因而被云提供商所采纳。降低功耗是头等大事。预计到2017年年中,Intel的Nervana芯片每秒可完成30万亿次浮点运算。作者个人猜测,Nvidia目前已经能够实现每秒20万亿次浮点运算,他打赌Intel在2018年之前不会有太多动作。Intel手中的唯一可能的一张王牌是3D XPoint技术。这将有助于提高整个硬件堆栈,但不一定是提升核心能力。 

卷积神经网络(CNN)将会统治而RNNs和LSTM将被淘汰 
作者认为CNN模型将成为深度学习系统的主流模型。RNN和LSTM模型及其递归设置和嵌套的记忆节点将越来越少地使用,因为它们无法与CNN所抗衡。就如同GOTO在代码中消失一样,作者希望RNN和LSTM模型也被淘汰。 

简单的调参工作将被元学习取代 
当作者刚开始接触深度学习时,他认为优化算法,特别是二阶的算法能够有巨大的提升。如今,已经有替我们优化模型的深度学习模型了。我们不在需要费尽心思改进SGD算法了,作者认为重要的一个原因是元学习(meta-learning)能够根据领域自适应地优化学习过程。 

可微分记忆网络将更常见 
记忆模块将从核心节点中抽取出来,只是作为计算机制的一个独立组件,作者觉得这是一个很自然的结果或者说架构。他认为LSTM的遗忘门、输入门和输出门没有必要,它们可以被辅助的可微分记忆模块所取代。这呼应了作者对CNN模型的预测。 

强化学习只会变得更具创造性 
对于现实的观察永远是不完美的。我们身边存在着大量SGD无法解决的问题。因此,任何实践性的深度学习系统都必须包含某些形式的强化学习。除此之外,强化学习将会出现在各种深度学习的训练过程中。作者认为强化学习极大地促进了元学习。 

对抗与合作学习将成为王牌 
在过去,我们的深度学习系统都只有单一的目标函数。今后,作者希望看到两个或两个以上的网络合作或竞争来实现一个最佳的解决方案。参见“博弈论揭示了深度学习的未来”。 

转移学习引领产业化 
Andrew Ng认为这非常重要,作者也表示赞同! 

更多的应用程序将使用深度学习组件 
在2016年,我们已经看到深度学习在更大的搜索算法中用作一个功能评价组件。alphago采用深层学习来评估策略。谷歌的Gmail自动回复系统将深度学习与集束搜索(beam search)结合。作者希望看到更多的这类混合算法,而不是新的end-to-end的被训练的DL系统。 

更多的采用设计模式 
深度学习只是众多需要抽象结构的复杂领域之一。尽管它用到了很多高深的数学知识,仍有很多未经证明和模糊的概念可以借鉴在其它复杂领域已被证明是有效的方法,比如在软件开发领域有效。作者认为人们最终会从深度学习与模式设计中得到启发。 

工程将超过理论 
作者认为研究人员的背景和他们所使用的数学工具会给他们的研究方法带来偏见。深度学习系统和无监督学习系统等等这些新的东西可能我们从来没有遇到过。因此,他觉得没有证据表明我们的传统分析工具将对解开深度学习的谜团提供任何帮助。几十年来,物理学中大量的动态系统一直困扰着作者,他将此类比于深度学习系统。 

然而,尽管我们缺乏了解其本质,但是将不会阻止工程上的应用。作者觉得深度学习几乎就像是生物技术或基因工程。我们已经创建了模拟学习机,我们不知道他们是如何工作的,但是这并没有阻止任何人进行创新。

3天入门深度学习

阅读数 495

深度学习

博文 来自: qq_42415326

深度学习综述

阅读数 4488

没有更多推荐了,返回首页