深度学习笔记

1 概念

  • 人工智能(Artificial Intelligence) ————为机器赋予人的智能
  • 机器学习(Machine Learning) ———— 一种实现人工智能的方法
  • 深度学习(Deep Learning) ———— 一种实现机器学习的技术

2 单层神经网络

机器学习可以通过神经网络来实现。可以将深度学习简单理解为,就是使用深度方法应用在神经网络的机器学习方法。目前深度架构大部分时候就是指深度神经网络。

2.1神经元

1943 年,心理学家 McCulloch 和数学家 Pitts 参考了生物神经元的结构,发表了抽象的神经元模型 MP。

神经元模型是一个包含输入,输出与计算功能的模型。

其中的 Sgn 为激活函数

图中 Sum 求和圆圈和符号函数组成一个神经元。 连接是神经元中最重要的东西。每一个连接上都有一个权重。

一个神经网络的训练算法就是让权重的值调整到最佳,以使得整个网络的预测效果最好。

MP 模型虽然简单,但是是神经网络大厦的地基。

2.2 单层神经网络(感知器)

1958 年,计算科学家 Rosenblatt 提出了由两层神经元组成的神经网络。他给它起了一个名字—"感知器"(Perceptron)。

在原来 MP 模型的"输入"位置添加神经元节点,标志其为"输入单元"。其余不变,便有了最简单的神经网络。

假如我们要预测的目标不再是一个值,而是一个向量,例如 [2,3]。那么可以在输出层再增加一个"输出单元"。

感知器中的权值是通过训练得到的。所谓训练,就是根据已有的输入和输出,找出最合适的权重参数。

利用感知器,可以很好的完成线性分类任务。

下图显示了在二维平面中划出决策分界的效果,也就是感知器的分类效果。

1969 年 Minsky 出版了一本叫《Perceptron》的书,里面用详细的数学证明了感知器的弱点, 感知器只能做简单的线性分类任务。

3 两层神经网络

Minsky 说过单层神经网络无法解决异或问题;两层神经网络可以解决异或问题,且具有非常好的非线性分类效果,但两层神经网络的计算是一个问题,没有一个较好的解法。

3.1 两层神经网络(多层感知器)

1986 年,Rumelhar 和 Hinton 等人提出了反向传播(Backpropagation,BP)算法,解决了两层神经网络所需要的复杂计算量问题,从而带动了业界使用两层神经网络研究的热潮。

图中输入与输出的节点数是可以根据需要修改的。 同时为了让计算更合理,每一层都会增加一个常量的偏置单元。

使用矩阵运算来表达整个计算公式的话如下:(其中 W/a/z 都为矩阵)

g(W(1) a(1) b(1)) = a(2); g(W(2) a(2) b(2)) = z;

理论证明,两层神经网络可以无限逼近任意连续函数。也就是说,面对复杂的非线性分类任务,两层神经网络可以分类的很好。

下面就是一个 例子,红色的线与蓝色的线代表数据。而红色区域和蓝色区域代表由神经网络划开的区域,两者的分界线就是决策分界。

可以看到,这个两层神经网络的决策分界是非常平滑的曲线,而且分类的很好。

3.2 反向传播算法(BP)

机器学习模型训练的目的,就是使得参数尽可能的与真实的模型逼近。具体做法是这样的。首先给所有参数赋上随机值。我们使用这些随机生成的参数值,来预测训练数据中的样本。样本的预测目标为 yp,真实目标为 y。那么,定义一个值 loss,计算公式如下:

loss = (yp - y)^2

这个值称之为损失(loss),我们的目标就是使对所有训练数据的损失和尽可能的小。

此时这个问题就被转化为一个优化问题。一个常用方法就是高等数学中的求导,但是这里的问题由于参数不止一个,求导后计算导数等于 0 的运算量很大,所以一般来说解决这个优化问题使用的是梯度下降算法。梯度下降算法每次计算参数在当前的梯度,然后让参数向着梯度的反方向前进一段距离,不断重复,直到梯度接近零时截止。一般这个时候,所有的参数恰好达到使损失函数达到一个最低值的状态。

在神经网络模型中,由于结构复杂,每次计算梯度的代价很大。因此还需要使用反向传播算法。反向传播算法是利用了神经网络的结构进行的计算。不一次计算所有参数的梯度,而是从后往前。首先计算输出层的梯度,然后是第二个参数矩阵的梯度,接着是中间层的梯度,再然后是第一个参数矩阵的梯度,最后是输入层的梯度。计算结束以后,所要的两个参数矩阵的梯度就都有了。

反向传播算法可以直观的理解为下图。梯度的计算从后往前,一层层反向传播。前缀 E 代表着相对导数的意思。

4 深度学习

  • 随着 BP 算法的提出,神经网络也重新得到人们的重视,开始发力于语音识别,图像识别,自动驾驶等多个领域。
  • 但是神经网络仍然存在若干的问题:尽管使用了 BP 算法,一次神经网络的训练仍然耗时太久,而且困扰训练优化的一个问题就是局部最优解问题,这使得神经网络的优化较为困难。同时,隐藏层的节点数需要调参,这使得使用不太方便,工程和研究人员对此多有抱怨。
  • 90 年代中期,由 Vapnik 等人发明的 SVM(Support Vector Machines,支持向量机)算法诞生,很快就在若干个方面体现出了对比神经网络的优势:无需调参;高效;全局最优解。基于以上种种理由,SVM 迅速打败了神经网络算法成为主流。
  • 2006 年,Hinton 在《Science》和相关期刊上发表了论文,首次提出了"深度信念网络"的概念。与传统的训练方式不同,"深度信念网络"有一个"预训练"(pre-training)的过程,这可以方便的让神经网络中的权值找到一个接近最优解的值,之后再使用"微调"(fine-tuning) 技术来对整个网络进行优化训练。这两个技术的运用大幅度减少了训练多层神经网络的时间。他给多层神经网络相关的学习方法赋予了一个新名词—"深度学习"。
  • 很快,深度学习在语音识别领域崭露头角。接着,2012 年,深度学习技术又在图像识别领域大展拳脚。Hinton 与他的学生在 ImageNet 竞赛中,用多层的卷积神经网络成功地对包含一千类别的一百万张图片进行了训练,取得了分类错误率 15%的好成绩,这个成绩比第二名高了近 11 个百分点,充分证明了多层神经网络识别效果的优越性。

多层神经网络如下:

通过研究发现,在参数数量一样的情况下,更深的网络往往具有比浅层的网络更好的识别效率。这点也在 ImageNet 的多次大赛中得到了证实。从 2012 年起,每年获得 ImageNet 冠军的深度神经网络的层数逐年增加,2015 年最好的方法 GoogleNet 是一个多达 22 层的神经网络。

在最近的 ImageNet 大赛上,目前拿到好成绩的 MSRA 团队的方法使用的更是一个深达 152 层的网络!

目前,深度神经网络在人工智能界占据统治地位。但凡有关人工智能的产业报道,必然离不开深度学习。神经网络界当下的四位引领者除了前文所说的 Ng,Hinton 以外,还有 CNN 的发明人 Yann Lecun,以及《Deep Learning》的作者 Bengio。

5 回顾

从单层神经网络(感知器)开始,到包含一个隐藏层的两层神经网络,再到多层的深度神经网络,一共有三次兴起过程。

下图说明了,随着网络层数的增加,以及激活函数的调整,神经网络所能拟合的决策分界平面的能力。

一个成功的技术与方法,不仅需要内因的作用,还需要时势与环境的配合。神经网络的发展背后的外在原因可以被总结为:

  • 更强的计算性能
  • 更多的数据
  • 以及更好的训练方法。

6 其他

6.1 量子计算

随着深度学习需要的计算量越来越大,目前的计算水平无法满足深度学习的要求,量子计算的发展,可能会一定程度决定机器学习的发展。

6.2 人工智能

虽然现在人工智能非常火热,但是距离真正的人工智能还有很大的距离。就拿计算机视觉方向来说,面对稍微复杂一些的场景,以及易于混淆的图像,计算机就可能难以识别。个人认为,目前人工智能全面替代人还有很长的路要走。的路要走。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

焦红平的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏计算机视觉与深度学习基础

Leetcode 114 Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example, Given...

2098
来自专栏学海无涯

Android开发之奇怪的Fragment

说起Android中的Fragment,在使用的时候稍加注意,就会发现存在以下两种: v4包中的兼容Fragment,android.support.v4.ap...

3215
来自专栏后端之路

LinkedList源码解读

List中除了ArrayList我们最常用的就是LinkedList了。 LInkedList与ArrayList的最大区别在于元素的插入效率和随机访问效率 ...

21110
来自专栏xingoo, 一个梦想做发明家的程序员

20120918-向量实现《数据结构与算法分析》

#include <iostream> #include <list> #include <string> #include <vector> #include...

1856
来自专栏xingoo, 一个梦想做发明家的程序员

AOV网络拓扑排序

这个算法,主要是为输出一个无环图的拓扑序列 算法思想: 主要依赖一个栈,用来存放没有入度的节点,每次读取栈顶元素,并将栈顶元素的后继节点入度减一,如果再次出现入...

1975
来自专栏开发与安全

算法:AOV网(Activity on Vextex Network)与拓扑排序

在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity on Vextex ...

3987
来自专栏拭心的安卓进阶之路

Java 集合深入理解(6):AbstractList

今天心情比天蓝,来学学 AbstractList 吧! ? 什么是 AbstractList ? AbstractList 继承自 AbstractCollec...

20910
来自专栏聊聊技术

原 初学图论-Kahn拓扑排序算法(Kah

2998
来自专栏xingoo, 一个梦想做发明家的程序员

AOE关键路径

这个算法来求关键路径,其实就是利用拓扑排序,首先求出,每个节点最晚开始时间,再倒退求每个最早开始的时间。 从而算出活动最早开始的时间和最晚开始的时间,如果这两个...

2637
来自专栏alexqdjay

HashMap 多线程下死循环分析及JDK8修复

1.1K4

扫码关注云+社区