深度学习基础概念笔记

个人介绍:2015年加入腾讯,MelonTeam 成员。熟悉 jni 编程,有音视频,图像识别开发经验。目前在团队中主要从事深度学习预研工作。

导语

学习 tensorflow,caffe 等深度学习框架前,需要先了解一些基础概念。本文以笔记的形式记录了一个零基础的小白需要先了解的一些基础概念。

人工智能,机器学习和深度学习的关系

人工智能(Artificial Intelligence)——为机器赋予人的智能

"强人工智能"(General AI):无所不能的机器,它有着我们所有的感知(甚至比人更多),我们所有的理性,可以像我们一样思考

"弱人工智能"(Narrow AI):弱人工智能是能够与人一样,甚至比人更好地执行特定任务的技术。例如,Pinterest 上的图像分类;或者 Facebook 的人脸识别。

强人工智能是愿景,弱人工智能是目前能实现的。

机器学习—— 一种实现人工智能的方法

机器学习最基本的做法,是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。

深度学习——一种实现机器学习的技术

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

神经网络组成

一个神经网络由许多神经元组成,每个圆圈是一个神经元,每条线表示神经元之间的连接。x 表示的输入数据,y 表示的是输出数据,w 表示每层连接的权重。w 也就是我们构造完神经网络之后需要确定的。

最左边的叫做输入层,这层负责接受输入数据。

最右边的叫做输出层,我们可以从这层获取神经网络输出数据

输入层和输出层之间叫做隐藏层。隐藏层层数不定,简单的神经网络可能是 2-3 层,复杂的也可能成百上千层,隐藏层较多的就叫做深度神经网络。

深层网络比浅层网络的表达能力更强,能够处理更多的数据。但是深度网络的训练更加复杂。需要大量的数据,很多的技巧才能训练好一个深层网络。

问题:假设计算速度足够快,是不是深度网络越深越好?

不是。深度网络越深,对架构和算法的要求就越高。在超过架构和算法的瓶颈后,再增加深度也是徒劳。

神经元(感知器)

神经网络由一个个的神经元构成,而一个神经元也由三部分组成。

  • 输入权值 每个输入会对应一个权值 w,同时还会有一个偏置值 b。也就是图中的 w0。训练神经网络的过程,其实就是确定权值 w 的过程。
  • 激活函数 经过权值运算之后还会经历激活函数再输出。比如我们可以用阶跃函数 f 来表示激活函数。
  • 输出 最终的输出,感知器的输出可以用这个公式来表示

神经元可以拟合任意的线性函数,如最简单拟合 and 函数。

and 函数真值表如上图所示。取 w1 = 0.5;w2 = 0.5 b = -0.8。激活函数取上面示例的阶跃函数 f 表示。可以验证此时神经元能表示 and 函数。

如输入第一行,x1 = 0,x2 = 0 时,可以得到

y 为 0,这就是真值表的第一行。

在数学意义上,可以这样理解 and 函数的神经元。它表示了一个线性分类问题,它就像是一条直线把分类 0(false,红叉)和分类 1(true,绿点)分开

而实际上,神经元在数学上可以理解为一个数据分割问题。神经元是将神经网络转换成数学问题的关键。比如需要训练神经网络做一个分类器,那么在数学上可以将输入的参数(x1,x2...,xn)理解为 m 维坐标系(设 x 是 m 元向量)上的 n 个点,而每个神经元则可以理解为一个个拟合函数。取 m 为 2,放在最简单的二维坐标系里面进行理解。

此时输入参数对应的是下图中的黑点,每个神经元就是黑线(由于激励函数的存在,不一定像下图一样是线性的,它可以是任意的形状)。神经网络由一个个神经元组成,这些神经元表示的拟合函数相互交错就形成了各种各样的区域。在下图中可以直观的看到,此时分类问题就是一个数学的问题,输入参数落在 A 区域,那么就认为他是分类 1,落在 B 区域,则认为他是分类 2。依次类推,我们便建立了神经网络分类器在数学上的表现含义。

激活函数

事实上,一个神经元不能拟合异或运算。在下图中可以直观的看到,你无法直接用一条直线将分类 0 和分类 1 分隔开。

此时可以借助激活函数来做分割。激活函数选择阀值函数,也就是当输入大于某个值时输出 1(激活),小于等于那个值则输出 0(没有激活)。

拟合异或函数的神经网络如图所示:

图中神经网络分成三层。在第二层中,如果输入大于 1.5 则输出 1,否则 0;第三层,如果输入大于 0.5,则输出 1,否则 0.

第一层到第二层(阀值 1.5):

第二层到第三层(阀值 0.5):

可以看到最终结果与异或结果吻合。

其实,这里放在数学上理解体现的是一个升维思想。放在二维坐标中无法分割的点,可以放在三维坐标中分割。上面的神经网络可以理解为只有最后一层,三个参数的神经元。激活函数是用来构造第三个参数的方式。这样等同于将三个点放在三维坐标系中做数据分割。相当于在二维中无法解决中的问题升维到三维中解决

深度学习过程

  • 构造神经网络
  • 确定学习目标
  • 学习

如何进行深度学习,过程基本都可以分为这三步来做。用一个简单的例子来说明。如图,假设我们需要通过深度学习来识别手写图片对应的数字。

1.构造神经网络。这里可以采用最简单的全连接神经网络,也可以采用卷积神经网络。同时确定神经元的激励函数,神经网络的层数等。基础概念篇不做过多介绍

2.确定学习目标。这里简单假设我们所有输入的都是手写的数字图片。那么这里就有 10 个输出,分别对应 0~9 的数字的比例。我们用 [y0,y1,...y9]表示,每个 y 值代表这张图可能对应该数字的概率(y0 表示这张图是数字 0 的概率)。对于上图中第一个输入图片,在训练过程中,我们知道第一张图片输出应该是数字 5。于是我们期望输出是 [0,0,0,0,0,1,0,0,0,0]。但是实际上,我们的模型不是完美的,肯定会有误差,我们得到的结果可能是 [0,0,0.1,0,0,0.88,0,0,0,0.02]。那么就会有个训练得到的结果和期望结果的误差。

这时候我们的学习目标也就是希望这个误差能够最小。误差用 L 来表示,学习目标就是找到权值 w,使得 L 最小。当然,这里涉及到我们需要用一个公式来表达这个误差 L,这个公式选取也很有学问,不同的公式最终在学习过程时收敛速度是不一样的,通过训练模型得到的权值 w 也是不一样的。这里先不多介绍。

3.学习。假设我们神经模型确定下来的权值 w 与 L 的关系如图所示(这里我们考虑最简单的二维坐标下的情况,原理是相通的,推广到多元坐标也是适用的)。由于数学模型的复杂,这里找最小值 L 的过程其实是找局部最小值的过程。

我们都知道,函数某个位置可导,那么就可以确定这个点的斜率。要找到局部最小值,可以根据这个点的斜率移动 w。如根据此时斜率的值我们可以确定 w 应该向右移动一段距离。

此时移动 w 的距离称为步长。步长的选取很关键,如果步长过长,那么每次 w 偏移过大,永远都找不到真正的最小值。而如果步长选取过小,那么收敛会变得很慢,而且有可能在中间某段平滑处停下来,找到的也不是真正的最小值。而步长怎么选择呢?其实比较坑爹,某些时候有经验值,大部分时候则只能自己调整去试验。

在学习的过程中,遇到的最常见的一个问题是"走不动"了。比如在下图中。从 A 点走到 B 点,B 点由于斜率平滑,慢慢走到了 C 点,这时候可能 C 点斜率是平滑了,那么 w 将无法继续往下走,永远停留在 C 点!这样得到的神经网络的误差 L 显然不是最小的,权值 w 也不是最佳的。

因此,在神经网络学习过程中,常用的做法是模拟物理世界引入一个"动量球"。假设每次的移动看成 是一个"动量球"的移动。在移动过程中,"动量球"先从最高点往下走,虽然下载下来后斜率减少,但是由于"动量球"将移动下来的重力势能转变的动能,它会继续往下走,从而移动过平缓区。当"动量球"到达某个局部最低点的时候,"动量球"会依靠自己的动能继续滚动,设法寻找到下一个局部最低点。当然,"动量球"不是万能的,它也可能会遇到"山坡"上不去最终滑下来停留在某个局部最小值(并不是真正的最小值)。但是"动量球"的引入,大大增加了学习过程的鲁棒性,扩宽了局部最小值的寻找范围。

实际上,借助理解神经网络学习的过程,我们会更加理解为什么深度越高的网络不一定就越好。对于深度越高的神经网络,"平滑区"会越来越多,局部最小点也会越来越多。没有合适的算法,很容易就陷入某个局部最小值里面去,而这个最小值可能还不如深度更浅的神经网络获得的局部最小值小。也就是说,神经网络复杂之后,对架构和算法的要求大大加高。

卷积

如果对卷积这个数学概念还没有了解,可以先看知乎这里通俗的解释。

怎样通俗易懂地解释卷积?

如果没有做过图像处理,还需要先看看卷积核,感受一下它的神奇。

图像卷积与滤波的一些知识点

以图片的卷积为例,深度学习中的卷积计算就是使用卷积核遍历一张图片的过程。

根据对于边缘的处理不同,卷积分为相同填充和有效填充两种方法。相同填充中,超出边界的部分使用补充 0 的方法,使得输入和输出的图像尺寸相同。而在有效填充中,则不使用补充 0 的方法,因此输出的尺寸会比输入尺寸小一些。

例 1:3*3 的卷积核在 5*5 的图像上进行有效填充的卷积过程

例 2. 两个 3*3*3 卷积核在 5*5 图像上进行相同填充卷积过程。动图

图像有 r,g,b 三个通道。这里使用卷积核也分为 3 个通道分别进行卷积运算

池化

池化是卷积神经网络中用到的一种运算。在卷积神经网络中,卷积层后面一般是池化层。先进行卷积运算,再进行池化运算。

池化层在神经网络中起到的是降低参数和计算量,引入不变形的作用。

池化常用的是两种,一种是 Avy Pooling,一种是 Max Pooling。下图是 Max Pooling 的示意图,可以看到分别找的是 2*2 矩阵中的最大值,Avy Pooling 则是将矩阵所有值加起来,求平均值。

参考资料

https://www.leiphone.com/news/201609/gox8CoyqMrXMi4L4.html

https://www.youtube.com/watch?v=ZrEsLwCjdxY&t=21s

https://www.zybuluo.com/hanbingtao/note/433855

https://www.zhihu.com/question/22334626

http://www.cnblogs.com/rgvb178/p/6017991.html

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

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

编辑于

张鹏宇的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WD学习记录

机器学习 学习笔记(20)深度前馈网络

深度前馈网络(deep feedforward network),也叫做前馈神经网络(feedforward neural network)或者多层感知机(mu...

1203
来自专栏机器之心

教程 | 一步一步,看图理解长短期记忆网络与门控循环网络

循环神经网络(RNN)很大程度上会受到短期记忆的影响,如果序列足够长,它们将很难将信息从早期时间步传递到靠后的时间步。因此,如果你试图处理一段文字来做预测,RN...

903
来自专栏磐创AI技术团队的专栏

【干货】词向量之DNN模型

1 词向量 在NLP里,最细的粒度是词语,由词语再组成句子,段落,文章。所以处理NLP问题时,怎么合理的表示词语就成了NLP领域中最先需要解决的问题。 因为语...

4064
来自专栏小石不识月

深度学习解决文本分类问题的最佳实践

文本分类(Text classification)描述了一类常见的问题,比如预测推文(Tweets)和电影评论的情感,以及从电子邮件中区分出垃圾邮件。

4078
来自专栏AI科技大本营的专栏

机器学习101:我们天天都在说的机器学习,究竟该怎么入门?

为了使大家对机器学习有一个基本的认识,在这篇文章中,我们将对以下四个主题做简要的介绍: 什么是机器学习? 机器学习模型的训练。 模型参数的优化。 神经网络。 即...

2685
来自专栏机器学习和数学

[高大上的DL] Deep Learning中常用loss function损失函数的小结

在前面我们分享的如何来训练CNN中,提到了BP算法,还记得BP算法是怎么更新参数w,b的吗?当我们给网络一个输入,乘以w的初值,然后经过激活函数得到一个输出。然...

1.7K8
来自专栏AI研习社

上海交大CS系博士生李泽凡:利用高阶残差量化(HORQ)方法进行网络加速

神经网络的压缩和加速现在已经成为一个热门课题,这个领域有多种研究方法,网络量化就是其中之一。网络量化分为输入量化和权值量化两种。而同时将输入和权值量化会造成网络...

3568
来自专栏机器学习算法与Python学习

教程 | 一步一步,看图理解长短期记忆网络与门控循环网络

大家好,欢迎来到 LSTM 和 GRU 的图解指南。在本文中,Michael 将从 LSTM 和 GRU 的背后的原理开始,然后解释令 LSTM 和 GRU 具...

903
来自专栏数据科学与人工智能

【机器学习】参数和非参数机器学习算法

什么是参数机器学习算法并且它与非参数机器学习算法有什么不同? 本文中你将了解到参数和非参数机器学习算法的区别。 让我们开始吧。 ? 学习函数 机器学习可以总结...

3165
来自专栏量子位

深度学习入门者必看:25个你一定要知道的概念

王瀚森 编译自 Analytics Vidhya 量子位 出品 | 公众号 QbitAI 人工智能,深度学习,机器学习……不管你在从事什么工作,都需要了解这些概...

4088

扫码关注云+社区